Skip to content

Commit 6371e06

Browse files
committed
fix(ftrg): check first if addfield table exists before do action, and remove trailing whitespaces
1 parent ede26c4 commit 6371e06

7 files changed

+462
-383
lines changed

ud/ftrg/ud_gw_trg_edit_arc.sql

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ v_seq_name text;
3838
v_seq_code text;
3939
v_code_prefix text;
4040
v_arc_id text;
41+
v_childtable_name text;
4142

4243
BEGIN
4344
EXECUTE 'SET search_path TO '||quote_literal(TG_TABLE_SCHEMA)||', public';
@@ -516,9 +517,12 @@ BEGIN
516517
USING NEW
517518
INTO v_new_value_param;
518519

519-
IF v_new_value_param IS NOT NULL THEN
520-
EXECUTE 'INSERT INTO man_arc_'||lower(v_customfeature)||' (arc_id, '||v_addfields.param_name||') VALUES ($1, $2::'||v_addfields.datatype_id||')'
521-
USING NEW.arc_id, v_new_value_param;
520+
v_childtable_name := 'man_arc_' || lower(v_customfeature);
521+
IF (SELECT EXISTS ( SELECT 1 FROM information_schema.tables WHERE table_schema = TG_TABLE_SCHEMA AND table_name = v_childtable_name)) IS TRUE THEN
522+
IF v_new_value_param IS NOT NULL THEN
523+
EXECUTE 'INSERT INTO '||v_childtable_name||' (arc_id, '||v_addfields.param_name||') VALUES ($1, $2::'||v_addfields.datatype_id||')'
524+
USING NEW.arc_id, v_new_value_param;
525+
END IF;
522526
END IF;
523527
END LOOP;
524528
END IF;
@@ -730,15 +734,20 @@ BEGIN
730734
USING OLD
731735
INTO v_old_value_param;
732736

733-
IF (v_new_value_param IS NOT NULL AND v_old_value_param!=v_new_value_param) OR (v_new_value_param IS NOT NULL AND v_old_value_param IS NULL) THEN
734-
EXECUTE 'INSERT INTO man_arc_'||lower(v_customfeature)||' (arc_id, '||v_addfields.param_name||') VALUES ($1, $2::'||v_addfields.datatype_id||')
735-
ON CONFLICT (arc_id)
736-
DO UPDATE SET '||v_addfields.param_name||'=$2::'||v_addfields.datatype_id||' WHERE man_arc_'||lower(v_customfeature)||'.arc_id=$1'
737-
USING NEW.arc_id, v_new_value_param;
738737

739-
ELSIF v_new_value_param IS NULL AND v_old_value_param IS NOT NULL THEN
740-
EXECUTE 'UPDATE man_arc_'||lower(v_customfeature)||' SET '||v_addfields.param_name||' = null WHERE man_arc_'||lower(v_customfeature)||'.arc_id=$1'
741-
USING NEW.arc_id;
738+
739+
v_childtable_name := 'man_arc_' || lower(v_customfeature);
740+
IF (SELECT EXISTS ( SELECT 1 FROM information_schema.tables WHERE table_schema = TG_TABLE_SCHEMA AND table_name = v_childtable_name)) IS TRUE THEN
741+
IF (v_new_value_param IS NOT NULL AND v_old_value_param!=v_new_value_param) OR (v_new_value_param IS NOT NULL AND v_old_value_param IS NULL) THEN
742+
EXECUTE 'INSERT INTO '||v_childtable_name||' (arc_id, '||v_addfields.param_name||') VALUES ($1, $2::'||v_addfields.datatype_id||')
743+
ON CONFLICT (arc_id)
744+
DO UPDATE SET '||v_addfields.param_name||'=$2::'||v_addfields.datatype_id||' WHERE '||v_childtable_name||'.arc_id=$1'
745+
USING NEW.arc_id, v_new_value_param;
746+
747+
ELSIF v_new_value_param IS NULL AND v_old_value_param IS NOT NULL THEN
748+
EXECUTE 'UPDATE '||v_childtable_name||' SET '||v_addfields.param_name||' = null WHERE '||v_childtable_name||'.arc_id=$1'
749+
USING NEW.arc_id;
750+
END IF;
742751
END IF;
743752
END LOOP;
744753
END IF;
@@ -770,8 +779,11 @@ BEGIN
770779
-- Delete childtable addfields (after or before deletion of arc, doesn't matter)
771780
v_customfeature = old.arc_type;
772781
v_arc_id = old.arc_id;
773-
774-
EXECUTE 'DELETE FROM man_arc_'||lower(v_customfeature)||' WHERE arc_id = '||quote_literal(v_arc_id)||'';
782+
783+
v_childtable_name := 'man_arc_' || lower(v_customfeature);
784+
IF (SELECT EXISTS ( SELECT 1 FROM information_schema.tables WHERE table_schema = TG_TABLE_SCHEMA AND table_name = v_childtable_name)) IS TRUE THEN
785+
EXECUTE 'DELETE FROM '||v_childtable_name||' WHERE arc_id = '||quote_literal(v_arc_id)||'';
786+
END IF;
775787

776788
RETURN NULL;
777789

ud/ftrg/ud_gw_trg_edit_connec.sql

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ v_seq_name text;
4141
v_seq_code text;
4242
v_code_prefix text;
4343
v_connec_id text;
44+
v_childtable_name text;
4445

4546
BEGIN
4647

@@ -546,10 +547,14 @@ BEGIN
546547
USING NEW
547548
INTO v_new_value_param;
548549

549-
IF v_new_value_param IS NOT NULL THEN
550-
EXECUTE 'INSERT INTO man_connec_'||lower(v_customfeature)||' (connec_id, '||v_addfields.param_name||') VALUES ($1, $2::'||v_addfields.datatype_id||')'
551-
USING NEW.connec_id, v_new_value_param;
550+
v_childtable_name := 'man_connec' || lower(v_customfeature);
551+
IF (SELECT EXISTS ( SELECT 1 FROM information_schema.tables WHERE table_schema = TG_TABLE_SCHEMA AND table_name = v_childtable_name)) IS TRUE THEN
552+
IF v_new_value_param IS NOT NULL THEN
553+
EXECUTE 'INSERT INTO '||v_childtable_name||' (connec_id, '||v_addfields.param_name||') VALUES ($1, $2::'||v_addfields.datatype_id||')'
554+
USING NEW.connec_id, v_new_value_param;
555+
END IF;
552556
END IF;
557+
553558
END LOOP;
554559
END IF;
555560

@@ -778,15 +783,18 @@ BEGIN
778783
USING OLD
779784
INTO v_old_value_param;
780785

781-
IF (v_new_value_param IS NOT NULL AND v_old_value_param!=v_new_value_param) OR (v_new_value_param IS NOT NULL AND v_old_value_param IS NULL) THEN
782-
EXECUTE 'INSERT INTO man_connec_'||lower(v_customfeature)||' (connec_id, '||v_addfields.param_name||') VALUES ($1, $2::'||v_addfields.datatype_id||')
783-
ON CONFLICT (connec_id)
784-
DO UPDATE SET '||v_addfields.param_name||'=$2::'||v_addfields.datatype_id||' WHERE man_connec_'||lower(v_customfeature)||'.connec_id=$1'
785-
USING NEW.connec_id, v_new_value_param;
786-
787-
ELSIF v_new_value_param IS NULL AND v_old_value_param IS NOT NULL THEN
788-
EXECUTE 'UPDATE man_connec_'||lower(v_customfeature)||' SET '||v_addfields.param_name||' = null WHERE man_connec_'||lower(v_customfeature)||'.connec_id=$1'
789-
USING NEW.connec_id;
786+
v_childtable_name := 'man_connec' || lower(v_customfeature);
787+
IF (SELECT EXISTS ( SELECT 1 FROM information_schema.tables WHERE table_schema = TG_TABLE_SCHEMA AND table_name = v_childtable_name)) IS TRUE THEN
788+
IF (v_new_value_param IS NOT NULL AND v_old_value_param!=v_new_value_param) OR (v_new_value_param IS NOT NULL AND v_old_value_param IS NULL) THEN
789+
EXECUTE 'INSERT INTO '||v_childtable_name||' (connec_id, '||v_addfields.param_name||') VALUES ($1, $2::'||v_addfields.datatype_id||')
790+
ON CONFLICT (connec_id)
791+
DO UPDATE SET '||v_addfields.param_name||'=$2::'||v_addfields.datatype_id||' WHERE '||v_childtable_name||'.connec_id=$1'
792+
USING NEW.connec_id, v_new_value_param;
793+
794+
ELSIF v_new_value_param IS NULL AND v_old_value_param IS NOT NULL THEN
795+
EXECUTE 'UPDATE '||v_childtable_name||' SET '||v_addfields.param_name||' = null WHERE '||v_childtable_name||'.connec_id=$1'
796+
USING NEW.connec_id;
797+
END IF;
790798
END IF;
791799
END LOOP;
792800
END IF;
@@ -814,8 +822,12 @@ BEGIN
814822
-- Delete childtable addfields (after or before deletion of connec, doesn't matter)
815823
v_customfeature = old.connec_type;
816824
v_connec_id = old.connec_id;
817-
818-
EXECUTE 'DELETE FROM man_connec_'||lower(v_customfeature)||' WHERE connec_id = '||quote_literal(v_connec_id)||'';
825+
826+
827+
v_childtable_name := 'man_connec' || lower(v_customfeature);
828+
IF (SELECT EXISTS ( SELECT 1 FROM information_schema.tables WHERE table_schema = TG_TABLE_SCHEMA AND table_name = v_childtable_name)) IS TRUE THEN
829+
EXECUTE 'DELETE FROM '||v_childtable_name||' WHERE connec_id = '||quote_literal(v_connec_id)||'';
830+
END IF;
819831

820832
-- delete links
821833
FOR v_record_link IN SELECT * FROM link WHERE feature_type='CONNEC' AND feature_id=OLD.connec_id

ud/ftrg/ud_gw_trg_edit_gully.sql

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ v_seq_name text;
6969
v_seq_code text;
7070
v_code_prefix text;
7171
v_gully_id text;
72+
v_childtable_name text;
7273

7374
BEGIN
7475

@@ -643,9 +644,12 @@ BEGIN
643644
USING NEW
644645
INTO v_new_value_param;
645646

646-
IF v_new_value_param IS NOT NULL THEN
647-
EXECUTE 'INSERT INTO man_gully_'||lower(v_customfeature)||' (gully_id, '||v_addfields.param_name||') VALUES ($1, $2::'||v_addfields.datatype_id||')'
648-
USING NEW.gully_id, v_new_value_param;
647+
v_childtable_name := 'man_gully_' || lower(v_customfeature);
648+
IF (SELECT EXISTS ( SELECT 1 FROM information_schema.tables WHERE table_schema = TG_TABLE_SCHEMA AND table_name = v_childtable_name)) IS TRUE THEN
649+
IF v_new_value_param IS NOT NULL THEN
650+
EXECUTE 'INSERT INTO '||v_childtable_name||' (gully_id, '||v_addfields.param_name||') VALUES ($1, $2::'||v_addfields.datatype_id||')'
651+
USING NEW.gully_id, v_new_value_param;
652+
END IF;
649653
END IF;
650654
END LOOP;
651655
END IF;
@@ -942,15 +946,20 @@ BEGIN
942946
USING OLD
943947
INTO v_old_value_param;
944948

945-
IF (v_new_value_param IS NOT NULL AND v_old_value_param!=v_new_value_param) OR (v_new_value_param IS NOT NULL AND v_old_value_param IS NULL) THEN
946-
EXECUTE 'INSERT INTO man_gully_'||lower(v_customfeature)||' (gully_id, '||v_addfields.param_name||') VALUES ($1, $2::'||v_addfields.datatype_id||')
947-
ON CONFLICT (gully_id)
948-
DO UPDATE SET '||v_addfields.param_name||'=$2::'||v_addfields.datatype_id||' WHERE man_gully_'||lower(v_customfeature)||'.gully_id=$1'
949-
USING NEW.gully_id, v_new_value_param;
950949

951-
ELSIF v_new_value_param IS NULL AND v_old_value_param IS NOT NULL THEN
952-
EXECUTE 'UPDATE man_gully_'||lower(v_customfeature)||' SET '||v_addfields.param_name||' = null WHERE man_gully_'||lower(v_customfeature)||'.gully_id=$1'
953-
USING NEW.gully_id;
950+
951+
v_childtable_name := 'man_gully_' || lower(v_customfeature);
952+
IF (SELECT EXISTS ( SELECT 1 FROM information_schema.tables WHERE table_schema = TG_TABLE_SCHEMA AND table_name = v_childtable_name)) IS TRUE THEN
953+
IF (v_new_value_param IS NOT NULL AND v_old_value_param!=v_new_value_param) OR (v_new_value_param IS NOT NULL AND v_old_value_param IS NULL) THEN
954+
EXECUTE 'INSERT INTO '||v_childtable_name||' (gully_id, '||v_addfields.param_name||') VALUES ($1, $2::'||v_addfields.datatype_id||')
955+
ON CONFLICT (gully_id)
956+
DO UPDATE SET '||v_addfields.param_name||'=$2::'||v_addfields.datatype_id||' WHERE '||v_childtable_name||'.gully_id=$1'
957+
USING NEW.gully_id, v_new_value_param;
958+
959+
ELSIF v_new_value_param IS NULL AND v_old_value_param IS NOT NULL THEN
960+
EXECUTE 'UPDATE '||v_childtable_name||' SET '||v_addfields.param_name||' = null WHERE '||v_childtable_name||'.gully_id=$1'
961+
USING NEW.gully_id;
962+
END IF;
954963
END IF;
955964
END LOOP;
956965
END IF;
@@ -978,8 +987,11 @@ BEGIN
978987
-- Delete childtable addfields (after or before deletion of gully, doesn't matter)
979988
v_customfeature = old.gully_type;
980989
v_gully_id = old.gully_id;
981-
982-
EXECUTE 'DELETE FROM man_gully_'||lower(v_customfeature)||' WHERE gully_id = '||quote_literal(v_gully_id)||'';
990+
991+
v_childtable_name := 'man_gully_' || lower(v_customfeature);
992+
IF (SELECT EXISTS ( SELECT 1 FROM information_schema.tables WHERE table_schema = TG_TABLE_SCHEMA AND table_name = v_childtable_name)) IS TRUE THEN
993+
EXECUTE 'DELETE FROM '||v_childtable_name||' WHERE gully_id = '||quote_literal(v_gully_id)||'';
994+
END IF;
983995

984996
-- delete links
985997
FOR v_record_link IN SELECT * FROM link WHERE feature_type='GULLY' AND feature_id=OLD.gully_id

ud/ftrg/ud_gw_trg_edit_node.sql

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ v_input json;
7777
v_auto_sander boolean;
7878
v_node_id text;
7979

80+
v_childtable_name text;
81+
8082
BEGIN
8183

8284
EXECUTE 'SET search_path TO '||quote_literal(TG_TABLE_SCHEMA)||', public';
@@ -693,9 +695,12 @@ BEGIN
693695
USING NEW
694696
INTO v_new_value_param;
695697

696-
IF v_new_value_param IS NOT NULL THEN
697-
EXECUTE 'INSERT INTO man_node_'||lower(v_customfeature)||' (node_id, '||v_addfields.param_name||') VALUES ($1, $2::'||v_addfields.datatype_id||')'
698-
USING NEW.node_id, v_new_value_param;
698+
v_childtable_name := 'man_node' || lower(v_customfeature);
699+
IF (SELECT EXISTS ( SELECT 1 FROM information_schema.tables WHERE table_schema = TG_TABLE_SCHEMA AND table_name = v_childtable_name)) IS TRUE THEN
700+
IF v_new_value_param IS NOT NULL THEN
701+
EXECUTE 'INSERT INTO '||v_childtable_name||' (node_id, '||v_addfields.param_name||') VALUES ($1, $2::'||v_addfields.datatype_id||')'
702+
USING NEW.node_id, v_new_value_param;
703+
END IF;
699704
END IF;
700705
END LOOP;
701706
END IF;
@@ -966,15 +971,18 @@ BEGIN
966971
USING OLD
967972
INTO v_old_value_param;
968973

969-
IF (v_new_value_param IS NOT NULL AND v_old_value_param!=v_new_value_param) OR (v_new_value_param IS NOT NULL AND v_old_value_param IS NULL) THEN
970-
EXECUTE 'INSERT INTO man_node_'||lower(v_customfeature)||' (node_id, '||v_addfields.param_name||') VALUES ($1, $2::'||v_addfields.datatype_id||')
971-
ON CONFLICT (node_id)
972-
DO UPDATE SET '||v_addfields.param_name||'=$2::'||v_addfields.datatype_id||' WHERE man_node_'||lower(v_customfeature)||'.node_id=$1'
973-
USING NEW.node_id, v_new_value_param;
974-
975-
ELSIF v_new_value_param IS NULL AND v_old_value_param IS NOT NULL THEN
976-
EXECUTE 'UPDATE man_node_'||lower(v_customfeature)||' SET '||v_addfields.param_name||' = null WHERE man_node_'||lower(v_customfeature)||'.node_id=$1'
977-
USING NEW.node_id;
974+
v_childtable_name := 'man_node' || lower(v_customfeature);
975+
IF (SELECT EXISTS ( SELECT 1 FROM information_schema.tables WHERE table_schema = TG_TABLE_SCHEMA AND table_name = v_childtable_name)) IS TRUE THEN
976+
IF (v_new_value_param IS NOT NULL AND v_old_value_param!=v_new_value_param) OR (v_new_value_param IS NOT NULL AND v_old_value_param IS NULL) THEN
977+
EXECUTE 'INSERT INTO '||v_childtable_name||' (node_id, '||v_addfields.param_name||') VALUES ($1, $2::'||v_addfields.datatype_id||')
978+
ON CONFLICT (node_id)
979+
DO UPDATE SET '||v_addfields.param_name||'=$2::'||v_addfields.datatype_id||' WHERE '||v_childtable_name||'.node_id=$1'
980+
USING NEW.node_id, v_new_value_param;
981+
982+
ELSIF v_new_value_param IS NULL AND v_old_value_param IS NOT NULL THEN
983+
EXECUTE 'UPDATE '||v_childtable_name||' SET '||v_addfields.param_name||' = null WHERE '||v_childtable_name||'.node_id=$1'
984+
USING NEW.node_id;
985+
END IF;
978986
END IF;
979987
END LOOP;
980988
END IF;
@@ -1005,8 +1013,11 @@ BEGIN
10051013
-- Delete childtable addfields (after or before deletion of node, doesn't matter)
10061014
v_customfeature = old.node_type;
10071015
v_node_id = old.node_id;
1008-
1009-
EXECUTE 'DELETE FROM man_node_'||lower(v_customfeature)||' WHERE node_id = '||quote_literal(v_node_id)||'';
1016+
1017+
v_childtable_name := 'man_node' || lower(v_customfeature);
1018+
IF (SELECT EXISTS ( SELECT 1 FROM information_schema.tables WHERE table_schema = TG_TABLE_SCHEMA AND table_name = v_childtable_name)) IS TRUE THEN
1019+
EXECUTE 'DELETE FROM '||v_childtable_name||' WHERE node_id = '||quote_literal(v_node_id)||'';
1020+
END IF;
10101021

10111022
RETURN NULL;
10121023
END IF;

0 commit comments

Comments
 (0)