You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: sql/functions.sql
+88-16Lines changed: 88 additions & 16 deletions
Original file line number
Diff line number
Diff line change
@@ -307,8 +307,8 @@ $$ LANGUAGE plpgsql;
307
307
308
308
309
309
-- Get rank by train protection a track is equipped with
310
-
-- Other code expects 1 for no protection, 0 for default/unknown
311
310
CREATE OR REPLACEFUNCTIONrailway_train_protection_rank(
311
+
train_protection TEXT,
312
312
pzb TEXT,
313
313
lzb TEXT,
314
314
atb TEXT,
@@ -318,57 +318,129 @@ CREATE OR REPLACE FUNCTION railway_train_protection_rank(
318
318
atc TEXT,
319
319
kvb TEXT,
320
320
tvm TEXT,
321
-
scmt TEXT,
322
321
asfa TEXT,
323
322
ptc TEXT,
324
323
zsi127 TEXT,
325
324
etcs TEXT,
326
325
construction_etcs TEXT) RETURNS INTEGERAS $$
327
326
BEGIN
327
+
/* Continental systems. */
328
328
IF etcs <>'no' THEN
329
329
RETURN 10;
330
330
END IF;
331
331
IF ptc <>'no' THEN
332
332
RETURN 10;
333
-
END IF;
333
+
END IF;
334
334
IF construction_etcs <>'no' THEN
335
335
RETURN 9;
336
336
END IF;
337
-
IF asfa ='yes' THEN
338
-
RETURN 8;
337
+
/* National systems. */
338
+
IF POSITION('SCMT'IN train_protection) >0 THEN
339
+
RETURN 6;
339
340
END IF;
340
-
IF scmt='yes' THEN
341
-
RETURN 7;
341
+
IF asfa='yes' THEN
342
+
RETURN 6;
342
343
END IF;
343
344
IF tvm ='yes'OR tvm ='430'OR tvm ='300' THEN
344
345
RETURN 6;
345
346
END IF;
346
347
IF kvb ='yes' THEN
347
-
RETURN 5;
348
+
RETURN 6;
348
349
END IF;
349
350
IF atc ='yes' THEN
350
-
RETURN 5;
351
+
RETURN 6;
351
352
END IF;
352
353
IF COALESCE(atb, atb_eg, atb_ng, atb_vv) ='yes' THEN
353
-
RETURN 4;
354
-
END IF;
355
-
IF zsi127 ='yes' THEN
356
-
RETURN 3;
354
+
RETURN 6;
357
355
END IF;
358
356
IF lzb ='yes' THEN
359
-
RETURN 3;
357
+
RETURN 6;
360
358
END IF;
361
359
IF pzb ='yes' THEN
362
-
RETURN 2;
360
+
RETURN 6;
363
361
END IF;
364
-
IF (pzb ='no'AND lzb ='no'AND etcs ='no') OR (atb ='no'AND etcs ='no') OR (atc ='no'AND etcs ='no') OR (scmt ='no'AND etcs ='no') OR (asfa ='no'AND etcs ='no') OR (kvb ='no'AND tvm ='no'AND etcs ='no') OR (zsi127 ='no') THEN
362
+
/* Regional systems. */
363
+
IF zsi127 ='yes' THEN
364
+
RETURN 3;
365
+
END IF;
366
+
/* No system. */
367
+
IF (pzb ='no'AND lzb ='no'AND etcs ='no') OR (atb ='no'AND etcs ='no') OR (atc ='no'AND etcs ='no') OR (asfa ='no'AND etcs ='no') OR (kvb ='no'AND tvm ='no'AND etcs ='no') OR (zsi127 ='no') THEN
365
368
RETURN 1;
366
369
END IF;
370
+
/* No information. */
367
371
RETURN 0;
368
372
END;
369
373
$$ LANGUAGE plpgsql;
370
374
371
375
376
+
-- Get which train protection system has to be rendered.
377
+
-- Overlaps are not foreseen but the logic could be handled here.
378
+
CREATE OR REPLACEFUNCTIONrailway_train_protection_rendered(
379
+
train_protection TEXT,
380
+
pzb TEXT,
381
+
lzb TEXT,
382
+
atb TEXT,
383
+
atb_eg TEXT,
384
+
atb_ng TEXT,
385
+
atb_vv TEXT,
386
+
atc TEXT,
387
+
kvb TEXT,
388
+
tvm TEXT,
389
+
asfa TEXT,
390
+
ptc TEXT,
391
+
zsi127 TEXT,
392
+
etcs TEXT,
393
+
construction_etcs TEXT) RETURNS TEXTAS $$
394
+
BEGIN
395
+
/* Continental systems. They are not supposed to overlap any soon. */
396
+
IF etcs <>'no' THEN
397
+
RETURN 'etcs';
398
+
END IF;
399
+
IF ptc <>'no' THEN
400
+
RETURN 'ptc';
401
+
END IF;
402
+
IF construction_etcs <>'no' THEN
403
+
RETURN 'etcs_construction';
404
+
END IF;
405
+
/* National systems. Possible overlaps, the order here decides priority. */
406
+
IF POSITION('SCMT'IN train_protection) >0 THEN
407
+
RETURN 'scmt';
408
+
END IF;
409
+
IF asfa ='yes' THEN
410
+
RETURN 'asfa';
411
+
END IF;
412
+
IF tvm ='yes'OR tvm ='430'OR tvm ='300' THEN
413
+
RETURN 'tvm';
414
+
END IF;
415
+
IF kvb ='yes' THEN
416
+
RETURN 'kvb';
417
+
END IF;
418
+
IF atc ='yes' THEN
419
+
RETURN 'atc';
420
+
END IF;
421
+
IF COALESCE(atb, atb_eg, atb_ng, atb_vv) ='yes' THEN
422
+
RETURN 'atb';
423
+
END IF;
424
+
IF lzb ='yes' THEN
425
+
RETURN 'lzb';
426
+
END IF;
427
+
IF pzb ='yes' THEN
428
+
RETURN 'pzb';
429
+
END IF;
430
+
/* Regional systems. */
431
+
IF zsi127 ='yes' THEN
432
+
RETURN 'zsi127';
433
+
END IF;
434
+
/* No system. */
435
+
IF (pzb ='no'AND lzb ='no'AND etcs ='no') OR (atb ='no'AND etcs ='no') OR (atc ='no'AND etcs ='no') OR (asfa ='no'AND etcs ='no') OR (kvb ='no'AND tvm ='no'AND etcs ='no') OR (zsi127 ='no') THEN
436
+
RETURN 'none';
437
+
END IF;
438
+
/* No information. */
439
+
RETURN 'unknown';
440
+
END;
441
+
$$ LANGUAGE plpgsql;
442
+
443
+
372
444
-- Get name for labelling in standard style depending whether it is a bridge, a tunnel or none of these two.
0 commit comments