]> granicus.if.org Git - postgis/commitdiff
Apply patch by Andrea Peri to fix topology layer trigger. Includes regress test....
authorSandro Santilli <strk@keybit.net>
Tue, 28 Jun 2011 19:36:39 +0000 (19:36 +0000)
committerSandro Santilli <strk@keybit.net>
Tue, 28 Jun 2011 19:36:39 +0000 (19:36 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@7514 b70326c6-7e19-0410-871a-916f4a2858ee

topology/test/Makefile
topology/test/regress/layertrigger.sql [new file with mode: 0644]
topology/test/regress/layertrigger_expected [new file with mode: 0644]
topology/topology.sql.in.c

index b2f5d4cafab349d5ce3c48ba7d80c24b2fad925c..4ce38899f7e4d0e30caf49ed11227dc0bbec76e3 100644 (file)
@@ -48,7 +48,8 @@ TESTS = regress/legacy_validate.sql regress/legacy_predicate.sql \
        regress/getnodebypoint.sql \
        regress/getedgebypoint.sql \
        regress/getfacebypoint.sql \
-       regress/getringedges.sql
+       regress/getringedges.sql \
+       regress/layertrigger.sql
 
 check: topo_predicates.sql load_topology.sql load_topology-4326.sql
        $(MAKE) -C ../../regress postgis.sql staged-install
diff --git a/topology/test/regress/layertrigger.sql b/topology/test/regress/layertrigger.sql
new file mode 100644 (file)
index 0000000..b283e4c
--- /dev/null
@@ -0,0 +1,56 @@
+\set VERBOSITY terse
+set client_min_messages to ERROR;
+
+select topology.DropTopology('t2');
+select topology.DropTopology('t1');
+
+select 'seq_reset', setval('topology.topology_id_seq', 1, false);
+select 't1', 'topology_id:' || topology.CreateTopology('t1');
+insert into t1.node(geom, containing_face) values ('POINT( 0 0)', 0);
+create table t1.l1 (id serial);
+select 't1.l1',topology.AddTopoGeometryColumn('t1', 't1', 'l1', 'g', 'POINT');
+insert INTO t1.l1(g) VALUES (topology.CreateTopoGeom('t1', 1, 1, '{{1,1}}'));
+
+select 't1.rel',* from t1.relation;
+
+select 't2', 'topology_id:' || topology.CreateTopology('t2');
+
+insert into t2.node(geom, containing_face) values ('POINT( 0 0)', 0);
+insert into t2.node(geom, containing_face) values ('POINT( 1 1)', 0);
+
+create table t2.l1 (id serial);
+
+select 't2.l1', topology.AddTopoGeometryColumn('t2', 't2', 'l1', 'g', 'POINT');
+
+insert into t2.l1(g) VALUES (topology.CreateTopoGeom('t2', 1, 1, '{{1,1}}'));
+--insert into t2.l1(g) VALUES (topology.CreateTopoGeom('t2', 1, 1, '{{2,1}}'));
+
+select 't2.rel',* from t2.relation;
+
+--always the trigger must reject an update
+update topology.layer set topology_id = 123;
+select 'after update: topology.layer ',* from topology.layer;
+
+-- the trigger must reject the delete because some referenced features still exists
+BEGIN;
+  delete from t1.relation;
+  delete from t2.relation;
+  delete from topology.layer;
+  select 'after delete n.1: topology.layer ',topology_id,layer_id from topology.layer;
+ROLLBACK;
+
+-- the trigger must reject because the t2.relation is not empty.
+BEGIN;
+  delete from t2.l1;
+  delete from topology.layer where topology_id=2;
+  select 'after delete n.2: topology.layer ',topology_id,layer_id from topology.layer;
+ROLLBACK;
+
+-- the trigger must accept the delete 
+delete from t2.l1;
+delete from t2.relation;
+delete from topology.layer where topology_id=2;
+select 'after delete n.3: topology.layer ',topology_id,layer_id from topology.layer;
+
+select topology.DropTopology('t2');
+select topology.DropTopology('t1');
diff --git a/topology/test/regress/layertrigger_expected b/topology/test/regress/layertrigger_expected
new file mode 100644 (file)
index 0000000..bd955cd
--- /dev/null
@@ -0,0 +1,23 @@
+Topology 't2' dropped
+Topology 't1' dropped
+seq_reset|1
+t1|topology_id:1
+t1.l1|1
+t1.rel|1|1|1|1
+t2|topology_id:2
+t2.l1|1
+t2.rel|1|1|1|1
+ERROR:  The topology.layer table cannot be updated
+after update: topology.layer |1|1|t1|l1|g|1|0|
+after update: topology.layer |2|1|t2|l1|g|1|0|
+BEGIN
+after delete n.1: topology.layer |1|1
+after delete n.1: topology.layer |2|1
+COMMIT
+BEGIN
+after delete n.2: topology.layer |1|1
+after delete n.2: topology.layer |2|1
+COMMIT
+after delete n.3: topology.layer |1|1
+Topology 't2' dropped
+Topology 't1' dropped
index 4d2563dba5ccc2e83c4a7be0bc26c432df0297a2..d7ca21c491260d08830fa15ddb345dc170f23923 100644 (file)
@@ -278,8 +278,7 @@ BEGIN
                query = 'SELECT * '
                        || ' FROM ' || quote_ident(toponame)
                        || '.relation '
-                       || ' WHERE topogeo_id = ' || OLD.topology_id 
-                       || ' AND layer_id = '|| OLD.layer_id
+                       || ' WHERE layer_id = '|| OLD.layer_id
                        || ' LIMIT 1';
                --RAISE NOTICE '%', query;
                FOR rec IN EXECUTE query