summaryrefslogtreecommitdiffstats
path: root/mysql-test/suite/innodb_gis/r/geometry.result
diff options
context:
space:
mode:
Diffstat (limited to 'mysql-test/suite/innodb_gis/r/geometry.result')
-rw-r--r--mysql-test/suite/innodb_gis/r/geometry.result1118
1 files changed, 1118 insertions, 0 deletions
diff --git a/mysql-test/suite/innodb_gis/r/geometry.result b/mysql-test/suite/innodb_gis/r/geometry.result
new file mode 100644
index 00000000..c38e9e28
--- /dev/null
+++ b/mysql-test/suite/innodb_gis/r/geometry.result
@@ -0,0 +1,1118 @@
+SET default_storage_engine=InnoDB;
+SET innodb_strict_mode=OFF;
+SET @save_innodb_stats_persistent=@@GLOBAL.innodb_stats_persistent;
+SET GLOBAL innodb_stats_persistent=0;
+CREATE TABLE gis_point (fid INTEGER NOT NULL PRIMARY KEY, g POINT) ENGINE=InnoDB;
+CREATE TABLE gis_line (fid INTEGER NOT NULL PRIMARY KEY, g LINESTRING) ENGINE=InnoDB;
+CREATE TABLE gis_polygon (fid INTEGER NOT NULL PRIMARY KEY, g POLYGON) ENGINE=InnoDB;
+CREATE TABLE gis_multi_point (fid INTEGER NOT NULL PRIMARY KEY, g MULTIPOINT) ENGINE=InnoDB;
+CREATE TABLE gis_multi_line (fid INTEGER NOT NULL PRIMARY KEY, g MULTILINESTRING) ENGINE=InnoDB;
+CREATE TABLE gis_multi_polygon (fid INTEGER NOT NULL PRIMARY KEY, g MULTIPOLYGON) ENGINE=InnoDB;
+CREATE TABLE gis_geometrycollection (fid INTEGER NOT NULL PRIMARY KEY, g GEOMETRYCOLLECTION) ENGINE=InnoDB;
+CREATE TABLE gis_geometry (fid INTEGER NOT NULL PRIMARY KEY, g GEOMETRY) ENGINE=InnoDB;
+SHOW FIELDS FROM gis_point;
+Field Type Null Key Default Extra
+fid int(11) NO PRI NULL
+g point YES NULL
+SHOW FIELDS FROM gis_line;
+Field Type Null Key Default Extra
+fid int(11) NO PRI NULL
+g linestring YES NULL
+SHOW FIELDS FROM gis_polygon;
+Field Type Null Key Default Extra
+fid int(11) NO PRI NULL
+g polygon YES NULL
+SHOW FIELDS FROM gis_multi_point;
+Field Type Null Key Default Extra
+fid int(11) NO PRI NULL
+g multipoint YES NULL
+SHOW FIELDS FROM gis_multi_line;
+Field Type Null Key Default Extra
+fid int(11) NO PRI NULL
+g multilinestring YES NULL
+SHOW FIELDS FROM gis_multi_polygon;
+Field Type Null Key Default Extra
+fid int(11) NO PRI NULL
+g multipolygon YES NULL
+SHOW FIELDS FROM gis_geometrycollection;
+Field Type Null Key Default Extra
+fid int(11) NO PRI NULL
+g geometrycollection YES NULL
+SHOW FIELDS FROM gis_geometry;
+Field Type Null Key Default Extra
+fid int(11) NO PRI NULL
+g geometry YES NULL
+#INSERT using all WKT & WKB functions
+INSERT INTO gis_point VALUES
+(101, ST_PointFromText('POINT(10 10)')),
+(102, ST_PointFromText('POINT(20 10)')),
+(103, ST_PointFromText('POINT(20 20)')),
+(104, ST_PointFromWKB(ST_AsWKB(ST_PointFromText('POINT(10 20)'))));
+INSERT INTO gis_line VALUES
+(105, ST_LineFromText('LINESTRING(0 0,0 10,10 0)')),
+(106, ST_LineStringFromText('LINESTRING(10 10,20 10,20 20,10 20,10 10)')),
+(107, ST_LineStringFromWKB(ST_AsWKB(LineString(Point(10, 10), Point(40, 10)))));
+INSERT INTO gis_polygon VALUES
+(108, ST_PolygonFromText('POLYGON((10 10,20 10,20 20,10 20,10 10))')),
+(109, ST_PolyFromText('POLYGON((0 0,50 0,50 50,0 50,0 0), (10 10,20 10,20 20,10 20,10 10))')),
+(110, ST_PolyFromWKB(ST_AsWKB(Polygon(LineString(Point(0, 0), Point(30, 0), Point(30, 30), Point(0, 0))))));
+INSERT INTO gis_multi_point VALUES
+(111, ST_MultiPointFromText('MULTIPOINT(0 0,10 10,10 20,20 20)')),
+(112, ST_MPointFromText('MULTIPOINT(1 1,11 11,11 21,21 21)')),
+(113, ST_MPointFromWKB(ST_AsWKB(MultiPoint(Point(3, 6), Point(4, 10)))));
+INSERT INTO gis_multi_line VALUES
+(114, ST_MultiLineStringFromText('MULTILINESTRING((10 48,10 21,10 0),(16 0,16 23,16 48))')),
+(115, ST_MLineFromText('MULTILINESTRING((10 48,10 21,10 0))')),
+(116, ST_MLineFromWKB(ST_AsWKB(MultiLineString(LineString(Point(1, 2), Point(3, 5)), LineString(Point(2, 5), Point(5, 8), Point(21, 7))))));
+INSERT INTO gis_multi_polygon VALUES
+(117, ST_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, ST_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, ST_MPolyFromWKB(ST_AsWKB(MultiPolygon(Polygon(LineString(Point(0, 3), Point(3, 3), Point(3, 0), Point(0, 3)))))));
+INSERT INTO gis_geometrycollection VALUES
+(120, ST_GeomCollFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))')),
+(121, ST_GeometryCollectionFromText('GEOMETRYCOLLECTION(POINT(10 10), LINESTRING(10 10,20 20))')),
+(122, ST_GeometryFromWKB(ST_AsWKB(GeometryCollection(Point(44, 6), LineString(Point(3, 6), Point(7, 9))))));
+#check INSERT using SELECT query
+INSERT into gis_geometry SELECT * FROM gis_point;
+INSERT into gis_geometry SELECT * FROM gis_line;
+INSERT into gis_geometry SELECT * FROM gis_polygon;
+INSERT into gis_geometry SELECT * FROM gis_multi_point;
+INSERT into gis_geometry SELECT * FROM gis_multi_line;
+INSERT into gis_geometry SELECT * FROM gis_multi_polygon;
+INSERT into gis_geometry SELECT * FROM gis_geometrycollection;
+#check format coversion functions & spatial values
+SELECT fid, ST_AsText(g) FROM gis_point;
+fid ST_AsText(g)
+101 POINT(10 10)
+102 POINT(20 10)
+103 POINT(20 20)
+104 POINT(10 20)
+SELECT fid, ST_AsText(g) FROM gis_line;
+fid ST_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, ST_AsText(g) FROM gis_polygon;
+fid ST_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, ST_AsText(g) FROM gis_multi_point;
+fid ST_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, ST_AsText(g) FROM gis_multi_line;
+fid ST_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, ST_AsText(g) FROM gis_multi_polygon;
+fid ST_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, ST_AsText(g) FROM gis_geometrycollection;
+fid ST_AsText(g)
+120 GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,10 10))
+121 GEOMETRYCOLLECTION(POINT(10 10),LINESTRING(10 10,20 20))
+122 GEOMETRYCOLLECTION(POINT(44 6),LINESTRING(3 6,7 9))
+SELECT fid, ST_AsText(g) FROM gis_geometry;
+fid ST_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(10 10),LINESTRING(10 10,20 20))
+122 GEOMETRYCOLLECTION(POINT(44 6),LINESTRING(3 6,7 9))
+#2.1 check DDL functionality on GIS datatypes
+CREATE TABLE tab(c1 POINT,c2 LINESTRING,c3 POLYGON,C4 MULTIPOINT,c5 MULTILINESTRING ,
+c6 MULTIPOLYGON,c7 GEOMETRYCOLLECTION ,c8 GEOMETRY) ENGINE=InnoDB;
+#check information schema for all the columns refer to 14, except POINT which is 15
+SELECT sc.name, sc.pos, sc.mtype
+FROM information_schema.innodb_sys_columns sc
+INNER JOIN information_schema.innodb_sys_tables st
+ON sc.TABLE_ID=st.TABLE_ID
+WHERE st.NAME='test/tab'
+ORDER BY sc.name;
+name pos mtype
+c1 0 14
+c2 1 14
+c3 2 14
+C4 3 14
+c5 4 14
+c6 5 14
+c7 6 14
+c8 7 14
+#check Perform convesrion before INSERT using WKT functions
+SET @c1=ST_PointFromText('POINT(10 10)');
+SET @c2=ST_LineFromText('LINESTRING(10 10,20 20,30 30)');
+SET @c3=ST_PolyFromText('POLYGON((0 0,5 5,10 10,15 15,0 0),(10 10,20 20,30 30,40 40,10 10))');
+SET @c4=ST_MPointFromText('MULTIPOINT(0 0,5 5,10 10,20 20)');
+SET @c5=ST_MLineFromText('MULTILINESTRING((1 1,2 2,3 3),(10 10,20 20,30 30))');
+SET @c6=ST_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)))');
+SET @c7=ST_GeomCollFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))');
+SET @c8=ST_GeomCollFromText('GeometryCollection(Point(1 1),LineString(2 2, 3 3))');
+#Insert the spatial values
+INSERT INTO tab VALUES(@c1,@c2,@c3,@c4,@c5,@c6,@c7,@c8);
+#check index on GIS datatypes
+CREATE INDEX idx1 on tab(c2(5) DESC) USING BTREE;
+CREATE INDEX idx3 on tab(c3(5) ASC) USING BTREE;
+CREATE UNIQUE INDEX idx2 on tab(c8(5) ASC) ;
+#check equality predicate on the index columns
+EXPLAIN SELECT ST_ASText(c1),ST_AsText(c2),ST_AsText(c8) FROM tab
+WHERE c2=ST_LineFromText('LINESTRING(10 10,20 20,30 30)');
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE tab ref idx1 idx1 8 const # Using where
+#check index with WKB function
+EXPLAIN SELECT ST_ASText(c1),ST_AsText(c2),ST_AsText(c8)
+FROM tab WHERE c2=ST_LineStringFromWKB(ST_AsWKB(ST_LineFromText('LINESTRING(10 10,20 20,30 30)')));
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE tab ref idx1 idx1 8 const # Using where
+#check index with WKT function
+EXPLAIN SELECT ST_ASText(c1),ST_AsText(c2),ST_AsText(c8) FROM tab
+WHERE c3=ST_PolyFromText('POLYGON((0 0,5 5,10 10,15 15,0 0),(10 10,20 20,30 30,40 40,10 10))');
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE tab ref idx3 idx3 8 const # Using where
+#check index with WKB function
+EXPLAIN SELECT ST_ASText(c1),ST_AsText(c2),ST_AsText(c8)
+FROM tab
+WHERE c3=ST_PolyFromWKB(ST_AsWkB(ST_PolyFromText('POLYGON((0 0,5 5,10 10,15 15,0 0),(10 10,20 20,30 30,40 40,10 10))')));
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE tab ref idx3 idx3 8 const # Using where
+#check index with WKT function
+EXPLAIN SELECT ST_ASText(c1),ST_AsText(c2),ST_AsText(c8) FROM tab
+WHERE c8=ST_GeomCollFromText('GeometryCollection(Point(1 1),LineString(2 2, 3 3))');
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE tab const idx2 idx2 8 const #
+#check index with WKB function
+EXPLAIN SELECT ST_ASText(c1),ST_AsText(c2),ST_AsText(c8)
+FROM tab
+WHERE c8=ST_GeometryFromWKB(ST_AsWKB(ST_GeomCollFromText('GeometryCollection(Point(1 1),LineString(2 2, 3 3))')));
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE tab const idx2 idx2 8 const #
+#check index with DELETE operation
+EXPLAIN DELETE FROM tab
+WHERE c8=ST_GeometryFromWKB(ST_AsWKB(ST_GeomCollFromText('GeometryCollection(Point(1 1),LineString(2 2, 3 3))')));
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE tab range idx2 idx2 8 NULL # Using where
+#check the spatial values
+SELECT ST_AsText(c1) FROM tab;
+ST_AsText(c1)
+POINT(10 10)
+SELECT ST_AsText(c2) FROM tab;
+ST_AsText(c2)
+LINESTRING(10 10,20 20,30 30)
+SELECT ST_AsText(c3) FROM tab;
+ST_AsText(c3)
+POLYGON((0 0,5 5,10 10,15 15,0 0),(10 10,20 20,30 30,40 40,10 10))
+SELECT ST_AsText(c4) FROM tab;
+ST_AsText(c4)
+MULTIPOINT(0 0,5 5,10 10,20 20)
+SELECT ST_AsText(c5) FROM tab;
+ST_AsText(c5)
+MULTILINESTRING((1 1,2 2,3 3),(10 10,20 20,30 30))
+SELECT ST_AsText(c6) FROM tab;
+ST_AsText(c6)
+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)))
+SELECT ST_AsText(c7) FROM tab;
+ST_AsText(c7)
+GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,10 10))
+SELECT ST_AsText(c8) From tab;
+ST_AsText(c8)
+GEOMETRYCOLLECTION(POINT(1 1),LINESTRING(2 2,3 3))
+#check by modify the column type
+ALTER TABLE tab MODIFY COLUMN c1 Geometry;
+ALTER TABLE tab MODIFY COLUMN c2 Geometry;
+ALTER TABLE tab MODIFY COLUMN c3 Geometry;
+ALTER TABLE tab MODIFY COLUMN c4 Geometry;
+ALTER TABLE tab MODIFY COLUMN c5 Geometry;
+ALTER TABLE tab MODIFY COLUMN c6 Geometry;
+ALTER TABLE tab MODIFY COLUMN c7 Geometry;
+#check column datatypes
+SHOW FIELDS FROM tab;
+Field Type Null Key Default Extra
+c1 geometry YES NULL
+c2 geometry YES MUL NULL
+c3 geometry YES MUL NULL
+c4 geometry YES NULL
+c5 geometry YES NULL
+c6 geometry YES NULL
+c7 geometry YES NULL
+c8 geometry YES UNI NULL
+#check the data after modify
+SELECT ST_AsText(c1) FROM tab;
+ST_AsText(c1)
+POINT(10 10)
+SELECT ST_AsText(c2) FROM tab;
+ST_AsText(c2)
+LINESTRING(10 10,20 20,30 30)
+SELECT ST_AsText(c3) FROM tab;
+ST_AsText(c3)
+POLYGON((0 0,5 5,10 10,15 15,0 0),(10 10,20 20,30 30,40 40,10 10))
+SELECT ST_AsText(c4) FROM tab;
+ST_AsText(c4)
+MULTIPOINT(0 0,5 5,10 10,20 20)
+SELECT ST_AsText(c5) FROM tab;
+ST_AsText(c5)
+MULTILINESTRING((1 1,2 2,3 3),(10 10,20 20,30 30))
+SELECT ST_AsText(c6) FROM tab;
+ST_AsText(c6)
+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)))
+SELECT ST_AsText(c7) FROM tab;
+ST_AsText(c7)
+GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,10 10))
+SELECT ST_AsText(c8) From tab;
+ST_AsText(c8)
+GEOMETRYCOLLECTION(POINT(1 1),LINESTRING(2 2,3 3))
+#check by modify the column type
+ALTER TABLE tab MODIFY COLUMN c1 POINT;
+ALTER TABLE tab MODIFY COLUMN c2 LINESTRING;
+ALTER TABLE tab MODIFY COLUMN c3 POLYGON;
+ALTER TABLE tab MODIFY COLUMN c4 MULTIPOINT;
+ALTER TABLE tab MODIFY COLUMN c5 MULTILINESTRING;
+ALTER TABLE tab MODIFY COLUMN c6 MULTIPOLYGON;
+ALTER TABLE tab MODIFY COLUMN c7 GEOMETRYCOLLECTION;
+#check column datatypes
+SHOW FIELDS FROM tab;
+Field Type Null Key Default Extra
+c1 point YES NULL
+c2 linestring YES MUL NULL
+c3 polygon YES MUL NULL
+c4 multipoint YES NULL
+c5 multilinestring YES NULL
+c6 multipolygon YES NULL
+c7 geometrycollection YES NULL
+c8 geometry YES UNI NULL
+#check the data after modify
+SELECT ST_AsText(c1) FROM tab;
+ST_AsText(c1)
+POINT(10 10)
+SELECT ST_AsText(c2) FROM tab;
+ST_AsText(c2)
+LINESTRING(10 10,20 20,30 30)
+SELECT ST_AsText(c3) FROM tab;
+ST_AsText(c3)
+POLYGON((0 0,5 5,10 10,15 15,0 0),(10 10,20 20,30 30,40 40,10 10))
+SELECT ST_AsText(c4) FROM tab;
+ST_AsText(c4)
+MULTIPOINT(0 0,5 5,10 10,20 20)
+SELECT ST_AsText(c5) FROM tab;
+ST_AsText(c5)
+MULTILINESTRING((1 1,2 2,3 3),(10 10,20 20,30 30))
+SELECT ST_AsText(c6) FROM tab;
+ST_AsText(c6)
+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)))
+SELECT ST_AsText(c7) FROM tab;
+ST_AsText(c7)
+GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,10 10))
+SELECT ST_AsText(c8) From tab;
+ST_AsText(c8)
+GEOMETRYCOLLECTION(POINT(1 1),LINESTRING(2 2,3 3))
+#check change the column type
+ALTER TABLE tab MODIFY COLUMN c1 BLOB;
+#check column datatypes
+SHOW CREATE TABLE tab;
+Table Create Table
+tab CREATE TABLE `tab` (
+ `c1` blob DEFAULT NULL,
+ `c2` linestring DEFAULT NULL,
+ `c3` polygon DEFAULT NULL,
+ `c4` multipoint DEFAULT NULL,
+ `c5` multilinestring DEFAULT NULL,
+ `c6` multipolygon DEFAULT NULL,
+ `c7` geometrycollection DEFAULT NULL,
+ `c8` geometry DEFAULT NULL,
+ UNIQUE KEY `idx2` (`c8`(5)),
+ KEY `idx1` (`c2`(5) DESC) USING BTREE,
+ KEY `idx3` (`c3`(5)) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+#check the data after modify
+SELECT ST_AsText(c1) FROM tab;
+ST_AsText(c1)
+POINT(10 10)
+#change the column name
+ALTER TABLE tab CHANGE COLUMN c1 c0 GEOMETRY ;
+#check column datatypes
+SHOW FIELDS FROM tab;
+Field Type Null Key Default Extra
+c0 geometry YES NULL
+c2 linestring YES MUL NULL
+c3 polygon YES MUL NULL
+c4 multipoint YES NULL
+c5 multilinestring YES NULL
+c6 multipolygon YES NULL
+c7 geometrycollection YES NULL
+c8 geometry YES UNI NULL
+#add primary key
+ALTER TABLE tab ADD PRIMARY KEY pk2(c8(5));
+Warnings:
+Warning 1280 Name 'pk2' ignored for PRIMARY key.
+#check columns
+SHOW FIELDS FROM tab;
+Field Type Null Key Default Extra
+c0 geometry YES NULL
+c2 linestring YES MUL NULL
+c3 polygon YES MUL NULL
+c4 multipoint YES NULL
+c5 multilinestring YES NULL
+c6 multipolygon YES NULL
+c7 geometrycollection YES NULL
+c8 geometry NO PRI NULL
+#drop key
+ALTER TABLE tab DROP PRIMARY KEY;
+#check columns
+SHOW FIELDS FROM tab;
+Field Type Null Key Default Extra
+c0 geometry YES NULL
+c2 linestring YES MUL NULL
+c3 polygon YES MUL NULL
+c4 multipoint YES NULL
+c5 multilinestring YES NULL
+c6 multipolygon YES NULL
+c7 geometrycollection YES NULL
+c8 geometry NO UNI NULL
+#cleanup the table
+TRUNCATE TABLE tab;
+#check with procedures
+#crate proc with INOUT params
+CREATE PROCEDURE geom_insert(IN c1 POINT,IN c2 LINESTRING,IN c3 POLYGON,
+IN c4 MULTIPOINT,IN c5 MULTILINESTRING, IN c6 MULTIPOLYGON,IN c7 GEOMETRYCOLLECTION,
+IN c8 GEOMETRY)
+BEGIN
+INSERT INTO tab VALUES(@c1,@c2,@c3,@c4,@c5,@c6,@c7,@c8);
+END |
+#set the spatial values
+SET @c1=ST_PointFromText('POINT(10 10)');
+SET @c2=ST_LineFromText('LINESTRING(10 10,20 20,30 30)');
+SET @c3=ST_PolyFromText('POLYGON((0 0,5 5,10 10,15 15,0 0),(10 10,20 20,30 30,40 40,10 10))');
+SET @c4=ST_MPointFromText('MULTIPOINT(0 0,5 5,10 10,20 20)');
+SET @c5=ST_MLineFromText('MULTILINESTRING((1 1,2 2,3 3),(10 10,20 20,30 30))');
+SET @c6=ST_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)))');
+SET @c7=ST_GeomCollFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))');
+SET @c8=ST_GeomCollFromText('GeometryCollection(Point(1 1),LineString(2 2, 3 3))');
+#call the proc
+CALL geom_insert(@c1,@c2,@c3,@c4,@c5,@c6,@c7,@c8);
+#check the values ofter proc call
+SELECT ST_AsText(c0) FROM tab;
+ST_AsText(c0)
+POINT(10 10)
+SELECT ST_AsText(c2) FROM tab;
+ST_AsText(c2)
+LINESTRING(10 10,20 20,30 30)
+SELECT ST_AsText(c3) FROM tab;
+ST_AsText(c3)
+POLYGON((0 0,5 5,10 10,15 15,0 0),(10 10,20 20,30 30,40 40,10 10))
+SELECT ST_AsText(c4) FROM tab;
+ST_AsText(c4)
+MULTIPOINT(0 0,5 5,10 10,20 20)
+SELECT ST_AsText(c5) FROM tab;
+ST_AsText(c5)
+MULTILINESTRING((1 1,2 2,3 3),(10 10,20 20,30 30))
+SELECT ST_AsText(c6) FROM tab;
+ST_AsText(c6)
+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)))
+SELECT ST_AsText(c7) FROM tab;
+ST_AsText(c7)
+GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,10 10))
+SELECT ST_AsText(c8) From tab;
+ST_AsText(c8)
+GEOMETRYCOLLECTION(POINT(1 1),LINESTRING(2 2,3 3))
+#set the input spatial value
+SET @c9=ST_GeomCollFromText('GeometryCollection(Point(1 1),LineString(2 2, 3 3))');
+#crate a proc with INOUT params and pass a value.
+CREATE PROCEDURE geominout(INOUT c9 GEOMETRY)
+BEGIN
+SELECT ST_AsText(@c9);
+SET c9=ST_GeomCollFromText('GeometryCollection(Point(10 10),LineString(20 20, 30 30))');
+END|
+#call the proc and then change the spatial value of c8
+CALL geominout(@c9);
+ST_AsText(@c9)
+GEOMETRYCOLLECTION(POINT(1 1),LINESTRING(2 2,3 3))
+#now check the out spatial values should be changed to new values
+SELECT ST_AsText(@c9);
+ST_AsText(@c9)
+GEOMETRYCOLLECTION(POINT(10 10),LINESTRING(20 20,30 30))
+#delete the records
+TRUNCATE TABLE tab;
+#create another table same as tab
+CREATE TABLE tab2 AS SELECT * FROM tab;
+#check the table definition
+SHOW CREATE TABLE tab2;
+Table Create Table
+tab2 CREATE TABLE `tab2` (
+ `c0` geometry DEFAULT NULL,
+ `c2` linestring DEFAULT NULL,
+ `c3` polygon DEFAULT NULL,
+ `c4` multipoint DEFAULT NULL,
+ `c5` multilinestring DEFAULT NULL,
+ `c6` multipolygon DEFAULT NULL,
+ `c7` geometrycollection DEFAULT NULL,
+ `c8` geometry NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+#create a tigger and populate the values into tab2
+CREATE TRIGGER geom_trigger AFTER INSERT ON tab
+FOR EACH ROW
+BEGIN
+INSERT INTO tab2 VALUES (@c1,@c2,@c3,@c4,@c5,@c6,@c7,@c8);
+END|
+#set the spatial values
+SET @c1=ST_PointFromText('POINT(10 10)');
+SET @c2=ST_LineFromText('LINESTRING(10 10,20 20,30 30)');
+SET @c3=ST_PolyFromText('POLYGON((0 0,5 5,10 10,15 15,0 0),(10 10,20 20,30 30,40 40,10 10))');
+SET @c4=ST_MPointFromText('MULTIPOINT(0 0,5 5,10 10,20 20)');
+SET @c5=ST_MLineFromText('MULTILINESTRING((1 1,2 2,3 3),(10 10,20 20,30 30))');
+SET @c6=ST_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)))');
+SET @c7=ST_GeomCollFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))');
+SET @c8=ST_GeomCollFromText('GeometryCollection(Point(1 1),LineString(2 2, 3 3))');
+#Insert the spatial values
+INSERT INTO tab VALUES(@c1,@c2,@c3,@c4,@c5,@c6,@c7,@c8);
+#check the values whether populated
+SELECT ST_AsText(c0) FROM tab2;
+ST_AsText(c0)
+POINT(10 10)
+SELECT ST_AsText(c2) FROM tab2;
+ST_AsText(c2)
+LINESTRING(10 10,20 20,30 30)
+SELECT ST_AsText(c3) FROM tab2;
+ST_AsText(c3)
+POLYGON((0 0,5 5,10 10,15 15,0 0),(10 10,20 20,30 30,40 40,10 10))
+SELECT ST_AsText(c4) FROM tab2;
+ST_AsText(c4)
+MULTIPOINT(0 0,5 5,10 10,20 20)
+SELECT ST_AsText(c5) FROM tab2;
+ST_AsText(c5)
+MULTILINESTRING((1 1,2 2,3 3),(10 10,20 20,30 30))
+SELECT ST_AsText(c6) FROM tab2;
+ST_AsText(c6)
+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)))
+SELECT ST_AsText(c7) FROM tab2;
+ST_AsText(c7)
+GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,10 10))
+SELECT ST_AsText(c8) From tab2;
+ST_AsText(c8)
+GEOMETRYCOLLECTION(POINT(1 1),LINESTRING(2 2,3 3))
+#check Cursor with Geometry
+CREATE PROCEDURE geom_cursor()
+BEGIN
+DECLARE v GEOMETRY;
+DECLARE c CURSOR FOR SELECT c8 FROM tab2;
+OPEN c;
+FETCH c INTO v;
+CLOSE c;
+SELECT ST_AsText(v);
+END|
+# the following line was commented due the Bug#16282246
+# Once it is fixed, the comment will be removed.
+# right now bug fixing date is unknown.
+check self join
+SELECT ST_AsText(a.c0),ST_AsText(a.c2),ST_AsText(a.c3)
+FROM tab a,tab2 b WHERE a.c0=b.c0 AND a.c2=b.c2
+AND a.c3=b.c3 AND a.c4=b.c4 AND a.c5=b.c5 AND a.c6=b.c6
+AND a.c7=b.c7 AND a.c8=b.c8;
+ST_AsText(a.c0) ST_AsText(a.c2) ST_AsText(a.c3)
+POINT(10 10) LINESTRING(10 10,20 20,30 30) POLYGON((0 0,5 5,10 10,15 15,0 0),(10 10,20 20,30 30,40 40,10 10))
+#check equi join
+SELECT ST_AsText(a.c2),ST_AsText(b.c2) FROM tab a,tab2 b WHERE a.c2=b.c2;
+ST_AsText(a.c2) ST_AsText(b.c2)
+LINESTRING(10 10,20 20,30 30) LINESTRING(10 10,20 20,30 30)
+#check DELETE stmt with Where clause and a constant predicate
+DELETE FROM tab
+WHERE c8=ST_GeometryFromWKB(ST_AsWKB(ST_GeomCollFromText('GeometryCollection(Point(1 1),LineString(2 2, 3 3))')));
+SELECT * FROM tab;
+c0 c2 c3 c4 c5 c6 c7 c8
+#check UPDATE stmt with Where clause and a constant predicate
+SET @c8=ST_GeomCollFromText('GeometryCollection(Point(10 10),LineString(20 20, 30 30))');
+UPDATE tab2 SET c8=@c8
+WHERE c2=ST_LineStringFromWKB(ST_AsWKB(ST_LineFromText('LINESTRING(10 10,20 20,30 30)')));
+#check the column should be modified to LINESTRING(10 10,20 20,30 30)
+SELECT ST_AsText(c8) From tab2;
+ST_AsText(c8)
+GEOMETRYCOLLECTION(POINT(10 10),LINESTRING(20 20,30 30))
+#check GIS datatypes with aggregate functions
+SELECT COUNT(ST_AsText(g)) FROM gis_point;
+COUNT(ST_AsText(g))
+4
+SELECT COUNT(ST_AsText(g)) FROM gis_line;
+COUNT(ST_AsText(g))
+3
+SELECT COUNT(ST_AsText(g)) FROM gis_polygon;
+COUNT(ST_AsText(g))
+3
+SELECT COUNT(ST_AsText(g)) FROM gis_multi_point;
+COUNT(ST_AsText(g))
+3
+SELECT COUNT(ST_AsText(g)) FROM gis_multi_line;
+COUNT(ST_AsText(g))
+3
+SELECT COUNT(ST_AsText(g)) FROM gis_multi_polygon;
+COUNT(ST_AsText(g))
+3
+SELECT COUNT(ST_AsText(g)) FROM gis_geometrycollection;
+COUNT(ST_AsText(g))
+3
+SELECT COUNT(ST_AsText(g)) FROM gis_geometry;
+COUNT(ST_AsText(g))
+22
+SELECT SUM(ST_AsText(g)) FROM gis_point;
+SUM(ST_AsText(g))
+0
+Warnings:
+Warning 1292 Truncated incorrect DOUBLE value: 'POINT(10 10)'
+Warning 1292 Truncated incorrect DOUBLE value: 'POINT(20 10)'
+Warning 1292 Truncated incorrect DOUBLE value: 'POINT(20 20)'
+Warning 1292 Truncated incorrect DOUBLE value: 'POINT(10 20)'
+SELECT SUM(ST_AsText(g)) FROM gis_line;
+SUM(ST_AsText(g))
+0
+Warnings:
+Warning 1292 Truncated incorrect DOUBLE value: 'LINESTRING(0 0,0 10,10 0)'
+Warning 1292 Truncated incorrect DOUBLE value: 'LINESTRING(10 10,20 10,20 20,10 20,10 10)'
+Warning 1292 Truncated incorrect DOUBLE value: 'LINESTRING(10 10,40 10)'
+SELECT AVG(ST_AsText(g)) FROM gis_polygon;
+AVG(ST_AsText(g))
+0
+Warnings:
+Warning 1292 Truncated incorrect DOUBLE value: 'POLYGON((10 10,20 10,20 20,10 20,10 10))'
+Warning 1292 Truncated incorrect DOUBLE value: 'POLYGON((0 0,50 0,50 50,0 50,0 0),(10 10,20 10,20 20,10 20,10 10))'
+Warning 1292 Truncated incorrect DOUBLE value: 'POLYGON((0 0,30 0,30 30,0 0))'
+#here it show some string value no meaning
+SELECT MAX(ST_AsText(g)) FROM gis_multi_point;
+MAX(ST_AsText(g))
+MULTIPOINT(3 6,4 10)
+#here it show some string value no meaning
+SELECT MIN(ST_AsText(g)) FROM gis_multi_line;
+MIN(ST_AsText(g))
+MULTILINESTRING((1 2,3 5),(2 5,5 8,21 7))
+SELECT STD(ST_AsText(g)) FROM gis_multi_polygon;
+STD(ST_AsText(g))
+0
+Warnings:
+Warning 1292 Truncated incorrect DOUBLE value: '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)))'
+Warning 1292 Truncated incorrect DOUBLE value: '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)))'
+Warning 1292 Truncated incorrect DOUBLE value: 'MULTIPOLYGON(((0 3,3 3,3 0,0 3)))'
+SELECT COUNT(ST_AsText(g)) FROM gis_geometrycollection;
+COUNT(ST_AsText(g))
+3
+SELECT AVG(ST_AsText(g)) FROM gis_geometry;
+AVG(ST_AsText(g))
+0
+Warnings:
+Warning 1292 Truncated incorrect DOUBLE value: 'POINT(10 10)'
+Warning 1292 Truncated incorrect DOUBLE value: 'POINT(20 10)'
+Warning 1292 Truncated incorrect DOUBLE value: 'POINT(20 20)'
+Warning 1292 Truncated incorrect DOUBLE value: 'POINT(10 20)'
+Warning 1292 Truncated incorrect DOUBLE value: 'LINESTRING(0 0,0 10,10 0)'
+Warning 1292 Truncated incorrect DOUBLE value: 'LINESTRING(10 10,20 10,20 20,10 20,10 10)'
+Warning 1292 Truncated incorrect DOUBLE value: 'LINESTRING(10 10,40 10)'
+Warning 1292 Truncated incorrect DOUBLE value: 'POLYGON((10 10,20 10,20 20,10 20,10 10))'
+Warning 1292 Truncated incorrect DOUBLE value: 'POLYGON((0 0,50 0,50 50,0 50,0 0),(10 10,20 10,20 20,10 20,10 10))'
+Warning 1292 Truncated incorrect DOUBLE value: 'POLYGON((0 0,30 0,30 30,0 0))'
+Warning 1292 Truncated incorrect DOUBLE value: 'MULTIPOINT(0 0,10 10,10 20,20 20)'
+Warning 1292 Truncated incorrect DOUBLE value: 'MULTIPOINT(1 1,11 11,11 21,21 21)'
+Warning 1292 Truncated incorrect DOUBLE value: 'MULTIPOINT(3 6,4 10)'
+Warning 1292 Truncated incorrect DOUBLE value: 'MULTILINESTRING((10 48,10 21,10 0),(16 0,16 23,16 48))'
+Warning 1292 Truncated incorrect DOUBLE value: 'MULTILINESTRING((10 48,10 21,10 0))'
+Warning 1292 Truncated incorrect DOUBLE value: 'MULTILINESTRING((1 2,3 5),(2 5,5 8,21 7))'
+Warning 1292 Truncated incorrect DOUBLE value: '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)))'
+Warning 1292 Truncated incorrect DOUBLE value: '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)))'
+Warning 1292 Truncated incorrect DOUBLE value: 'MULTIPOLYGON(((0 3,3 3,3 0,0 3)))'
+Warning 1292 Truncated incorrect DOUBLE value: 'GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,10 10))'
+Warning 1292 Truncated incorrect DOUBLE value: 'GEOMETRYCOLLECTION(POINT(10 10),LINESTRING(10 10,20 20))'
+Warning 1292 Truncated incorrect DOUBLE value: 'GEOMETRYCOLLECTION(POINT(44 6),LINESTRING(3 6,7 9))'
+#check Datatypes with compression tables
+CREATE TABLE tab3(c1 POINT,c2 LINESTRING,c3 POLYGON,C4 MULTIPOINT,c5 MULTILINESTRING ,
+c6 MULTIPOLYGON,c7 GEOMETRYCOLLECTION ,c8 GEOMETRY) ENGINE=InnoDB
+KEY_BLOCK_SIZE=8 ROW_FORMAT=COMPRESSED;
+#check file format
+SHOW CREATE TABLE tab3;
+Table Create Table
+tab3 CREATE TABLE `tab3` (
+ `c1` point DEFAULT NULL,
+ `c2` linestring DEFAULT NULL,
+ `c3` polygon DEFAULT NULL,
+ `C4` multipoint DEFAULT NULL,
+ `c5` multilinestring DEFAULT NULL,
+ `c6` multipolygon DEFAULT NULL,
+ `c7` geometrycollection DEFAULT NULL,
+ `c8` geometry DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8
+ALTER TABLE tab3 KEY_BLOCK_SIZE=16 ROW_FORMAT=Dynamic;
+#check file format
+SHOW CREATE TABLE tab3;
+Table Create Table
+tab3 CREATE TABLE `tab3` (
+ `c1` point DEFAULT NULL,
+ `c2` linestring DEFAULT NULL,
+ `c3` polygon DEFAULT NULL,
+ `C4` multipoint DEFAULT NULL,
+ `c5` multilinestring DEFAULT NULL,
+ `c6` multipolygon DEFAULT NULL,
+ `c7` geometrycollection DEFAULT NULL,
+ `c8` geometry DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ROW_FORMAT=DYNAMIC KEY_BLOCK_SIZE=16
+#check information schema for all the columns refer to 14, except POINT which is 15
+SELECT sc.name, sc.pos, sc.mtype
+FROM information_schema.innodb_sys_columns sc
+INNER JOIN information_schema.innodb_sys_tables st
+ON sc.TABLE_ID=st.TABLE_ID
+WHERE st.NAME='test/tab3'
+ORDER BY sc.name;
+name pos mtype
+c1 0 14
+c2 1 14
+c3 2 14
+C4 3 14
+c5 4 14
+c6 5 14
+c7 6 14
+c8 7 14
+#check Perform convesrion before INSERT using WKT functions
+SET @c1=ST_PointFromText('POINT(10 10)');
+SET @c2=ST_LineFromText('LINESTRING(10 10,20 20,30 30)');
+SET @c3=ST_PolyFromText('POLYGON((0 0,5 5,10 10,15 15,0 0),(10 10,20 20,30 30,40 40,10 10))');
+SET @c4=ST_MPointFromText('MULTIPOINT(0 0,5 5,10 10,20 20)');
+SET @c5=ST_MLineFromText('MULTILINESTRING((1 1,2 2,3 3),(10 10,20 20,30 30))');
+SET @c6=ST_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)))');
+SET @c7=ST_GeomCollFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))');
+SET @c8=ST_GeomCollFromText('GeometryCollection(Point(1 1),LineString(2 2, 3 3))');
+#Insert the spatial values
+INSERT INTO tab3 VALUES(@c1,@c2,@c3,@c4,@c5,@c6,@c7,@c8);
+#check index on GIS datatypes
+CREATE INDEX idx1 on tab3(c2(5) DESC) USING BTREE;
+CREATE INDEX idx3 on tab3(c3(5) ASC) USING BTREE;
+CREATE UNIQUE INDEX idx2 on tab3(c8(5) ASC) ;
+#check equality predicate on the index columns
+EXPLAIN SELECT ST_ASText(c1),ST_AsText(c2),ST_AsText(c8) FROM tab3
+WHERE c2=ST_LineFromText('LINESTRING(10 10,20 20,30 30)');
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE tab3 ref idx1 idx1 8 const # Using where
+#check index with WKB function
+EXPLAIN SELECT ST_ASText(c1),ST_AsText(c2),ST_AsText(c8)
+FROM tab3 WHERE c2=ST_LineStringFromWKB(ST_AsWKB(ST_LineFromText('LINESTRING(10 10,20 20,30 30)')));
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE tab3 ref idx1 idx1 8 const # Using where
+#check index with WKT function
+EXPLAIN SELECT ST_ASText(c1),ST_AsText(c2),ST_AsText(c8) FROM tab3
+WHERE c3=ST_PolyFromText('POLYGON((0 0,5 5,10 10,15 15,0 0),(10 10,20 20,30 30,40 40,10 10))');
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE tab3 ref idx3 idx3 8 const # Using where
+#check index with WKB function
+EXPLAIN SELECT ST_ASText(c1),ST_AsText(c2),ST_AsText(c8)
+FROM tab3
+WHERE c3=ST_PolyFromWKB(ST_AsWkB(ST_PolyFromText('POLYGON((0 0,5 5,10 10,15 15,0 0),(10 10,20 20,30 30,40 40,10 10))')));
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE tab3 ref idx3 idx3 8 const # Using where
+#check index with WKT function
+EXPLAIN SELECT ST_ASText(c1),ST_AsText(c2),ST_AsText(c8) FROM tab3
+WHERE c8=ST_GeomCollFromText('GeometryCollection(Point(1 1),LineString(2 2, 3 3))');
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE tab3 const idx2 idx2 8 const #
+#check index with WKB function
+EXPLAIN SELECT ST_ASText(c1),ST_AsText(c2),ST_AsText(c8)
+FROM tab3
+WHERE c8=ST_GeometryFromWKB(ST_AsWKB(ST_GeomCollFromText('GeometryCollection(Point(1 1),LineString(2 2, 3 3))')));
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE tab3 const idx2 idx2 8 const #
+#check index with DELETE operation
+EXPLAIN DELETE FROM tab3
+WHERE c8=ST_GeometryFromWKB(ST_AsWKB(ST_GeomCollFromText('GeometryCollection(Point(1 1),LineString(2 2, 3 3))')));
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE tab3 range idx2 idx2 8 NULL # Using where
+#check the spatial values
+SELECT ST_AsText(c1) FROM tab3;
+ST_AsText(c1)
+POINT(10 10)
+SELECT ST_AsText(c2) FROM tab3;
+ST_AsText(c2)
+LINESTRING(10 10,20 20,30 30)
+SELECT ST_AsText(c3) FROM tab3;
+ST_AsText(c3)
+POLYGON((0 0,5 5,10 10,15 15,0 0),(10 10,20 20,30 30,40 40,10 10))
+SELECT ST_AsText(c4) FROM tab3;
+ST_AsText(c4)
+MULTIPOINT(0 0,5 5,10 10,20 20)
+SELECT ST_AsText(c5) FROM tab3;
+ST_AsText(c5)
+MULTILINESTRING((1 1,2 2,3 3),(10 10,20 20,30 30))
+SELECT ST_AsText(c6) FROM tab3;
+ST_AsText(c6)
+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)))
+SELECT ST_AsText(c7) FROM tab3;
+ST_AsText(c7)
+GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,10 10))
+SELECT ST_AsText(c8) From tab3;
+ST_AsText(c8)
+GEOMETRYCOLLECTION(POINT(1 1),LINESTRING(2 2,3 3))
+#check with Row_format = Dynamic
+ALTER TABLE tab3 ROW_FORMAT=Dynamic;
+#check file format
+SHOW CREATE TABLE tab3;
+Table Create Table
+tab3 CREATE TABLE `tab3` (
+ `c1` point DEFAULT NULL,
+ `c2` linestring DEFAULT NULL,
+ `c3` polygon DEFAULT NULL,
+ `C4` multipoint DEFAULT NULL,
+ `c5` multilinestring DEFAULT NULL,
+ `c6` multipolygon DEFAULT NULL,
+ `c7` geometrycollection DEFAULT NULL,
+ `c8` geometry DEFAULT NULL,
+ UNIQUE KEY `idx2` (`c8`(5)),
+ KEY `idx1` (`c2`(5) DESC) USING BTREE,
+ KEY `idx3` (`c3`(5)) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ROW_FORMAT=DYNAMIC KEY_BLOCK_SIZE=16
+#check index with WKB function
+EXPLAIN SELECT ST_ASText(c1),ST_AsText(c2),ST_AsText(c8)
+FROM tab3 WHERE c2=ST_LineStringFromWKB(ST_AsWKB(ST_LineFromText('LINESTRING(10 10,20 20,30 30)')));
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE tab3 ref idx1 idx1 8 const # Using where
+#check index with WKT function
+EXPLAIN SELECT ST_ASText(c1),ST_AsText(c2),ST_AsText(c8) FROM tab3
+WHERE c3=ST_PolyFromText('POLYGON((0 0,5 5,10 10,15 15,0 0),(10 10,20 20,30 30,40 40,10 10))');
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE tab3 ref idx3 idx3 8 const # Using where
+#check the Geometry property functions
+SELECT fid, ST_Dimension(g) FROM gis_geometry;
+fid ST_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
+122 1
+SELECT fid, ST_GeometryType(g) FROM gis_geometry;
+fid ST_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
+122 GEOMETRYCOLLECTION
+SELECT fid, ST_IsEmpty(g) FROM gis_geometry;
+fid ST_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
+122 0
+SELECT fid, ST_AsText(ST_Envelope(g)) FROM gis_geometry;
+fid ST_AsText(ST_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((10 10,20 10,20 20,10 20,10 10))
+122 POLYGON((3 6,44 6,44 9,3 9,3 6))
+explain extended select ST_Dimension(g), ST_GeometryType(g), ST_IsEmpty(g), ST_AsText(ST_Envelope(g)) from gis_geometry;
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE gis_geometry ALL NULL NULL NULL NULL # 100.00
+Warnings:
+Note 1003 select st_dimension(`test`.`gis_geometry`.`g`) AS `ST_Dimension(g)`,st_geometrytype(`test`.`gis_geometry`.`g`) AS `ST_GeometryType(g)`,st_isempty(`test`.`gis_geometry`.`g`) AS `ST_IsEmpty(g)`,st_astext(st_envelope(`test`.`gis_geometry`.`g`)) AS `ST_AsText(ST_Envelope(g))` from `test`.`gis_geometry`
+#check Geometry point functions
+SELECT fid, ST_X(g) FROM gis_point;
+fid ST_X(g)
+101 10
+102 20
+103 20
+104 10
+SELECT fid, ST_Y(g) FROM gis_point;
+fid ST_Y(g)
+101 10
+102 10
+103 20
+104 20
+explain extended select ST_X(g),ST_Y(g) FROM gis_point;
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE gis_point ALL NULL NULL NULL NULL # 100.00
+Warnings:
+Note 1003 select st_x(`test`.`gis_point`.`g`) AS `ST_X(g)`,st_y(`test`.`gis_point`.`g`) AS `ST_Y(g)` from `test`.`gis_point`
+SELECT fid, ST_AsText(ST_StartPoint(g)) FROM gis_line;
+fid ST_AsText(ST_StartPoint(g))
+105 POINT(0 0)
+106 POINT(10 10)
+107 POINT(10 10)
+SELECT fid, ST_AsText(ST_EndPoint(g)) FROM gis_line;
+fid ST_AsText(ST_EndPoint(g))
+105 POINT(10 0)
+106 POINT(10 10)
+107 POINT(40 10)
+SELECT fid, ST_Length(g) FROM gis_line;
+fid ST_Length(g)
+105 24.14213562373095
+106 40
+107 30
+SELECT fid, ST_NumPoints(g) FROM gis_line;
+fid ST_NumPoints(g)
+105 3
+106 5
+107 2
+SELECT fid, ST_AsText(ST_PointN(g, 2)) FROM gis_line;
+fid ST_AsText(ST_PointN(g, 2))
+105 POINT(0 10)
+106 POINT(20 10)
+107 POINT(40 10)
+SELECT fid, ST_IsClosed(g) FROM gis_line;
+fid ST_IsClosed(g)
+105 0
+106 1
+107 0
+explain extended select ST_AsText(ST_StartPoint(g)),ST_AsText(ST_EndPoint(g)),
+ST_Length(g),ST_NumPoints(g),ST_AsText(ST_PointN(g, 2)),ST_IsClosed(g) FROM gis_line;
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE gis_line ALL NULL NULL NULL NULL # 100.00
+Warnings:
+Note 1003 select st_astext(st_startpoint(`test`.`gis_line`.`g`)) AS `ST_AsText(ST_StartPoint(g))`,st_astext(st_endpoint(`test`.`gis_line`.`g`)) AS `ST_AsText(ST_EndPoint(g))`,st_length(`test`.`gis_line`.`g`) AS `ST_Length(g)`,st_numpoints(`test`.`gis_line`.`g`) AS `ST_NumPoints(g)`,st_astext(st_pointn(`test`.`gis_line`.`g`,2)) AS `ST_AsText(ST_PointN(g, 2))`,st_isclosed(`test`.`gis_line`.`g`) AS `ST_IsClosed(g)` from `test`.`gis_line`
+SELECT fid, ST_AsText(ST_Centroid(g)) FROM gis_polygon;
+fid ST_AsText(ST_Centroid(g))
+108 POINT(15 15)
+109 POINT(25.416666666666668 25.416666666666668)
+110 POINT(20 10)
+SELECT fid, ST_Area(g) FROM gis_polygon;
+fid ST_Area(g)
+108 100
+109 2400
+110 450
+SELECT fid, ST_AsText(ST_ExteriorRing(g)) FROM gis_polygon;
+fid ST_AsText(ST_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, ST_NumInteriorRings(g) FROM gis_polygon;
+fid ST_NumInteriorRings(g)
+108 0
+109 1
+110 0
+SELECT fid, ST_AsText(ST_InteriorRingN(g, 1)) FROM gis_polygon;
+fid ST_AsText(ST_InteriorRingN(g, 1))
+108 NULL
+109 LINESTRING(10 10,20 10,20 20,10 20,10 10)
+110 NULL
+explain extended select ST_AsText(ST_Centroid(g)),ST_Area(g),ST_AsText(ST_ExteriorRing(g)),
+ST_NumInteriorRings(g),ST_AsText(ST_InteriorRingN(g, 1)) FROM gis_polygon;
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE gis_polygon ALL NULL NULL NULL NULL # 100.00
+Warnings:
+Note 1003 select st_astext(st_centroid(`test`.`gis_polygon`.`g`)) AS `ST_AsText(ST_Centroid(g))`,st_area(`test`.`gis_polygon`.`g`) AS `ST_Area(g)`,st_astext(st_exteriorring(`test`.`gis_polygon`.`g`)) AS `ST_AsText(ST_ExteriorRing(g))`,st_numinteriorrings(`test`.`gis_polygon`.`g`) AS `ST_NumInteriorRings(g)`,st_astext(st_interiorringn(`test`.`gis_polygon`.`g`,1)) AS `ST_AsText(ST_InteriorRingN(g, 1))` from `test`.`gis_polygon`
+SELECT fid, ST_IsClosed(g) FROM gis_multi_line;
+fid ST_IsClosed(g)
+114 0
+115 0
+116 0
+SELECT fid, ST_AsText(ST_Centroid(g)) FROM gis_multi_polygon;
+fid ST_AsText(ST_Centroid(g))
+117 POINT(57.98031067576927 17.854754130800433)
+118 POINT(57.98031067576927 17.854754130800433)
+119 POINT(2 2)
+SELECT fid, ST_Area(g) FROM gis_multi_polygon;
+fid ST_Area(g)
+117 1684.5
+118 1684.5
+119 4.5
+SELECT fid, ST_NumGeometries(g) from gis_multi_point;
+fid ST_NumGeometries(g)
+111 4
+112 4
+113 2
+SELECT fid, ST_NumGeometries(g) from gis_multi_line;
+fid ST_NumGeometries(g)
+114 2
+115 1
+116 2
+SELECT fid, ST_NumGeometries(g) from gis_multi_polygon;
+fid ST_NumGeometries(g)
+117 2
+118 2
+119 1
+SELECT fid, ST_NumGeometries(g) from gis_geometrycollection;
+fid ST_NumGeometries(g)
+120 2
+121 2
+122 2
+explain extended SELECT fid, ST_NumGeometries(g) from gis_multi_point;
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE gis_multi_point ALL NULL NULL NULL NULL # 100.00
+Warnings:
+Note 1003 select `test`.`gis_multi_point`.`fid` AS `fid`,st_numgeometries(`test`.`gis_multi_point`.`g`) AS `ST_NumGeometries(g)` from `test`.`gis_multi_point`
+SELECT fid, ST_AsText(ST_GeometryN(g, 2)) from gis_multi_point;
+fid ST_AsText(ST_GeometryN(g, 2))
+111 POINT(10 10)
+112 POINT(11 11)
+113 POINT(4 10)
+SELECT fid, ST_AsText(ST_GeometryN(g, 2)) from gis_multi_line;
+fid ST_AsText(ST_GeometryN(g, 2))
+114 LINESTRING(16 0,16 23,16 48)
+115 NULL
+116 LINESTRING(2 5,5 8,21 7)
+SELECT fid, ST_AsText(ST_GeometryN(g, 2)) from gis_multi_polygon;
+fid ST_AsText(ST_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, ST_AsText(ST_GeometryN(g, 2)) from gis_geometrycollection;
+fid ST_AsText(ST_GeometryN(g, 2))
+120 LINESTRING(0 0,10 10)
+121 LINESTRING(10 10,20 20)
+122 LINESTRING(3 6,7 9)
+SELECT fid, ST_AsText(ST_GeometryN(g, 1)) from gis_geometrycollection;
+fid ST_AsText(ST_GeometryN(g, 1))
+120 POINT(0 0)
+121 POINT(10 10)
+122 POINT(44 6)
+explain extended SELECT fid, ST_AsText(ST_GeometryN(g, 2)) from gis_multi_point;
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE gis_multi_point ALL NULL NULL NULL NULL # 100.00
+Warnings:
+Note 1003 select `test`.`gis_multi_point`.`fid` AS `fid`,st_astext(st_geometryn(`test`.`gis_multi_point`.`g`,2)) AS `ST_AsText(ST_GeometryN(g, 2))` from `test`.`gis_multi_point`
+SELECT g1.fid as first, g2.fid as second,
+MBRWithin(g1.g, g2.g) as w, MBRContains(g1.g, g2.g) as c, MBROverlaps(g1.g, g2.g) as o,
+MBREquals(g1.g, g2.g) as e, MBRDisjoint(g1.g, g2.g) as d, ST_Touches(g1.g, g2.g) as t,
+MBRIntersects(g1.g, g2.g) as i, ST_Crosses(g1.g, g2.g) as r
+FROM gis_geometrycollection g1, gis_geometrycollection 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 1 1 1
+120 122 0 0 1 0 0 0 1 0
+121 120 0 0 0 0 0 1 1 1
+121 121 1 1 0 1 0 0 1 0
+121 122 0 0 0 0 1 0 0 0
+122 120 0 0 1 0 0 0 1 0
+122 121 0 0 0 0 1 0 0 0
+122 122 1 1 0 1 0 0 1 0
+explain extended SELECT g1.fid as first, g2.fid as second,
+MBRWithin(g1.g, g2.g) as w, MBRContains(g1.g, g2.g) as c, MBROverlaps(g1.g, g2.g) as o,
+MBREquals(g1.g, g2.g) as e, MBRDisjoint(g1.g, g2.g) as d, ST_Touches(g1.g, g2.g) as t,
+MBRIntersects(g1.g, g2.g) as i, ST_Crosses(g1.g, g2.g) as r
+FROM gis_geometrycollection g1, gis_geometrycollection g2 ORDER BY first, second;
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE g1 ALL NULL NULL NULL NULL # 100.00 Using temporary; Using filesort
+1 SIMPLE g2 ALL NULL NULL NULL NULL # 100.00 Using join buffer (flat, BNL join)
+Warnings:
+Note 1003 select `test`.`g1`.`fid` AS `first`,`test`.`g2`.`fid` AS `second`,mbrwithin(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `w`,mbrcontains(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `c`,mbroverlaps(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `o`,mbrequals(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `e`,mbrdisjoint(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `d`,st_touches(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `t`,mbrintersects(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `i`,st_crosses(`test`.`g1`.`g`,`test`.`g2`.`g`) AS `r` from `test`.`gis_geometrycollection` `g1` join `test`.`gis_geometrycollection` `g2` order by `test`.`g1`.`fid`,`test`.`g2`.`fid`
+# check support of Foreign Key constraint
+CREATE TABLE parent (id GEOMETRY NOT NULL,PRIMARY KEY (id(10))) ENGINE=INNODB;
+CREATE TABLE child (id GEOMETRY, parent_id GEOMETRY,
+INDEX par_ind (parent_id(10)),
+FOREIGN KEY (parent_id(10)) REFERENCES parent(id)
+ON DELETE CASCADE
+) ENGINE=INNODB;
+ERROR HY000: Can't create table `test`.`child` (errno: 150 "Foreign key constraint is incorrectly formed")
+#check partition table support
+CREATE TABLE emp2(
+id GEOMETRY NOT NULL,
+store_name VARCHAR(30),
+parts VARCHAR(30),
+store_id GEOMETRY
+)
+PARTITION BY LIST(store_id) (
+PARTITION pNorth VALUES IN (10,20,30) ,
+PARTITION pEast VALUES IN (40,50,60) ,
+PARTITION pWest VALUES IN (70,80,100)
+);
+ERROR 42000: The storage engine for the table doesn't support GEOMETRY
+#check start transaction commit & Rollback
+START TRANSACTION;
+DELETE FROM tab3;
+SELECT * FROM tab3;
+c1 c2 c3 C4 c5 c6 c7 c8
+ROLLBACK;
+SELECT COUNT(*) FROM tab3;
+COUNT(*)
+1
+START TRANSACTION;
+DELETE FROM tab3;
+COMMIT;
+SELECT * FROM tab3;
+c1 c2 c3 C4 c5 c6 c7 c8
+DROP TABLE gis_point, gis_line, gis_polygon, gis_multi_point;
+DROP TABLE gis_multi_line, gis_multi_polygon;
+DROP TABLE gis_geometrycollection, gis_geometry;
+DROP TABLE tab,tab2,tab3,parent;
+DROP PROCEDURE geominout;
+DROP PROCEDURE geom_insert;
+DROP PROCEDURE geom_cursor;
+SET GLOBAL innodb_stats_persistent=@save_innodb_stats_persistent;