From a188a9045141b3a490a3b2b864394bdd61165517 Mon Sep 17 00:00:00 2001
From: unknown <ram@mysql.r18.ru>
Date: Sat, 1 Mar 2003 13:16:39 +0400
Subject: [PATCH] Test case for spatial objects.

---
 mysql-test/r/gis.result | 310 ++++++++++++++++++++++++++++++++++++++++
 mysql-test/t/gis.test   | 108 ++++++++++++++
 2 files changed, 418 insertions(+)
 create mode 100644 mysql-test/r/gis.result
 create mode 100644 mysql-test/t/gis.test

diff --git a/mysql-test/r/gis.result b/mysql-test/r/gis.result
new file mode 100644
index 00000000000..d3ec335aac6
--- /dev/null
+++ b/mysql-test/r/gis.result
@@ -0,0 +1,310 @@
+DROP TABLE IF EXISTS pt, ls, p, mpt, mls, mp, gc, geo;
+CREATE TABLE pt  (fid INTEGER NOT NULL PRIMARY KEY, g POINT);
+CREATE TABLE ls  (fid INTEGER NOT NULL PRIMARY KEY, g LINESTRING);
+CREATE TABLE p   (fid INTEGER NOT NULL PRIMARY KEY, g POLYGON);
+CREATE TABLE mpt (fid INTEGER NOT NULL PRIMARY KEY, g MULTIPOINT);
+CREATE TABLE mls (fid INTEGER NOT NULL PRIMARY KEY, g MULTILINESTRING);
+CREATE TABLE mp  (fid INTEGER NOT NULL PRIMARY KEY, g MULTIPOLYGON);
+CREATE TABLE gc  (fid INTEGER NOT NULL PRIMARY KEY, g GEOMETRYCOLLECTION);
+CREATE TABLE geo (fid INTEGER NOT NULL PRIMARY KEY, g GEOMETRY);
+INSERT INTO pt VALUES 
+(101, PointFromText('POINT(10 10)')),
+(102, PointFromText('POINT(20 10)')),
+(103, PointFromText('POINT(20 20)')),
+(104, PointFromText('POINT(10 20)'));
+INSERT INTO ls VALUES
+(105, LineFromText('LINESTRING(0 0,0 10,10 0)')),
+(106, LineStringFromText('LINESTRING(10 10,20 10,20 20,10 20,10 10)')),
+(107, LineString(Point(10, 10), Point(40, 10)));
+INSERT INTO p VALUES
+(108, PolygonFromText('POLYGON((10 10,20 10,20 20,10 20,10 10))')),
+(109, PolyFromText('POLYGON((0 0,50 0,50 50,0 50,0 0), (10 10,20 10,20 20,10 20,10 10))')),
+(110, Polygon(LineString(Point(0, 0), Point(30, 0), Point(30, 30), Point(0, 0))));
+INSERT INTO mpt VALUES
+(111, MultiPointFromText('MULTIPOINT(0 0,10 10,10 20,20 20)')),
+(112, MPointFromText('MULTIPOINT(1 1,11 11,11 21,21 21)')),
+(113, MultiPoint(Point(3, 6), Point(4, 10)));
+INSERT INTO mls VALUES
+(114, MultiLineStringFromText('MULTILINESTRING((10 48,10 21,10 0),(16 0,16 23,16 48))')),
+(115, MLineFromText('MULTILINESTRING((10 48,10 21,10 0))')),
+(116, MultiLineString(LineString(Point(1, 2), Point(3, 5)), LineString(Point(2, 5), Point(5, 8), Point(21, 7))));
+INSERT INTO mp VALUES
+(117, MultiPolygonFromText('MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))')),
+(118, MPolyFromText('MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))')),
+(119, MultiPolygon(Polygon(LineString(Point(0, 3), Point(3, 3), Point(3, 0), Point(0, 3)))));
+INSERT INTO gc VALUES
+(120, GeomCollFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))')),
+(121, GeometryCollection(Point(44, 6), LineString(Point(3, 6), Point(7, 9))));
+INSERT into geo SELECT * FROM pt;
+INSERT into geo SELECT * FROM ls;
+INSERT into geo SELECT * FROM p;
+INSERT into geo SELECT * FROM mpt;
+INSERT into geo SELECT * FROM mls;
+INSERT into geo SELECT * FROM mp;
+INSERT into geo SELECT * FROM gc;
+SELECT fid, AsText(g) FROM pt;
+fid	AsText(g)
+101	POINT(10 10)
+102	POINT(20 10)
+103	POINT(20 20)
+104	POINT(10 20)
+SELECT fid, AsText(g) FROM ls;
+fid	AsText(g)
+105	LINESTRING(0 0,0 10,10 0)
+106	LINESTRING(10 10,20 10,20 20,10 20,10 10)
+107	LINESTRING(10 10,40 10)
+SELECT fid, AsText(g) FROM p;
+fid	AsText(g)
+108	POLYGON((10 10,20 10,20 20,10 20,10 10))
+109	POLYGON((0 0,50 0,50 50,0 50,0 0),(10 10,20 10,20 20,10 20,10 10))
+110	POLYGON((0 0,30 0,30 30,0 0))
+SELECT fid, AsText(g) FROM mpt;
+fid	AsText(g)
+111	MULTIPOINT(0 0,10 10,10 20,20 20)
+112	MULTIPOINT(1 1,11 11,11 21,21 21)
+113	MULTIPOINT(3 6,4 10)
+SELECT fid, AsText(g) FROM mls;
+fid	AsText(g)
+114	MULTILINESTRING((10 48,10 21,10 0),(16 0,16 23,16 48))
+115	MULTILINESTRING((10 48,10 21,10 0))
+116	MULTILINESTRING((1 2,3 5),(2 5,5 8,21 7))
+SELECT fid, AsText(g) FROM mp;
+fid	AsText(g)
+117	MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))
+118	MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))
+119	MULTIPOLYGON(((0 3,3 3,3 0,0 3)))
+SELECT fid, AsText(g) FROM gc;
+fid	AsText(g)
+120	GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,10 10))
+121	GEOMETRYCOLLECTION(POINT(44 6),LINESTRING(3 6,7 9))
+SELECT fid, AsText(g) FROM geo;
+fid	AsText(g)
+101	POINT(10 10)
+102	POINT(20 10)
+103	POINT(20 20)
+104	POINT(10 20)
+105	LINESTRING(0 0,0 10,10 0)
+106	LINESTRING(10 10,20 10,20 20,10 20,10 10)
+107	LINESTRING(10 10,40 10)
+108	POLYGON((10 10,20 10,20 20,10 20,10 10))
+109	POLYGON((0 0,50 0,50 50,0 50,0 0),(10 10,20 10,20 20,10 20,10 10))
+110	POLYGON((0 0,30 0,30 30,0 0))
+111	MULTIPOINT(0 0,10 10,10 20,20 20)
+112	MULTIPOINT(1 1,11 11,11 21,21 21)
+113	MULTIPOINT(3 6,4 10)
+114	MULTILINESTRING((10 48,10 21,10 0),(16 0,16 23,16 48))
+115	MULTILINESTRING((10 48,10 21,10 0))
+116	MULTILINESTRING((1 2,3 5),(2 5,5 8,21 7))
+117	MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))
+118	MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))
+119	MULTIPOLYGON(((0 3,3 3,3 0,0 3)))
+120	GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,10 10))
+121	GEOMETRYCOLLECTION(POINT(44 6),LINESTRING(3 6,7 9))
+SELECT fid, Dimension(g) FROM geo;
+fid	Dimension(g)
+101	0
+102	0
+103	0
+104	0
+105	1
+106	1
+107	1
+108	2
+109	2
+110	2
+111	0
+112	0
+113	0
+114	1
+115	1
+116	1
+117	2
+118	2
+119	2
+120	1
+121	1
+SELECT fid, GeometryType(g) FROM geo;
+fid	GeometryType(g)
+101	POINT
+102	POINT
+103	POINT
+104	POINT
+105	LINESTRING
+106	LINESTRING
+107	LINESTRING
+108	POLYGON
+109	POLYGON
+110	POLYGON
+111	MULTIPOINT
+112	MULTIPOINT
+113	MULTIPOINT
+114	MULTILINESTRING
+115	MULTILINESTRING
+116	MULTILINESTRING
+117	MULTIPOLYGON
+118	MULTIPOLYGON
+119	MULTIPOLYGON
+120	GEOMETRYCOLLECTION
+121	GEOMETRYCOLLECTION
+SELECT fid, IsEmpty(g) FROM geo;
+fid	IsEmpty(g)
+101	0
+102	0
+103	0
+104	0
+105	0
+106	0
+107	0
+108	0
+109	0
+110	0
+111	0
+112	0
+113	0
+114	0
+115	0
+116	0
+117	0
+118	0
+119	0
+120	0
+121	0
+SELECT fid, AsText(Envelope(g)) FROM geo;
+fid	AsText(Envelope(g))
+101	POLYGON((10 10,10 10,10 10,10 10,10 10))
+102	POLYGON((20 10,20 10,20 10,20 10,20 10))
+103	POLYGON((20 20,20 20,20 20,20 20,20 20))
+104	POLYGON((10 20,10 20,10 20,10 20,10 20))
+105	POLYGON((0 0,10 0,10 10,0 10,0 0))
+106	POLYGON((10 10,20 10,20 20,10 20,10 10))
+107	POLYGON((10 10,40 10,40 10,10 10,10 10))
+108	POLYGON((10 10,20 10,20 20,10 20,10 10))
+109	POLYGON((0 0,50 0,50 50,0 50,0 0))
+110	POLYGON((0 0,30 0,30 30,0 30,0 0))
+111	POLYGON((0 0,20 0,20 20,0 20,0 0))
+112	POLYGON((1 1,21 1,21 21,1 21,1 1))
+113	POLYGON((3 6,4 6,4 10,3 10,3 6))
+114	POLYGON((10 0,16 0,16 48,10 48,10 0))
+115	POLYGON((10 0,10 0,10 48,10 48,10 0))
+116	POLYGON((1 2,21 2,21 8,1 8,1 2))
+117	POLYGON((28 0,84 0,84 42,28 42,28 0))
+118	POLYGON((28 0,84 0,84 42,28 42,28 0))
+119	POLYGON((0 0,3 0,3 3,0 3,0 0))
+120	POLYGON((0 0,10 0,10 10,0 10,0 0))
+121	POLYGON((3 6,44 6,44 9,3 9,3 6))
+SELECT fid, X(g) FROM pt;
+fid	X(g)
+101	10
+102	20
+103	20
+104	10
+SELECT fid, Y(g) FROM pt;
+fid	Y(g)
+101	10
+102	10
+103	20
+104	20
+SELECT fid, AsText(StartPoint(g)) FROM ls;
+fid	AsText(StartPoint(g))
+105	POINT(0 0)
+106	POINT(10 10)
+107	POINT(10 10)
+SELECT fid, AsText(EndPoint(g)) FROM ls;
+fid	AsText(EndPoint(g))
+105	POINT(10 0)
+106	POINT(10 10)
+107	POINT(40 10)
+SELECT fid, GLength(g) FROM ls;
+fid	GLength(g)
+105	24.142135623731
+106	40
+107	30
+SELECT fid, NumPoints(g) FROM ls;
+fid	NumPoints(g)
+105	3
+106	5
+107	2
+SELECT fid, AsText(PointN(g, 2)) FROM ls;
+fid	AsText(PointN(g, 2))
+105	POINT(0 10)
+106	POINT(20 10)
+107	POINT(40 10)
+SELECT fid, IsClosed(g) FROM ls;
+fid	IsClosed(g)
+105	0
+106	1
+107	0
+SELECT fid, AsText(Centroid(g)) FROM p;
+fid	AsText(Centroid(g))
+108	POINT(15 15)
+109	POINT(25.416666666667 25.416666666667)
+110	POINT(20 10)
+SELECT fid, Area(g) FROM p;
+fid	Area(g)
+108	100
+109	2400
+110	450
+SELECT fid, AsText(ExteriorRing(g)) FROM p;
+fid	AsText(ExteriorRing(g))
+108	LINESTRING(10 10,20 10,20 20,10 20,10 10)
+109	LINESTRING(0 0,50 0,50 50,0 50,0 0)
+110	LINESTRING(0 0,30 0,30 30,0 0)
+SELECT fid, NumInteriorRings(g) FROM p;
+fid	NumInteriorRings(g)
+108	0
+109	1
+110	0
+SELECT fid, AsText(InteriorRingN(g, 1)) FROM p;
+fid	AsText(InteriorRingN(g, 1))
+108	NULL
+109	LINESTRING(10 10,20 10,20 20,10 20,10 10)
+110	NULL
+SELECT fid, NumGeometries(g) from mpt;
+fid	NumGeometries(g)
+111	4
+112	4
+113	2
+SELECT fid, NumGeometries(g) from mls;
+fid	NumGeometries(g)
+114	2
+115	1
+116	2
+SELECT fid, NumGeometries(g) from mp;
+fid	NumGeometries(g)
+117	2
+118	2
+119	1
+SELECT fid, NumGeometries(g) from gc;
+fid	NumGeometries(g)
+120	2
+121	2
+SELECT fid, AsText(GeometryN(g, 2)) from mpt;
+fid	AsText(GeometryN(g, 2))
+111	POINT(10 10)
+112	POINT(11 11)
+113	POINT(4 10)
+SELECT fid, AsText(GeometryN(g, 2)) from mls;
+fid	AsText(GeometryN(g, 2))
+114	LINESTRING(16 0,16 23,16 48)
+115	NULL
+116	LINESTRING(2 5,5 8,21 7)
+SELECT fid, AsText(GeometryN(g, 2)) from mp;
+fid	AsText(GeometryN(g, 2))
+117	POLYGON((59 18,67 18,67 13,59 13,59 18))
+118	POLYGON((59 18,67 18,67 13,59 13,59 18))
+119	NULL
+SELECT fid, AsText(GeometryN(g, 2)) from gc;
+fid	AsText(GeometryN(g, 2))
+120	LINESTRING(0 0,10 10)
+121	LINESTRING(3 6,7 9)
+SELECT g1.fid as first, g2.fid as second,
+Within(g1.g, g2.g) as w, Contains(g1.g, g2.g) as c, Overlaps(g1.g, g2.g) as o,
+Equals(g1.g, g2.g) as e, Disjoint(g1.g, g2.g) as d, Touches(g1.g, g2.g) as t,
+Intersects(g1.g, g2.g) as i, Crosses(g1.g, g2.g) as r
+FROM gc g1, gc g2 ORDER BY first, second;
+first	second	w	c	o	e	d	t	i	r
+120	120	1	1	0	1	0	0	1	0
+120	121	0	0	0	0	0	0	1	0
+121	120	0	0	1	0	0	0	1	0
+121	121	1	1	0	1	0	0	1	0
+DROP TABLE pt, ls, p, mpt, mls, mp, gc, geo;
diff --git a/mysql-test/t/gis.test b/mysql-test/t/gis.test
new file mode 100644
index 00000000000..128d369b0b6
--- /dev/null
+++ b/mysql-test/t/gis.test
@@ -0,0 +1,108 @@
+#
+# Spatial objects
+#
+
+--disable_warnings
+DROP TABLE IF EXISTS pt, ls, p, mpt, mls, mp, gc, geo;
+--enable_warnings
+
+CREATE TABLE pt  (fid INTEGER NOT NULL PRIMARY KEY, g POINT);
+CREATE TABLE ls  (fid INTEGER NOT NULL PRIMARY KEY, g LINESTRING);
+CREATE TABLE p   (fid INTEGER NOT NULL PRIMARY KEY, g POLYGON);
+CREATE TABLE mpt (fid INTEGER NOT NULL PRIMARY KEY, g MULTIPOINT);
+CREATE TABLE mls (fid INTEGER NOT NULL PRIMARY KEY, g MULTILINESTRING);
+CREATE TABLE mp  (fid INTEGER NOT NULL PRIMARY KEY, g MULTIPOLYGON);
+CREATE TABLE gc  (fid INTEGER NOT NULL PRIMARY KEY, g GEOMETRYCOLLECTION);
+CREATE TABLE geo (fid INTEGER NOT NULL PRIMARY KEY, g GEOMETRY);
+
+INSERT INTO pt VALUES 
+(101, PointFromText('POINT(10 10)')),
+(102, PointFromText('POINT(20 10)')),
+(103, PointFromText('POINT(20 20)')),
+(104, PointFromText('POINT(10 20)'));
+
+INSERT INTO ls VALUES
+(105, LineFromText('LINESTRING(0 0,0 10,10 0)')),
+(106, LineStringFromText('LINESTRING(10 10,20 10,20 20,10 20,10 10)')),
+(107, LineString(Point(10, 10), Point(40, 10)));
+
+INSERT INTO p VALUES
+(108, PolygonFromText('POLYGON((10 10,20 10,20 20,10 20,10 10))')),
+(109, PolyFromText('POLYGON((0 0,50 0,50 50,0 50,0 0), (10 10,20 10,20 20,10 20,10 10))')),
+(110, Polygon(LineString(Point(0, 0), Point(30, 0), Point(30, 30), Point(0, 0))));
+
+INSERT INTO mpt VALUES
+(111, MultiPointFromText('MULTIPOINT(0 0,10 10,10 20,20 20)')),
+(112, MPointFromText('MULTIPOINT(1 1,11 11,11 21,21 21)')),
+(113, MultiPoint(Point(3, 6), Point(4, 10)));
+
+INSERT INTO mls VALUES
+(114, MultiLineStringFromText('MULTILINESTRING((10 48,10 21,10 0),(16 0,16 23,16 48))')),
+(115, MLineFromText('MULTILINESTRING((10 48,10 21,10 0))')),
+(116, MultiLineString(LineString(Point(1, 2), Point(3, 5)), LineString(Point(2, 5), Point(5, 8), Point(21, 7))));
+
+
+INSERT INTO mp VALUES
+(117, MultiPolygonFromText('MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))')),
+(118, MPolyFromText('MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))')),
+(119, MultiPolygon(Polygon(LineString(Point(0, 3), Point(3, 3), Point(3, 0), Point(0, 3)))));
+
+INSERT INTO gc VALUES
+(120, GeomCollFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))')),
+(121, GeometryCollection(Point(44, 6), LineString(Point(3, 6), Point(7, 9))));
+
+INSERT into geo SELECT * FROM pt;
+INSERT into geo SELECT * FROM ls;
+INSERT into geo SELECT * FROM p;
+INSERT into geo SELECT * FROM mpt;
+INSERT into geo SELECT * FROM mls;
+INSERT into geo SELECT * FROM mp;
+INSERT into geo SELECT * FROM gc;
+
+SELECT fid, AsText(g) FROM pt;
+SELECT fid, AsText(g) FROM ls;
+SELECT fid, AsText(g) FROM p;
+SELECT fid, AsText(g) FROM mpt;
+SELECT fid, AsText(g) FROM mls;
+SELECT fid, AsText(g) FROM mp;
+SELECT fid, AsText(g) FROM gc;
+SELECT fid, AsText(g) FROM geo;
+
+SELECT fid, Dimension(g) FROM geo;
+SELECT fid, GeometryType(g) FROM geo;
+SELECT fid, IsEmpty(g) FROM geo;
+SELECT fid, AsText(Envelope(g)) FROM geo;
+
+SELECT fid, X(g) FROM pt;
+SELECT fid, Y(g) FROM pt;
+
+SELECT fid, AsText(StartPoint(g)) FROM ls;
+SELECT fid, AsText(EndPoint(g)) FROM ls;
+SELECT fid, GLength(g) FROM ls;
+SELECT fid, NumPoints(g) FROM ls;
+SELECT fid, AsText(PointN(g, 2)) FROM ls;
+SELECT fid, IsClosed(g) FROM ls;
+
+SELECT fid, AsText(Centroid(g)) FROM p;
+SELECT fid, Area(g) FROM p;
+SELECT fid, AsText(ExteriorRing(g)) FROM p;
+SELECT fid, NumInteriorRings(g) FROM p;
+SELECT fid, AsText(InteriorRingN(g, 1)) FROM p;
+
+SELECT fid, NumGeometries(g) from mpt;
+SELECT fid, NumGeometries(g) from mls;
+SELECT fid, NumGeometries(g) from mp;
+SELECT fid, NumGeometries(g) from gc;
+
+SELECT fid, AsText(GeometryN(g, 2)) from mpt;
+SELECT fid, AsText(GeometryN(g, 2)) from mls;
+SELECT fid, AsText(GeometryN(g, 2)) from mp;
+SELECT fid, AsText(GeometryN(g, 2)) from gc;
+
+SELECT g1.fid as first, g2.fid as second,
+Within(g1.g, g2.g) as w, Contains(g1.g, g2.g) as c, Overlaps(g1.g, g2.g) as o,
+Equals(g1.g, g2.g) as e, Disjoint(g1.g, g2.g) as d, Touches(g1.g, g2.g) as t,
+Intersects(g1.g, g2.g) as i, Crosses(g1.g, g2.g) as r
+FROM gc g1, gc g2 ORDER BY first, second;
+
+DROP TABLE pt, ls, p, mpt, mls, mp, gc, geo;
-- 
2.30.9