From 59eb1b009d90f517b066c756e085d6ea05292197 Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Thu, 29 Dec 2011 18:13:07 +0000 Subject: [PATCH] Retain type of TopoGeometry objects defined by NO element (#1017) Includes regression tests for conversion of typed empty objects from simple to topological model. git-svn-id: http://svn.osgeo.org/postgis/trunk@8614 b70326c6-7e19-0410-871a-916f4a2858ee --- topology/test/regress/createtopogeom.sql | 7 +++++++ topology/test/regress/createtopogeom_expected | 4 ++++ topology/topology.sql.in.c | 9 +++++++++ 3 files changed, 20 insertions(+) diff --git a/topology/test/regress/createtopogeom.sql b/topology/test/regress/createtopogeom.sql index 0d8157301..29eb6b842 100644 --- a/topology/test/regress/createtopogeom.sql +++ b/topology/test/regress/createtopogeom.sql @@ -60,4 +60,11 @@ SELECT 'ML', ST_AsText(CreateTopoGeom( 'MiX', 2, 4, '{{1,2}}')); -- fine line SELECT 'MA', ST_AsText(CreateTopoGeom( 'MiX', 3, 4, '{{1,3}}')); -- fine area SELECT 'MM', ST_AsText(CreateTopoGeom( 'MiX', 4, 4, '{{1,3},{1,2},{1,1}}')); -- fine mix +-- Test emptyness { +SELECT 'POINT EMPTY', ST_AsEWKT( CreateTopoGeom( 'MiX', 1, 4, '{{0,0}}' ) ); +SELECT 'LINESTRING EMPTY', ST_AsEWKT( CreateTopoGeom( 'MiX', 2, 4, '{{0,0}}' ) ); +SELECT 'POLYGON EMPTY', ST_AsEWKT( CreateTopoGeom( 'MiX', 3, 4, '{{0,0}}' ) ); +SELECT 'GEOMETRYCOLLECTION EMPTY', ST_AsEWKT( CreateTopoGeom( 'MiX', 4, 4, '{{0,0}}' ) ); +-- } Test emptyness + SELECT DropTopology('MiX'); diff --git a/topology/test/regress/createtopogeom_expected b/topology/test/regress/createtopogeom_expected index 7e5a6b3c5..b422a5438 100644 --- a/topology/test/regress/createtopogeom_expected +++ b/topology/test/regress/createtopogeom_expected @@ -25,4 +25,8 @@ MP|POINT(0 0) ML|LINESTRING(0 0,10 0) MA|POLYGON((10 0,0 0,5 5,10 0)) MM|GEOMETRYCOLLECTION EMPTY +POINT EMPTY|POINT EMPTY +LINESTRING EMPTY|LINESTRING EMPTY +POLYGON EMPTY|POLYGON EMPTY +GEOMETRYCOLLECTION EMPTY|GEOMETRYCOLLECTION EMPTY Topology 'MiX' dropped diff --git a/topology/topology.sql.in.c b/topology/topology.sql.in.c index 8c678cff2..f26d6be99 100644 --- a/topology/topology.sql.in.c +++ b/topology/topology.sql.in.c @@ -1239,6 +1239,9 @@ BEGIN LOOP geom := rec.g; END LOOP; + IF geom IS NULL THEN + geom := 'POLYGON EMPTY'; + END IF; ELSIF topogeom.type = 2 THEN -- [multi]line FOR rec IN EXECUTE 'SELECT ST_LineMerge(ST_Collect(e.geom)) as g FROM ' @@ -1251,6 +1254,9 @@ BEGIN LOOP geom := rec.g; END LOOP; + IF geom IS NULL THEN + geom := 'LINESTRING EMPTY'; + END IF; ELSIF topogeom.type = 1 THEN -- [multi]point FOR rec IN EXECUTE 'SELECT st_union(n.geom) as g FROM ' @@ -1263,6 +1269,9 @@ BEGIN LOOP geom := rec.g; END LOOP; + IF geom IS NULL THEN + geom := 'POINT EMPTY'; + END IF; ELSE RAISE NOTICE 'Geometry from TopoGeometry does not support TopoGeometries of type % so far', topogeom.type; -- 2.40.0