]> granicus.if.org Git - postgis/commitdiff
Fix handling of hierarchical topo layers with multiple topologies
authorSandro Santilli <strk@keybit.net>
Thu, 26 Nov 2015 09:08:10 +0000 (09:08 +0000)
committerSandro Santilli <strk@keybit.net>
Thu, 26 Nov 2015 09:08:10 +0000 (09:08 +0000)
Different layers with same id in different topologies confused
GetTopoGeomElements and AddTopoGeometryColumn.

See #3378

git-svn-id: http://svn.osgeo.org/postgis/trunk@14433 b70326c6-7e19-0410-871a-916f4a2858ee

topology/topology.sql.in

index 07026692466a9d4a86c60a891cdda974b50ed174..62e15d6f5a7d3af84c157f7b9edd3df839bd0ffe 100644 (file)
@@ -595,6 +595,7 @@ BEGIN
   IF child IS NOT NULL THEN
     SELECT level + 1 FROM topology.layer
       WHERE layer_id = child
+        AND topology_id = topoid
       INTO newlevel;
     IF newlevel IS NULL THEN
       RAISE EXCEPTION 'Child layer % does not exist in topology "%"', child, toponame;
@@ -1152,13 +1153,21 @@ DECLARE
   query2 text;
   lyr RECORD;
   ok bool;
+  topoid INTEGER;
 BEGIN
 
+  -- Get topology id
+  SELECT id INTO topoid
+    FROM topology.topology WHERE name = toponame;
+  IF NOT FOUND THEN
+    RAISE EXCEPTION 'Topology % does not exist', quote_literal(toponame);
+  END IF;
+
   -- Get layer info
   ok = false;
-  FOR rec IN EXECUTE 'SELECT * FROM '
-       ' topology.layer '
-       ' WHERE layer_id = ' || layerid
+  FOR rec IN EXECUTE 'SELECT * FROM topology.layer '
+       ' WHERE layer_id = $1 AND topology_id = $2'
+       USING layerid, topoid
   LOOP
     lyr = rec;
     ok = true;