]> granicus.if.org Git - postgis/commitdiff
Add tests for higher coordinate dimensions (#1455)
authorSandro Santilli <strk@keybit.net>
Thu, 12 Jan 2012 11:20:59 +0000 (11:20 +0000)
committerSandro Santilli <strk@keybit.net>
Thu, 12 Jan 2012 11:20:59 +0000 (11:20 +0000)
GEOMETRYCOLLECTION still fails

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

regress/wkt.sql
regress/wkt_expected

index 0a86103f8b68d730a89ea207bdf0cd51441c2d29..151459b1620c3beec65dc38355aae5450bff2e38 100644 (file)
+-- POINT --
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'POINT EMPTY'
 ::text as g ) as foo;
+
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'POINT(EMPTY)'
 ::text as g ) as foo;
+
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'POINT(0 0)'
 ::text as g ) as foo;
+
+SELECT g,
+      ST_AsText(g::geometry),
+      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
+'POINT Z (0 0 0)'
+::text as g ) as foo;
+
+SELECT g,
+      ST_AsText(g::geometry),
+      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
+'POINT M (0 0 0)'
+::text as g ) as foo;
+
+SELECT g,
+      ST_AsText(g::geometry),
+      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
+'POINT ZM (0 0 0 0)'
+::text as g ) as foo;
+
+SELECT g,
+      ST_AsText(g::geometry),
+      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
+'POINT ZM (0 0 0)' -- broken, misses an ordinate value
+::text as g ) as foo;
+
+
+
+
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'POINT((0 0))'
 ::text as g ) as foo;
 
+
+
+-- MULTIPOINT --
+
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'MULTIPOINT EMPTY'
 ::text as g ) as foo;
+
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'MULTIPOINT(EMPTY)'
 ::text as g ) as foo;
+
 -- This is supported for backward compatibility
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'MULTIPOINT(0 0, 2 0)'
 ::text as g ) as foo;
+
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'MULTIPOINT((0 0), (2 0))'
 ::text as g ) as foo;
+
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'MULTIPOINT((0 0), (2 0), EMPTY)'
 ::text as g ) as foo;
 
+SELECT g,
+      ST_AsText(g::geometry),
+      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
+'MULTIPOINT Z ((0 0 0), (2 0 0))'
+::text as g ) as foo;
+
+SELECT g,
+      ST_AsText(g::geometry),
+      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
+'MULTIPOINT M ((0 0 0), (2 0 0))'
+::text as g ) as foo;
+
+SELECT g,
+      ST_AsText(g::geometry),
+      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
+'MULTIPOINT ZM ((0 0 0 0), (2 0 0 0))'
+::text as g ) as foo;
+
+
+-- LINESTRING --
+
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'LINESTRING EMPTY'
 ::text as g ) as foo;
+
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'LINESTRING(EMPTY)'
 ::text as g ) as foo;
+
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'LINESTRING(0 0, 1 1)'
 ::text as g ) as foo;
+
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'LINESTRING((0 0, 1 1))'
 ::text as g ) as foo;
+
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'LINESTRING((0 0), (1 1))'
 ::text as g ) as foo;
 
+SELECT g,
+      ST_AsText(g::geometry),
+      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
+'LINESTRING Z (0 0 0, 1 1 0)'
+::text as g ) as foo;
+
+SELECT g,
+      ST_AsText(g::geometry),
+      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
+'LINESTRING M (0 0 0, 1 1 0)'
+::text as g ) as foo;
+
+SELECT g,
+      ST_AsText(g::geometry),
+      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
+'LINESTRING ZM (0 0 0 0, 1 1 0 0)'
+::text as g ) as foo;
+
+
+-- MULTILINESTRING --
+
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'MULTILINESTRING EMPTY'
 ::text as g ) as foo;
+
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'MULTILINESTRING(EMPTY)'
 ::text as g ) as foo;
+
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'MULTILINESTRING(0 0, 2 0)'
 ::text as g ) as foo;
+
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'MULTILINESTRING((0 0, 2 0))'
 ::text as g ) as foo;
+
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'MULTILINESTRING((0 0, 2 0), (1 1, 2 2))'
 ::text as g ) as foo;
+
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'MULTILINESTRING((0 0, 2 0), (1 1, 2 2), EMPTY)'
 ::text as g ) as foo;
+
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'MULTILINESTRING((0 0, 2 0), (1 1, 2 2), (EMPTY))'
 ::text as g ) as foo;
 
+SELECT g,
+      ST_AsText(g::geometry),
+      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
+'MULTILINESTRING Z ((0 0 0, 2 0 0), (1 1 0, 2 2 0))'
+::text as g ) as foo;
+
+SELECT g,
+      ST_AsText(g::geometry),
+      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
+'MULTILINESTRING M ((0 0 0, 2 0 0), (1 1 0, 2 2 0))'
+::text as g ) as foo;
+
+SELECT g,
+      ST_AsText(g::geometry),
+      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
+'MULTILINESTRING ZM ((0 0 0 0, 2 0 0 0), (1 1 0 0, 2 2 0 0))'
+::text as g ) as foo;
+
+
+-- POLYGON --
+
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'POLYGON EMPTY'
 ::text as g ) as foo;
+
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'POLYGON(EMPTY)'
 ::text as g ) as foo;
+
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'POLYGON((0 0,1 0,1 1,0 1,0 0))'
 ::text as g ) as foo;
+
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'POLYGON((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2))'
 ::text as g ) as foo;
 
+SELECT g,
+      ST_AsText(g::geometry),
+      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
+'POLYGON Z ((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(2 2 0,2 5 0,5 5 0,5 2 0,2 2 0))'
+::text as g ) as foo;
+
+SELECT g,
+      ST_AsText(g::geometry),
+      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
+'POLYGON M ((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(2 2 0,2 5 0,5 5 0,5 2 0,2 2 0))'
+::text as g ) as foo;
+
+SELECT g,
+      ST_AsText(g::geometry),
+      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
+'POLYGON ZM ((0 0 0 2,10 0 0 2,10 10 0 2,0 10 0 2,0 0 0 2),(2 2 0 2,2 5 0 2,5 5 0 2,5 2 0 2,2 2 0 2))'
+::text as g ) as foo;
+
+
+
+-- MULTIPOLYGON --
+
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'MULTIPOLYGON EMPTY'
 ::text as g ) as foo;
+
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'MULTIPOLYGON(EMPTY)'
 ::text as g ) as foo;
+
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'MULTIPOLYGON((EMPTY))'
 ::text as g ) as foo;
+
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2)))'
 ::text as g ) as foo;
 
+SELECT g,
+      ST_AsText(g::geometry),
+      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
+'MULTIPOLYGON Z (((0 0 2,10 0 2,10 10 2,0 10 2,0 0 2),(2 2 2,2 5 2,5 5 2,5 2 2,2 2 2)))'
+::text as g ) as foo;
+
+SELECT g,
+      ST_AsText(g::geometry),
+      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
+'MULTIPOLYGON M (((0 0 2,10 0 2,10 10 2,0 10 2,0 0 2),(2 2 2,2 5 2,5 5 2,5 2 2,2 2 2)))'
+::text as g ) as foo;
+
+SELECT g,
+      ST_AsText(g::geometry),
+      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
+'MULTIPOLYGON ZM (((0 0 2 5,10 0 2 5,10 10 2 5,0 10 2 5,0 0 2 5),(2 2 2 5,2 5 2 5,5 5 2 5,5 2 2 5,2 2 2 5)))'
+::text as g ) as foo;
+
+
+-- GEOMETRYCOLLECTION --
+
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'GEOMETRYCOLLECTION EMPTY'
 ::text as g ) as foo;
+
 -- This is supported for backward compatibility
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'GEOMETRYCOLLECTION(EMPTY)'
 ::text as g ) as foo;
+
 SELECT g,
       ST_AsText(g::geometry),
       ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
 'GEOMETRYCOLLECTION((EMPTY))'
 ::text as g ) as foo;
+
+SELECT g,
+      ST_AsText(g::geometry),
+      ST_OrderingEquals(g::geometry, St_GeomFromText(ST_AsText(g::geometry))) FROM ( SELECT
+'GEOMETRYCOLLECTION(MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2))),POINT(0 0),MULTILINESTRING((0 0, 2 0),(1 1, 2 2)))'
+::text as g ) as foo;
+
index a0f0affe56334074a5ac21ec76169e98ed26ed12..fc7755737c426a1ee2ad8224225108f9e05e2690 100644 (file)
@@ -2,6 +2,11 @@ POINT EMPTY|POINT EMPTY|t
 ERROR:  parse error - invalid geometry
 HINT:  "POINT(EMPTY" <-- parse error at position 11 within geometry
 POINT(0 0)|POINT(0 0)|t
+POINT Z (0 0 0)|POINT Z (0 0 0)|t
+POINT M (0 0 0)|POINT M (0 0 0)|t
+POINT ZM (0 0 0 0)|POINT ZM (0 0 0 0)|t
+ERROR:  can not mix dimensionality in a geometry
+HINT:  "POINT ZM (0 0 0)" <-- parse error at position 16 within geometry
 ERROR:  parse error - invalid geometry
 HINT:  "POINT((" <-- parse error at position 7 within geometry
 MULTIPOINT EMPTY|MULTIPOINT EMPTY|t
@@ -11,6 +16,9 @@ MULTIPOINT(0 0, 2 0)|MULTIPOINT(0 0,2 0)|t
 MULTIPOINT((0 0), (2 0))|MULTIPOINT(0 0,2 0)|t
 ERROR:  parse error - invalid geometry
 HINT:  "MULTIPOINT((0 0), (2 0), EMPTY" <-- parse error at position 30 within geometry
+MULTIPOINT Z ((0 0 0), (2 0 0))|MULTIPOINT Z (0 0 0,2 0 0)|t
+MULTIPOINT M ((0 0 0), (2 0 0))|MULTIPOINT M (0 0 0,2 0 0)|t
+MULTIPOINT ZM ((0 0 0 0), (2 0 0 0))|MULTIPOINT ZM (0 0 0 0,2 0 0 0)|t
 LINESTRING EMPTY|LINESTRING EMPTY|t
 ERROR:  parse error - invalid geometry
 HINT:  "LINESTRING(EMPTY" <-- parse error at position 16 within geometry
@@ -19,6 +27,9 @@ ERROR:  parse error - invalid geometry
 HINT:  "LINESTRING((" <-- parse error at position 12 within geometry
 ERROR:  parse error - invalid geometry
 HINT:  "LINESTRING((" <-- parse error at position 12 within geometry
+LINESTRING Z (0 0 0, 1 1 0)|LINESTRING Z (0 0 0,1 1 0)|t
+LINESTRING M (0 0 0, 1 1 0)|LINESTRING M (0 0 0,1 1 0)|t
+LINESTRING ZM (0 0 0 0, 1 1 0 0)|LINESTRING ZM (0 0 0 0,1 1 0 0)|t
 MULTILINESTRING EMPTY|MULTILINESTRING EMPTY|t
 ERROR:  parse error - invalid geometry
 HINT:  "MULTILINESTRING(EMPTY" <-- parse error at position 21 within geometry
@@ -30,19 +41,29 @@ ERROR:  parse error - invalid geometry
 HINT:  "...ESTRING((0 0, 2 0), (1 1, 2 2), EMPTY" <-- parse error at position 45 within geometry
 ERROR:  parse error - invalid geometry
 HINT:  "...STRING((0 0, 2 0), (1 1, 2 2), (EMPTY" <-- parse error at position 46 within geometry
+MULTILINESTRING Z ((0 0 0, 2 0 0), (1 1 0, 2 2 0))|MULTILINESTRING Z ((0 0 0,2 0 0),(1 1 0,2 2 0))|t
+MULTILINESTRING M ((0 0 0, 2 0 0), (1 1 0, 2 2 0))|MULTILINESTRING M ((0 0 0,2 0 0),(1 1 0,2 2 0))|t
+MULTILINESTRING ZM ((0 0 0 0, 2 0 0 0), (1 1 0 0, 2 2 0 0))|MULTILINESTRING ZM ((0 0 0 0,2 0 0 0),(1 1 0 0,2 2 0 0))|t
 POLYGON EMPTY|POLYGON EMPTY|t
 ERROR:  parse error - invalid geometry
 HINT:  "POLYGON(EMPTY" <-- parse error at position 13 within geometry
 POLYGON((0 0,1 0,1 1,0 1,0 0))|POLYGON((0 0,1 0,1 1,0 1,0 0))|t
 POLYGON((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2))|POLYGON((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2))|t
+POLYGON Z ((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(2 2 0,2 5 0,5 5 0,5 2 0,2 2 0))|POLYGON Z ((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(2 2 0,2 5 0,5 5 0,5 2 0,2 2 0))|t
+POLYGON M ((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(2 2 0,2 5 0,5 5 0,5 2 0,2 2 0))|POLYGON M ((0 0 0,10 0 0,10 10 0,0 10 0,0 0 0),(2 2 0,2 5 0,5 5 0,5 2 0,2 2 0))|t
+POLYGON ZM ((0 0 0 2,10 0 0 2,10 10 0 2,0 10 0 2,0 0 0 2),(2 2 0 2,2 5 0 2,5 5 0 2,5 2 0 2,2 2 0 2))|POLYGON ZM ((0 0 0 2,10 0 0 2,10 10 0 2,0 10 0 2,0 0 0 2),(2 2 0 2,2 5 0 2,5 5 0 2,5 2 0 2,2 2 0 2))|t
 MULTIPOLYGON EMPTY|MULTIPOLYGON EMPTY|t
 ERROR:  parse error - invalid geometry
 HINT:  "MULTIPOLYGON(EMPTY" <-- parse error at position 18 within geometry
 ERROR:  parse error - invalid geometry
 HINT:  "MULTIPOLYGON((EMPTY" <-- parse error at position 19 within geometry
 MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2)))|MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2)))|t
+MULTIPOLYGON Z (((0 0 2,10 0 2,10 10 2,0 10 2,0 0 2),(2 2 2,2 5 2,5 5 2,5 2 2,2 2 2)))|MULTIPOLYGON Z (((0 0 2,10 0 2,10 10 2,0 10 2,0 0 2),(2 2 2,2 5 2,5 5 2,5 2 2,2 2 2)))|t
+MULTIPOLYGON M (((0 0 2,10 0 2,10 10 2,0 10 2,0 0 2),(2 2 2,2 5 2,5 5 2,5 2 2,2 2 2)))|MULTIPOLYGON M (((0 0 2,10 0 2,10 10 2,0 10 2,0 0 2),(2 2 2,2 5 2,5 5 2,5 2 2,2 2 2)))|t
+MULTIPOLYGON ZM (((0 0 2 5,10 0 2 5,10 10 2 5,0 10 2 5,0 0 2 5),(2 2 2 5,2 5 2 5,5 5 2 5,5 2 2 5,2 2 2 5)))|MULTIPOLYGON ZM (((0 0 2 5,10 0 2 5,10 10 2 5,0 10 2 5,0 0 2 5),(2 2 2 5,2 5 2 5,5 5 2 5,5 2 2 5,2 2 2 5)))|t
 GEOMETRYCOLLECTION EMPTY|GEOMETRYCOLLECTION EMPTY|t
 ERROR:  parse error - invalid geometry
 HINT:  "GEOMETRYCOLLECTION(EMPTY" <-- parse error at position 24 within geometry
 ERROR:  parse error - invalid geometry
 HINT:  "GEOMETRYCOLLECTION((" <-- parse error at position 20 within geometry
+GEOMETRYCOLLECTION(MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2))),POINT(0 0),MULTILINESTRING((0 0, 2 0),(1 1, 2 2)))|GEOMETRYCOLLECTION(MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2))),POINT(0 0),MULTILINESTRING((0 0,2 0),(1 1,2 2)))|t