@golemio/pid 2.23.2-dev.1508503055 → 2.23.2-dev.1517798599
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var dbm;
|
|
4
|
+
var type;
|
|
5
|
+
var seed;
|
|
6
|
+
var fs = require('fs');
|
|
7
|
+
var path = require('path');
|
|
8
|
+
var Promise;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* We receive the dbmigrate dependency from dbmigrate initially.
|
|
12
|
+
* This enables us to not have to rely on NODE_PATH.
|
|
13
|
+
*/
|
|
14
|
+
exports.setup = function(options, seedLink) {
|
|
15
|
+
dbm = options.dbmigrate;
|
|
16
|
+
type = dbm.dataType;
|
|
17
|
+
seed = seedLink;
|
|
18
|
+
Promise = options.Promise;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
exports.up = function(db) {
|
|
22
|
+
var filePath = path.join(__dirname, 'sqls', '20241022123325-prepare-for-postgres-16-up.sql');
|
|
23
|
+
return new Promise( function( resolve, reject ) {
|
|
24
|
+
fs.readFile(filePath, {encoding: 'utf-8'}, function(err,data){
|
|
25
|
+
if (err) return reject(err);
|
|
26
|
+
console.log('received data: ' + data);
|
|
27
|
+
|
|
28
|
+
resolve(data);
|
|
29
|
+
});
|
|
30
|
+
})
|
|
31
|
+
.then(function(data) {
|
|
32
|
+
return db.runSql(data);
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
exports.down = function(db) {
|
|
37
|
+
var filePath = path.join(__dirname, 'sqls', '20241022123325-prepare-for-postgres-16-down.sql');
|
|
38
|
+
return new Promise( function( resolve, reject ) {
|
|
39
|
+
fs.readFile(filePath, {encoding: 'utf-8'}, function(err,data){
|
|
40
|
+
if (err) return reject(err);
|
|
41
|
+
console.log('received data: ' + data);
|
|
42
|
+
|
|
43
|
+
resolve(data);
|
|
44
|
+
});
|
|
45
|
+
})
|
|
46
|
+
.then(function(data) {
|
|
47
|
+
return db.runSql(data);
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
exports._meta = {
|
|
52
|
+
"version": 1
|
|
53
|
+
};
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
DROP VIEW v_public_vehiclepositions_combined_stop_times;
|
|
2
|
+
DROP VIEW v_public_vehiclepositions_future_stop_times;
|
|
3
|
+
|
|
4
|
+
ALTER TABLE ropidgtfs_stop_times DROP COLUMN computed_dwell_time_seconds;
|
|
5
|
+
ALTER TABLE ropidgtfs_stop_times ADD COLUMN computed_dwell_time_seconds int2 NULL;
|
|
6
|
+
|
|
7
|
+
CREATE OR REPLACE VIEW v_public_vehiclepositions_future_stop_times AS
|
|
8
|
+
WITH RECURSIVE stop_times AS (
|
|
9
|
+
SELECT
|
|
10
|
+
rst.trip_id,
|
|
11
|
+
vt.id AS trips_id,
|
|
12
|
+
vt.provider_source_type,
|
|
13
|
+
coalesce(vp.delay, 0) AS delay,
|
|
14
|
+
coalesce(vp.last_stop_sequence, 1) AS initial_stop_sequence,
|
|
15
|
+
vp.state_position,
|
|
16
|
+
rst.stop_id,
|
|
17
|
+
rst.stop_sequence,
|
|
18
|
+
rst.computed_dwell_time_seconds,
|
|
19
|
+
rst.arrival_time,
|
|
20
|
+
rst.departure_time,
|
|
21
|
+
CASE WHEN vp.last_stop_sequence IS NULL THEN
|
|
22
|
+
coalesce(vp.delay, 0)
|
|
23
|
+
ELSE
|
|
24
|
+
coalesce(vp.delay_stop_arrival, 0)
|
|
25
|
+
END AS arrival_delay_seconds,
|
|
26
|
+
CASE WHEN vp.last_stop_sequence IS NULL THEN
|
|
27
|
+
predict_delay_seconds(vp.delay, rst.computed_dwell_time_seconds, vt.provider_source_type)
|
|
28
|
+
WHEN vp.state_position::text = 'at_stop'::text THEN
|
|
29
|
+
CASE WHEN vt.provider_source_type::text = '1'::text THEN
|
|
30
|
+
greatest(0, vp.delay)
|
|
31
|
+
ELSE
|
|
32
|
+
vp.delay
|
|
33
|
+
END
|
|
34
|
+
ELSE
|
|
35
|
+
vp.delay_stop_departure
|
|
36
|
+
END AS departure_delay_seconds
|
|
37
|
+
FROM
|
|
38
|
+
ropidgtfs_stop_times rst
|
|
39
|
+
JOIN vehiclepositions_trips vt ON vt.gtfs_trip_id::text = rst.trip_id::text
|
|
40
|
+
JOIN vehiclepositions_positions vp ON vp.id = vt.last_position_id
|
|
41
|
+
AND (vp.valid_to IS NULL
|
|
42
|
+
OR vp.valid_to >= now())
|
|
43
|
+
AND (vp.state_position::text = ANY (ARRAY['on_track'::character varying::text,
|
|
44
|
+
'at_stop'::character varying::text,
|
|
45
|
+
'before_track'::character varying::text,
|
|
46
|
+
'before_track_delayed'::character varying::text]))
|
|
47
|
+
WHERE
|
|
48
|
+
vt.gtfs_trip_id IS NOT NULL
|
|
49
|
+
AND rst.stop_sequence = coalesce(vp.last_stop_sequence, 1)
|
|
50
|
+
UNION ALL
|
|
51
|
+
SELECT
|
|
52
|
+
rst.trip_id,
|
|
53
|
+
previous_row.trips_id,
|
|
54
|
+
previous_row.provider_source_type,
|
|
55
|
+
previous_row.delay,
|
|
56
|
+
previous_row.initial_stop_sequence,
|
|
57
|
+
previous_row.state_position,
|
|
58
|
+
rst.stop_id,
|
|
59
|
+
rst.stop_sequence,
|
|
60
|
+
rst.computed_dwell_time_seconds,
|
|
61
|
+
rst.arrival_time,
|
|
62
|
+
rst.departure_time,
|
|
63
|
+
CASE WHEN (rst.stop_sequence - previous_row.initial_stop_sequence) = 1
|
|
64
|
+
AND previous_row.state_position::text <> 'at_stop'::text THEN
|
|
65
|
+
CASE WHEN (rst.arrival_time::interval +(interval '1 second' * previous_row.delay) < previous_row.departure_time::interval +(interval '1 second' *(previous_row.departure_delay_seconds))) THEN
|
|
66
|
+
NULL
|
|
67
|
+
ELSE
|
|
68
|
+
previous_row.delay
|
|
69
|
+
END
|
|
70
|
+
ELSE
|
|
71
|
+
previous_row.departure_delay_seconds
|
|
72
|
+
END AS arrival_delay_seconds,
|
|
73
|
+
predict_delay_seconds(
|
|
74
|
+
CASE WHEN (rst.stop_sequence - previous_row.initial_stop_sequence) = 1
|
|
75
|
+
AND previous_row.state_position::text <> 'at_stop'::text THEN
|
|
76
|
+
previous_row.delay
|
|
77
|
+
ELSE
|
|
78
|
+
previous_row.departure_delay_seconds
|
|
79
|
+
END, rst.computed_dwell_time_seconds, previous_row.provider_source_type) AS departure_delay_seconds
|
|
80
|
+
FROM
|
|
81
|
+
stop_times previous_row
|
|
82
|
+
JOIN ropidgtfs_stop_times rst ON rst.trip_id::text = previous_row.trip_id::text
|
|
83
|
+
AND rst.stop_sequence =(previous_row.stop_sequence + 1))
|
|
84
|
+
SELECT
|
|
85
|
+
stop_times.trips_id AS rt_trip_id,
|
|
86
|
+
stop_times.stop_sequence,
|
|
87
|
+
stop_times.arrival_delay_seconds AS stop_arr_delay,
|
|
88
|
+
CASE WHEN (stop_times.arrival_time::interval +(interval '1 second' * coalesce(stop_times.arrival_delay_seconds, 0))) >(stop_times.departure_time::interval +(interval '1 second' * coalesce(stop_times.departure_delay_seconds, 0))) THEN
|
|
89
|
+
NULL
|
|
90
|
+
ELSE
|
|
91
|
+
stop_times.departure_delay_seconds
|
|
92
|
+
END AS stop_dep_delay,
|
|
93
|
+
stop_times.stop_id
|
|
94
|
+
FROM
|
|
95
|
+
stop_times
|
|
96
|
+
ORDER BY
|
|
97
|
+
stop_times.trip_id,
|
|
98
|
+
stop_times.stop_sequence;
|
|
99
|
+
|
|
100
|
+
create
|
|
101
|
+
or replace view v_public_vehiclepositions_combined_stop_times as
|
|
102
|
+
select
|
|
103
|
+
distinct on (rt_trip_id, stop_sequence) stop_times.rt_trip_id,
|
|
104
|
+
vt.gtfs_trip_id,
|
|
105
|
+
stop_times.stop_sequence,
|
|
106
|
+
stop_times.stop_arr_delay,
|
|
107
|
+
stop_times.stop_dep_delay,
|
|
108
|
+
vt.gtfs_route_type,
|
|
109
|
+
vt.gtfs_route_short_name,
|
|
110
|
+
vt.run_number,
|
|
111
|
+
vt.internal_run_number,
|
|
112
|
+
vt.provider_source_type,
|
|
113
|
+
vt.cis_trip_number,
|
|
114
|
+
vt.vehicle_registration_number,
|
|
115
|
+
stop_times.stop_id,
|
|
116
|
+
vcs.cis_stop_platform_code,
|
|
117
|
+
rs.platform_code
|
|
118
|
+
from
|
|
119
|
+
(
|
|
120
|
+
select
|
|
121
|
+
*
|
|
122
|
+
from
|
|
123
|
+
v_public_vehiclepositions_future_stop_times prediction
|
|
124
|
+
union
|
|
125
|
+
all
|
|
126
|
+
select
|
|
127
|
+
*
|
|
128
|
+
from
|
|
129
|
+
v_public_vehiclepositions_past_stop_times history
|
|
130
|
+
) as stop_times
|
|
131
|
+
join vehiclepositions_trips vt on vt.id = stop_times.rt_trip_id
|
|
132
|
+
join vehiclepositions_positions vp on vt.last_position_id = vp.id
|
|
133
|
+
and (
|
|
134
|
+
vp.valid_to is null
|
|
135
|
+
or vp.valid_to >= now()
|
|
136
|
+
)
|
|
137
|
+
and vp.state_position != 'after_track'
|
|
138
|
+
left join ropidgtfs_stops rs on rs.stop_id = stop_times.stop_id
|
|
139
|
+
left join ropidgtfs_cis_stops rcs on rcs.id = rs.computed_cis_stop_id
|
|
140
|
+
left join vehiclepositions_cis_stops vcs
|
|
141
|
+
on vcs.rt_trip_id = stop_times.rt_trip_id
|
|
142
|
+
and vcs.cis_stop_group_id = rcs.cis
|
|
143
|
+
order by
|
|
144
|
+
rt_trip_id,
|
|
145
|
+
stop_sequence;
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
DROP VIEW v_public_vehiclepositions_combined_stop_times;
|
|
2
|
+
DROP VIEW v_public_vehiclepositions_future_stop_times;
|
|
3
|
+
|
|
4
|
+
ALTER TABLE ropidgtfs_stop_times DROP COLUMN computed_dwell_time_seconds;
|
|
5
|
+
ALTER TABLE ropidgtfs_stop_times ADD COLUMN computed_dwell_time_seconds int2 NOT NULL GENERATED ALWAYS AS (
|
|
6
|
+
calculate_dwell_time_seconds(arrival_time, departure_time)
|
|
7
|
+
) STORED;
|
|
8
|
+
|
|
9
|
+
CREATE OR REPLACE VIEW v_public_vehiclepositions_future_stop_times AS
|
|
10
|
+
WITH RECURSIVE stop_times AS (
|
|
11
|
+
SELECT
|
|
12
|
+
rst.trip_id,
|
|
13
|
+
vt.id AS trips_id,
|
|
14
|
+
vt.provider_source_type,
|
|
15
|
+
coalesce(vp.delay, 0) AS delay,
|
|
16
|
+
coalesce(vp.last_stop_sequence, 1) AS initial_stop_sequence,
|
|
17
|
+
vp.state_position,
|
|
18
|
+
rst.stop_id,
|
|
19
|
+
rst.stop_sequence,
|
|
20
|
+
rst.computed_dwell_time_seconds,
|
|
21
|
+
rst.arrival_time,
|
|
22
|
+
rst.departure_time,
|
|
23
|
+
CASE WHEN vp.last_stop_sequence IS NULL THEN
|
|
24
|
+
coalesce(vp.delay, 0)
|
|
25
|
+
ELSE
|
|
26
|
+
coalesce(vp.delay_stop_arrival, 0)
|
|
27
|
+
END AS arrival_delay_seconds,
|
|
28
|
+
CASE WHEN vp.last_stop_sequence IS NULL THEN
|
|
29
|
+
predict_delay_seconds(vp.delay, rst.computed_dwell_time_seconds, vt.provider_source_type)
|
|
30
|
+
WHEN vp.state_position::text = 'at_stop'::text THEN
|
|
31
|
+
CASE WHEN vt.provider_source_type::text = '1'::text THEN
|
|
32
|
+
greatest(0, vp.delay)
|
|
33
|
+
ELSE
|
|
34
|
+
vp.delay
|
|
35
|
+
END
|
|
36
|
+
ELSE
|
|
37
|
+
vp.delay_stop_departure
|
|
38
|
+
END AS departure_delay_seconds
|
|
39
|
+
FROM
|
|
40
|
+
ropidgtfs_stop_times rst
|
|
41
|
+
JOIN vehiclepositions_trips vt ON vt.gtfs_trip_id::text = rst.trip_id::text
|
|
42
|
+
JOIN vehiclepositions_positions vp ON vp.id = vt.last_position_id
|
|
43
|
+
AND (vp.valid_to IS NULL
|
|
44
|
+
OR vp.valid_to >= now())
|
|
45
|
+
AND (vp.state_position::text = ANY (ARRAY['on_track'::character varying::text,
|
|
46
|
+
'at_stop'::character varying::text,
|
|
47
|
+
'before_track'::character varying::text,
|
|
48
|
+
'before_track_delayed'::character varying::text]))
|
|
49
|
+
WHERE
|
|
50
|
+
vt.gtfs_trip_id IS NOT NULL
|
|
51
|
+
AND rst.stop_sequence = coalesce(vp.last_stop_sequence, 1)
|
|
52
|
+
UNION ALL
|
|
53
|
+
SELECT
|
|
54
|
+
rst.trip_id,
|
|
55
|
+
previous_row.trips_id,
|
|
56
|
+
previous_row.provider_source_type,
|
|
57
|
+
previous_row.delay,
|
|
58
|
+
previous_row.initial_stop_sequence,
|
|
59
|
+
previous_row.state_position,
|
|
60
|
+
rst.stop_id,
|
|
61
|
+
rst.stop_sequence,
|
|
62
|
+
rst.computed_dwell_time_seconds,
|
|
63
|
+
rst.arrival_time,
|
|
64
|
+
rst.departure_time,
|
|
65
|
+
CASE WHEN (rst.stop_sequence - previous_row.initial_stop_sequence) = 1
|
|
66
|
+
AND previous_row.state_position::text <> 'at_stop'::text THEN
|
|
67
|
+
CASE WHEN (rst.arrival_time::interval +(interval '1 second' * previous_row.delay) < previous_row.departure_time::interval +(interval '1 second' *(previous_row.departure_delay_seconds))) THEN
|
|
68
|
+
NULL
|
|
69
|
+
ELSE
|
|
70
|
+
previous_row.delay
|
|
71
|
+
END
|
|
72
|
+
ELSE
|
|
73
|
+
previous_row.departure_delay_seconds
|
|
74
|
+
END AS arrival_delay_seconds,
|
|
75
|
+
predict_delay_seconds(
|
|
76
|
+
CASE WHEN (rst.stop_sequence - previous_row.initial_stop_sequence) = 1
|
|
77
|
+
AND previous_row.state_position::text <> 'at_stop'::text THEN
|
|
78
|
+
previous_row.delay
|
|
79
|
+
ELSE
|
|
80
|
+
previous_row.departure_delay_seconds
|
|
81
|
+
END, rst.computed_dwell_time_seconds, previous_row.provider_source_type) AS departure_delay_seconds
|
|
82
|
+
FROM
|
|
83
|
+
stop_times previous_row
|
|
84
|
+
JOIN ropidgtfs_stop_times rst ON rst.trip_id::text = previous_row.trip_id::text
|
|
85
|
+
AND rst.stop_sequence =(previous_row.stop_sequence + 1))
|
|
86
|
+
SELECT
|
|
87
|
+
stop_times.trips_id AS rt_trip_id,
|
|
88
|
+
stop_times.stop_sequence,
|
|
89
|
+
stop_times.arrival_delay_seconds AS stop_arr_delay,
|
|
90
|
+
CASE WHEN (stop_times.arrival_time::interval +(interval '1 second' * coalesce(stop_times.arrival_delay_seconds, 0))) >(stop_times.departure_time::interval +(interval '1 second' * coalesce(stop_times.departure_delay_seconds, 0))) THEN
|
|
91
|
+
NULL
|
|
92
|
+
ELSE
|
|
93
|
+
stop_times.departure_delay_seconds
|
|
94
|
+
END AS stop_dep_delay,
|
|
95
|
+
stop_times.stop_id
|
|
96
|
+
FROM
|
|
97
|
+
stop_times
|
|
98
|
+
ORDER BY
|
|
99
|
+
stop_times.trip_id,
|
|
100
|
+
stop_times.stop_sequence;
|
|
101
|
+
|
|
102
|
+
create
|
|
103
|
+
or replace view v_public_vehiclepositions_combined_stop_times as
|
|
104
|
+
select
|
|
105
|
+
distinct on (rt_trip_id, stop_sequence) stop_times.rt_trip_id,
|
|
106
|
+
vt.gtfs_trip_id,
|
|
107
|
+
stop_times.stop_sequence,
|
|
108
|
+
stop_times.stop_arr_delay,
|
|
109
|
+
stop_times.stop_dep_delay,
|
|
110
|
+
vt.gtfs_route_type,
|
|
111
|
+
vt.gtfs_route_short_name,
|
|
112
|
+
vt.run_number,
|
|
113
|
+
vt.internal_run_number,
|
|
114
|
+
vt.provider_source_type,
|
|
115
|
+
vt.cis_trip_number,
|
|
116
|
+
vt.vehicle_registration_number,
|
|
117
|
+
stop_times.stop_id,
|
|
118
|
+
vcs.cis_stop_platform_code,
|
|
119
|
+
rs.platform_code
|
|
120
|
+
from
|
|
121
|
+
(
|
|
122
|
+
select
|
|
123
|
+
*
|
|
124
|
+
from
|
|
125
|
+
v_public_vehiclepositions_future_stop_times prediction
|
|
126
|
+
union
|
|
127
|
+
all
|
|
128
|
+
select
|
|
129
|
+
*
|
|
130
|
+
from
|
|
131
|
+
v_public_vehiclepositions_past_stop_times history
|
|
132
|
+
) as stop_times
|
|
133
|
+
join vehiclepositions_trips vt on vt.id = stop_times.rt_trip_id
|
|
134
|
+
join vehiclepositions_positions vp on vt.last_position_id = vp.id
|
|
135
|
+
and (
|
|
136
|
+
vp.valid_to is null
|
|
137
|
+
or vp.valid_to >= now()
|
|
138
|
+
)
|
|
139
|
+
and vp.state_position != 'after_track'
|
|
140
|
+
left join ropidgtfs_stops rs on rs.stop_id = stop_times.stop_id
|
|
141
|
+
left join ropidgtfs_cis_stops rcs on rcs.id = rs.computed_cis_stop_id
|
|
142
|
+
left join vehiclepositions_cis_stops vcs
|
|
143
|
+
on vcs.rt_trip_id = stop_times.rt_trip_id
|
|
144
|
+
and vcs.cis_stop_group_id = rcs.cis
|
|
145
|
+
order by
|
|
146
|
+
rt_trip_id,
|
|
147
|
+
stop_sequence;
|