Skip to content

Commit 21582db

Browse files
Merge pull request #2029 from cityofaustin/frank/refactor-america-chicago
Refactor our views to use 'America/Chicago' instead of 'US/Central'
2 parents 762c778 + a30faec commit 21582db

10 files changed

Lines changed: 1103 additions & 175 deletions

File tree

.github/workflows/export_database_views.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ function create_view_file() {
5252
echo "" >> database/views/$VIEW_NAME.sql
5353

5454
# Query the view definition and append to the file
55-
run_psql -v ON_ERROR_STOP=1 -A -t -c "SELECT 'CREATE OR REPLACE VIEW ' || '$VIEW_NAME' || ' AS ' || pg_get_viewdef('$VIEW_NAME'::regclass, true);" >> database/views/$VIEW_NAME.sql
55+
run_psql -v ON_ERROR_STOP=1 -A -t -c "SELECT 'CREATE OR REPLACE VIEW ' || '$VIEW_NAME' || ' AS' || chr(10) || pg_get_viewdef('$VIEW_NAME'::regclass, true);" >> database/views/$VIEW_NAME.sql
5656
}
5757

5858
# Materialized views do not support CREATE OR REPLACE, so we emit
@@ -74,7 +74,7 @@ function create_materialized_view_file() {
7474
echo "" >> database/views/materialized/$VIEW_NAME.sql
7575

7676
# Query the materialized view definition and append to the file
77-
run_psql -v ON_ERROR_STOP=1 -A -t -c "SELECT 'CREATE MATERIALIZED VIEW ' || '$VIEW_NAME' || ' AS ' || pg_get_viewdef('$VIEW_NAME'::regclass, true);" >> database/views/materialized/$VIEW_NAME.sql
77+
run_psql -v ON_ERROR_STOP=1 -A -t -c "SELECT 'CREATE MATERIALIZED VIEW ' || '$VIEW_NAME' || ' AS' || chr(10) || pg_get_viewdef('$VIEW_NAME'::regclass, true);" >> database/views/materialized/$VIEW_NAME.sql
7878
}
7979

8080
# Export the function

database/migrations/default/1776976438072_views_chicago_tz/down.sql

Lines changed: 464 additions & 0 deletions
Large diffs are not rendered by default.

database/migrations/default/1776976438072_views_chicago_tz/up.sql

Lines changed: 464 additions & 0 deletions
Large diffs are not rendered by default.

database/views/crashes_list_view.sql

Lines changed: 38 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
-- Most recent migration: database/migrations/default/1767430748998_crash_address_display_trigger/up.sql
1+
-- Most recent migration: database/migrations/default/1776976438072_views_chicago_tz/up.sql
22

3-
CREATE OR REPLACE VIEW crashes_list_view AS WITH geocode_status AS (
3+
CREATE OR REPLACE VIEW crashes_list_view AS
4+
WITH geocode_status AS (
45
SELECT
56
cris.id,
67
unified.latitude IS NOT NULL AND unified.latitude IS DISTINCT
@@ -64,49 +65,47 @@ SELECT
6465
collsn.label AS collsn_desc,
6566
geocode_status.is_manual_geocode,
6667
to_char(
67-
(crashes.crash_timestamp AT TIME ZONE 'US/Central'::text), 'YYYY-MM-DD'::text
68+
(crashes.crash_timestamp AT TIME ZONE 'America/Chicago'::text), 'YYYY-MM-DD'::text
6869
) AS crash_date_ct,
6970
to_char(
70-
(crashes.crash_timestamp AT TIME ZONE 'US/Central'::text), 'HH24:MI:SS'::text
71+
(crashes.crash_timestamp AT TIME ZONE 'America/Chicago'::text), 'HH24:MI:SS'::text
7172
) AS crash_time_ct,
7273
upper(
73-
to_char((crashes.crash_timestamp AT TIME ZONE 'US/Central'::text), 'dy'::text)
74+
to_char((crashes.crash_timestamp AT TIME ZONE 'America/Chicago'::text), 'dy'::text)
7475
) AS crash_day_of_week
7576
FROM crashes
76-
LEFT JOIN LATERAL (
77-
SELECT
78-
crash_injury_metrics_view_1.id,
79-
crash_injury_metrics_view_1.cris_crash_id,
80-
crash_injury_metrics_view_1.unkn_injry_count,
81-
crash_injury_metrics_view_1.nonincap_injry_count,
82-
crash_injury_metrics_view_1.poss_injry_count,
83-
crash_injury_metrics_view_1.non_injry_count,
84-
crash_injury_metrics_view_1.sus_serious_injry_count,
85-
crash_injury_metrics_view_1.tot_injry_count,
86-
crash_injury_metrics_view_1.fatality_count,
87-
crash_injury_metrics_view_1.vz_fatality_count,
88-
crash_injury_metrics_view_1.law_enf_fatality_count,
89-
crash_injury_metrics_view_1.cris_fatality_count,
90-
crash_injury_metrics_view_1.motor_vehicle_fatality_count,
91-
crash_injury_metrics_view_1.motor_vehicle_sus_serious_injry_count,
92-
crash_injury_metrics_view_1.motorcycle_fatality_count,
93-
crash_injury_metrics_view_1.motorcycle_sus_serious_count,
94-
crash_injury_metrics_view_1.bicycle_fatality_count,
95-
crash_injury_metrics_view_1.bicycle_sus_serious_injry_count,
96-
crash_injury_metrics_view_1.pedestrian_fatality_count,
97-
crash_injury_metrics_view_1.pedestrian_sus_serious_injry_count,
98-
crash_injury_metrics_view_1.micromobility_fatality_count,
99-
crash_injury_metrics_view_1.micromobility_sus_serious_injry_count,
100-
crash_injury_metrics_view_1.other_fatality_count,
101-
crash_injury_metrics_view_1.other_sus_serious_injry_count,
102-
crash_injury_metrics_view_1.crash_injry_sev_id,
103-
crash_injury_metrics_view_1.years_of_life_lost,
104-
crash_injury_metrics_view_1.est_comp_cost_crash_based,
105-
crash_injury_metrics_view_1.est_total_person_comp_cost
106-
FROM crash_injury_metrics_view crash_injury_metrics_view_1
107-
WHERE crashes.id = crash_injury_metrics_view_1.id
108-
LIMIT 1
109-
) crash_injury_metrics_view ON TRUE
77+
LEFT JOIN LATERAL (SELECT
78+
crash_injury_metrics_view_1.id,
79+
crash_injury_metrics_view_1.cris_crash_id,
80+
crash_injury_metrics_view_1.unkn_injry_count,
81+
crash_injury_metrics_view_1.nonincap_injry_count,
82+
crash_injury_metrics_view_1.poss_injry_count,
83+
crash_injury_metrics_view_1.non_injry_count,
84+
crash_injury_metrics_view_1.sus_serious_injry_count,
85+
crash_injury_metrics_view_1.tot_injry_count,
86+
crash_injury_metrics_view_1.fatality_count,
87+
crash_injury_metrics_view_1.vz_fatality_count,
88+
crash_injury_metrics_view_1.law_enf_fatality_count,
89+
crash_injury_metrics_view_1.cris_fatality_count,
90+
crash_injury_metrics_view_1.motor_vehicle_fatality_count,
91+
crash_injury_metrics_view_1.motor_vehicle_sus_serious_injry_count,
92+
crash_injury_metrics_view_1.motorcycle_fatality_count,
93+
crash_injury_metrics_view_1.motorcycle_sus_serious_count,
94+
crash_injury_metrics_view_1.bicycle_fatality_count,
95+
crash_injury_metrics_view_1.bicycle_sus_serious_injry_count,
96+
crash_injury_metrics_view_1.pedestrian_fatality_count,
97+
crash_injury_metrics_view_1.pedestrian_sus_serious_injry_count,
98+
crash_injury_metrics_view_1.micromobility_fatality_count,
99+
crash_injury_metrics_view_1.micromobility_sus_serious_injry_count,
100+
crash_injury_metrics_view_1.other_fatality_count,
101+
crash_injury_metrics_view_1.other_sus_serious_injry_count,
102+
crash_injury_metrics_view_1.crash_injry_sev_id,
103+
crash_injury_metrics_view_1.years_of_life_lost,
104+
crash_injury_metrics_view_1.est_comp_cost_crash_based,
105+
crash_injury_metrics_view_1.est_total_person_comp_cost
106+
FROM crash_injury_metrics_view crash_injury_metrics_view_1
107+
WHERE crashes.id = crash_injury_metrics_view_1.id
108+
LIMIT 1) crash_injury_metrics_view ON TRUE
110109
LEFT JOIN geocode_status ON crashes.id = geocode_status.id
111110
LEFT JOIN lookups.collsn ON crashes.fhe_collsn_id = collsn.id
112111
LEFT JOIN lookups.injry_sev ON crash_injury_metrics_view.crash_injry_sev_id = injry_sev.id

database/views/fatalities_view.sql

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
-- Most recent migration: database/migrations/default/1727451511064_init/up.sql
1+
-- Most recent migration: database/migrations/default/1776976438072_views_chicago_tz/up.sql
22

33
CREATE OR REPLACE VIEW fatalities_view AS
44
SELECT
@@ -14,7 +14,7 @@ SELECT
1414
' '::text, people.prsn_first_name, people.prsn_mid_name, people.prsn_last_name
1515
) AS victim_name,
1616
to_char(
17-
(crashes.crash_timestamp AT TIME ZONE 'US/Central'::text), 'yyyy'::text
17+
(crashes.crash_timestamp AT TIME ZONE 'America/Chicago'::text), 'yyyy'::text
1818
) AS year,
1919
crashes.crash_timestamp,
2020
concat_ws(
@@ -29,23 +29,23 @@ SELECT
2929
')'
3030
) AS location,
3131
to_char(
32-
(crashes.crash_timestamp AT TIME ZONE 'US/Central'::text), 'YYYY-MM-DD'::text
32+
(crashes.crash_timestamp AT TIME ZONE 'America/Chicago'::text), 'YYYY-MM-DD'::text
3333
) AS crash_date_ct,
3434
to_char(
35-
(crashes.crash_timestamp AT TIME ZONE 'US/Central'::text), 'HH24:MI:SS'::text
35+
(crashes.crash_timestamp AT TIME ZONE 'America/Chicago'::text), 'HH24:MI:SS'::text
3636
) AS crash_time_ct,
3737
row_number()
3838
OVER (
3939
PARTITION BY
40-
(extract(YEAR FROM (crashes.crash_timestamp AT TIME ZONE 'US/Central'::text)))
41-
ORDER BY ((crashes.crash_timestamp AT TIME ZONE 'US/Central'::text))
40+
(extract(YEAR FROM (crashes.crash_timestamp AT TIME ZONE 'America/Chicago'::text)))
41+
ORDER BY ((crashes.crash_timestamp AT TIME ZONE 'America/Chicago'::text))
4242
)
4343
AS ytd_fatality,
4444
dense_rank()
4545
OVER (
4646
PARTITION BY
47-
(extract(YEAR FROM (crashes.crash_timestamp AT TIME ZONE 'US/Central'::text)))
48-
ORDER BY ((crashes.crash_timestamp AT TIME ZONE 'US/Central'::text)), crashes.id
47+
(extract(YEAR FROM (crashes.crash_timestamp AT TIME ZONE 'America/Chicago'::text)))
48+
ORDER BY ((crashes.crash_timestamp AT TIME ZONE 'America/Chicago'::text)), crashes.id
4949
)
5050
AS ytd_fatal_crash,
5151
crashes.case_id,

database/views/locations_list_view.sql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
-- Most recent migration: database/migrations/default/1767430748998_crash_address_display_trigger/up.sql
22

3-
CREATE OR REPLACE VIEW locations_list_view AS WITH cr3_comp_costs AS (
3+
CREATE OR REPLACE VIEW locations_list_view AS
4+
WITH cr3_comp_costs AS (
45
SELECT
56
crashes_list_view.location_id,
67
sum(crashes_list_view.est_comp_cost_crash_based) AS cr3_comp_costs_total
Lines changed: 77 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
-- Most recent migration: database/migrations/default/1771445809119_update_location_crashes_view/up.sql
1+
-- Most recent migration: database/migrations/default/1776976438072_views_chicago_tz/up.sql
22

33
DROP MATERIALIZED VIEW IF EXISTS location_crashes_view;
44

@@ -12,13 +12,13 @@ SELECT
1212
crashes.case_id,
1313
crashes.crash_timestamp,
1414
to_char(
15-
(crashes.crash_timestamp AT TIME ZONE 'US/Central'::text), 'YYYY-MM-DD'::text
15+
(crashes.crash_timestamp AT TIME ZONE 'America/Chicago'::text), 'YYYY-MM-DD'::text
1616
) AS crash_date,
1717
to_char(
18-
(crashes.crash_timestamp AT TIME ZONE 'US/Central'::text), 'HH24:MI:SS'::text
18+
(crashes.crash_timestamp AT TIME ZONE 'America/Chicago'::text), 'HH24:MI:SS'::text
1919
) AS crash_time,
2020
upper(
21-
to_char((crashes.crash_timestamp AT TIME ZONE 'US/Central'::text), 'dy'::text)
21+
to_char((crashes.crash_timestamp AT TIME ZONE 'America/Chicago'::text), 'dy'::text)
2222
) AS day_of_week,
2323
crash_injury_metrics_view.crash_injry_sev_id AS crash_sev_id,
2424
crashes.latitude,
@@ -38,87 +38,87 @@ SELECT
3838
crash_units.veh_body_styl_desc,
3939
crash_units.veh_unit_desc
4040
FROM crashes
41-
LEFT JOIN LATERAL (
42-
SELECT
43-
units.crash_pk,
44-
string_agg(movt.label, ','::text) AS movement_desc,
45-
string_agg(trvl_dir.label, ','::text) AS travel_direction,
46-
string_agg(veh_body_styl.label, ','::text) AS veh_body_styl_desc,
47-
string_agg(unit_desc.label, ','::text) AS veh_unit_desc
48-
FROM units
49-
LEFT JOIN lookups.movt movt ON units.movement_id = movt.id
50-
LEFT JOIN lookups.trvl_dir trvl_dir ON units.veh_trvl_dir_id = trvl_dir.id
51-
LEFT JOIN lookups.veh_body_styl veh_body_styl ON units.veh_body_styl_id = veh_body_styl.id
52-
LEFT JOIN lookups.unit_desc unit_desc ON units.unit_desc_id = unit_desc.id
53-
WHERE crashes.id = units.crash_pk
54-
GROUP BY units.crash_pk
55-
) crash_units ON true
56-
LEFT JOIN LATERAL (
57-
SELECT
58-
crash_injury_metrics_view_1.id,
59-
crash_injury_metrics_view_1.cris_crash_id,
60-
crash_injury_metrics_view_1.unkn_injry_count,
61-
crash_injury_metrics_view_1.nonincap_injry_count,
62-
crash_injury_metrics_view_1.poss_injry_count,
63-
crash_injury_metrics_view_1.non_injry_count,
64-
crash_injury_metrics_view_1.sus_serious_injry_count,
65-
crash_injury_metrics_view_1.tot_injry_count,
66-
crash_injury_metrics_view_1.fatality_count,
67-
crash_injury_metrics_view_1.vz_fatality_count,
68-
crash_injury_metrics_view_1.law_enf_fatality_count,
69-
crash_injury_metrics_view_1.cris_fatality_count,
70-
crash_injury_metrics_view_1.motor_vehicle_fatality_count,
71-
crash_injury_metrics_view_1.motor_vehicle_sus_serious_injry_count,
72-
crash_injury_metrics_view_1.motorcycle_fatality_count,
73-
crash_injury_metrics_view_1.motorcycle_sus_serious_count,
74-
crash_injury_metrics_view_1.bicycle_fatality_count,
75-
crash_injury_metrics_view_1.bicycle_sus_serious_injry_count,
76-
crash_injury_metrics_view_1.pedestrian_fatality_count,
77-
crash_injury_metrics_view_1.pedestrian_sus_serious_injry_count,
78-
crash_injury_metrics_view_1.micromobility_fatality_count,
79-
crash_injury_metrics_view_1.micromobility_sus_serious_injry_count,
80-
crash_injury_metrics_view_1.other_fatality_count,
81-
crash_injury_metrics_view_1.other_sus_serious_injry_count,
82-
crash_injury_metrics_view_1.crash_injry_sev_id,
83-
crash_injury_metrics_view_1.years_of_life_lost,
84-
crash_injury_metrics_view_1.est_comp_cost_crash_based,
85-
crash_injury_metrics_view_1.est_total_person_comp_cost
86-
FROM crash_injury_metrics_view crash_injury_metrics_view_1
87-
WHERE crashes.id = crash_injury_metrics_view_1.id
88-
LIMIT 1
89-
) crash_injury_metrics_view ON true
41+
LEFT JOIN LATERAL (SELECT
42+
units.crash_pk,
43+
string_agg(movt.label, ','::text) AS movement_desc,
44+
string_agg(trvl_dir.label, ','::text) AS travel_direction,
45+
string_agg(veh_body_styl.label, ','::text) AS veh_body_styl_desc,
46+
string_agg(unit_desc.label, ','::text) AS veh_unit_desc
47+
FROM units
48+
LEFT JOIN lookups.movt movt ON units.movement_id = movt.id
49+
LEFT JOIN lookups.trvl_dir trvl_dir ON units.veh_trvl_dir_id = trvl_dir.id
50+
LEFT JOIN lookups.veh_body_styl veh_body_styl ON units.veh_body_styl_id = veh_body_styl.id
51+
LEFT JOIN lookups.unit_desc unit_desc ON units.unit_desc_id = unit_desc.id
52+
WHERE crashes.id = units.crash_pk
53+
GROUP BY units.crash_pk) crash_units ON true
54+
LEFT JOIN LATERAL (SELECT
55+
crash_injury_metrics_view_1.id,
56+
crash_injury_metrics_view_1.cris_crash_id,
57+
crash_injury_metrics_view_1.unkn_injry_count,
58+
crash_injury_metrics_view_1.nonincap_injry_count,
59+
crash_injury_metrics_view_1.poss_injry_count,
60+
crash_injury_metrics_view_1.non_injry_count,
61+
crash_injury_metrics_view_1.sus_serious_injry_count,
62+
crash_injury_metrics_view_1.tot_injry_count,
63+
crash_injury_metrics_view_1.fatality_count,
64+
crash_injury_metrics_view_1.vz_fatality_count,
65+
crash_injury_metrics_view_1.law_enf_fatality_count,
66+
crash_injury_metrics_view_1.cris_fatality_count,
67+
crash_injury_metrics_view_1.motor_vehicle_fatality_count,
68+
crash_injury_metrics_view_1.motor_vehicle_sus_serious_injry_count,
69+
crash_injury_metrics_view_1.motorcycle_fatality_count,
70+
crash_injury_metrics_view_1.motorcycle_sus_serious_count,
71+
crash_injury_metrics_view_1.bicycle_fatality_count,
72+
crash_injury_metrics_view_1.bicycle_sus_serious_injry_count,
73+
crash_injury_metrics_view_1.pedestrian_fatality_count,
74+
crash_injury_metrics_view_1.pedestrian_sus_serious_injry_count,
75+
crash_injury_metrics_view_1.micromobility_fatality_count,
76+
crash_injury_metrics_view_1.micromobility_sus_serious_injry_count,
77+
crash_injury_metrics_view_1.other_fatality_count,
78+
crash_injury_metrics_view_1.other_sus_serious_injry_count,
79+
crash_injury_metrics_view_1.crash_injry_sev_id,
80+
crash_injury_metrics_view_1.years_of_life_lost,
81+
crash_injury_metrics_view_1.est_comp_cost_crash_based,
82+
crash_injury_metrics_view_1.est_total_person_comp_cost
83+
FROM crash_injury_metrics_view crash_injury_metrics_view_1
84+
WHERE crashes.id = crash_injury_metrics_view_1.id
85+
LIMIT 1) crash_injury_metrics_view ON true
9086
LEFT JOIN lookups.collsn ON crashes.fhe_collsn_id = collsn.id
9187
WHERE crashes.is_deleted = false
9288
UNION ALL
9389
SELECT
94-
null::text AS record_locator,
95-
aab.form_id AS cris_crash_id,
96-
null::integer AS crash_pk,
97-
'NON-CR3'::text AS type,
90+
null::text AS record_locator,
91+
aab.form_id AS cris_crash_id,
92+
null::integer AS crash_pk,
93+
'NON-CR3'::text AS type,
9894
aab.location_id,
99-
aab.case_id::text AS case_id,
100-
aab.case_timestamp AS crash_timestamp,
101-
to_char((aab.case_timestamp AT TIME ZONE 'US/Central'::text), 'YYYY-MM-DD'::text) AS crash_date,
102-
to_char((aab.case_timestamp AT TIME ZONE 'US/Central'::text), 'HH24:MI:SS'::text) AS crash_time,
95+
aab.case_id::text AS case_id,
96+
aab.case_timestamp AS crash_timestamp,
97+
to_char(
98+
(aab.case_timestamp AT TIME ZONE 'America/Chicago'::text), 'YYYY-MM-DD'::text
99+
) AS crash_date,
100+
to_char(
101+
(aab.case_timestamp AT TIME ZONE 'America/Chicago'::text), 'HH24:MI:SS'::text
102+
) AS crash_time,
103103
upper(
104-
to_char((aab.case_timestamp AT TIME ZONE 'US/Central'::text), 'dy'::text)
105-
) AS day_of_week,
106-
0 AS crash_sev_id,
104+
to_char((aab.case_timestamp AT TIME ZONE 'America/Chicago'::text), 'dy'::text)
105+
) AS day_of_week,
106+
0 AS crash_sev_id,
107107
aab.latitude,
108108
aab.longitude,
109-
aab.address AS address_display,
110-
0 AS non_injry_count,
111-
0 AS nonincap_injry_count,
112-
0 AS poss_injry_count,
113-
0 AS sus_serious_injry_count,
114-
0 AS tot_injry_count,
115-
0 AS unkn_injry_count,
116-
0 AS vz_fatality_count,
109+
aab.address AS address_display,
110+
0 AS non_injry_count,
111+
0 AS nonincap_injry_count,
112+
0 AS poss_injry_count,
113+
0 AS sus_serious_injry_count,
114+
0 AS tot_injry_count,
115+
0 AS unkn_injry_count,
116+
0 AS vz_fatality_count,
117117
aab.est_comp_cost_crash_based,
118-
''::text AS collsn_desc,
119-
''::text AS movement_desc,
120-
''::text AS travel_direction,
121-
''::text AS veh_body_styl_desc,
122-
''::text AS veh_unit_desc
118+
''::text AS collsn_desc,
119+
''::text AS movement_desc,
120+
''::text AS travel_direction,
121+
''::text AS veh_body_styl_desc,
122+
''::text AS veh_unit_desc
123123
FROM atd_apd_blueform aab
124124
WHERE aab.is_deleted = false;

0 commit comments

Comments
 (0)