Skip to content

Commit

Permalink
Move azimut to a dedicated table + adapt view (#17)
Browse files Browse the repository at this point in the history
  • Loading branch information
3nids authored Oct 5, 2020
1 parent 1ca792d commit 9ec8e59
Show file tree
Hide file tree
Showing 13 changed files with 313 additions and 73 deletions.
5 changes: 4 additions & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,10 @@ jobs:
- run: npm install

- name: "test images"
run: docker exec siro sh -c "PGSERVICE=siro_build /src/tests/official_sign_images.sh"
run: docker exec siro pytest

- name: "test images"
run: docker exec siro sh -c "PGSERVICE=siro_build /src/test/official_sign_images.sh"

- name: "schema lint"
run: |
Expand Down
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@
*.orig
.schemalintrc.js
__pycache__
*.qgs~
*.qgs~
local_test.sh
40 changes: 0 additions & 40 deletions data_model/demo_data/demo_data.sql

This file was deleted.

11 changes: 11 additions & 0 deletions data_model/ordinary_data/azimut.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@



CREATE TABLE siro_od.azimut
(
id uuid PRIMARY KEY default uuid_generate_v1(),
fk_support uuid not null,
azimut smallint default 0,
CONSTRAINT fkey_od_support FOREIGN KEY (fk_support) REFERENCES siro_od.support (id) MATCH SIMPLE,
UNIQUE (fk_support, azimut)
);
11 changes: 6 additions & 5 deletions data_model/ordinary_data/frame.sql
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,17 @@
CREATE TABLE siro_od.frame
(
id uuid PRIMARY KEY default uuid_generate_v1(),
rank int default 1,
fk_azimut uuid not null,
rank int default 1, -- TODO: get default
fk_frame_type int,
fk_frame_fixing_type int,
double_sided boolean,
double_sided boolean default true,
fk_status int,
fk_support uuid,
comment text,
picture text,
CONSTRAINT fkey_od_azimut FOREIGN KEY (fk_azimut) REFERENCES siro_od.azimut (id) MATCH SIMPLE,
CONSTRAINT fkey_vl_frame_type FOREIGN KEY (fk_frame_type) REFERENCES siro_vl.frame_type (id) MATCH SIMPLE,
CONSTRAINT fkey_vl_status FOREIGN KEY (fk_status) REFERENCES siro_vl.status (id) MATCH SIMPLE,
CONSTRAINT fkey_support FOREIGN KEY (fk_support) REFERENCES siro_od.support (id) MATCH SIMPLE,
CONSTRAINT fkey_vl_frame_fixing_type FOREIGN KEY (fk_frame_fixing_type) REFERENCES siro_vl.frame_fixing_type (id) MATCH SIMPLE
CONSTRAINT fkey_vl_frame_fixing_type FOREIGN KEY (fk_frame_fixing_type) REFERENCES siro_vl.frame_fixing_type (id) MATCH SIMPLE,
UNIQUE (fk_azimut, rank)
);
9 changes: 5 additions & 4 deletions data_model/ordinary_data/sign.sql
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
CREATE TABLE siro_od.sign
(
id uuid PRIMARY KEY default uuid_generate_v1(),
fk_frame uuid not null,
rank int default 1,
verso boolean not null default false,
fk_sign_type int NOT NULL,
fk_official_sign text,
fk_parent uuid, --self-reference
Expand All @@ -14,20 +16,19 @@ CREATE TABLE siro_od.sign
case_id text,
case_decision text,
-- date_repose
fk_frame uuid,
fk_coating int,
fk_lighting int,
destination text,
azimut smallint,
comment text,
photo text,
CONSTRAINT fkey_od_frame FOREIGN KEY (fk_frame) REFERENCES siro_od.frame (id) MATCH SIMPLE,
CONSTRAINT fkey_vl_sign_type FOREIGN KEY (fk_sign_type) REFERENCES siro_vl.sign_type (id) MATCH SIMPLE,
CONSTRAINT fkey_vl_official_sign FOREIGN KEY (fk_official_sign) REFERENCES siro_vl.official_sign (id) MATCH SIMPLE,
CONSTRAINT fkey_od_sign FOREIGN KEY (fk_parent) REFERENCES siro_od.sign (id) MATCH SIMPLE,
CONSTRAINT fkey_od_owner FOREIGN KEY (fk_owner) REFERENCES siro_od.owner (id) MATCH SIMPLE,
CONSTRAINT fkey_vl_durability FOREIGN KEY (fk_durability) REFERENCES siro_vl.durability (id) MATCH SIMPLE,
CONSTRAINT fkey_frame FOREIGN KEY (fk_frame) REFERENCES siro_od.frame (id) MATCH SIMPLE,
CONSTRAINT fkey_vl_coating FOREIGN KEY (fk_coating) REFERENCES siro_vl.coating (id) MATCH SIMPLE,
CONSTRAINT fkey_vl_lighting FOREIGN KEY (fk_lighting) REFERENCES siro_vl.lighting (id) MATCH SIMPLE,
CONSTRAINT fkey_vl_status FOREIGN KEY (fk_status) REFERENCES siro_vl.status (id) MATCH SIMPLE
CONSTRAINT fkey_vl_status FOREIGN KEY (fk_status) REFERENCES siro_vl.status (id) MATCH SIMPLE,
unique(fk_frame, rank, verso)
);
4 changes: 3 additions & 1 deletion data_model/setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -76,12 +76,14 @@ psql "service=${PGSERVICE}" -v ON_ERROR_STOP=1 -f ${DIR}/value_lists/official_si

psql "service=${PGSERVICE}" -v ON_ERROR_STOP=1 -f ${DIR}/ordinary_data/owner.sql
psql "service=${PGSERVICE}" -v ON_ERROR_STOP=1 -f ${DIR}/ordinary_data/support.sql
psql "service=${PGSERVICE}" -v ON_ERROR_STOP=1 -f ${DIR}/ordinary_data/azimut.sql
psql "service=${PGSERVICE}" -v ON_ERROR_STOP=1 -f ${DIR}/ordinary_data/frame.sql
psql "service=${PGSERVICE}" -v ON_ERROR_STOP=1 -f ${DIR}/ordinary_data/sign.sql

if [[ $demo_data == True ]]; then
echo "*** inserting demo_data"
psql "service=${PGSERVICE}" -v ON_ERROR_STOP=1 -f ${DIR}/demo_data/demo_data.sql
# for now demo data is the test data
psql "service=${PGSERVICE}" -v ON_ERROR_STOP=1 -f ${DIR}/../test/test_data.sql
fi

${DIR}/views/create_views.py --pg_service ${PGSERVICE} --srid=${SRID}
60 changes: 39 additions & 21 deletions data_model/views/vw_sign_symbol.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,33 +26,51 @@ def vw_sign_symbol(srid: int, pg_service: str = None):
view_sql = """
CREATE OR REPLACE VIEW siro_od.vw_sign_symbol AS
WITH ordered_signs AS (
WITH joined_tables AS (
SELECT
sign.id
, az_group.azimut_group
, azimut.azimut
, {sign_columns}
, {vl_official_sign_columns}
, ROW_NUMBER () OVER (
PARTITION BY azimut_group
) AS final_rank
, sign.rank AS sign_rank
, frame.id AS frame_id
, frame.rank AS frame_rank
, support.id AS support_id
, support.geometry::geometry(Point,%(SRID)s) AS support_geometry
, {vl_official_sign_columns}
FROM siro_od.sign
LEFT JOIN siro_od.frame ON frame.id = sign.fk_frame
LEFT JOIN siro_od.support ON support.id = frame.fk_support
LEFT JOIN siro_vl.official_sign ON official_sign.id = sign.fk_official_sign
LEFT JOIN generate_series(-5,355,10) az_group (azimut_group)
ON sign.azimut >= az_group.azimut_group
AND sign.azimut < az_group.azimut_group + 10
ORDER BY azimut_group, final_rank
)
SELECT
ordered_signs.*,
SUM( vl_official_sign_img_height ) OVER rolling_window AS shift
FROM
ordered_signs
WINDOW rolling_window AS ( PARTITION BY support_id, azimut_group ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW )
;
LEFT JOIN siro_od.frame ON frame.id = sign.fk_frame
LEFT JOIN siro_od.azimut ON azimut.id = frame.fk_azimut
LEFT JOIN siro_od.support ON support.id = azimut.fk_support
LEFT JOIN siro_vl.official_sign ON official_sign.id = sign.fk_official_sign
),
ordered_recto_signs AS (
SELECT
joined_tables.*
, ROW_NUMBER () OVER ( PARTITION BY support_id, azimut ORDER BY frame_rank, sign_rank ) AS final_rank
FROM joined_tables
WHERE verso IS FALSE
ORDER BY support_id, azimut, final_rank
),
ordered_shifted_recto_signs AS (
SELECT
ordered_recto_signs.*
, SUM( vl_official_sign_img_height ) OVER ( PARTITION BY support_id, azimut ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS shift
, NULLIF(FIRST_VALUE(id) OVER (PARTITION BY support_id, azimut, frame_rank ROWS BETWEEN 1 PRECEDING AND CURRENT ROW ), id) AS previous_sign_in_frame
, NULLIF(LAST_VALUE(id) OVER ( PARTITION BY support_id, azimut, frame_rank ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING ), id) AS next_sign_in_frame
, NULLIF(FIRST_VALUE(frame_id) OVER ( PARTITION BY support_id, azimut ROWS BETWEEN 1 PRECEDING AND CURRENT ROW ), frame_id) AS previous_frame
, NULLIF(LAST_VALUE(frame_id) OVER ( PARTITION BY support_id, azimut ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING ), frame_id) AS next_frame
FROM
ordered_recto_signs
ORDER BY
support_id, azimut, final_rank
)
SELECT * FROM ordered_shifted_recto_signs
UNION
SELECT jt.*, osrs.final_rank, osrs.shift, NULL::uuid AS previous_sign_in_frame, NULL::uuid AS next_sign_in_frame, NULL::uuid AS previous_frame, NULL::uuid AS next_frame
FROM joined_tables jt
LEFT JOIN ordered_shifted_recto_signs osrs ON osrs.support_id = jt.support_id AND osrs.frame_id = jt.frame_id AND jt.sign_rank = osrs.sign_rank
WHERE jt.verso IS TRUE
;
""".format(
sign_columns=select_columns(
pg_cur=cursor, table_schema='siro_od', table_name='sign',
Expand Down
Empty file added test/__init__.py
Empty file.
File renamed without changes.
Loading

0 comments on commit 9ec8e59

Please sign in to comment.