]> granicus.if.org Git - postgis/commitdiff
Return typed empties from lwcollection_extract
authorSandro Santilli <strk@keybit.net>
Mon, 9 Jan 2012 16:20:13 +0000 (16:20 +0000)
committerSandro Santilli <strk@keybit.net>
Mon, 9 Jan 2012 16:20:13 +0000 (16:20 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@8717 b70326c6-7e19-0410-871a-916f4a2858ee

liblwgeom/cunit/cu_libgeom.c
liblwgeom/lwcollection.c

index 27f134713f9625c435fee58ce91215822faed6f4..50bd27e167744aa3dac11dd44596d7df47cd783e 100644 (file)
@@ -359,15 +359,36 @@ static void test_lwcollection_extract(void)
        LWCOLLECTION *col;
 
        geom = lwgeom_from_wkt("GEOMETRYCOLLECTION(POINT(0 0))", LW_PARSER_CHECK_NONE);
+
        col = lwcollection_extract((LWCOLLECTION*)geom, 1);
        CU_ASSERT_EQUAL(col->type, MULTIPOINTTYPE);
+       lwcollection_free(col);
+
+       col = lwcollection_extract((LWCOLLECTION*)geom, 2);
+       CU_ASSERT_EQUAL(col->type, MULTILINETYPE);
+       lwcollection_free(col);
 
-       /* How to properly release 'col' ? 
-        * See http://http://trac.osgeo.org/postgis/ticket/1102
-        */
+       col = lwcollection_extract((LWCOLLECTION*)geom, 3);
+       CU_ASSERT_EQUAL(col->type, MULTIPOLYGONTYPE);
        lwcollection_free(col);
+
        lwgeom_free(geom);
 
+       geom = lwgeom_from_wkt("GEOMETRYCOLLECTION EMPTY", LW_PARSER_CHECK_NONE);
+
+       col = lwcollection_extract((LWCOLLECTION*)geom, 1);
+       CU_ASSERT_EQUAL(col->type, MULTIPOINTTYPE);
+       lwcollection_free(col);
+
+       col = lwcollection_extract((LWCOLLECTION*)geom, 2);
+       CU_ASSERT_EQUAL(col->type, MULTILINETYPE);
+       lwcollection_free(col);
+
+       col = lwcollection_extract((LWCOLLECTION*)geom, 3);
+       CU_ASSERT_EQUAL(col->type, MULTIPOLYGONTYPE);
+       lwcollection_free(col);
+
+       lwgeom_free(geom);
 }
 
 static void test_lwgeom_free(void)
index 494dd350f87fc47d8586b00a89f867cdc45e775c..f451f5aae7eed1a9f64f024ff57240bd6e12f14e 100644 (file)
@@ -406,7 +406,8 @@ LWCOLLECTION* lwcollection_extract(LWCOLLECTION *col, int type)
        }
        else
        {
-               outcol = lwcollection_construct_empty(COLLECTIONTYPE, col->srid, FLAGS_GET_Z(col->flags), FLAGS_GET_M(col->flags));
+               lwfree(geomlist);
+               outcol = lwcollection_construct_empty(outtype, col->srid, FLAGS_GET_Z(col->flags), FLAGS_GET_M(col->flags));
        }
 
        return outcol;