]> granicus.if.org Git - postgis/commitdiff
Fix a bug in topology.CreateTopoGeom in presence of MixCased topologies [RT-SIGTA]
authorSandro Santilli <strk@keybit.net>
Fri, 4 Feb 2011 17:19:16 +0000 (17:19 +0000)
committerSandro Santilli <strk@keybit.net>
Fri, 4 Feb 2011 17:19:16 +0000 (17:19 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@6776 b70326c6-7e19-0410-871a-916f4a2858ee

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

index f7d3fe5ea964e0c54ecba508504faf08ea05b80f..0733e74d8141f83c5bd9ec5cd344fd10d1a77122 100644 (file)
@@ -30,6 +30,7 @@ TESTS = regress/legacy_validate.sql regress/legacy_predicate.sql \
        regress/topoelement.sql \
        regress/topoelementarray_agg.sql \
        regress/droptopology.sql \
+       regress/createtopogeom.sql \
        regress/gml.sql
 
 check: topo_predicates.sql load_topology.sql load_topology-4326.sql
diff --git a/topology/test/regress/createtopogeom.sql b/topology/test/regress/createtopogeom.sql
new file mode 100644 (file)
index 0000000..5189381
--- /dev/null
@@ -0,0 +1,30 @@
+set client_min_messages to WARNING;
+
+SELECT topology.CreateTopology('MiX') > 0;
+
+-- Fails due to missing layer 1
+SELECT topology.CreateTopoGeom(
+    'MiX', -- Topology name
+    3, -- Topology geometry type (polygon/multipolygon)
+    1, -- TG_LAYER_ID for this topology (from topology.layer)
+    '{{3,3},{6,3}}'); -- face_id:3 face_id:6
+
+CREATE TABLE "MiX".poi (id int);
+SELECT topology.AddTopoGeometryColumn('MiX', 'MiX', 'poi', 'feat', 'POINT');
+
+-- A Layer of type 1 (POINT) cannot contain a TopoGeometry of type 2 (LINE)
+SELECT topology.CreateTopoGeom( 'MiX', 2, 1, '{{12,2}}'); 
+-- A Layer of type 1 (POINT) cannot contain a TopoGeometry of type 3 (POLY)
+SELECT topology.CreateTopoGeom( 'MiX', 3, 1, '{{13,3}}'); 
+-- A Layer of type 1 (POINT) cannot contain a TopoGeometry of type 4 (COLL.)
+SELECT topology.CreateTopoGeom( 'MiX', 4, 1, '{{12,2}}'); 
+
+-- Node 78 does not exist in topology MiX (trigger on "relation" table)
+SELECT topology.CreateTopoGeom( 'MiX', 1, 1, '{{78,1}}'); 
+
+SELECT 'n1',  topology.addNode('MiX', 'POINT(0 0)');
+
+-- Success !
+SELECT topology.CreateTopoGeom( 'MiX', 1, 1, '{{1,1}}'); 
+
+SELECT topology.DropTopology('MiX');
diff --git a/topology/test/regress/createtopogeom_expected b/topology/test/regress/createtopogeom_expected
new file mode 100644 (file)
index 0000000..c6811be
--- /dev/null
@@ -0,0 +1,11 @@
+t
+ERROR:  No layer with id 1 is registered with topology MiX
+1
+ERROR:  A Layer of type 1 cannot contain a TopoGeometry of type 2
+ERROR:  A Layer of type 1 cannot contain a TopoGeometry of type 3
+ERROR:  A Layer of type 1 cannot contain a TopoGeometry of type 4
+ERROR:  Node 78 does not exist in topology MiX
+PL/pgSQL function "createtopogeom" line 91 at EXECUTE statement
+n1|1
+(15,1,2,1)
+Topology 'MiX' dropped
index 4b5d6537cfdd8b1ed2810e37a61546ef0d7bbea2..b8ce05ccc7c3a264bce934c94ecb74c755217fd9 100644 (file)
@@ -883,8 +883,10 @@ BEGIN
        --
        -- Get new TopoGeo id from sequence
        --
-       FOR rec IN EXECUTE ''SELECT nextval('''''' ||
-               toponame || ''.topogeo_s_'' || layer_id || '''''')''
+       FOR rec IN EXECUTE ''SELECT nextval('' ||
+               quote_literal(
+                       quote_ident(toponame) || ''.topogeo_s_'' || layer_id
+               ) || '')''
        LOOP
                ret.id = rec.nextval;
        END LOOP;