Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add default values for fk_provider and fk_dataowner #173

Merged
merged 24 commits into from
May 6, 2024
Merged
Show file tree
Hide file tree
Changes from 23 commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
a42fe9b
Add default value functionality
cymed Feb 26, 2024
b2709e2
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Feb 26, 2024
cecc9e6
renaming
cymed Feb 26, 2024
1eeb1f9
remove value_integer
cymed Feb 26, 2024
0fc4e36
improve comments
cymed Feb 27, 2024
e25b922
remove data_type parameter
cymed Feb 29, 2024
0efcddc
add default values in views too
cymed Feb 29, 2024
57ddcb6
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Feb 29, 2024
0909a0b
minor fix
cymed Feb 29, 2024
2876db1
Merge branch 'default_values_for_fk_provider_dataowner' of https://gi…
cymed Feb 29, 2024
95f99f5
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Feb 29, 2024
7165519
typo changes
cymed Feb 29, 2024
05396d5
Merge branch 'default_values_for_fk_provider_dataowner' of https://gi…
cymed Feb 29, 2024
25a25de
escape percent signs
cymed Mar 4, 2024
889f4c5
Merge branch 'default_values_for_fk_provider_dataowner' of https://gi…
cymed Apr 16, 2024
15fcc92
Update create_app.py
cymed Apr 16, 2024
7adb8c6
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Apr 16, 2024
9c45c07
minor fix
cymed Apr 16, 2024
a4b9c74
alter percent signs
cymed Apr 16, 2024
cdd4cb4
add docs
cymed Apr 16, 2024
5e69606
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Apr 16, 2024
88cfdf6
move default value table and alter docs
cymed Apr 17, 2024
615edd6
remove one sentence in docs
cymed Apr 17, 2024
6f5e9a9
Update docs/en/user-guide/How-To/index.rst
cymed Apr 17, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions datamodel/app/create_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,9 @@ def create_app(
"view/catchment_area/vw_catchment_area_wwp_connections.sql", pg_service, variables
)

# default values
run_sql_file("view/set_default_value_for_views.sql", pg_service, variables)

# Recreate network views
run_sql_file("view/network/vw_network_node.sql", pg_service, variables)
run_sql_file("view/network/vw_network_segment.sql", pg_service, variables)
Expand Down
23 changes: 23 additions & 0 deletions datamodel/app/view/set_default_value_for_views.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
DO
$BODY$
DECLARE
tbl text;
col text;
BEGIN
FOR tbl,col IN
SELECT
c.table_name,
c.column_name
FROM information_schema.columns c
LEFT JOIN information_schema.tables t
ON c.table_name = t.table_name
AND c.table_schema = t.table_schema
WHERE c.column_name IN ('fk_provider','fk_dataowner')
AND c.table_schema ='tww_app'
AND t.table_type = 'VIEW'
LOOP
EXECUTE format($$ ALTER VIEW tww_app.%1$I ALTER %2$I SET DEFAULT tww_sys.get_default_values('%2$s') $$, tbl,col);
END LOOP;

END;
$BODY$
18 changes: 14 additions & 4 deletions datamodel/app/view/vw_tww_reach.py
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,11 @@ def vw_tww_reach(pg_service: str = None, extra_definition: dict = None):
indent=2,
skip_columns=[],
coalesce_pkey_default=True,
insert_values={"situation3d_geometry": "ST_StartPoint(NEW.progression3d_geometry)"},
insert_values={
"situation3d_geometry": "ST_StartPoint(NEW.progression3d_geometry)",
"fk_provider": "COALESCE(NULLIF(NEW.rp_from_fk_provider,''), NEW.fk_provider)",
"fk_dataowner": "COALESCE(NULLIF(NEW.rp_from_fk_dataowner,''), NEW.fk_dataowner)",
},
returning="obj_id INTO NEW.rp_from_obj_id",
),
rp_to=insert_command(
Expand All @@ -217,7 +221,11 @@ def vw_tww_reach(pg_service: str = None, extra_definition: dict = None):
indent=2,
skip_columns=[],
coalesce_pkey_default=True,
insert_values={"situation3d_geometry": "ST_EndPoint(NEW.progression3d_geometry)"},
insert_values={
"situation3d_geometry": "ST_EndPoint(NEW.progression3d_geometry)",
"fk_provider": "COALESCE(NULLIF(NEW.rp_to_fk_provider,''), NEW.fk_provider)",
"fk_dataowner": "COALESCE(NULLIF(NEW.rp_to_fk_dataowner,''), NEW.fk_dataowner)",
},
returning="obj_id INTO NEW.rp_to_obj_id",
),
ws=insert_command(
Expand All @@ -229,12 +237,14 @@ def vw_tww_reach(pg_service: str = None, extra_definition: dict = None):
indent=2,
skip_columns=[
"detail_geometry3d_geometry",
"fk_dataowner",
"fk_provider",
"_label",
"_depth",
"fk_main_cover",
],
insert_values={
"fk_provider": "NEW.fk_provider",
"fk_dataowner": "NEW.fk_dataowner",
},
),
ch=insert_command(
pg_cur=cursor,
Expand Down
50 changes: 50 additions & 0 deletions datamodel/changelogs/0001/14_default_values.sql
ponceta marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
CREATE TABLE tww_od.default_values
cymed marked this conversation as resolved.
Show resolved Hide resolved
(
fieldname text NOT NULL,
value_obj_id varchar(16),
CONSTRAINT pkey_tww_sys_default_values_fieldname PRIMARY KEY (fieldname)
);

-- function for retrieving default obj_id
CREATE OR REPLACE FUNCTION tww_sys.get_default_values(field_name text)
RETURNS varchar(16) AS
$BODY$
DECLARE
myrec record;
BEGIN
BEGIN
SELECT value_obj_id::varchar(16) INTO myrec FROM tww_od.default_values WHERE fieldname = field_name;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE WARNING 'Field name % not found in table tww_od.default_values. Returning NULL',field_name;
RETURN NULL;
END;
RETURN myrec.value_obj_id;
END;
$BODY$
LANGUAGE plpgsql STABLE SECURITY DEFINER
COST 100;

-- Set defaults on all fk_provider,fk_dataowner
DO $do$
DECLARE
tbl text;
col text;
BEGIN
FOR tbl,col IN
SELECT
c.table_name,
c.column_name
FROM information_schema.columns c
LEFT JOIN information_schema.tables t
ON c.table_name = t.table_name
and c.table_schema = t.table_schema
WHERE c.column_name IN ('fk_provider','fk_dataowner')
and c.table_schema ='tww_od'
and t.table_type = 'BASE TABLE'
LOOP
EXECUTE format($$ ALTER TABLE tww_od.%1$I ALTER COLUMN %2$I SET DEFAULT tww_sys.get_default_values('%2$s') $$, tbl,col);
END LOOP;

END;
$do$;
1 change: 1 addition & 0 deletions datamodel/scripts/setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ psql "service=${PGSERVICE}" -v ON_ERROR_STOP=1 -f ${DIR}/changelogs/0001/07_netw
psql "service=${PGSERVICE}" -v ON_ERROR_STOP=1 -f ${DIR}/changelogs/0001/09_tww_dictionaries.sql -v SRID=$SRID
psql "service=${PGSERVICE}" -v ON_ERROR_STOP=1 -f ${DIR}/changelogs/0001/09_tww_dictionaries_kek.sql -v SRID=$SRID
psql "service=${PGSERVICE}" -v ON_ERROR_STOP=1 -f ${DIR}/changelogs/0001/13_import.sql -v SRID=$SRID
psql "service=${PGSERVICE}" -v ON_ERROR_STOP=1 -f ${DIR}/changelogs/0001/14_default_values.sql
psql "service=${PGSERVICE}" -v ON_ERROR_STOP=1 -f ${DIR}/changelogs/0001/fix_wastewater_structure.sql
psql "service=${PGSERVICE}" -v ON_ERROR_STOP=1 -f ${DIR}/changelogs/0001/fix_depth.sql
psql "service=${PGSERVICE}" -v ON_ERROR_STOP=1 -f ${DIR}/changelogs/0001/51_dss15_aquifer.sql -v SRID=$SRID
Expand Down
11 changes: 11 additions & 0 deletions docs/en/user-guide/How-To/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,17 @@ The Feature Attributes window for the overflow characteristic appears:

3. Go back in the field fk_overflow characteristic of the just created overflow characteristic with the button **switch to form view** and define the necessary HQ or QQ values with the **add child object** button.

Setting default values
-----------------------

It is possible to define default values for repeated fields such as fk_provider or fk_dataowner.

1. Enter field name and value in the corresponding attributes in ``tww_od.default values``

2. Connect all ccurences of your field name to ``tww_sys.get_default_values(field_name)``.
cymed marked this conversation as resolved.
Show resolved Hide resolved
Per default, the fields ``fk_provider`` and ``fk_dataowner`` are already connected to the function ``tww_sys.get_default_values(field_name)``.
An example SQL script how to insert the default value for all occurences of a field name can be found `here <https://github.com/teksi/wastewater/blob/main/datamodel/changelogs/0001/14_default_values.sql>`_)

Further informations
--------------------

Expand Down