mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-13626: Merge InnoDB test cases from MySQL 5.7
Add missing innodb_gis tests.
This commit is contained in:
83
mysql-test/include/innodb_gis_undo.inc
Normal file
83
mysql-test/include/innodb_gis_undo.inc
Normal file
File diff suppressed because one or more lines are too long
43
mysql-test/suite/innodb_gis/r/bug16236208.result
Normal file
43
mysql-test/suite/innodb_gis/r/bug16236208.result
Normal file
@ -0,0 +1,43 @@
|
||||
DROP TABLE IF EXISTS linestring;
|
||||
CREATE TABLE linestring (pk INTEGER NOT NULL PRIMARY KEY, linestring_key
|
||||
GEOMETRY NOT NULL, linestring_nokey GEOMETRY NOT NULL) ENGINE=InnoDB ;
|
||||
INSERT INTO linestring (pk, linestring_key, linestring_nokey) VALUES (1,
|
||||
ST_GeomFromText('POINT(10 10) '), ST_GeomFromText('POINT(10 10) '));
|
||||
INSERT INTO linestring (pk, linestring_key, linestring_nokey) VALUES (2,
|
||||
ST_GeomFromText('LINESTRING(10 10,20 20,30 30)'), ST_GeomFromText('LINESTRING(10
|
||||
10,20 20,30 30)'));
|
||||
INSERT INTO linestring (pk, linestring_key, linestring_nokey) VALUES (3,
|
||||
ST_GeomFromText('POLYGON((0 0,5 5,10 10,15 15,0 0),(10 10,20 20,30 30,40 40,10
|
||||
10))'), ST_GeomFromText('POLYGON((0 0,5 5,10 10,15 15,0 0),(10 10,20 20,30 30,40
|
||||
40,10 10))'));
|
||||
INSERT INTO linestring (pk, linestring_key, linestring_nokey) VALUES (4,
|
||||
ST_GeomFromText('MULTIPOINT(0 0,5 5,10 10,20 20) '), ST_GeomFromText('MULTIPOINT(0
|
||||
0,5 5,10 10,20 20) '));
|
||||
INSERT INTO linestring (pk, linestring_key, linestring_nokey) VALUES (5,
|
||||
ST_GeomFromText('MULTILINESTRING((1 1,2 2,3 3),(10 10,20 20,30 30))'),
|
||||
ST_GeomFromText('MULTILINESTRING((1 1,2 2,3 3),(10 10,20 20,30 30))'));
|
||||
INSERT INTO linestring (pk, linestring_key, linestring_nokey) VALUES (6,
|
||||
ST_GeomFromText('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)))'),
|
||||
ST_GeomFromText('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)))'));
|
||||
INSERT INTO linestring (pk, linestring_key, linestring_nokey) VALUES (7,
|
||||
ST_GeomFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))'),
|
||||
ST_GeomFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))'));
|
||||
CREATE INDEX linestring_index ON linestring(linestring_nokey(5));
|
||||
ALTER TABLE linestring ADD KEY (linestring_key(5));
|
||||
SELECT ST_AsText(linestring_nokey) FROM linestring FORCE KEY (
|
||||
linestring_key ) WHERE ST_CONTAINS( ST_GeomFromText('POLYGON( ( 3923 2815 , 4246
|
||||
2122 , 4028 2971 , 4017 3019 , 3923 2815 ) )') , linestring_key ) AND
|
||||
ST_WITHIN( ST_GeomFromText('POLYGON( ( 4135 3009 , 4914 3087 , 4236 3194 , 4091
|
||||
3036 , 4022 3004 , 4087 3004 , 3853 2825 , 3490 3118 , 3784 3141 , 4052 3072
|
||||
, 4205 2787 , 4024 2951 , 4076 3036 , 4041 3053 , 3789 3401 , 4080 3100 ,
|
||||
4169 2867 , 4056 3029 , 4715 3943 , 4052 3098 , 4035 3080 , 4013 3077 , 4218
|
||||
2915 , 3789 2980 , 4058 3046 , 4042 3043 , 4135 3009 ) )') , linestring_nokey
|
||||
) AND ST_CONTAINS( ST_GeomFromText('POLYGON( ( 4082 2842 , 3678 3647 , 3420 3068
|
||||
, 4018 3030 , 4082 2842 ) )') , linestring_key ) OR ST_INTERSECTS(
|
||||
ST_GeomFromText('MULTILINESTRING( ( 4147 2871 , 4072 3042 , 4081 3099 , 3796
|
||||
3021 , 4007 3463 ) , ( 4042 2808 , 4109 2816 , 3730 3673 ) )') ,
|
||||
linestring_key ) AND ST_Length( linestring_nokey ) > 1;
|
||||
ERROR 22023: Invalid GIS data provided to function st_within.
|
||||
DROP TABLE linestring;
|
9
mysql-test/suite/innodb_gis/r/bug16266012.result
Normal file
9
mysql-test/suite/innodb_gis/r/bug16266012.result
Normal file
@ -0,0 +1,9 @@
|
||||
SELECT ST_WITHIN( LINESTRINGFROMTEXT(' LINESTRING( 5 9 , 3 4 , 4 1 , 4
|
||||
4 , 4 9 ) ') , ST_SYMDIFFERENCE( ST_UNION( ST_ENVELOPE( POLYGONFROMTEXT('
|
||||
POLYGON( ( 3 2 , 0 6 , 2 3 , 8 0 , 4 6 , 7 2 , 3 2 ) ) ') ) ,
|
||||
MULTIPOLYGONFROMTEXT('
|
||||
MULTIPOLYGON( ( ( 0 0 , 7 1 , 6 8 , 0 0 ) ) , ( ( 9 9 , 4 0 , 4 7 , 9 9) ) )
|
||||
') ) , ST_SYMDIFFERENCE( POLYGONFROMTEXT(' POLYGON( ( 9 9 , 6 5 , 2 3 , 9 9
|
||||
) ) ') , MULTIPOLYGONFROMTEXT(' MULTIPOLYGON( ( ( 2 2 , 5 2 , 5 2 , 2 6 , 2
|
||||
2 ) ) , ( ( 7 7 , 3 7 , 2 9 , 7 1 , 7 7 ) ) ) ') ) ) );
|
||||
ERROR HY000: Geometry overlay calculation error: geometry data is invalid in function st_union.
|
24
mysql-test/suite/innodb_gis/r/bug17057168.result
Normal file
24
mysql-test/suite/innodb_gis/r/bug17057168.result
Normal file
@ -0,0 +1,24 @@
|
||||
CREATE DATABASE geotest;
|
||||
use geotest;
|
||||
CREATE TABLE tmp (id int unsigned NOT NULL PRIMARY KEY);
|
||||
INSERT INTO tmp VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);
|
||||
INSERT INTO tmp SELECT 10+id FROM tmp;
|
||||
INSERT INTO tmp SELECT 20+id FROM tmp;
|
||||
INSERT INTO tmp SELECT 40+id FROM tmp;
|
||||
INSERT INTO tmp SELECT 80+id FROM tmp;
|
||||
CREATE TABLE t1 (id int unsigned NOT NULL auto_increment PRIMARY KEY,
|
||||
location point, INDEX (location)) ENGINE=InnoDB;
|
||||
INSERT INTO t1 (location) SELECT POINT(tmp1.id, tmp2.id) FROM tmp tmp1,
|
||||
tmp tmp2 ORDER BY tmp1.id, tmp2.id;
|
||||
EXPLAIN SELECT id, ST_AsText(location) FROM t1 WHERE location = POINT(1,
|
||||
2);
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 NULL ref location location 28 const 1 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select `geotest`.`t1`.`id` AS `id`,st_astext(`geotest`.`t1`.`location`) AS `ST_AsText(location)` from `geotest`.`t1` where (`geotest`.`t1`.`location` = <cache>(point(1,2)))
|
||||
SELECT id, ST_AsText(location) FROM t1 WHERE location = POINT(1, 2);
|
||||
id ST_AsText(location)
|
||||
163 POINT(1 2)
|
||||
DROP TABLE t1;
|
||||
DROP TABLE tmp;
|
||||
DROP DATABASE geotest;
|
1150
mysql-test/suite/innodb_gis/r/geometry.result
Normal file
1150
mysql-test/suite/innodb_gis/r/geometry.result
Normal file
File diff suppressed because it is too large
Load Diff
23
mysql-test/suite/innodb_gis/r/gis_split_inf.result
Normal file
23
mysql-test/suite/innodb_gis/r/gis_split_inf.result
Normal file
@ -0,0 +1,23 @@
|
||||
create table t1(a geometrycollection not null,spatial key(a))engine=innodb;
|
||||
insert into t1(a) values( geometrycollection(multipolygon(polygon(linestring(point(-14,98), point(-14,98)), linestring(point(-97,64), point(-70,99), point(-97,64)), linestring(point(143851215403059150000000000000000000000.000000,13040009882500140000000000000000000000.000000), point(-73,85), point(-88,-29)))), multipolygon(polygon(linestring(point(41,95), point(4294967298,2050)), linestring(point(-61,85), point(-75,93), point(14,-2), point(1,84), point(-61,85)), linestring(point(-62,52), point(39,5), point(-18,12), point(-62,52))), polygon(linestring(point(-77,1), point(66,61), point(-77,1)), linestring(point(18446744073709551615,1125899906842622), point(-72,49), point(24,-66), point(82,73), point(68,22))), polygon(linestring(point(1048576,17179869181), point(-18,95), point(-90,-3), point(-33,82), point(20,-85)), linestring(point(-43,-97), point(-7,-3), point(39,-82), point(-65,-58), point(-43,-97)), linestring(point(44,-34), point(-69,58), point(44,-34)), linestring(point(57,-13), point(-17,74), point(57,-13)), linestring(point(3,71), point(-58,81), point(3,71)), linestring(point(9,25), point(77,-71), point(8388607,67108864), point(46,46), point(9,25)), linestring(point(98,-82), point(98,-82))))) ) ;
|
||||
ERROR 22023: Invalid GIS data provided to function polygon.
|
||||
insert into t1(a) values( geometrycollection(multilinestring(linestring(point(39,-60), point(-62,-11), point(-24,35), point(54,1)), linestring(point(-4,69), point(-22,-64), point(1.694824e+308,5.688896e+307), point(-33,-58), point(-64,-80), point(-15,-44), point(40,54)), linestring(point(-86,-54), point(11,41), point(-46,-38), point(-21,-8), point(10,70), point(-81,22), point(-46,-100)), linestring(point(-30,-48), point(50,58), point(-53,92), point(10,41), point(-46,-8)), linestring(point(-65,34), point(-92,93), point(-33,-74), point(75,-28)), linestring(point(25,-55), point(22,-10), point(-42,0), point(-86,-59), point(2,-37), point(63,-44), point(-55,-22)), linestring(point(28,0), point(-94,99), point(-32,-86)), linestring(point(9,-12), point(16,9), point(80,-73)), linestring(point(6,-55), point(83,-4)), linestring(point(-15,21), point(144115188075855876,16777212), point(-85,-31), point(-90,-50)), linestring(point(-33,33), point(21,90), point(-89,32)), linestring(point(16,24), point(73,-13), point(25,-48), point(71,52), point(-54,-78), point(-84,59), point(53,29)), linestring(point(-15,-81), point(83,43), point(-71,33), point(-8,0), point(84,-54), point(-35,38), point(-10,-50)), linestring(point(38,-50), point(20,-2), point(-57,-92)), linestring(point(5,-93), point(231601833467477080000000000000000000000.000000,51914987457169239000000000000000000000.000000), point(-94,62))), point(2,0)) ) ;
|
||||
insert into t1(a) values( geometrycollection(multilinestring(linestring(point(80,-15), point(65,-57), point(-59,16), point(22,-67)), linestring(point(20,-55), point(-38,-64), point(19,-53), point(-63,-36), point(56,-37)), linestring(point(27,-8), point(-85,-75), point(4398046511106,2251799813685245)), linestring(point(45,32), point(-79,46))), multilinestring(linestring(point(8,-4), point(40,-38), point(100,95), point(5,-80), point(82,88)), linestring(point(-14,30), point(-94,51), point(-16,-29), point(37,-97), point(-26,92)), linestring(point(32,34), point(83,-23), point(-55,57), point(-15,90), point(32,-50), point(-20,-73), point(77,28)), linestring(point(4,88), point(87,74), point(-67,-58)), linestring(point(5.660747e+307,6.385657e+307), point(-58,-15), point(1.172095e+308,1.448533e+308)), linestring(point(-21,-37), point(-52,79), point(-16,-76), point(-65,-94), point(36,7), point(37,74), point(100,-57)), linestring(point(-23,-82), point(-73,23), point(18,-34)), linestring(point(20,-51), point(93,62), point(-65,84)), linestring(point(-48,31), point(-69,-96)), linestring(point(-5,78), point(10,-99), point(36,-33)), linestring(point(-84,55), point(96,1), point(-98,-29), point(-15,81), point(-27,-6), point(58,-32), point(54,-16)), linestring(point(2,5), point(2199023255553,8192)), linestring(point(12,-78), point(-97,-83)), linestring(point(-74,79), point(35,-56), point(50,95)), linestring(point(28,16), point(-39,-40), point(48,-3)), linestring(point(2199023255550,-65539), point(62,-25), point(94,-62)), linestring(point(-74,83), point(-18,75), point(91,17), point(-11,-48), point(30,100)), linestring(point(57,-13), point(88,-45)), linestring(point(20,-64), point(-37,13), point(20,35))), point(-3,-4)) ) ;
|
||||
insert into t1(a) values( geometrycollection(multipolygon(polygon(linestring(point(-34,19), point(-25,92), point(61921390294166805000000000000000000000.000000,319674749161701840000000000000000000000.000000), point(56,50), point(-34,19)), linestring(point(-26,-58), point(99,-50), point(34,-20), point(-26,-58)), linestring(point(-42,45), point(-63,-7), point(5,-89), point(-97,36), point(-42,45)), linestring(point(94,11), point(-71,4), point(94,11)), linestring(point(16,25), point(4,-33), point(-45,-33), point(-64,-77), point(16,25)), linestring(point(19,45), point(36,45), point(-83,-96), point(19,45)), linestring(point(85,-31), point(-87,52), point(85,-31))), polygon(linestring(point(55,-88), point(63,-12), point(55,-88)), linestring(point(-49,10), point(-49,10)), linestring(point(-51,-32), point(-51,-32)))), multipolygon(polygon(linestring(point(-21,-8), point(66,-58), point(100,-27), point(-21,-8)), linestring(point(-29,-13), point(-29,-13))), polygon(linestring(point(91307574660224730000000000000000000000.000000,101214152547755520000000000000000000000.000000), point(89,64), point(77,87), point(66,29), point(-71,-53)), linestring(point(38,-78), point(-43,-90), point(37,20), point(81,65), point(38,-78))), polygon(linestring(point(51,0), point(-62,8), point(-11,22), point(51,0)), linestring(point(-4,-44), point(6,82), point(-19,-90), point(131,32)))), point(-4,-7)) ) ;
|
||||
ERROR 22023: Invalid GIS data provided to function polygon.
|
||||
insert into t1(a) values( geometrycollection(point(10,9), linestring(point(2305843009213693955,-1125899906842621), point(78,15)), multipoint(point(-1,3), point(4,-6))) ) ;
|
||||
insert into t1(a) values( geometrycollection(polygon(linestring(point(0,13), point(-12,5), point(0,13)), linestring(point(11,-2), point(6,6), point(20,-14), point(-3,-10), point(1.330588e+308,2.666476e+307)), linestring(point(16382,67), point(7,4)), linestring(point(2,7), point(-14,15), point(2,7)), linestring(point(-14,12), point(-8,-8), point(-17,-2), point(-14,12)), linestring(point(-20,-10), point(-8,-13), point(-19,-17), point(13,-3), point(-20,-10)), linestring(point(-5,13), point(7,-9), point(6,8), point(-5,13))), linestring(point(-87,19), point(-64,51), point(-16,12)), multipoint(point(-1,-10), point(2,-10), point(3.670354e+307,2.501459e+307))) ) ;
|
||||
ERROR 22023: Invalid GIS data provided to function polygon.
|
||||
insert into t1(a) values( geometrycollection(multipoint(point(-3,7), point(4,-3), point(-6,-2), point(-9,1)), polygon(linestring(point(-17,-5), point(2,-8), point(-6,9), point(-9,19), point(-17,-5)), linestring(point(10,-1), point(15,-7), point(-13,6), point(10,-1))), multipolygon(polygon(linestring(point(69,-69), point(-90,-64), point(-17,4), point(47,-73), point(69,-69)), linestring(point(-35,-77), point(-35,-77)), linestring(point(95,-76), point(1.636688e+308,1.828723e+307), point(68719476740,536870916), point(95,-76)), linestring(point(-26,-85), point(-26,-85)), linestring(point(-53,57), point(-53,57)), linestring(point(-98,-64), point(79,-57), point(-98,-64)), linestring(point(-91,59), point(16,0), point(73,97), point(-35,-70), point(-91,59))))) ) ;
|
||||
ERROR 22023: Invalid GIS data provided to function polygon.
|
||||
insert into t1(a) values( geometrycollection(linestring(point(85,-29), point(15,84), point(39,-92), point(-99,19)), multilinestring(linestring(point(63,10), point(-47,95), point(10,-49), point(16,-65), point(-98,40), point(25,44), point(-55,-92)), linestring(point(5.266810e+307,6.648813e+307), point(47,33), point(-15,-13), point(-92,-58), point(36,73)), linestring(point(77,-56), point(-53,-10), point(-28,76), point(-51,6), point(51,-31), point(-95,81), point(92,26)), linestring(point(-91,7), point(58,53)), linestring(point(18,5), point(18,40), point(71,89), point(7.898707e+307,1.202585e+308), point(53,100)), linestring(point(-60,-18), point(-10,-31), point(-6,-25), point(-57,-95), point(16,77)))) ) ;
|
||||
insert into t1(a) values( geometrycollection(polygon(linestring(point(-9,0), point(-17,-15), point(-9,0)), linestring(point(-11,1), point(18,12), point(15,3), point(7,0), point(-11,1)), linestring(point(19,5), point(19,5)), linestring(point(17,-11), point(8,4), point(17,-11)), linestring(point(14914539334033432000000000000000000000.000000,127247994336690690000000000000000000000.000000), point(-14,-7), point(13,-2))), point(-4,-7), polygon(linestring(point(-18,9), point(11,-1), point(-18,9)), linestring(point(9,-3), point(9,-3)), linestring(point(-7,-9), point(9,-11), point(11,14), point(1.663324e+308,1.572127e+308)), linestring(point(-15,4), point(18,12), point(7,2), point(-15,4)), linestring(point(-15,-18), point(-20,-15), point(1152921504606846972,34359738370))), polygon(linestring(point(-5,-19), point(-11,11), point(10,5), point(-7,13), point(-5,-19)), linestring(point(-8,-6), point(-4,16), point(-8,-6)), linestring(point(-6,-10), point(3,-12), point(-6,-10)), linestring(point(-16,1), point(20,-12), point(-16,1)), linestring(point(-8,5), point(-20,-4), point(4,1), point(-6,-6), point(-8,5)), linestring(point(-8,-11), point(-5,-14), point(-8,-11)), linestring(point(3,-16), point(-15,-13), point(1.166708e+308,1.901147e+307), point(-8,6), point(3,-16))), point(0,-5)) ) ;
|
||||
ERROR 22023: Invalid GIS data provided to function polygon.
|
||||
insert into t1(a) values( geometrycollection(linestring(point(-33,99), point(99,-87), point(38,-79), point(33,-39), point(-91,-8), point(46,-87))) ) ;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
drop table t1;
|
292
mysql-test/suite/innodb_gis/r/gis_split_nan.result
Normal file
292
mysql-test/suite/innodb_gis/r/gis_split_nan.result
Normal file
@ -0,0 +1,292 @@
|
||||
# Creating the spatial objects
|
||||
USE test;
|
||||
CREATE TABLE gis_point (fid INTEGER NOT NULL PRIMARY KEY, g POINT);
|
||||
CREATE TABLE gis_linestring (fid INTEGER NOT NULL PRIMARY KEY, g LINESTRING);
|
||||
CREATE TABLE gis_polygon (fid INTEGER NOT NULL PRIMARY KEY, g POLYGON);
|
||||
CREATE TABLE gis_multi_point (fid INTEGER NOT NULL PRIMARY KEY, g MULTIPOINT);
|
||||
CREATE TABLE gis_multi_linestring (fid INTEGER NOT NULL PRIMARY KEY, g MULTILINESTRING);
|
||||
CREATE TABLE gis_multi_polygon (fid INTEGER NOT NULL PRIMARY KEY, g MULTIPOLYGON);
|
||||
CREATE TABLE gis_geometrycollection (fid INTEGER NOT NULL PRIMARY KEY, g GEOMETRYCOLLECTION);
|
||||
# Inserting POINT Geometry Values
|
||||
INSERT INTO gis_point VALUES
|
||||
(101, ST_POINTFROMTEXT('POINT(0 0)')),
|
||||
(102, ST_POINTFROMTEXT('POINT(1 0)')),
|
||||
(103, ST_POINTFROMTEXT('POINT(0 1)')),
|
||||
(104, ST_POINTFROMTEXT('POINT(1 1)')),
|
||||
(105, ST_POINTFROMTEXT('POINT(-1 1)'));
|
||||
INSERT INTO gis_point VALUES
|
||||
(106, ST_POINTFROMWKB(POINT(0,0))),
|
||||
(107, ST_POINTFROMWKB(POINT(10,0))),
|
||||
(108, ST_POINTFROMWKB(POINT(0,10))),
|
||||
(109, ST_POINTFROMWKB(POINT(-10,0))),
|
||||
(110, ST_POINTFROMWKB(POINT(0,-10)));
|
||||
Warnings:
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
INSERT INTO gis_point VALUES
|
||||
(111, ST_POINTFROMWKB(ST_ASWKB(ST_POINTFROMTEXT('POINT(1 1)')))),
|
||||
(112, ST_POINTFROMWKB(ST_ASWKB(ST_POINTFROMTEXT('POINT(1e308 1e308)')))),
|
||||
(113, ST_POINTFROMWKB(ST_ASWKB(ST_POINTFROMTEXT('POINT(1e308 -1e308)')))),
|
||||
(114, ST_POINTFROMWKB(ST_ASWKB(ST_POINTFROMTEXT('POINT(-1e308 1e308)')))),
|
||||
(115, ST_POINTFROMWKB(ST_ASWKB(ST_POINTFROMTEXT('POINT(-1e308 -1e308)'))));
|
||||
# Inserting LINESTRING Geometry Values
|
||||
INSERT INTO gis_linestring VALUES
|
||||
(201, ST_LINEFROMTEXT('LINESTRING(0 0,5 5)')),
|
||||
(202, ST_LINEFROMTEXT('LINESTRING(0 0,2 2,4 4)')),
|
||||
(203, ST_LINEFROMTEXT('LINESTRING(0 0,5 5,10 10)'));
|
||||
INSERT INTO gis_linestring VALUES
|
||||
(204, ST_LINESTRINGFROMTEXT('LINESTRING(10 10,5 5)')),
|
||||
(205, ST_LINESTRINGFROMTEXT('LINESTRING(0 0,12 12,24 24)')),
|
||||
(206, ST_LINESTRINGFROMTEXT('LINESTRING(0 0,50 50,100 100)'));
|
||||
INSERT INTO gis_linestring VALUES
|
||||
(207, ST_LINEFROMWKB(LINESTRING(POINT(0,0), POINT(5,5)))),
|
||||
(208, ST_LINEFROMWKB(LINESTRING(POINT(0,0), POINT(-5,-5), POINT(-10,10)))),
|
||||
(209, ST_LINEFROMWKB(LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4), POINT(6,6), POINT(8,8))));
|
||||
Warnings:
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
INSERT INTO gis_linestring VALUES
|
||||
(210, ST_LINESTRINGFROMWKB(LINESTRING(POINT(0,0), POINT(5,5)))),
|
||||
(211, ST_LINESTRINGFROMWKB(LINESTRING(POINT(0,0), POINT(-50,-50), POINT(10,-10)))),
|
||||
(212, ST_LINESTRINGFROMWKB(LINESTRING(POINT(0,0), POINT(1e308,1e308), POINT(1e308,-1e308))));
|
||||
Warnings:
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
INSERT INTO gis_linestring VALUES
|
||||
(213, ST_LINEFROMWKB(ST_ASWKB(ST_LINEFROMTEXT('LINESTRING(1e308 1e308,1e308 -1e308)')))),
|
||||
(214, ST_LINEFROMWKB(ST_ASWKB(ST_LINEFROMTEXT('LINESTRING(1 1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,9 9)')))),
|
||||
(215, ST_LINESTRINGFROMWKB(ST_ASWKB(ST_LINESTRINGFROMTEXT('LINESTRING(10 10,10 -10,-10 -10,-10 10,10 10)'))));
|
||||
# Inserting POLYGON Geometry Values
|
||||
INSERT INTO gis_polygon VALUES
|
||||
(301, ST_POLYFROMTEXT('POLYGON((0 0,0 5,5 5,0 0))')),
|
||||
(302, ST_POLYFROMTEXT('POLYGON((0 0,0 5,5 5,5 0,0 0))')),
|
||||
(303, ST_POLYFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0))'));
|
||||
INSERT INTO gis_polygon VALUES
|
||||
(304, ST_POLYGONFROMTEXT('POLYGON((0 0,0 50,50 50,50 0,0 0))')),
|
||||
(305, ST_POLYGONFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0,0 0,0 0),(4 4,4 6,6 6,6 4,4 4))')),
|
||||
(306, ST_POLYGONFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0,0 0,0 0),(2 2,2 4,4 4,4 2,2 2),(6 6,6 8,8 8,8 6,6 6))'));
|
||||
INSERT INTO gis_polygon VALUES
|
||||
(307, ST_POLYFROMWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,5), POINT(5,5), POINT(0,0))))),
|
||||
(308, ST_POLYFROMWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,15), POINT(15,15), POINT(15,0), POINT(0,0))))),
|
||||
(309, ST_POLYFROMWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,10), POINT(10,10), POINT(10,0), POINT(0,0)),
|
||||
LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4)))));
|
||||
Warnings:
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
INSERT INTO gis_polygon VALUES
|
||||
(310, ST_POLYGONFROMWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,5), POINT(5,5), POINT(0,0))))),
|
||||
(311, ST_POLYGONFROMWKB(POLYGON(LINESTRING(POINT(10,10), POINT(10,15), POINT(15,15), POINT(15,10), POINT(10,10))))),
|
||||
(312, ST_POLYGONFROMWKB(POLYGON(LINESTRING(POINT(10,10), POINT(10,20), POINT(20,20), POINT(20,10), POINT(10,10)),
|
||||
LINESTRING(POINT(14,14), POINT(14,16), POINT(16,16), POINT(16,14), POINT(14,14)))));
|
||||
Warnings:
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
INSERT INTO gis_polygon VALUES
|
||||
(313, ST_POLYFROMWKB(ST_ASWKB(ST_POLYFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0,0 0,5 5,0 0))')))),
|
||||
(314, ST_POLYFROMWKB(ST_ASWKB(ST_POLYGONFROMTEXT('POLYGON((10 0,10 10,0 10,-10 10,-10 0,-10 -10,0 10,10 -10,10 0))')))),
|
||||
(315, ST_POLYGONFROMWKB(ST_ASWKB(ST_POLYGONFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0,0 0,0 0),(2 2,2 4,4 4,4 2,2 2),(6 6,6 8,8 8,8 6,6 6))'))));
|
||||
# Inserting MULTIPOINT Geometry Values
|
||||
INSERT INTO gis_multi_point VALUES
|
||||
(401, ST_GEOMFROMTEXT('MULTIPOINT(0 0)')),
|
||||
(402, ST_GEOMFROMTEXT('MULTIPOINT(0 0,2 2,4 4)')),
|
||||
(403, ST_GEOMFROMTEXT('MULTIPOINT(0 0,5 5,10 10)'));
|
||||
INSERT INTO gis_multi_point VALUES
|
||||
(404, ST_GEOMFROMTEXT('MULTIPOINT(0 0,100 100)')),
|
||||
(405, ST_GEOMFROMTEXT('MULTIPOINT(0 0,1e308 1e308)')),
|
||||
(406, ST_GEOMFROMTEXT('MULTIPOINT(1e308 1e308,1e308 -1e308,-1e308 1e308,-1e308 -1e308)'));
|
||||
INSERT INTO gis_multi_point VALUES
|
||||
(407, ST_GEOMFROMWKB(MULTIPOINT(POINT(0,0)))),
|
||||
(408, ST_GEOMFROMWKB(MULTIPOINT(POINT(0,0), POINT(10,10)))),
|
||||
(409, ST_GEOMFROMWKB(MULTIPOINT(POINT(0,0), POINT(2,2), POINT(4,4), POINT(6,6))));
|
||||
Warnings:
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
INSERT INTO gis_multi_point VALUES
|
||||
(410, ST_GEOMFROMWKB(MULTIPOINT(POINT(0,0)))),
|
||||
(411, ST_GEOMFROMWKB(MULTIPOINT(POINT(0,0), POINT(1e308,1e308)))),
|
||||
(412, ST_GEOMFROMWKB(MULTIPOINT(POINT(1e308,1e308), POINT(-1e308,1e308), POINT(1e308,-1e308), POINT(-1e308,-1e308))));
|
||||
Warnings:
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
INSERT INTO gis_multi_point VALUES
|
||||
(413, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTIPOINT(0 0)')))),
|
||||
(414, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTIPOINT(0 0,1e308 1e308,-1e308 -1e308)')))),
|
||||
(415, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTIPOINT(1e308 1e308,1e308 -1e308,-1e308 1e308,-1e308 -1e308,1e308 1e308)'))));
|
||||
# Inserting MULTILINESTRING Geometry Values
|
||||
INSERT INTO gis_multi_linestring VALUES
|
||||
(501, ST_GEOMFROMTEXT('MULTILINESTRING((0 0,2 2))')),
|
||||
(502, ST_GEOMFROMTEXT('MULTILINESTRING((0 0,2 2,4 4))')),
|
||||
(503, ST_GEOMFROMTEXT('MULTILINESTRING((0 0,2 2,4 4),(6 6,8 8,10 10))'));
|
||||
INSERT INTO gis_multi_linestring VALUES
|
||||
(504, ST_GEOMFROMTEXT('MULTILINESTRING((0 0,100 100,-100 -100))')),
|
||||
(505, ST_GEOMFROMTEXT('MULTILINESTRING((1e308 1e308,-1e308 -1e308))')),
|
||||
(506, ST_GEOMFROMTEXT('MULTILINESTRING((1e308 1e308,-1e308 -1e308),(1e308 -1e308,-1e308 1e308))'));
|
||||
INSERT INTO gis_multi_linestring VALUES
|
||||
(507, ST_GEOMFROMWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(2,2))))),
|
||||
(508, ST_GEOMFROMWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(12,12), POINT(24,24))))),
|
||||
(509, ST_GEOMFROMWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4)),
|
||||
LINESTRING(POINT(6,6), POINT(8,8), POINT(10,10)))));
|
||||
Warnings:
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
INSERT INTO gis_multi_linestring VALUES
|
||||
(510, ST_GEOMFROMWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4))))),
|
||||
(511, ST_GEOMFROMWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(1,1), POINT(2,2))))),
|
||||
(512, ST_GEOMFROMWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(12,12), POINT(24,24)),
|
||||
LINESTRING(POINT(36,36), POINT(48,48), POINT(50,50)))));
|
||||
Warnings:
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
INSERT INTO gis_multi_linestring VALUES
|
||||
(513, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,10 10),(0 10,10 0))')))),
|
||||
(514, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,10 10,-10 10,0 0),(0 0,-10 -10,10 -10,0 0))')))),
|
||||
(515, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,0 100),(0 0,100 0),(0 0,0 -100),(0 0,-100 0))'))));
|
||||
# Inserting MULTIPOLGYON Geometry Values
|
||||
INSERT INTO gis_multi_polygon VALUES
|
||||
(601, ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 5,5 5,0 0)))')),
|
||||
(602, ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 5,5 5,0 0)),((5 5,5 10,10 10,5 5)))')),
|
||||
(603, ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0,0 0,0 0),(4 4,4 6,6 6,6 4,4 4)))'));
|
||||
INSERT INTO gis_multi_polygon VALUES
|
||||
(604, ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 5,5 5,0 0)))')),
|
||||
(605, ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0,0 0,0 0),(4 4,4 6,6 6,6 4,4 4)),((0 0,0 -2,-2 -2,0 0)))')),
|
||||
(606, ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,5 5,-5 5,0 0)),((0 0,-5 -5,5 -5,0 0)))'));
|
||||
INSERT INTO gis_multi_polygon VALUES
|
||||
(607, ST_GEOMFROMWKB(MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(5,0), POINT(5,5), POINT(0,5), POINT(0,0)))))),
|
||||
(608, ST_GEOMFROMWKB(MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(10,0), POINT(10,10), POINT(0,10), POINT(0,0)),
|
||||
LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4)))))),
|
||||
(609, ST_GEOMFROMWKB(MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(5,0), POINT(5,5), POINT(0,5), POINT(0,0))),
|
||||
POLYGON(LINESTRING(POINT(0,0), POINT(-5,0), POINT(-5,-5), POINT(0,-5), POINT(0,0))))));
|
||||
Warnings:
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
INSERT INTO gis_multi_polygon VALUES
|
||||
(610, ST_GEOMFROMWKB(MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(-5,0), POINT(-5,-5), POINT(0,-5), POINT(0,0)))))),
|
||||
(611, ST_GEOMFROMWKB(MULTIPOLYGON(POLYGON(LINESTRING(POINT(10,10), POINT(20,10), POINT(20,20), POINT(10,20), POINT(10,10)),
|
||||
LINESTRING(POINT(14,14), POINT(14,16), POINT(16,16), POINT(16,14), POINT(14,14)))))),
|
||||
(612, ST_GEOMFROMWKB(MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(0,10), POINT(10,10), POINT(10,0), POINT(0,0)),
|
||||
LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4))),
|
||||
POLYGON(LINESTRING(POINT(0,0), POINT(-5,0), POINT(-5,-5), POINT(0,-5), POINT(0,0))))));
|
||||
Warnings:
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
INSERT INTO gis_multi_polygon VALUES
|
||||
(613, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,5 5,5 -5,0 0)),((0 0,-5 5,-5 -5,0 0)))')))),
|
||||
(614, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,10 10,-10 10,0 0)),((0 0,-10 -10,10 -10,0 0)))')))),
|
||||
(615, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,5 5,10 0,5 -5,0 0)))'))));
|
||||
# Inserting GEOMETRYCOLLECTION Geometry Values
|
||||
INSERT INTO gis_geometrycollection VALUES
|
||||
(701, ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0))')),
|
||||
(702, ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))')),
|
||||
(703, ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION(POINT(5 5), POLYGON((0 0,0 10,10 10,10 0,0 0)))'));
|
||||
INSERT INTO gis_geometrycollection VALUES
|
||||
(704, ST_GEOMETRYCOLLECTIONFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))')),
|
||||
(705, ST_GEOMETRYCOLLECTIONFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0),'
|
||||
'LINESTRING(0 0,10 10),'
|
||||
'POLYGON((0 0,0 10,10 10,10 0,0 0,0 0, 0 0)))')),
|
||||
(706, ST_GEOMETRYCOLLECTIONFROMTEXT('GEOMETRYCOLLECTION(MULTIPOINT(0 0,5 5,10 10),'
|
||||
'MULTILINESTRING((0 0,10 10),(0 10,10 0)),'
|
||||
'MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)),'
|
||||
'((0 0,-10 0,-10 -10,0 -10,0 0))))'));
|
||||
INSERT INTO gis_geometrycollection VALUES
|
||||
(707, ST_GEOMCOLLFROMWKB(GEOMETRYCOLLECTION(POINT(0,0)))),
|
||||
(708, ST_GEOMCOLLFROMWKB(GEOMETRYCOLLECTION(POINT(0,0),
|
||||
LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4), POINT(6,6), POINT(8,8)),
|
||||
POLYGON(LINESTRING(POINT(0,0), POINT(0,10), POINT(10,10), POINT(10,0), POINT(0,0)),
|
||||
LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4)))))),
|
||||
(709, ST_GEOMCOLLFROMWKB(GEOMETRYCOLLECTION(MULTIPOINT(POINT(0,0), POINT(5,5), POINT(10,10)),
|
||||
MULTILINESTRING(LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4), POINT(6,6), POINT(8,8)),
|
||||
LINESTRING(POINT(10,10), POINT(5,5), POINT(0,10))),
|
||||
MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(0,10), POINT(10,10), POINT(10,0), POINT(0,0)),
|
||||
LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4))),
|
||||
POLYGON(LINESTRING(POINT(0,0), POINT(-10,0), POINT(-10,-10), POINT(0,0)))))));
|
||||
Warnings:
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
INSERT INTO gis_geometrycollection VALUES
|
||||
(710, ST_GEOMETRYCOLLECTIONFROMWKB(GEOMETRYCOLLECTION(POINT(0,0),
|
||||
LINESTRING(POINT(0,0), POINT(100,100))))),
|
||||
(711, ST_GEOMETRYCOLLECTIONFROMWKB(GEOMETRYCOLLECTION(POINT(10,10),
|
||||
LINESTRING(POINT(10,10), POINT(12,12), POINT(14,14), POINT(16,16), POINT(18,18)),
|
||||
POLYGON(LINESTRING(POINT(0,0), POINT(0,10), POINT(10,10), POINT(10,0), POINT(0,0)),
|
||||
LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4)))))),
|
||||
(712, ST_GEOMETRYCOLLECTIONFROMWKB(GEOMETRYCOLLECTION(MULTIPOINT(POINT(10,10), POINT(15,15), POINT(20,20)),
|
||||
MULTILINESTRING(LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4), POINT(6,6), POINT(8,8)),
|
||||
LINESTRING(POINT(10,10), POINT(5,5), POINT(0,10))),
|
||||
MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(0,10), POINT(10,10), POINT(10,0), POINT(0,0)),
|
||||
LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4))),
|
||||
POLYGON(LINESTRING(POINT(0,0), POINT(-10,0), POINT(-10,-10), POINT(0,0)))))));
|
||||
Warnings:
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
||||
INSERT INTO gis_geometrycollection VALUES
|
||||
(713, ST_GEOMCOLLFROMWKB(ST_ASWKB(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION('
|
||||
'POINT(0 0),'
|
||||
'LINESTRING(0 0,10 10),'
|
||||
'POLYGON((0 0,0 10,10 10,10 0,0 0)),'
|
||||
'MULTIPOINT(0 0,2 2,4 4,6 6,8 8,10 10),'
|
||||
'MULTILINESTRING((0 0,10 10),(0 10,10 0)),'
|
||||
'MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)),((5 5,5 10,10 10,10 5,5 5))))')))),
|
||||
(714, ST_GEOMCOLLFROMWKB(ST_ASWKB(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION('
|
||||
'GEOMETRYCOLLECTION('
|
||||
'POINT(0 0)),'
|
||||
'GEOMETRYCOLLECTION('
|
||||
'LINESTRING(0 0,10 10)),'
|
||||
'GEOMETRYCOLLECTION('
|
||||
'POLYGON((0 0,0 10,10 10,10 0,0 0))),'
|
||||
'GEOMETRYCOLLECTION('
|
||||
'MULTIPOINT(0 0,2 2,4 4,6 6,8 8,10 10)),'
|
||||
'GEOMETRYCOLLECTION('
|
||||
'MULTILINESTRING((0 0,10 10),(0 10,10 0))),'
|
||||
'GEOMETRYCOLLECTION('
|
||||
'MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)),((5 5,5 10,10 10,10 5,5 5)))))')))),
|
||||
(715, ST_GEOMCOLLFROMWKB(ST_ASWKB(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION('
|
||||
'GEOMETRYCOLLECTION(),'
|
||||
'POINT(0 0),'
|
||||
'GEOMETRYCOLLECTION('
|
||||
'LINESTRING(0 0,10 10),'
|
||||
'GEOMETRYCOLLECTION('
|
||||
'GEOMETRYCOLLECTION())),'
|
||||
'GEOMETRYCOLLECTION(),'
|
||||
'GEOMETRYCOLLECTION('
|
||||
'GEOMETRYCOLLECTION()),'
|
||||
'POLYGON((0 0,0 10,10 10,10 0,0 0)),'
|
||||
'MULTIPOINT(0 0,2 2,4 4,6 6,8 8,10 10),'
|
||||
'MULTILINESTRING((0 0,10 10),(0 10,10 0)),'
|
||||
'MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)),((5 5,5 10,10 10,10 5,5 5))))'))));
|
||||
# Creating a table with spatial index column
|
||||
CREATE TABLE geom_index (fid INTEGER NOT NULL PRIMARY KEY, g GEOMETRY NOT NULL, SPATIAL INDEX(g));
|
||||
# Inserting geometry values
|
||||
INSERT INTO geom_index SELECT * FROM gis_point;
|
||||
INSERT INTO geom_index SELECT * FROM gis_linestring;
|
||||
INSERT INTO geom_index SELECT * FROM gis_polygon;
|
||||
INSERT INTO geom_index SELECT * FROM gis_multi_point;
|
||||
INSERT INTO geom_index SELECT * FROM gis_multi_linestring;
|
||||
INSERT INTO geom_index SELECT * FROM gis_multi_polygon;
|
||||
INSERT INTO geom_index SELECT * FROM gis_geometrycollection;
|
||||
check table geom_index;
|
||||
Table Op Msg_type Msg_text
|
||||
test.geom_index check status OK
|
||||
# Final cleanup
|
||||
DROP TABLE gis_point;
|
||||
DROP TABLE gis_linestring;
|
||||
DROP TABLE gis_polygon;
|
||||
DROP TABLE gis_multi_point;
|
||||
DROP TABLE gis_multi_linestring;
|
||||
DROP TABLE gis_multi_polygon;
|
||||
DROP TABLE gis_geometrycollection;
|
||||
DROP TABLE geom_index;
|
41
mysql-test/suite/innodb_gis/r/kill_server.result
Normal file
41
mysql-test/suite/innodb_gis/r/kill_server.result
Normal file
@ -0,0 +1,41 @@
|
||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;
|
||||
create procedure insert_t1(IN total int)
|
||||
begin
|
||||
declare i int default 1;
|
||||
while (i <= total) DO
|
||||
insert into t1 values (i, Point(i, i));
|
||||
set i = i + 1;
|
||||
end while;
|
||||
end|
|
||||
CALL insert_t1(5000);
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
5000
|
||||
check table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
truncate table t1;
|
||||
CALL insert_t1(10000);
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
10000
|
||||
drop index c2 on t1;
|
||||
create spatial index idx on t1(c2);
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) DEFAULT NULL,
|
||||
`c2` geometry NOT NULL,
|
||||
SPATIAL KEY `idx` (`c2`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
check table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
truncate table t1;
|
||||
call mtr.add_suppression("InnoDB: page [0-9]+ in the doublewrite buffer is not within space bounds.*");
|
||||
START TRANSACTION;
|
||||
CALL insert_t1(5000);
|
||||
COMMIT;
|
||||
# Kill and restart
|
||||
drop procedure insert_t1;
|
||||
drop table t1;
|
57
mysql-test/suite/innodb_gis/r/multi_pk.result
Normal file
57
mysql-test/suite/innodb_gis/r/multi_pk.result
Normal file
@ -0,0 +1,57 @@
|
||||
create table t1 (c1 int, c2 varchar(255), c3 geometry not null, primary key(c1, c2), spatial index (c3))engine=innodb;
|
||||
create function rand_string(str_length tinyint unsigned, str_type tinyint unsigned) returns varchar(255)
|
||||
begin
|
||||
declare counter int unsigned default 0;
|
||||
declare const_chars varchar(64) default '0123456789';
|
||||
declare result varchar(255) default '';
|
||||
if str_type = 1 then
|
||||
set const_chars = '0123456789';
|
||||
elseif str_type = 2 then
|
||||
set const_chars = 'abcdefghijklmnopqrstuvwxyz';
|
||||
elseif str_type = 3 then
|
||||
set const_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
||||
elseif str_type = 4 then
|
||||
set const_chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
||||
elseif str_type = 5 then
|
||||
set const_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
||||
else
|
||||
set const_chars = '0123456789';
|
||||
end if;
|
||||
while counter < str_length do
|
||||
set result = concat(result,substr(const_chars,ceil(rand()*(length(const_chars)-1)),1));
|
||||
set counter = counter + 1;
|
||||
end while;
|
||||
return result;
|
||||
end|
|
||||
create procedure insert_t1(IN total int)
|
||||
begin
|
||||
declare i int default 1;
|
||||
declare i2 int default 1;
|
||||
declare str varchar(100) default '';
|
||||
declare dup_key int default 1;
|
||||
while i <= total DO
|
||||
set i2 = floor(0+(rand()*100));
|
||||
set str = rand_string(i2, 5);
|
||||
select count(*) into dup_key from t1 where c2 = str and c1 = i;
|
||||
while dup_key <> 0 do
|
||||
set i2 = floor(0+(rand()*100));
|
||||
set str = rand_string(i2, 5);
|
||||
select count(*) into dup_key from t1 where c2 = str and c1 = i;
|
||||
end while;
|
||||
insert into t1 values (i, str, Point(i, i));
|
||||
set i = i + 1;
|
||||
end while;
|
||||
end|
|
||||
CALL insert_t1(10000);
|
||||
check table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
start transaction;
|
||||
CALL insert_t1(30000);
|
||||
rollback;
|
||||
check table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
drop procedure insert_t1;
|
||||
drop function rand_string;
|
||||
drop table t1;
|
1531
mysql-test/suite/innodb_gis/r/point_basic.result
Normal file
1531
mysql-test/suite/innodb_gis/r/point_basic.result
Normal file
File diff suppressed because it is too large
Load Diff
549
mysql-test/suite/innodb_gis/r/point_big.result
Normal file
549
mysql-test/suite/innodb_gis/r/point_big.result
Normal file
@ -0,0 +1,549 @@
|
||||
#
|
||||
# Test when the POINT is on B-TREE
|
||||
#
|
||||
CREATE TABLE t1(fid INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, p POINT, KEY(p)) ENGINE=InnoDB;
|
||||
INSERT INTO t1 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)'))));
|
||||
SELECT ST_AsText(p) FROM t1;
|
||||
ST_AsText(p)
|
||||
POINT(10 10)
|
||||
POINT(20 10)
|
||||
POINT(20 20)
|
||||
POINT(10 20)
|
||||
SELECT ST_AsText(p) FROM t1 WHERE p = ST_PointFromText('POINT(20 20)');
|
||||
ST_AsText(p)
|
||||
POINT(20 20)
|
||||
INSERT INTO t1 VALUES
|
||||
(201, ST_PointFromText('POINT(100.32374832 101.23741821)')),
|
||||
(202, ST_PointFromText('POINT(102.43287328 100.23489233)')),
|
||||
(203, ST_PointFromText('POINT(101.43284962 100.45892392)')),
|
||||
(204, ST_PointFromWKB(ST_AsWKB(ST_PointFromText('POINT(103.43718640 105.248206478)')))),
|
||||
(205, ST_PointFromText('POINT(101.43284962 100.45892392)')),
|
||||
(206, ST_PointFromWKB(ST_AsWKB(ST_PointFromText('POINT(103.43718640 105.248206478)'))));
|
||||
SELECT ST_AsText(p), COUNT(*) FROM t1 GROUP BY p;
|
||||
ST_AsText(p) COUNT(*)
|
||||
POINT(10 10) 1
|
||||
POINT(10 20) 1
|
||||
POINT(20 10) 1
|
||||
POINT(20 20) 1
|
||||
POINT(101.43284962 100.45892392) 2
|
||||
POINT(100.32374832 101.23741821) 1
|
||||
POINT(102.43287328 100.23489233) 1
|
||||
POINT(103.4371864 105.248206478) 2
|
||||
TRUNCATE t1;
|
||||
SELECT * FROM t1;
|
||||
fid p
|
||||
INSERT INTO t1(p) VALUES(ST_PointFromText('POINT(10 10)')),
|
||||
(ST_PointFromText('POINT(10 20)')),
|
||||
(ST_PointFromText('POINT(10 40)')),
|
||||
(ST_PointFromText('POINT(10 60)')),
|
||||
(ST_PointFromText('POINT(20 15)')),
|
||||
(ST_PointFromText('POINT(30 10)')),
|
||||
(ST_PointFromText('POINT(40 10)')),
|
||||
(ST_PointFromText('POINT(50 10)')),
|
||||
(ST_PointFromText('POINT(60 5)')),
|
||||
(ST_PointFromText('POINT(60 10)')),
|
||||
(ST_PointFromText('POINT(60 20)')),
|
||||
(ST_PointFromText('POINT(60 100)')),
|
||||
(ST_PointFromText('POINT(100 100)')),
|
||||
(ST_PointFromText('POINT(80 60)')),
|
||||
(ST_PointFromText('POINT(81 50)')),
|
||||
(ST_PointFromText('POINT(82 70)')),
|
||||
(ST_PointFromText('POINT(83 30)')),
|
||||
(ST_PointFromText('POINT(20 100)')),
|
||||
(ST_PointFromText('POINT(150 2000)')),
|
||||
(ST_PointFromText('POINT(109 230)')),
|
||||
(ST_PointFromText('POINT(280 250)')),
|
||||
(ST_PointFromText('POINT(176 175)')),
|
||||
(ST_PointFromText('POINT(200 10)')),
|
||||
(NULL),
|
||||
(NULL);
|
||||
SELECT ST_AsText(p) FROM t1;
|
||||
ST_AsText(p)
|
||||
POINT(10 10)
|
||||
POINT(10 20)
|
||||
POINT(10 40)
|
||||
POINT(10 60)
|
||||
POINT(20 15)
|
||||
POINT(30 10)
|
||||
POINT(40 10)
|
||||
POINT(50 10)
|
||||
POINT(60 5)
|
||||
POINT(60 10)
|
||||
POINT(60 20)
|
||||
POINT(60 100)
|
||||
POINT(100 100)
|
||||
POINT(80 60)
|
||||
POINT(81 50)
|
||||
POINT(82 70)
|
||||
POINT(83 30)
|
||||
POINT(20 100)
|
||||
POINT(150 2000)
|
||||
POINT(109 230)
|
||||
POINT(280 250)
|
||||
POINT(176 175)
|
||||
POINT(200 10)
|
||||
NULL
|
||||
NULL
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
25
|
||||
SELECT ST_AsText(p) FROM t1;
|
||||
ST_AsText(p)
|
||||
POINT(10 10)
|
||||
POINT(10 20)
|
||||
POINT(10 40)
|
||||
POINT(10 60)
|
||||
POINT(20 15)
|
||||
POINT(30 10)
|
||||
POINT(40 10)
|
||||
POINT(50 10)
|
||||
POINT(60 5)
|
||||
POINT(60 10)
|
||||
POINT(60 20)
|
||||
POINT(60 100)
|
||||
POINT(100 100)
|
||||
POINT(80 60)
|
||||
POINT(81 50)
|
||||
POINT(82 70)
|
||||
POINT(83 30)
|
||||
POINT(20 100)
|
||||
POINT(150 2000)
|
||||
POINT(109 230)
|
||||
POINT(280 250)
|
||||
POINT(176 175)
|
||||
POINT(200 10)
|
||||
NULL
|
||||
NULL
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
25
|
||||
INSERT INTO t1(p) SELECT p FROM t1;
|
||||
INSERT INTO t1(p) SELECT p FROM t1;
|
||||
INSERT INTO t1(p) SELECT p FROM t1;
|
||||
INSERT INTO t1(p) SELECT p FROM t1;
|
||||
INSERT INTO t1(p) SELECT p FROM t1;
|
||||
INSERT INTO t1(p) SELECT p FROM t1;
|
||||
INSERT INTO t1(p) SELECT p FROM t1;
|
||||
INSERT INTO t1(p) SELECT p FROM t1;
|
||||
INSERT INTO t1(p) SELECT p FROM t1;
|
||||
INSERT INTO t1(p) SELECT p FROM t1;
|
||||
INSERT INTO t1(p) SELECT p FROM t1;
|
||||
INSERT INTO t1(p) SELECT p FROM t1;
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
102400
|
||||
SELECT ST_AsText(p), COUNT(*) FROM t1 GROUP BY p;
|
||||
ST_AsText(p) COUNT(*)
|
||||
NULL 8192
|
||||
POINT(10 10) 4096
|
||||
POINT(10 20) 4096
|
||||
POINT(10 40) 4096
|
||||
POINT(10 60) 4096
|
||||
POINT(20 15) 4096
|
||||
POINT(20 100) 4096
|
||||
POINT(30 10) 4096
|
||||
POINT(40 10) 4096
|
||||
POINT(50 10) 4096
|
||||
POINT(60 5) 4096
|
||||
POINT(60 10) 4096
|
||||
POINT(60 20) 4096
|
||||
POINT(60 100) 4096
|
||||
POINT(80 60) 4096
|
||||
POINT(100 100) 4096
|
||||
POINT(176 175) 4096
|
||||
POINT(200 10) 4096
|
||||
POINT(81 50) 4096
|
||||
POINT(109 230) 4096
|
||||
POINT(82 70) 4096
|
||||
POINT(280 250) 4096
|
||||
POINT(83 30) 4096
|
||||
POINT(150 2000) 4096
|
||||
SELECT COUNT(*) FROM t1 WHERE p = ST_PointFromText('POINT(280 250)');
|
||||
COUNT(*)
|
||||
4096
|
||||
DELETE FROM t1 WHERE p = ST_PointFromText('POINT(280 250)');
|
||||
SELECT COUNT(*) FROM t1 WHERE p = ST_PointFromText('POINT(280 250)');
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT COUNT(*) FROM t1 WHERE p = ST_PointFromText('POINT(60 5)');
|
||||
COUNT(*)
|
||||
4096
|
||||
DELETE FROM t1 WHERE P = ST_PointFromText('POINT(60 5)');
|
||||
SELECT COUNT(*) FROM t1 WHERE p = ST_PointFromText('POINT(60 5)');
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT ST_AsText(p), COUNT(*) FROM t1 WHERE p = ST_PointFromText('POINT(60 10)') OR p = ST_PointFromText('POINT(60 20)') OR p = ST_PointFromText('POINT(60 30)') GROUP BY p;
|
||||
ST_AsText(p) COUNT(*)
|
||||
POINT(60 10) 4096
|
||||
POINT(60 20) 4096
|
||||
UPDATE t1 SET p = ST_PointFromText('POINT(101 102)') WHERE p = ST_PointFromText('POINT(60 10)') OR p = ST_PointFromText('POINT(60 20)') OR p = ST_PointFromText('POINT(60 30)');
|
||||
SELECT ST_AsText(p), COUNT(*) FROM t1 WHERE p = ST_PointFromText('POINT(60 10)') OR p = ST_PointFromText('POINT(60 20)') OR p = ST_PointFromText('POINT(60 30)') GROUP BY p;
|
||||
ST_AsText(p) COUNT(*)
|
||||
SELECT COUNT(*) FROM t1 WHERE p = ST_PointFromText('POINT(101 102)');
|
||||
COUNT(*)
|
||||
8192
|
||||
SELECT COUNT(*) FROM t1 WHERE p IS NULL;
|
||||
COUNT(*)
|
||||
8192
|
||||
UPDATE t1 SET p = ST_PointFromText('POINT(160 160)') WHERE p IS NULL;
|
||||
SELECT COUNT(*) FROM t1 WHERE p IS NULL;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT COUNT(*) FROM t1 WHERE p = ST_PointFromText('POINT(160 160)');
|
||||
COUNT(*)
|
||||
8192
|
||||
SELECT ST_AsText(p), COUNT(*) FROM t1 GROUP BY p;
|
||||
ST_AsText(p) COUNT(*)
|
||||
POINT(10 10) 4096
|
||||
POINT(10 20) 4096
|
||||
POINT(10 40) 4096
|
||||
POINT(10 60) 4096
|
||||
POINT(20 15) 4096
|
||||
POINT(20 100) 4096
|
||||
POINT(30 10) 4096
|
||||
POINT(40 10) 4096
|
||||
POINT(50 10) 4096
|
||||
POINT(60 100) 4096
|
||||
POINT(80 60) 4096
|
||||
POINT(100 100) 4096
|
||||
POINT(160 160) 8192
|
||||
POINT(176 175) 4096
|
||||
POINT(200 10) 4096
|
||||
POINT(81 50) 4096
|
||||
POINT(101 102) 8192
|
||||
POINT(109 230) 4096
|
||||
POINT(82 70) 4096
|
||||
POINT(83 30) 4096
|
||||
POINT(150 2000) 4096
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
94208
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Test when POINT is used in spatial index
|
||||
#
|
||||
SET @ls1 = ST_GeomFromText('LINESTRING(0 20, 10 0)');
|
||||
SET @ls2 = ST_GeomFromText('LINESTRING(0 0, 10 20)');
|
||||
SET @ls3 = ST_GeomFromText('LINESTRING(20 -40, 21 -42)');
|
||||
SET @ls4 = ST_GeomFromText('LINESTRING(20 -42, 21 -40)');
|
||||
SET @poly1 = ST_GeomFromText('POLYGON((2 2, 2 10, 10 10, 10 2, 2 2))');
|
||||
SET @poly2 = ST_GeomFromText('POLYGON((0 0, -5 0, -4 -1, -6 -15, -3 -15, 0 0))');
|
||||
SET @poly3 = ST_GeomFromText('POLYGON((10.0 10.0, 20.5 20, 20.5 50, 32.0 64.0, 32.3 64.6, 5 60, 10 10))');
|
||||
SET @poly4 = ST_GeomFromText('POLYGON((0 10, -10 10, -10 -10, 0 -10, 0 10))');
|
||||
SET @p1 = ST_PointFromText('POINT(0 0)');
|
||||
SET @mpoly = ST_GeomFromText('MULTIPOLYGON(((3 3, 3 16, 16 16, 16 3, 3 3)), ((10 10, 10 50, 50 50, 50 10, 10 10)))');
|
||||
CREATE TABLE gis_point (p1 POINT NOT NULL, p2 POINT NOT NULL, SPATIAL KEY k1 (p1), SPATIAL KEY k2 (p2)) ENGINE=InnoDB;
|
||||
INSERT INTO gis_point VALUES
|
||||
(ST_PointFromText('POINT(1 2)'), ST_PointFromText('POINT(-1 -3)')),
|
||||
(ST_PointFromText('POINT(2 4)'), ST_PointFromText('POINT(-2 -6)')),
|
||||
(ST_PointFromText('POINT(3 6)'), ST_PointFromText('POINT(-3 -9)')),
|
||||
(ST_PointFromText('POINT(4 8)'), ST_PointFromText('POINT(-4 -12)')),
|
||||
(ST_PointFromText('POINT(5 10)'), ST_PointFromText('POINT(-5 -15)')),
|
||||
(ST_PointFromText('POINT(6 12)'), ST_PointFromText('POINT(-6 -18)')),
|
||||
(ST_PointFromText('POINT(7 14)'), ST_PointFromText('POINT(-7 -21)')),
|
||||
(ST_PointFromText('POINT(8 16)'), ST_PointFromText('POINT(0 0)')),
|
||||
(ST_PointFromText('POINT(9 18)'), ST_PointFromText('POINT(-4 2)')),
|
||||
(ST_PointFromText('POINT(10 21)'), ST_PointFromText('POINT(-6 3)')),
|
||||
(ST_PointFromText('POINT(20.5 41)'), ST_PointFromText('POINT(-8 4)')),
|
||||
(ST_PointFromText('POINT(26.25 57)'), ST_PointFromText('POINT(1 2)')),
|
||||
(ST_PointFromText('POINT(32.1234 64.2468)'), ST_PointFromText('POINT(-1 -1)'));
|
||||
'The ORDER BY for spatial index will use filesort'
|
||||
EXPLAIN SELECT ST_AsText(p1), ST_AsText(p2) FROM gis_point ORDER BY p1, p2;
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE gis_point NULL ALL NULL NULL NULL NULL # 100.00 Using filesort
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select st_astext(`test`.`gis_point`.`p1`) AS `ST_AsText(p1)`,st_astext(`test`.`gis_point`.`p2`) AS `ST_AsText(p2)` from `test`.`gis_point` order by `test`.`gis_point`.`p1`,`test`.`gis_point`.`p2`
|
||||
SELECT ST_AsText(p1), ST_AsText(p2) FROM gis_point ORDER BY p1, p2;
|
||||
ST_AsText(p1) ST_AsText(p2)
|
||||
POINT(2 4) POINT(-2 -6)
|
||||
POINT(3 6) POINT(-3 -9)
|
||||
POINT(4 8) POINT(-4 -12)
|
||||
POINT(5 10) POINT(-5 -15)
|
||||
POINT(6 12) POINT(-6 -18)
|
||||
POINT(7 14) POINT(-7 -21)
|
||||
POINT(8 16) POINT(0 0)
|
||||
POINT(9 18) POINT(-4 2)
|
||||
POINT(10 21) POINT(-6 3)
|
||||
POINT(1 2) POINT(-1 -3)
|
||||
POINT(26.25 57) POINT(1 2)
|
||||
POINT(20.5 41) POINT(-8 4)
|
||||
POINT(32.1234 64.2468) POINT(-1 -1)
|
||||
'Try to do IDU on the table and verify the result'
|
||||
DELETE FROM gis_point WHERE ST_Equals(p2, ST_PointFromText('POINT(-8 4)'));
|
||||
INSERT INTO gis_point VALUES(ST_PointFromText('POINT(20.5 -41)'), ST_PointFromText('POINT(8 -4)'));
|
||||
SELECT ST_AsText(p1) AS 'Expect (32.1234 64.2468)' FROM gis_point WHERE ST_TOUCHES(@poly3, p1) AND MBRWithin(p2, @poly4);
|
||||
Expect (32.1234 64.2468)
|
||||
POINT(32.1234 64.2468)
|
||||
UPDATE gis_point SET p1 = ST_PointFromText('POINT(20.5 41)'), p2 = ST_PointFromText('POINT(-8 4)') WHERE ST_Intersection(@ls3, @ls4) = p1;
|
||||
SELECT ST_AsText(p1) AS 'Expect (32.1234 64.2468) AND (20.5 41)' FROM gis_point WHERE ST_TOUCHES(@poly3, p1) AND MBRWithin(p2, @poly4);
|
||||
Expect (32.1234 64.2468) AND (20.5 41)
|
||||
POINT(32.1234 64.2468)
|
||||
POINT(20.5 41)
|
||||
CHECK TABLE gis_point;
|
||||
Table Op Msg_type Msg_text
|
||||
test.gis_point check status OK
|
||||
============================================================
|
||||
Use a trx to test the IDU on the table and verify the result
|
||||
============================================================
|
||||
START TRANSACTION;
|
||||
DELETE FROM gis_point WHERE ST_Equals(p2, ST_PointFromText('POINT(-8 4)'));
|
||||
INSERT INTO gis_point VALUES(ST_PointFromText('POINT(20.5 -41)'), ST_PointFromText('POINT(8 -4)'));
|
||||
SELECT ST_AsText(p1) AS 'Expect (32.1234 64.2468)' FROM gis_point WHERE ST_TOUCHES(@poly3, p1) AND MBRWithin(p2, @poly4);
|
||||
Expect (32.1234 64.2468)
|
||||
POINT(32.1234 64.2468)
|
||||
UPDATE gis_point SET p1 = ST_PointFromText('POINT(20.5 49)'), p2 = ST_PointFromText('POINT(-8 4)') WHERE ST_Intersection(@ls3, @ls4) = p1;
|
||||
SELECT ST_AsText(p1) AS 'Expect (32.1234 64.2468) AND (20.5 49)' FROM gis_point WHERE ST_TOUCHES(@poly3, p1) AND MBRWithin(p2, @poly4);
|
||||
Expect (32.1234 64.2468) AND (20.5 49)
|
||||
POINT(32.1234 64.2468)
|
||||
POINT(20.5 49)
|
||||
ROLLBACK;
|
||||
SELECT ST_AsText(p1) AS 'Expect (32.1234 64.2468) AND (20.5 41)' FROM gis_point WHERE ST_TOUCHES(@poly3, p1) AND MBRWithin(p2, @poly4);
|
||||
Expect (32.1234 64.2468) AND (20.5 41)
|
||||
POINT(32.1234 64.2468)
|
||||
POINT(20.5 41)
|
||||
CHECK TABLE gis_point;
|
||||
Table Op Msg_type Msg_text
|
||||
test.gis_point check status OK
|
||||
=======================================================
|
||||
Enlarge the table by inserting the same data and verify
|
||||
=======================================================
|
||||
INSERT INTO gis_point SELECT * FROM gis_point;
|
||||
INSERT INTO gis_point SELECT * FROM gis_point;
|
||||
INSERT INTO gis_point SELECT * FROM gis_point;
|
||||
INSERT INTO gis_point SELECT * FROM gis_point;
|
||||
INSERT INTO gis_point SELECT * FROM gis_point;
|
||||
INSERT INTO gis_point SELECT * FROM gis_point;
|
||||
INSERT INTO gis_point SELECT * FROM gis_point;
|
||||
INSERT INTO gis_point SELECT * FROM gis_point;
|
||||
INSERT INTO gis_point SELECT * FROM gis_point;
|
||||
INSERT INTO gis_point SELECT * FROM gis_point;
|
||||
CHECK TABLE gis_point;
|
||||
Table Op Msg_type Msg_text
|
||||
test.gis_point check status OK
|
||||
SELECT COUNT(*), ST_AsText(p1), ST_AsText(p2) FROM gis_point GROUP BY p1, p2;
|
||||
COUNT(*) ST_AsText(p1) ST_AsText(p2)
|
||||
1024 POINT(2 4) POINT(-2 -6)
|
||||
1024 POINT(3 6) POINT(-3 -9)
|
||||
1024 POINT(4 8) POINT(-4 -12)
|
||||
1024 POINT(5 10) POINT(-5 -15)
|
||||
1024 POINT(6 12) POINT(-6 -18)
|
||||
1024 POINT(7 14) POINT(-7 -21)
|
||||
1024 POINT(8 16) POINT(0 0)
|
||||
1024 POINT(9 18) POINT(-4 2)
|
||||
1024 POINT(10 21) POINT(-6 3)
|
||||
1024 POINT(1 2) POINT(-1 -3)
|
||||
1024 POINT(26.25 57) POINT(1 2)
|
||||
1024 POINT(20.5 41) POINT(-8 4)
|
||||
1024 POINT(32.1234 64.2468) POINT(-1 -1)
|
||||
SELECT COUNT(*), ST_AsText(p1) FROM gis_point WHERE ST_Intersection(@ls1, @ls2) = p1 GROUP BY p1;
|
||||
COUNT(*) ST_AsText(p1)
|
||||
1024 POINT(5 10)
|
||||
SELECT COUNT(*), ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @poly1) GROUP BY p1;
|
||||
COUNT(*) ST_AsText(p1)
|
||||
1024 POINT(3 6)
|
||||
1024 POINT(4 8)
|
||||
SELECT COUNT(*), ST_AsText(p2) FROM gis_point WHERE ST_Contains(@poly2, p2) GROUP BY p2;
|
||||
COUNT(*) ST_AsText(p2)
|
||||
1024 POINT(-2 -6)
|
||||
1024 POINT(-3 -9)
|
||||
1024 POINT(-4 -12)
|
||||
1024 POINT(-1 -3)
|
||||
1024 POINT(-1 -1)
|
||||
SELECT COUNT(*), ST_AsText(p2) FROM gis_point WHERE ST_Equals(p2, @p1) GROUP BY p2;
|
||||
COUNT(*) ST_AsText(p2)
|
||||
1024 POINT(0 0)
|
||||
SELECT COUNT(*), ST_AsText(p1) FROM gis_point WHERE ST_TOUCHES(@poly3, p1) AND MBRWithin(p2, @poly4) GROUP BY p1;
|
||||
COUNT(*) ST_AsText(p1)
|
||||
1024 POINT(20.5 41)
|
||||
1024 POINT(32.1234 64.2468)
|
||||
SELECT COUNT(*), ST_AsText(p1), ST_AsText(p2) FROM gis_point WHERE ST_Contains(@mpoly, p1) GROUP BY p1, p2;
|
||||
COUNT(*) ST_AsText(p1) ST_AsText(p2)
|
||||
1024 POINT(4 8) POINT(-4 -12)
|
||||
1024 POINT(5 10) POINT(-5 -15)
|
||||
1024 POINT(6 12) POINT(-6 -18)
|
||||
1024 POINT(7 14) POINT(-7 -21)
|
||||
1024 POINT(20.5 41) POINT(-8 4)
|
||||
SELECT COUNT(*), ST_AsText(p1), ST_AsText(p2) FROM gis_point WHERE ST_Contains(@mpoly, p1) AND NOT MBRWithin(p1, @mpoly) GROUP BY p1, p2;
|
||||
COUNT(*) ST_AsText(p1) ST_AsText(p2)
|
||||
======================================================================
|
||||
Build another new table with the same schema, will insert data from this table to the orignal one
|
||||
======================================================================
|
||||
CREATE TABLE p(p1 POINT NOT NULL, p2 POINT NOT NULL, SPATIAL INDEX k1(p2)) ENGINE=InnoDB;
|
||||
INSERT INTO p VALUES(ST_PointFromText('POINT(1000 -1000)'), ST_PointFromText('POINT(-201 203.56)'));
|
||||
INSERT INTO p VALUES(ST_PointFromText('POINT(20.5 43.9832)'), ST_PointFromText('POINT(-0 0)'));
|
||||
INSERT INTO p VALUES(ST_PointFromText('POINT(-4.2 -6.98)'), ST_PointFromText('POINT(-120.5 343.9832)'));
|
||||
INSERT INTO p SELECT * FROM p WHERE MBRWithin(p1, ST_GeomFromText('POLYGON((0 0, 0 2000, 2000 2000, 2000 -2000, 0 -2000, 0 0))'));
|
||||
INSERT INTO p SELECT * FROM p WHERE MBRWithin(p1, ST_GeomFromText('POLYGON((0 0, -10 0, -100 -100, 0 -50, 0 0))'));
|
||||
SELECT COUNT(*), ST_AsText(p1), ST_AsText(p2) FROM p GROUP BY p1, p2;
|
||||
COUNT(*) ST_AsText(p1) ST_AsText(p2)
|
||||
2 POINT(1000 -1000) POINT(-201 203.56)
|
||||
2 POINT(20.5 43.9832) POINT(-0 0)
|
||||
2 POINT(-4.2 -6.98) POINT(-120.5 343.9832)
|
||||
INSERT INTO gis_point SELECT * FROM p;
|
||||
INSERT INTO gis_point SELECT * FROM p;
|
||||
INSERT INTO gis_point SELECT * FROM p;
|
||||
INSERT INTO gis_point SELECT * FROM p;
|
||||
INSERT INTO gis_point SELECT * FROM p;
|
||||
INSERT INTO gis_point SELECT * FROM p;
|
||||
INSERT INTO gis_point SELECT * FROM p;
|
||||
CHECK TABLE gis_point;
|
||||
Table Op Msg_type Msg_text
|
||||
test.gis_point check status OK
|
||||
SELECT COUNT(*), ST_AsText(p1), ST_AsText(p2) FROM gis_point GROUP BY p1, p2;
|
||||
COUNT(*) ST_AsText(p1) ST_AsText(p2)
|
||||
1024 POINT(2 4) POINT(-2 -6)
|
||||
1024 POINT(3 6) POINT(-3 -9)
|
||||
1024 POINT(4 8) POINT(-4 -12)
|
||||
1024 POINT(5 10) POINT(-5 -15)
|
||||
1024 POINT(6 12) POINT(-6 -18)
|
||||
1024 POINT(7 14) POINT(-7 -21)
|
||||
1024 POINT(8 16) POINT(0 0)
|
||||
1024 POINT(9 18) POINT(-4 2)
|
||||
1024 POINT(10 21) POINT(-6 3)
|
||||
1024 POINT(1 2) POINT(-1 -3)
|
||||
1024 POINT(26.25 57) POINT(1 2)
|
||||
14 POINT(1000 -1000) POINT(-201 203.56)
|
||||
1024 POINT(20.5 41) POINT(-8 4)
|
||||
14 POINT(20.5 43.9832) POINT(-0 0)
|
||||
1024 POINT(32.1234 64.2468) POINT(-1 -1)
|
||||
14 POINT(-4.2 -6.98) POINT(-120.5 343.9832)
|
||||
SELECT COUNT(*), ST_AsText(p1) FROM gis_point WHERE ST_TOUCHES(@poly3, p1) AND MBRWithin(p2, @poly4) GROUP BY p1;
|
||||
COUNT(*) ST_AsText(p1)
|
||||
1024 POINT(20.5 41)
|
||||
1024 POINT(32.1234 64.2468)
|
||||
SELECT COUNT(*), ST_AsText(p2) FROM gis_point WHERE MBRWithin(p2, @poly2) GROUP BY p2;
|
||||
COUNT(*) ST_AsText(p2)
|
||||
1024 POINT(-2 -6)
|
||||
1024 POINT(-3 -9)
|
||||
1024 POINT(-4 -12)
|
||||
1024 POINT(-1 -3)
|
||||
1024 POINT(-1 -1)
|
||||
DROP TABLE p;
|
||||
================================
|
||||
Use a trx to test IUD and verify
|
||||
================================
|
||||
=============================================
|
||||
Delete those rows selected from another table
|
||||
=============================================
|
||||
SELECT COUNT(*), ST_AsText(p1), ST_AsText(p2) FROM gis_point GROUP BY p1, p2;
|
||||
COUNT(*) ST_AsText(p1) ST_AsText(p2)
|
||||
1024 POINT(2 4) POINT(-2 -6)
|
||||
1024 POINT(3 6) POINT(-3 -9)
|
||||
1024 POINT(4 8) POINT(-4 -12)
|
||||
1024 POINT(5 10) POINT(-5 -15)
|
||||
1024 POINT(6 12) POINT(-6 -18)
|
||||
1024 POINT(7 14) POINT(-7 -21)
|
||||
1024 POINT(8 16) POINT(0 0)
|
||||
1024 POINT(9 18) POINT(-4 2)
|
||||
1024 POINT(10 21) POINT(-6 3)
|
||||
1024 POINT(1 2) POINT(-1 -3)
|
||||
1024 POINT(26.25 57) POINT(1 2)
|
||||
14 POINT(1000 -1000) POINT(-201 203.56)
|
||||
1024 POINT(20.5 41) POINT(-8 4)
|
||||
14 POINT(20.5 43.9832) POINT(-0 0)
|
||||
1024 POINT(32.1234 64.2468) POINT(-1 -1)
|
||||
14 POINT(-4.2 -6.98) POINT(-120.5 343.9832)
|
||||
UPDATE gis_point SET p2 = ST_PointFromText('POINT(2000 2000)') WHERE ST_Contains(ST_GeomFromText('POLYGON((-100 100, -400 100, -400 400, -100 400, -100 100))'), p2) OR ST_Contains(ST_GeomFromText('POLYGON((-0.0001 -0.0002, -0.0001 0.00002, 0.00000005 0.000001, 0.0000025 -0.001, -0.0001 -0.0002))'), p2);
|
||||
CHECK TABLE gis_point;
|
||||
Table Op Msg_type Msg_text
|
||||
test.gis_point check status OK
|
||||
'To remove all the just updated rows'
|
||||
DELETE FROM gis_point WHERE ST_Intersection(ST_GeomFromText('LINESTRING(1800 1900, 2200 2100)'), ST_GeomFromText('LINESTRING(0 0, 2001 2001)')) = p2;
|
||||
INSERT INTO gis_point VALUES
|
||||
(ST_PointFromText('POINT(8 16)'), ST_PointFromText('POINT(0 0)')),
|
||||
(ST_PointFromText('POINT(8 16)'), ST_PointFromText('POINT(0 0)'));
|
||||
======================================================================
|
||||
Following results should be almost the same with those at the beginning
|
||||
======================================================================
|
||||
SELECT COUNT(*), ST_AsText(p1), ST_AsText(p2) FROM gis_point GROUP BY p1, p2;
|
||||
COUNT(*) ST_AsText(p1) ST_AsText(p2)
|
||||
1024 POINT(2 4) POINT(-2 -6)
|
||||
1024 POINT(3 6) POINT(-3 -9)
|
||||
1024 POINT(4 8) POINT(-4 -12)
|
||||
1024 POINT(5 10) POINT(-5 -15)
|
||||
1024 POINT(6 12) POINT(-6 -18)
|
||||
1024 POINT(7 14) POINT(-7 -21)
|
||||
2 POINT(8 16) POINT(0 0)
|
||||
1024 POINT(9 18) POINT(-4 2)
|
||||
1024 POINT(10 21) POINT(-6 3)
|
||||
1024 POINT(1 2) POINT(-1 -3)
|
||||
1024 POINT(26.25 57) POINT(1 2)
|
||||
1024 POINT(20.5 41) POINT(-8 4)
|
||||
1024 POINT(32.1234 64.2468) POINT(-1 -1)
|
||||
SELECT COUNT(*), ST_AsText(p1), ST_AsText(p2)
|
||||
FROM gis_point
|
||||
WHERE ST_Contains(ST_GeomFromText('POLYGON((-1000 -1000, -1000 1000, 1000 1000, 1001 -1001, -1000 -1000))'), p1)
|
||||
GROUP BY p1, p2;
|
||||
COUNT(*) ST_AsText(p1) ST_AsText(p2)
|
||||
1024 POINT(2 4) POINT(-2 -6)
|
||||
1024 POINT(3 6) POINT(-3 -9)
|
||||
1024 POINT(4 8) POINT(-4 -12)
|
||||
1024 POINT(5 10) POINT(-5 -15)
|
||||
1024 POINT(6 12) POINT(-6 -18)
|
||||
1024 POINT(7 14) POINT(-7 -21)
|
||||
2 POINT(8 16) POINT(0 0)
|
||||
1024 POINT(9 18) POINT(-4 2)
|
||||
1024 POINT(10 21) POINT(-6 3)
|
||||
1024 POINT(1 2) POINT(-1 -3)
|
||||
1024 POINT(26.25 57) POINT(1 2)
|
||||
1024 POINT(20.5 41) POINT(-8 4)
|
||||
1024 POINT(32.1234 64.2468) POINT(-1 -1)
|
||||
SELECT ST_AsText(p1), ST_AsText(p2) FROM gis_point GROUP BY p1, p2;
|
||||
ST_AsText(p1) ST_AsText(p2)
|
||||
POINT(2 4) POINT(-2 -6)
|
||||
POINT(3 6) POINT(-3 -9)
|
||||
POINT(4 8) POINT(-4 -12)
|
||||
POINT(5 10) POINT(-5 -15)
|
||||
POINT(6 12) POINT(-6 -18)
|
||||
POINT(7 14) POINT(-7 -21)
|
||||
POINT(8 16) POINT(0 0)
|
||||
POINT(9 18) POINT(-4 2)
|
||||
POINT(10 21) POINT(-6 3)
|
||||
POINT(1 2) POINT(-1 -3)
|
||||
POINT(26.25 57) POINT(1 2)
|
||||
POINT(20.5 41) POINT(-8 4)
|
||||
POINT(32.1234 64.2468) POINT(-1 -1)
|
||||
SELECT COUNT(*), ST_AsText(p1) FROM gis_point WHERE ST_Intersection(@ls1, @ls2) = p1 GROUP BY p1;
|
||||
COUNT(*) ST_AsText(p1)
|
||||
1024 POINT(5 10)
|
||||
SELECT COUNT(*), ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @poly1) GROUP BY p1;
|
||||
COUNT(*) ST_AsText(p1)
|
||||
1024 POINT(3 6)
|
||||
1024 POINT(4 8)
|
||||
SELECT COUNT(*), ST_AsText(p2) FROM gis_point WHERE ST_Contains(@poly2, p2) GROUP BY p2;
|
||||
COUNT(*) ST_AsText(p2)
|
||||
1024 POINT(-2 -6)
|
||||
1024 POINT(-3 -9)
|
||||
1024 POINT(-4 -12)
|
||||
1024 POINT(-1 -3)
|
||||
1024 POINT(-1 -1)
|
||||
SELECT COUNT(*), ST_AsText(p2) FROM gis_point WHERE ST_Equals(p2, @p1) GROUP BY p2;
|
||||
COUNT(*) ST_AsText(p2)
|
||||
2 POINT(0 0)
|
||||
SELECT COUNT(*), ST_AsText(p1) FROM gis_point WHERE ST_TOUCHES(@poly3, p1) AND MBRWithin(p2, @poly4) GROUP BY p1;
|
||||
COUNT(*) ST_AsText(p1)
|
||||
1024 POINT(20.5 41)
|
||||
1024 POINT(32.1234 64.2468)
|
||||
SELECT COUNT(*), ST_AsText(p1), ST_AsText(p2) FROM gis_point WHERE ST_Contains(@mpoly, p1) GROUP BY p1, p2;
|
||||
COUNT(*) ST_AsText(p1) ST_AsText(p2)
|
||||
1024 POINT(4 8) POINT(-4 -12)
|
||||
1024 POINT(5 10) POINT(-5 -15)
|
||||
1024 POINT(6 12) POINT(-6 -18)
|
||||
1024 POINT(7 14) POINT(-7 -21)
|
||||
1024 POINT(20.5 41) POINT(-8 4)
|
||||
SELECT COUNT(*), ST_AsText(p1), ST_AsText(p2) FROM gis_point WHERE ST_Contains(@mpoly, p1) AND NOT MBRWithin(p1, @mpoly) GROUP BY p1, p2;
|
||||
COUNT(*) ST_AsText(p1) ST_AsText(p2)
|
||||
CHECK TABLE gis_point;
|
||||
Table Op Msg_type Msg_text
|
||||
test.gis_point check status OK
|
||||
DROP TABLE gis_point;
|
154
mysql-test/suite/innodb_gis/r/repeatable_spatial.result
Normal file
154
mysql-test/suite/innodb_gis/r/repeatable_spatial.result
Normal file
@ -0,0 +1,154 @@
|
||||
CREATE TABLE tab(c1 int NOT NULL PRIMARY KEY,c2 POINT NOT NULL,
|
||||
c3 LINESTRING NOT NULL,c4 POLYGON NOT NULL,c5 GEOMETRY NOT NULL)
|
||||
ENGINE=InnoDB;
|
||||
ALTER TABLE tab ADD SPATIAL INDEX idx2(c2 ASC);
|
||||
ALTER TABLE tab ADD SPATIAL KEY idx3(c3 DESC);
|
||||
ALTER TABLE tab ADD SPATIAL INDEX idx4(c4 ASC) COMMENT 'testing spatial index on Polygon';
|
||||
ALTER TABLE tab ADD SPATIAL KEY idx5(c5 ASC) COMMENT 'testing spatial index on Geometry';
|
||||
INSERT INTO tab(c1,c2,c3,c4,c5)
|
||||
VALUES(1,ST_GeomFromText('POINT(10 10)'),ST_GeomFromText('LINESTRING(5 5,20 20,30 30)'),
|
||||
ST_GeomFromText('POLYGON((30 30,40 40,50 50,30 50,30 40,30 30))'),
|
||||
ST_GeomFromText('POLYGON((30 30,40 40,50 50,30 50,30 40,30 30))'));
|
||||
SELECT c1,ST_AsText(c2),ST_AsText(c3),ST_AsText(c4),ST_AsText(c5) FROM tab;
|
||||
c1 ST_AsText(c2) ST_AsText(c3) ST_AsText(c4) ST_AsText(c5)
|
||||
1 POINT(10 10) LINESTRING(5 5,20 20,30 30) POLYGON((30 30,40 40,50 50,30 50,30 40,30 30)) POLYGON((30 30,40 40,50 50,30 50,30 40,30 30))
|
||||
SELECT COUNT(*) FROM tab;
|
||||
COUNT(*)
|
||||
1
|
||||
"In connection 1"
|
||||
SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||
SELECT @@tx_isolation;
|
||||
@@tx_isolation
|
||||
REPEATABLE-READ
|
||||
SELECT COUNT(*) FROM tab;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT c1,ST_AsText(c2),ST_AsText(c3),ST_AsText(c4),ST_AsText(c5) FROM tab;
|
||||
c1 ST_AsText(c2) ST_AsText(c3) ST_AsText(c4) ST_AsText(c5)
|
||||
1 POINT(10 10) LINESTRING(5 5,20 20,30 30) POLYGON((30 30,40 40,50 50,30 50,30 40,30 30)) POLYGON((30 30,40 40,50 50,30 50,30 40,30 30))
|
||||
"In connection 2"
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
SELECT @@tx_isolation;
|
||||
@@tx_isolation
|
||||
READ-COMMITTED
|
||||
START TRANSACTION;
|
||||
INSERT INTO tab(c1,c2,c3,c4,c5)
|
||||
VALUES(2,ST_GeomFromText('POINT(20 20)'),ST_GeomFromText('LINESTRING(20 20,30 30,40 40)'),
|
||||
ST_GeomFromText('POLYGON((40 50,40 70,50 100,70 100,80 80,70 50,40 50))'),
|
||||
ST_GeomFromText('POLYGON((40 50,40 70,50 100,70 100,80 80,70 50,40 50))'));
|
||||
SET @g1 = ST_GeomFromText('POLYGON((30 30,40 40,50 50,30 50,30 40,30 30))');
|
||||
SET @g2 = ST_GeomFromText('POINT(10 10)');
|
||||
UPDATE tab SET C5 = ST_GeomFromText('POLYGON((300 300,400 400,500 500,300 500,300 400,300 300))')
|
||||
WHERE MBREquals(tab.c4, @g1) AND MBREquals(tab.c2, @g2);
|
||||
"In connection 1"
|
||||
SET @g3 = ST_GeomFromText('POLYGON((40 50,40 70,50 100,70 100,80 80,70 50,40 50))');
|
||||
SELECT c1,ST_AsText(c2),ST_AsText(c4),ST_AsText(c5) FROM tab WHERE MBREquals(tab.c5, @g3);
|
||||
c1 ST_AsText(c2) ST_AsText(c4) ST_AsText(c5)
|
||||
SELECT COUNT(*) FROM tab;
|
||||
COUNT(*)
|
||||
1
|
||||
START TRANSACTION;
|
||||
SELECT COUNT(*) FROM tab;
|
||||
COUNT(*)
|
||||
1
|
||||
"In connection 2"
|
||||
SELECT COUNT(*) FROM tab;
|
||||
COUNT(*)
|
||||
2
|
||||
COMMIT;
|
||||
"In connection 1"
|
||||
SELECT COUNT(*) FROM tab;
|
||||
COUNT(*)
|
||||
1
|
||||
SET @g4 = ST_GeomFromText('POLYGON((300 300,400 400,500 500,300 500,300 400,300 300))');
|
||||
SELECT ST_AsText(c5) FROM tab WHERE MBREquals(tab.c5, @g4);
|
||||
ST_AsText(c5)
|
||||
COMMIT;
|
||||
SELECT ST_AsText(c5) FROM tab WHERE MBREquals(tab.c5, @g4);
|
||||
ST_AsText(c5)
|
||||
POLYGON((300 300,400 400,500 500,300 500,300 400,300 300))
|
||||
SELECT COUNT(*) FROM tab;
|
||||
COUNT(*)
|
||||
2
|
||||
SELECT c1,ST_AsText(c2),ST_AsText(c4),ST_AsText(c5) FROM tab;
|
||||
c1 ST_AsText(c2) ST_AsText(c4) ST_AsText(c5)
|
||||
1 POINT(10 10) POLYGON((30 30,40 40,50 50,30 50,30 40,30 30)) POLYGON((300 300,400 400,500 500,300 500,300 400,300 300))
|
||||
2 POINT(20 20) POLYGON((40 50,40 70,50 100,70 100,80 80,70 50,40 50)) POLYGON((40 50,40 70,50 100,70 100,80 80,70 50,40 50))
|
||||
DROP TABLE tab;
|
||||
CREATE TABLE tab(c1 int NOT NULL PRIMARY KEY,c2 POINT NOT NULL,
|
||||
c3 LINESTRING NOT NULL,c4 POLYGON NOT NULL,c5 GEOMETRY NOT NULL)
|
||||
ENGINE=InnoDB;
|
||||
ALTER TABLE tab ADD SPATIAL INDEX idx2(c2 ASC);
|
||||
ALTER TABLE tab ADD SPATIAL KEY idx3(c3 DESC);
|
||||
ALTER TABLE tab ADD SPATIAL INDEX idx4(c4 ASC) COMMENT 'testing spatial index on Polygon';
|
||||
ALTER TABLE tab ADD SPATIAL KEY idx5(c5 ASC) COMMENT 'testing spatial index on Geometry';
|
||||
INSERT INTO tab(c1,c2,c3,c4,c5)
|
||||
VALUES(1,ST_GeomFromText('POINT(10 10)'),ST_GeomFromText('LINESTRING(5 5,20 20,30 30)'),
|
||||
ST_GeomFromText('POLYGON((30 30,40 40,50 50,30 50,30 40,30 30))'),
|
||||
ST_GeomFromText('POLYGON((30 30,40 40,50 50,30 50,30 40,30 30))'));
|
||||
SELECT c1,ST_AsText(c2),ST_AsText(c3),ST_AsText(c4),ST_AsText(c5) FROM tab;
|
||||
c1 ST_AsText(c2) ST_AsText(c3) ST_AsText(c4) ST_AsText(c5)
|
||||
1 POINT(10 10) LINESTRING(5 5,20 20,30 30) POLYGON((30 30,40 40,50 50,30 50,30 40,30 30)) POLYGON((30 30,40 40,50 50,30 50,30 40,30 30))
|
||||
SELECT COUNT(*) FROM tab;
|
||||
COUNT(*)
|
||||
1
|
||||
"In connection 1"
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||
SELECT @@tx_isolation;
|
||||
@@tx_isolation
|
||||
REPEATABLE-READ
|
||||
SELECT COUNT(*) FROM tab;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT c1,ST_AsText(c2),ST_AsText(c3),ST_AsText(c4),ST_AsText(c5) FROM tab;
|
||||
c1 ST_AsText(c2) ST_AsText(c3) ST_AsText(c4) ST_AsText(c5)
|
||||
1 POINT(10 10) LINESTRING(5 5,20 20,30 30) POLYGON((30 30,40 40,50 50,30 50,30 40,30 30)) POLYGON((30 30,40 40,50 50,30 50,30 40,30 30))
|
||||
"In connection 2"
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
SELECT @@tx_isolation;
|
||||
@@tx_isolation
|
||||
READ-COMMITTED
|
||||
START TRANSACTION;
|
||||
INSERT INTO tab(c1,c2,c3,c4,c5)
|
||||
VALUES(2,ST_GeomFromText('POINT(20 20)'),ST_GeomFromText('LINESTRING(20 20,30 30,40 40)'),
|
||||
ST_GeomFromText('POLYGON((40 50,40 70,50 100,70 100,80 80,70 50,40 50))'),
|
||||
ST_GeomFromText('POLYGON((40 50,40 70,50 100,70 100,80 80,70 50,40 50))'));
|
||||
SET @g1 = ST_GeomFromText('POLYGON((30 30,40 40,50 50,30 50,30 40,30 30))');
|
||||
SET @g2 = ST_GeomFromText('POINT(10 10)');
|
||||
UPDATE tab SET C5 = ST_GeomFromText('POLYGON((300 300,400 400,500 500,300 500,300 400,300 300))')
|
||||
WHERE MBREquals(tab.c4, @g1) AND MBREquals(tab.c2, @g2);
|
||||
"In connection 1"
|
||||
SET @g3 = ST_GeomFromText('POLYGON((40 50,40 70,50 100,70 100,80 80,70 50,40 50))');
|
||||
SELECT c1,ST_AsText(c2),ST_AsText(c4),ST_AsText(c5) FROM tab WHERE MBREquals(tab.c5, @g3);
|
||||
c1 ST_AsText(c2) ST_AsText(c4) ST_AsText(c5)
|
||||
SELECT COUNT(*) FROM tab;
|
||||
COUNT(*)
|
||||
1
|
||||
START TRANSACTION;
|
||||
SELECT COUNT(*) FROM tab;
|
||||
COUNT(*)
|
||||
1
|
||||
"In connection 2"
|
||||
SELECT COUNT(*) FROM tab;
|
||||
COUNT(*)
|
||||
2
|
||||
COMMIT;
|
||||
"In connection 1"
|
||||
SELECT COUNT(*) FROM tab;
|
||||
COUNT(*)
|
||||
1
|
||||
SET @g4 = ST_GeomFromText('POLYGON((300 300,400 400,500 500,300 500,300 400,300 300))');
|
||||
SELECT ST_AsText(c5) FROM tab WHERE MBREquals(tab.c5, @g4);
|
||||
ST_AsText(c5)
|
||||
COMMIT;
|
||||
SELECT ST_AsText(c5) FROM tab WHERE MBREquals(tab.c5, @g4);
|
||||
ST_AsText(c5)
|
||||
POLYGON((300 300,400 400,500 500,300 500,300 400,300 300))
|
||||
SELECT COUNT(*) FROM tab;
|
||||
COUNT(*)
|
||||
2
|
||||
SELECT c1,ST_AsText(c2),ST_AsText(c4),ST_AsText(c5) FROM tab;
|
||||
c1 ST_AsText(c2) ST_AsText(c4) ST_AsText(c5)
|
||||
1 POINT(10 10) POLYGON((30 30,40 40,50 50,30 50,30 40,30 30)) POLYGON((300 300,400 400,500 500,300 500,300 400,300 300))
|
||||
2 POINT(20 20) POLYGON((40 50,40 70,50 100,70 100,80 80,70 50,40 50)) POLYGON((40 50,40 70,50 100,70 100,80 80,70 50,40 50))
|
||||
DROP TABLE tab;
|
416
mysql-test/suite/innodb_gis/r/rollback.result
Normal file
416
mysql-test/suite/innodb_gis/r/rollback.result
Normal file
File diff suppressed because one or more lines are too long
1588
mysql-test/suite/innodb_gis/r/row_format.result
Normal file
1588
mysql-test/suite/innodb_gis/r/row_format.result
Normal file
File diff suppressed because it is too large
Load Diff
48
mysql-test/suite/innodb_gis/r/rtree_compress.result
Normal file
48
mysql-test/suite/innodb_gis/r/rtree_compress.result
Normal file
@ -0,0 +1,48 @@
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb ROW_FORMAT=COMPRESSED;
|
||||
insert into t1 values(1, Point(1,1));
|
||||
insert into t1 values(2, Point(2,2));
|
||||
insert into t1 values(3, Point(3,3));
|
||||
insert into t1 values(4, Point(4,4));
|
||||
insert into t1 values(5, Point(5,5));
|
||||
insert into t1 values(6, Point(6,6));
|
||||
insert into t1 values(7, Point(7,7));
|
||||
insert into t1 values(8, Point(8,8));
|
||||
insert into t1 values(9, Point(9,9));
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
start transaction;
|
||||
insert into t1 select * from t1;
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
18432
|
||||
rollback;
|
||||
check table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
9216
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 100,100 100,100 0,0 0))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
count(*)
|
||||
9216
|
||||
set @g1 = ST_GeomFromText('Polygon((10 10,10 800,800 800,800 10,10 10))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
count(*)
|
||||
0
|
||||
SET DEBUG='+d,page_copy_rec_list_start_compress_fail';
|
||||
delete from t1;
|
||||
SET DEBUG='-d,page_copy_rec_list_start_compress_fail';
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
count(*)
|
||||
0
|
||||
drop table t1;
|
25
mysql-test/suite/innodb_gis/r/rtree_compress2.result
Normal file
25
mysql-test/suite/innodb_gis/r/rtree_compress2.result
Normal file
@ -0,0 +1,25 @@
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb ROW_FORMAT=COMPRESSED;
|
||||
create procedure insert_t1(IN total int)
|
||||
begin
|
||||
declare i int default 1;
|
||||
while (i <= total) DO
|
||||
insert into t1 values (i, Point(i, i));
|
||||
set i = i + 1;
|
||||
end while;
|
||||
end|
|
||||
CALL insert_t1(70000);
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
70000
|
||||
check table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
truncate table t1;
|
||||
call mtr.add_suppression("InnoDB: page [0-9]+ in the doublewrite buffer is not within space bounds.*");
|
||||
START TRANSACTION;
|
||||
CALL insert_t1(5000);
|
||||
COMMIT;
|
||||
# Kill and restart
|
||||
drop procedure insert_t1;
|
||||
drop table t1;
|
312
mysql-test/suite/innodb_gis/r/rtree_concurrent_srch.result
Normal file
312
mysql-test/suite/innodb_gis/r/rtree_concurrent_srch.result
Normal file
@ -0,0 +1,312 @@
|
||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;
|
||||
insert into t1 values(1, Point(1,1));
|
||||
insert into t1 values(2, Point(2,2));
|
||||
insert into t1 values(3, Point(3,3));
|
||||
insert into t1 values(4, Point(4,4));
|
||||
insert into t1 values(5, Point(5,5));
|
||||
insert into t1 values(6, Point(6,6));
|
||||
insert into t1 values(7, Point(7,7));
|
||||
insert into t1 values(8, Point(8,8));
|
||||
insert into t1 values(9, Point(9,9));
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
SET SESSION debug="+d,rtr_pcur_move_to_next_return";
|
||||
set session transaction isolation level serializable;
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 100,100 100,100 0,0 0))');
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
SET DEBUG_SYNC = 'row_search_for_mysql_before_return SIGNAL started WAIT_FOR go_ahead';
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);;
|
||||
# Establish session con1 (user=root)
|
||||
set session transaction isolation level serializable;
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR started';
|
||||
insert into t1 select * from t1;
|
||||
SET DEBUG_SYNC = 'now SIGNAL go_ahead';
|
||||
count(*)
|
||||
576
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
count(*)
|
||||
1152
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 100,100 100,100 0,0 0))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
count(*)
|
||||
4608
|
||||
set @g1 = ST_GeomFromText('Polygon((10 10,10 800,800 800,800 10,10 10))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
count(*)
|
||||
0
|
||||
set session transaction isolation level serializable;
|
||||
truncate t1;
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(2 2, 150 150)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(3 3, 160 160)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(4 4, 170 170)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(5 5, 180 180)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(6 6, 190 190)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(7 7, 200 200)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(8 8, 210 210)'));
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
set session transaction isolation level serializable;
|
||||
select @@tx_isolation;
|
||||
@@tx_isolation
|
||||
SERIALIZABLE
|
||||
start transaction;
|
||||
set @g1 = ST_GeomFromText('Polygon((100 100, 100 110, 110 110, 110 100, 100 100))');
|
||||
select count(*) from t1 where MBRwithin(t1.c2, @g1);
|
||||
count(*)
|
||||
0
|
||||
set session transaction isolation level serializable;
|
||||
set session innodb_lock_wait_timeout = 1;
|
||||
select @@tx_isolation;
|
||||
@@tx_isolation
|
||||
SERIALIZABLE
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
commit;
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
896
|
||||
insert into t1 values (105, Point(105, 105));
|
||||
start transaction;
|
||||
set @g1 = ST_GeomFromText('Polygon((100 100, 100 110, 110 110, 110 100, 100 100))');
|
||||
select count(*) from t1 where MBRwithin(t1.c2, @g1);
|
||||
count(*)
|
||||
1
|
||||
select @@innodb_lock_wait_timeout;
|
||||
@@innodb_lock_wait_timeout
|
||||
1
|
||||
select @@tx_isolation;
|
||||
@@tx_isolation
|
||||
SERIALIZABLE
|
||||
insert into t1 select * from t1;
|
||||
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
897
|
||||
select sleep(2);
|
||||
sleep(2)
|
||||
0
|
||||
commit;
|
||||
truncate t1;
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(2 2, 150 150)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(3 3, 160 160)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(4 4, 170 170)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(5 5, 180 180)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(6 6, 190 190)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(7 7, 200 200)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(8 8, 210 210)'));
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
set session transaction isolation level serializable;
|
||||
select @@tx_isolation;
|
||||
@@tx_isolation
|
||||
SERIALIZABLE
|
||||
start transaction;
|
||||
set @g1 = ST_GeomFromText('Polygon((100 100, 100 110, 110 110, 110 100, 100 100))');
|
||||
select count(*) from t1 where MBRwithin(t1.c2, @g1);
|
||||
count(*)
|
||||
0
|
||||
set session transaction isolation level serializable;
|
||||
set session innodb_lock_wait_timeout = 1;
|
||||
select @@tx_isolation;
|
||||
@@tx_isolation
|
||||
SERIALIZABLE
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
commit;
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
1792
|
||||
insert into t1 values (105, Point(105, 105));
|
||||
start transaction;
|
||||
set @g1 = ST_GeomFromText('Polygon((100 100, 100 110, 110 110, 110 100, 100 100))');
|
||||
select count(*) from t1 where MBRwithin(t1.c2, @g1);
|
||||
count(*)
|
||||
1
|
||||
select count(*) from t1 where MBRIntersects(t1.c2, @g1);
|
||||
count(*)
|
||||
1793
|
||||
select @@innodb_lock_wait_timeout;
|
||||
@@innodb_lock_wait_timeout
|
||||
1
|
||||
select @@tx_isolation;
|
||||
@@tx_isolation
|
||||
SERIALIZABLE
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(8 105, 200 105)'));
|
||||
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
1793
|
||||
select sleep(2);
|
||||
sleep(2)
|
||||
0
|
||||
commit;
|
||||
truncate t1;
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(2 2, 150 150)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(3 3, 160 160)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(5 5, 180 180)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(6 6, 190 190)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(7 7, 200 200)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(8 8, 210 210)'));
|
||||
set @g1 = ST_GeomFromText('Polygon((3 3, 3 5, 5 5, 5 3, 3 3))');
|
||||
start transaction;
|
||||
delete from t1 where MBRWithin(t1.c2, @g1);
|
||||
set session innodb_lock_wait_timeout = 1;
|
||||
select @@innodb_lock_wait_timeout;
|
||||
@@innodb_lock_wait_timeout
|
||||
1
|
||||
insert into t1 values(4, Point(4,4));
|
||||
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
||||
rollback;
|
||||
truncate t1;
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(2 2, 150 150)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(3 3, 160 160)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(5 5, 180 180)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(6 6, 190 190)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(7 7, 200 200)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(8 8, 210 210)'));
|
||||
set @g1 = ST_GeomFromText('Polygon((3 3, 3 5, 5 5, 5 3, 3 3))');
|
||||
start transaction;
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1) for update;
|
||||
count(*)
|
||||
0
|
||||
set session innodb_lock_wait_timeout = 1;
|
||||
select @@innodb_lock_wait_timeout;
|
||||
@@innodb_lock_wait_timeout
|
||||
1
|
||||
insert into t1 values(4, Point(4,4));
|
||||
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
||||
rollback;
|
||||
truncate t1;
|
||||
create procedure insert_t1(IN start int, IN total int)
|
||||
begin
|
||||
declare i int default 1;
|
||||
set i = start;
|
||||
while (i <= total) DO
|
||||
insert into t1 values (i, Point(i, i));
|
||||
set i = i + 1;
|
||||
end while;
|
||||
end|
|
||||
CALL insert_t1(0, 1000);
|
||||
set session transaction isolation level serializable;
|
||||
select @@tx_isolation;
|
||||
@@tx_isolation
|
||||
SERIALIZABLE
|
||||
start transaction;
|
||||
set @g1 = ST_GeomFromText('Polygon((800 800, 800 1000, 1000 1000, 1000 800, 800 800))');
|
||||
select count(*) from t1 where MBRwithin(t1.c2, @g1);
|
||||
count(*)
|
||||
199
|
||||
CALL insert_t1(1001, 2000);
|
||||
set session transaction isolation level serializable;
|
||||
set session innodb_lock_wait_timeout = 1;
|
||||
insert into t1 values (1200, Point(950, 950));
|
||||
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
||||
select sleep(2);
|
||||
sleep(2)
|
||||
0
|
||||
commit;
|
||||
SET SESSION debug="-d,rtr_pcur_move_to_next_return";
|
||||
drop table t1;
|
||||
drop procedure insert_t1;
|
||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(2 2, 150 150)'));
|
||||
INSERT INTO t1 VALUES (2, ST_GeomFromText('LineString(3 3, 160 160)'));
|
||||
INSERT INTO t1 VALUES (2, ST_GeomFromText('LineString(4 4, 170 170)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(5 5, 180 180)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(6 6, 190 190)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(7 7, 200 200)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(8 8, 210 210)'));
|
||||
SET SESSION debug="+d,rtr_pcur_move_to_next_return";
|
||||
set transaction isolation level serializable;
|
||||
start transaction;
|
||||
set @g1 = ST_GeomFromText('Polygon((100 100, 100 110, 110 110, 110 100, 100 100))');
|
||||
select count(*) from t1 where MBRwithin(t1.c2, @g1);
|
||||
count(*)
|
||||
0
|
||||
delete from t1 where c1 = 1;
|
||||
commit;
|
||||
set transaction isolation level serializable;
|
||||
start transaction;
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0, 0 300, 300 300, 300 0, 0 0))');
|
||||
select count(*) from t1 where MBRwithin(t1.c2, @g1);
|
||||
count(*)
|
||||
2
|
||||
set session innodb_lock_wait_timeout = 1;
|
||||
delete from t1 where c1 = 2;
|
||||
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
||||
commit;
|
||||
drop table t1;
|
||||
SET DEBUG_SYNC= 'RESET';
|
||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;
|
||||
start transaction;
|
||||
insert into t1 values(1, Point(1,1));
|
||||
insert into t1 values(2, Point(2,2));
|
||||
insert into t1 values(3, Point(3,3));
|
||||
insert into t1 values(4, Point(4,4));
|
||||
insert into t1 values(5, Point(5,5));
|
||||
insert into t1 values(6, Point(6,6));
|
||||
insert into t1 values(7, Point(7,7));
|
||||
insert into t1 values(8, Point(8,8));
|
||||
insert into t1 values(9, Point(9,9));
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
4608
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 100,100 100,100 0,0 0))');
|
||||
set transaction isolation level read uncommitted;
|
||||
SET DEBUG_SYNC= 'row_search_for_mysql_before_return SIGNAL siga WAIT_FOR sigb';
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR siga';
|
||||
rollback;
|
||||
SET DEBUG_SYNC= 'now SIGNAL sigb';
|
||||
count(*)
|
||||
1
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
count(*)
|
||||
0
|
||||
DROP TABLE t1;
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;
|
||||
create procedure insert_t1(IN total int)
|
||||
begin
|
||||
declare i int default 1;
|
||||
while (i <= total) DO
|
||||
insert into t1 values (i, Point(i, i));
|
||||
set i = i + 1;
|
||||
end while;
|
||||
end|
|
||||
start transaction;
|
||||
CALL insert_t1(100);
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 1000,1000 1000,1000 0,0 0))');
|
||||
SET DEBUG_SYNC= 'rtr_pcur_move_to_next_return SIGNAL siga WAIT_FOR sigb';
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR siga';
|
||||
rollback;
|
||||
SET DEBUG_SYNC= 'now SIGNAL sigb';
|
||||
count(*)
|
||||
0
|
||||
drop procedure insert_t1;
|
||||
DROP TABLE t1;
|
||||
SET SESSION debug="-d,rtr_pcur_move_to_next_return";
|
||||
SET DEBUG_SYNC = 'RESET';
|
41
mysql-test/suite/innodb_gis/r/rtree_crash.result
Normal file
41
mysql-test/suite/innodb_gis/r/rtree_crash.result
Normal file
@ -0,0 +1,41 @@
|
||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;
|
||||
create procedure insert_t1(IN total int)
|
||||
begin
|
||||
declare i int default 1;
|
||||
while (i <= total) DO
|
||||
insert into t1 values (i, Point(i, i));
|
||||
set i = i + 1;
|
||||
end while;
|
||||
end|
|
||||
CALL insert_t1(5000);
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
5000
|
||||
check table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
truncate table t1;
|
||||
CALL insert_t1(10000);
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
10000
|
||||
drop index c2 on t1;
|
||||
create spatial index idx on t1(c2);
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) DEFAULT NULL,
|
||||
`c2` geometry NOT NULL,
|
||||
SPATIAL KEY `idx` (`c2`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
check table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
truncate table t1;
|
||||
call mtr.add_suppression("InnoDB: page [0-9]+ in the doublewrite buffer is not within space bounds.*");
|
||||
START TRANSACTION;
|
||||
CALL insert_t1(5000);
|
||||
COMMIT;
|
||||
# Kill and restart
|
||||
drop procedure insert_t1;
|
||||
drop table t1;
|
35
mysql-test/suite/innodb_gis/r/rtree_create_inplace.result
Normal file
35
mysql-test/suite/innodb_gis/r/rtree_create_inplace.result
Normal file
@ -0,0 +1,35 @@
|
||||
CREATE TABLE t1 (c1 INT, c2 GEOMETRY NOT NULL, c3 GEOMETRY NOT NULL) ENGINE=INNODB;
|
||||
INSERT INTO t1 VALUES(1, Point(1,1), ST_GeomFromText('POLYGON (( 0 -1, 0 1, 2 1, 2 -1, 0 -1))'));
|
||||
INSERT INTO t1 VALUES(2, Point(2,2), ST_GeomFromText('POLYGON (( 0 -3, 0 -1, 2 -1, 2 -3, 0 -3))'));
|
||||
INSERT INTO t1 VALUES(3, Point(3,3), ST_GeomFromText('POLYGON (( 1 0, 1 2, 3 2, 3 0, 1 0))'));
|
||||
INSERT INTO t1 VALUES(4, Point(4,4), ST_GeomFromText('POLYGON (( -3 0, -3 2, -1 2, -1 0, -3 0))'));
|
||||
INSERT INTO t1 VALUES(5, Point(5,5), ST_GeomFromText('POLYGON (( 0 0, 0 1, 1 1, 1 0, 0 0))'));
|
||||
INSERT INTO t1 VALUES(6, Point(6,6), ST_GeomFromText('POLYGON (( 2 0, 2 2, 4 2, 4 0, 2 0))'));
|
||||
INSERT INTO t1 VALUES(7, Point(7,7), ST_GeomFromText('POLYGON (( 0 3, 0 5, 2 5, 2 3, 0 3))'));
|
||||
INSERT INTO t1 VALUES(8, Point(8,8), ST_GeomFromText('POLYGON (( 0 1, 0 3, 2 3, 2 1, 0 1))'));
|
||||
INSERT INTO t1 VALUES(9, Point(9,9), ST_GeomFromText('POLYGON (( 0 0, 0 3, 3 3, 3 0, 0 0))'));
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
CREATE SPATIAL INDEX idx ON t1(c2);
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
4608
|
||||
SET @g1 = ST_GeomFromText('Polygon((0 0,0 100,100 100,100 0,0 0))');
|
||||
SELECT COUNT(*) FROM t1 WHERE MBRWithin(t1.c2, @g1);
|
||||
COUNT(*)
|
||||
4608
|
||||
SET @g1 = ST_GeomFromText('Polygon((10 10,10 800,800 800,800 10,10 10))');
|
||||
SELECT COUNT(*) FROM t1 WHERE MBRWithin(t1.c2, @g1);
|
||||
COUNT(*)
|
||||
0
|
||||
ALTER TABLE t1 DROP INDEX idx, ADD SPATIAL INDEX idx3(c2);
|
||||
SET SESSION debug="+d,row_merge_instrument_log_check_flush";
|
||||
ALTER TABLE t1 DROP INDEX idx3, ADD SPATIAL INDEX idx4(c2), ADD SPATIAL INDEX idx5(c3);
|
||||
DROP TABLE t1;
|
65
mysql-test/suite/innodb_gis/r/rtree_debug.result
Normal file
65
mysql-test/suite/innodb_gis/r/rtree_debug.result
Normal file
@ -0,0 +1,65 @@
|
||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;
|
||||
create procedure insert_t1(IN total int)
|
||||
begin
|
||||
declare i int default 1;
|
||||
while (i <= total) DO
|
||||
insert into t1 values
|
||||
(i, Point(i, i)),
|
||||
(i + 1, Point(i + 1, i + 1)),
|
||||
(i + 2, Point(i + 2, i + 2)),
|
||||
(i + 3, Point(i + 3, i + 3)),
|
||||
(i + 4, Point(i + 4, i + 4)),
|
||||
(i + 5, Point(i + 5, i + 5)),
|
||||
(i + 6, Point(i + 6, i + 6)),
|
||||
(i + 7, Point(i + 7, i + 7)),
|
||||
(i + 8, Point(i + 8, i + 8)),
|
||||
(i + 9, Point(i + 9, i + 9));
|
||||
set i = i + 10;
|
||||
end while;
|
||||
end|
|
||||
CALL insert_t1(5000);
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
5000
|
||||
check table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
truncate table t1;
|
||||
CALL insert_t1(10000);
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
10000
|
||||
drop index c2 on t1;
|
||||
create spatial index idx on t1(c2);
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) DEFAULT NULL,
|
||||
`c2` geometry NOT NULL,
|
||||
SPATIAL KEY `idx` (`c2`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
SET DEBUG='+d,row_merge_ins_spatial_fail';
|
||||
create spatial index idx2 on t1(c2);
|
||||
ERROR HY000: Got error 1000 from storage engine
|
||||
SET DEBUG='-d,row_merge_ins_spatial_fail';
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) DEFAULT NULL,
|
||||
`c2` geometry NOT NULL,
|
||||
SPATIAL KEY `idx` (`c2`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
check table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
truncate table t1;
|
||||
CALL insert_t1(100000);
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
100000
|
||||
check table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
truncate table t1;
|
||||
drop procedure insert_t1;
|
||||
drop table t1;
|
18
mysql-test/suite/innodb_gis/r/rtree_drop_index.result
Normal file
18
mysql-test/suite/innodb_gis/r/rtree_drop_index.result
Normal file
File diff suppressed because one or more lines are too long
161
mysql-test/suite/innodb_gis/r/rtree_estimate.result
Normal file
161
mysql-test/suite/innodb_gis/r/rtree_estimate.result
Normal file
@ -0,0 +1,161 @@
|
||||
CREATE TABLE t1 (
|
||||
g GEOMETRY NOT NULL
|
||||
) ENGINE=InnoDB;
|
||||
ALTER TABLE t1 ADD SPATIAL(g);
|
||||
SET @g1 = ST_GeomFromText('POINT(10 10)');
|
||||
SET @g2 = ST_GeomFromText('POLYGON((5 5, 20 5, 20 21, 5 21, 5 5))');
|
||||
SET @g3 = ST_GeomFromText('POLYGON((1.79769e+308 1.79769e+308, 20 5, -1.79769e+308 -1.79769e+308, 1.79769e+308 1.79769e+308))');
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBRContains(g, @g1);
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 NULL ALL g NULL NULL NULL 1 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select st_astext(`test`.`t1`.`g`) AS `ST_AsText(g)` from `test`.`t1` where mbrcontains(`test`.`t1`.`g`,(@`g1`))
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g1);
|
||||
ST_AsText(g)
|
||||
INSERT INTO t1 VALUES(@g1);
|
||||
INSERT INTO t1 VALUES(@g2);
|
||||
INSERT INTO t1 VALUES(@g3);
|
||||
SELECT ST_AsText(g) FROM t1;
|
||||
ST_AsText(g)
|
||||
POINT(10 10)
|
||||
POLYGON((5 5,20 5,20 21,5 21,5 5))
|
||||
POLYGON((1.79769e308 1.79769e308,20 5,-1.79769e308 -1.79769e308,1.79769e308 1.79769e308))
|
||||
ANALYZE TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status OK
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBRContains(g, @g1);
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 NULL range g g 34 NULL 1 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select st_astext(`test`.`t1`.`g`) AS `ST_AsText(g)` from `test`.`t1` where mbrcontains(`test`.`t1`.`g`,(@`g1`))
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g1);
|
||||
ST_AsText(g)
|
||||
POINT(10 10)
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBRDisjoint(g, @g1);
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 NULL range g g 34 NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select st_astext(`test`.`t1`.`g`) AS `ST_AsText(g)` from `test`.`t1` where mbrdisjoint(`test`.`t1`.`g`,(@`g1`))
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g1);
|
||||
ST_AsText(g)
|
||||
POINT(10 10)
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBREquals(g, @g1);
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 NULL range g g 34 NULL 1 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select st_astext(`test`.`t1`.`g`) AS `ST_AsText(g)` from `test`.`t1` where mbrequals(`test`.`t1`.`g`,(@`g1`))
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g1);
|
||||
ST_AsText(g)
|
||||
POINT(10 10)
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBRIntersects(g, @g1);
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 NULL range g g 34 NULL 1 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select st_astext(`test`.`t1`.`g`) AS `ST_AsText(g)` from `test`.`t1` where mbrintersects(`test`.`t1`.`g`,(@`g1`))
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g1);
|
||||
ST_AsText(g)
|
||||
POINT(10 10)
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g1);
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 NULL range g g 34 NULL 1 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select st_astext(`test`.`t1`.`g`) AS `ST_AsText(g)` from `test`.`t1` where mbrwithin(`test`.`t1`.`g`,(@`g1`))
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g1);
|
||||
ST_AsText(g)
|
||||
POINT(10 10)
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBRContains(g, @g2);
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 NULL range g g 34 NULL 1 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select st_astext(`test`.`t1`.`g`) AS `ST_AsText(g)` from `test`.`t1` where mbrcontains(`test`.`t1`.`g`,(@`g2`))
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g2);
|
||||
ST_AsText(g)
|
||||
POINT(10 10)
|
||||
POLYGON((5 5,20 5,20 21,5 21,5 5))
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBRDisjoint(g, @g2);
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 NULL range g g 34 NULL 1 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select st_astext(`test`.`t1`.`g`) AS `ST_AsText(g)` from `test`.`t1` where mbrdisjoint(`test`.`t1`.`g`,(@`g2`))
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g2);
|
||||
ST_AsText(g)
|
||||
POINT(10 10)
|
||||
POLYGON((5 5,20 5,20 21,5 21,5 5))
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBREquals(g, @g2);
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 NULL range g g 34 NULL 1 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select st_astext(`test`.`t1`.`g`) AS `ST_AsText(g)` from `test`.`t1` where mbrequals(`test`.`t1`.`g`,(@`g2`))
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g2);
|
||||
ST_AsText(g)
|
||||
POINT(10 10)
|
||||
POLYGON((5 5,20 5,20 21,5 21,5 5))
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBRIntersects(g, @g2);
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 NULL range g g 34 NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select st_astext(`test`.`t1`.`g`) AS `ST_AsText(g)` from `test`.`t1` where mbrintersects(`test`.`t1`.`g`,(@`g2`))
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g2);
|
||||
ST_AsText(g)
|
||||
POINT(10 10)
|
||||
POLYGON((5 5,20 5,20 21,5 21,5 5))
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g2);
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 NULL range g g 34 NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select st_astext(`test`.`t1`.`g`) AS `ST_AsText(g)` from `test`.`t1` where mbrwithin(`test`.`t1`.`g`,(@`g2`))
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g2);
|
||||
ST_AsText(g)
|
||||
POINT(10 10)
|
||||
POLYGON((5 5,20 5,20 21,5 21,5 5))
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBRContains(g, @g3);
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 NULL ALL g NULL NULL NULL 3 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select st_astext(`test`.`t1`.`g`) AS `ST_AsText(g)` from `test`.`t1` where mbrcontains(`test`.`t1`.`g`,(@`g3`))
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g3);
|
||||
ST_AsText(g)
|
||||
POINT(10 10)
|
||||
POLYGON((5 5,20 5,20 21,5 21,5 5))
|
||||
POLYGON((1.79769e308 1.79769e308,20 5,-1.79769e308 -1.79769e308,1.79769e308 1.79769e308))
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBRDisjoint(g, @g3);
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 NULL ALL g NULL NULL NULL 3 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select st_astext(`test`.`t1`.`g`) AS `ST_AsText(g)` from `test`.`t1` where mbrdisjoint(`test`.`t1`.`g`,(@`g3`))
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g3);
|
||||
ST_AsText(g)
|
||||
POINT(10 10)
|
||||
POLYGON((5 5,20 5,20 21,5 21,5 5))
|
||||
POLYGON((1.79769e308 1.79769e308,20 5,-1.79769e308 -1.79769e308,1.79769e308 1.79769e308))
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBREquals(g, @g3);
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 NULL ALL g NULL NULL NULL 3 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select st_astext(`test`.`t1`.`g`) AS `ST_AsText(g)` from `test`.`t1` where mbrequals(`test`.`t1`.`g`,(@`g3`))
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g3);
|
||||
ST_AsText(g)
|
||||
POINT(10 10)
|
||||
POLYGON((5 5,20 5,20 21,5 21,5 5))
|
||||
POLYGON((1.79769e308 1.79769e308,20 5,-1.79769e308 -1.79769e308,1.79769e308 1.79769e308))
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBRIntersects(g, @g3);
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 NULL ALL g NULL NULL NULL 3 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select st_astext(`test`.`t1`.`g`) AS `ST_AsText(g)` from `test`.`t1` where mbrintersects(`test`.`t1`.`g`,(@`g3`))
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g3);
|
||||
ST_AsText(g)
|
||||
POINT(10 10)
|
||||
POLYGON((5 5,20 5,20 21,5 21,5 5))
|
||||
POLYGON((1.79769e308 1.79769e308,20 5,-1.79769e308 -1.79769e308,1.79769e308 1.79769e308))
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g3);
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 NULL ALL g NULL NULL NULL 3 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select st_astext(`test`.`t1`.`g`) AS `ST_AsText(g)` from `test`.`t1` where mbrwithin(`test`.`t1`.`g`,(@`g3`))
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g3);
|
||||
ST_AsText(g)
|
||||
POINT(10 10)
|
||||
POLYGON((5 5,20 5,20 21,5 21,5 5))
|
||||
POLYGON((1.79769e308 1.79769e308,20 5,-1.79769e308 -1.79769e308,1.79769e308 1.79769e308))
|
||||
DROP TABLE t1;
|
155
mysql-test/suite/innodb_gis/r/rtree_multi_pk.result
Normal file
155
mysql-test/suite/innodb_gis/r/rtree_multi_pk.result
Normal file
@ -0,0 +1,155 @@
|
||||
create table t1 (i int, i2 char(10), g geometry not null, primary key (i, i2), spatial index (g))engine=innodb;
|
||||
insert into t1 values (1, "111", POINT(1,1));
|
||||
insert into t1 values (2, "222", POINT(1.5,1.5));
|
||||
insert into t1 values (3, "333", POINT(3,3));
|
||||
insert into t1 values (4, "444", POINT(3.1,3.1));
|
||||
insert into t1 values (5, "555", POINT(5,5));
|
||||
analyze table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status OK
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))');
|
||||
explain select ST_astext(t1.g) from t1 where MBRWithin(t1.g, @g1);
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 NULL ALL g NULL NULL NULL 5 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select st_astext(`test`.`t1`.`g`) AS `ST_astext(t1.g)` from `test`.`t1` where mbrwithin(`test`.`t1`.`g`,(@`g1`))
|
||||
select ST_astext(t1.g) from t1 where MBRWithin(t1.g, @g1);
|
||||
ST_astext(t1.g)
|
||||
POINT(1 1)
|
||||
POINT(1.5 1.5)
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))');
|
||||
delete from t1 where MBRWithin(t1.g, @g1);
|
||||
check table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
select ST_astext(t1.g) from t1;
|
||||
ST_astext(t1.g)
|
||||
POINT(3 3)
|
||||
POINT(3.1 3.1)
|
||||
POINT(5 5)
|
||||
set @g1 = ST_GeomFromText('Polygon((5 5,5 5,5 5,5 5,5 5))');
|
||||
update t1 set g = POINT(2,2) where MBRWithin(t1.g, @g1);
|
||||
check table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
select ST_astext(t1.g) from t1;
|
||||
ST_astext(t1.g)
|
||||
POINT(3 3)
|
||||
POINT(3.1 3.1)
|
||||
POINT(2 2)
|
||||
show indexes from t1;
|
||||
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
|
||||
t1 0 PRIMARY 1 i A # NULL NULL BTREE
|
||||
t1 0 PRIMARY 2 i2 A # NULL NULL BTREE
|
||||
t1 1 g 1 g A # 32 NULL SPATIAL
|
||||
drop table t1;
|
||||
create table t1 (name VARCHAR(100), square GEOMETRY not null, spatial index (square))engine=innodb;
|
||||
INSERT INTO t1 VALUES("small", ST_GeomFromText('POLYGON (( 0 0, 0 1, 1 1, 1 0, 0 0))'));
|
||||
INSERT INTO t1 VALUES("big", ST_GeomFromText('POLYGON (( 0 0, 0 3, 3 3, 3 0, 0 0))'));
|
||||
INSERT INTO t1 VALUES("up", ST_GeomFromText('POLYGON (( 0 1, 0 3, 2 3, 2 1, 0 1))'));
|
||||
INSERT INTO t1 VALUES("up2", ST_GeomFromText('POLYGON (( 0 2, 0 4, 2 4, 2 2, 0 2))'));
|
||||
INSERT INTO t1 VALUES("up3", ST_GeomFromText('POLYGON (( 0 3, 0 5, 2 5, 2 3, 0 3))'));
|
||||
INSERT INTO t1 VALUES("down", ST_GeomFromText('POLYGON (( 0 -1, 0 1, 2 1, 2 -1, 0 -1))'));
|
||||
INSERT INTO t1 VALUES("down2", ST_GeomFromText('POLYGON (( 0 -2, 0 0, 2 0, 2 -2, 0 -2))'));
|
||||
INSERT INTO t1 VALUES("down3", ST_GeomFromText('POLYGON (( 0 -3, 0 -1, 2 -1, 2 -3, 0 -3))'));
|
||||
INSERT INTO t1 VALUES("right", ST_GeomFromText('POLYGON (( 1 0, 1 2, 3 2, 3 0, 1 0))'));
|
||||
INSERT INTO t1 VALUES("right2", ST_GeomFromText('POLYGON (( 2 0, 2 2, 4 2, 4 0, 2 0))'));
|
||||
INSERT INTO t1 VALUES("right3", ST_GeomFromText('POLYGON (( 3 0, 3 2, 5 2, 5 0, 3 0))'));
|
||||
INSERT INTO t1 VALUES("left", ST_GeomFromText('POLYGON (( -1 0, -1 2, 1 2, 1 0, -1 0))'));
|
||||
INSERT INTO t1 VALUES("left2", ST_GeomFromText('POLYGON (( -2 0, -2 2, 0 2, 0 0, -2 0))'));
|
||||
INSERT INTO t1 VALUES("left3", ST_GeomFromText('POLYGON (( -3 0, -3 2, -1 2, -1 0, -3 0))'));
|
||||
SET @p = ST_GeomFromText('POLYGON (( 0 0, 0 2, 2 2, 2 0, 0 0))');
|
||||
SELECT name, ST_AsText(square) from t1 where MBRContains(@p, square);
|
||||
name ST_AsText(square)
|
||||
small POLYGON((0 0,0 1,1 1,1 0,0 0))
|
||||
SELECT name, ST_AsText(square) from t1 where MBRDisjoint(@p, square);
|
||||
name ST_AsText(square)
|
||||
up3 POLYGON((0 3,0 5,2 5,2 3,0 3))
|
||||
down3 POLYGON((0 -3,0 -1,2 -1,2 -3,0 -3))
|
||||
right3 POLYGON((3 0,3 2,5 2,5 0,3 0))
|
||||
left3 POLYGON((-3 0,-3 2,-1 2,-1 0,-3 0))
|
||||
SELECT name, ST_AsText(square) from t1 where MBREquals(@p, square);
|
||||
name ST_AsText(square)
|
||||
SELECT name, ST_AsText(square) from t1 where MBRIntersects(@p, square);
|
||||
name ST_AsText(square)
|
||||
right2 POLYGON((2 0,2 2,4 2,4 0,2 0))
|
||||
right POLYGON((1 0,1 2,3 2,3 0,1 0))
|
||||
up2 POLYGON((0 2,0 4,2 4,2 2,0 2))
|
||||
up POLYGON((0 1,0 3,2 3,2 1,0 1))
|
||||
big POLYGON((0 0,0 3,3 3,3 0,0 0))
|
||||
small POLYGON((0 0,0 1,1 1,1 0,0 0))
|
||||
down POLYGON((0 -1,0 1,2 1,2 -1,0 -1))
|
||||
down2 POLYGON((0 -2,0 0,2 0,2 -2,0 -2))
|
||||
left POLYGON((-1 0,-1 2,1 2,1 0,-1 0))
|
||||
left2 POLYGON((-2 0,-2 2,0 2,0 0,-2 0))
|
||||
SELECT name, ST_AsText(square) from t1 where MBROverlaps(@p, square);
|
||||
name ST_AsText(square)
|
||||
right POLYGON((1 0,1 2,3 2,3 0,1 0))
|
||||
up POLYGON((0 1,0 3,2 3,2 1,0 1))
|
||||
down POLYGON((0 -1,0 1,2 1,2 -1,0 -1))
|
||||
left POLYGON((-1 0,-1 2,1 2,1 0,-1 0))
|
||||
SELECT name, ST_AsText(square) from t1 where MBRTouches(@p, square);
|
||||
name ST_AsText(square)
|
||||
right2 POLYGON((2 0,2 2,4 2,4 0,2 0))
|
||||
up2 POLYGON((0 2,0 4,2 4,2 2,0 2))
|
||||
down2 POLYGON((0 -2,0 0,2 0,2 -2,0 -2))
|
||||
left2 POLYGON((-2 0,-2 2,0 2,0 0,-2 0))
|
||||
SELECT name, ST_AsText(square) from t1 where MBRWithin(@p, square);
|
||||
name ST_AsText(square)
|
||||
big POLYGON((0 0,0 3,3 3,3 0,0 0))
|
||||
SET @vert1 = ST_GeomFromText('POLYGON ((0 -2, 0 2, 0 -2))');
|
||||
ERROR 22023: Invalid GIS data provided to function st_geometryfromtext.
|
||||
SET @horiz1 = ST_GeomFromText('POLYGON ((-2 0, 2 0, -2 0))');
|
||||
ERROR 22023: Invalid GIS data provided to function st_geometryfromtext.
|
||||
SET @horiz2 = ST_GeomFromText('POLYGON ((-1 0, 3 0, -1 0))');
|
||||
ERROR 22023: Invalid GIS data provided to function st_geometryfromtext.
|
||||
SET @horiz3 = ST_GeomFromText('POLYGON ((2 0, 3 0, 2 0))');
|
||||
ERROR 22023: Invalid GIS data provided to function st_geometryfromtext.
|
||||
SET @point1 = ST_GeomFromText('POLYGON ((0 0))');
|
||||
ERROR 22023: Invalid GIS data provided to function st_geometryfromtext.
|
||||
SET @point2 = ST_GeomFromText('POLYGON ((-2 0))');
|
||||
ERROR 22023: Invalid GIS data provided to function st_geometryfromtext.
|
||||
SELECT GROUP_CONCAT(a1.name ORDER BY a1.name) AS MBRoverlaps FROM t1 a1 WHERE MBROverlaps(a1.square, @vert1) GROUP BY a1.name;
|
||||
MBRoverlaps
|
||||
SELECT GROUP_CONCAT(a1.name ORDER BY a1.name) AS MBRoverlaps FROM t1 a1 WHERE MBROverlaps(a1.square, @horiz1) GROUP BY a1.name;
|
||||
MBRoverlaps
|
||||
SELECT MBROverlaps(@horiz1, @vert1) FROM DUAL;
|
||||
MBROverlaps(@horiz1, @vert1)
|
||||
NULL
|
||||
SELECT MBROverlaps(@horiz1, @horiz2) FROM DUAL;
|
||||
MBROverlaps(@horiz1, @horiz2)
|
||||
NULL
|
||||
SELECT MBROverlaps(@horiz1, @horiz3) FROM DUAL;
|
||||
MBROverlaps(@horiz1, @horiz3)
|
||||
NULL
|
||||
SELECT MBROverlaps(@horiz1, @point1) FROM DUAL;
|
||||
MBROverlaps(@horiz1, @point1)
|
||||
NULL
|
||||
SELECT MBROverlaps(@horiz1, @point2) FROM DUAL;
|
||||
MBROverlaps(@horiz1, @point2)
|
||||
NULL
|
||||
DROP TABLE t1;
|
||||
create table t1 (i int not null, g geometry not null)engine=innodb;
|
||||
insert into t1 values (1, POINT(1,1));
|
||||
insert into t1 values (2, POINT(1.5,1.5));
|
||||
insert into t1 values (3, POINT(3,3));
|
||||
insert into t1 values (4, POINT(3.1,3.1));
|
||||
insert into t1 values (5, POINT(5,5));
|
||||
alter table t1 add primary key(i), algorithm=inplace;
|
||||
alter table t1 drop primary key;
|
||||
create spatial index idx on t1(g) algorithm=inplace;
|
||||
create spatial index idx2 on t1(g);
|
||||
Warnings:
|
||||
Warning 1831 Duplicate index 'idx2' defined on the table 'test.t1'. This is deprecated and will be disallowed in a future release.
|
||||
alter table t1 add primary key(i), algorithm=inplace;
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`i` int(11) NOT NULL,
|
||||
`g` geometry NOT NULL,
|
||||
PRIMARY KEY (`i`),
|
||||
SPATIAL KEY `idx` (`g`),
|
||||
SPATIAL KEY `idx2` (`g`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
drop index idx on t1;
|
||||
drop table t1;
|
1821
mysql-test/suite/innodb_gis/r/rtree_old.result
Normal file
1821
mysql-test/suite/innodb_gis/r/rtree_old.result
Normal file
File diff suppressed because it is too large
Load Diff
23
mysql-test/suite/innodb_gis/r/rtree_purge.result
Normal file
23
mysql-test/suite/innodb_gis/r/rtree_purge.result
Normal file
@ -0,0 +1,23 @@
|
||||
create table t (
|
||||
a point not null,b point not null,c point,
|
||||
d point not null,e point,f point,
|
||||
spatial key (d),spatial key (b)
|
||||
) engine=innodb;
|
||||
create procedure p(i int)
|
||||
begin
|
||||
declare n int default 0;
|
||||
declare continue handler for sqlexception begin end;
|
||||
delete from t;
|
||||
repeat
|
||||
set @p=point(1,1);
|
||||
insert into t values(@p,@p,@p,@p,@p,@p);
|
||||
insert into t values(@p,@p,@p,@p,@p,@p);
|
||||
insert into t select @p,@p,@p,@p,@p,@p
|
||||
from t a,t b,t c,t d,t e,t f,t g,t h,t i,t j;
|
||||
delete from t;
|
||||
set n:=n+1;
|
||||
until n >= i end repeat;
|
||||
end|
|
||||
call p(200);
|
||||
drop procedure p;
|
||||
drop table t;
|
61
mysql-test/suite/innodb_gis/r/rtree_recovery.result
Normal file
61
mysql-test/suite/innodb_gis/r/rtree_recovery.result
Normal file
@ -0,0 +1,61 @@
|
||||
# restart
|
||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;
|
||||
create procedure insert_t1(IN total int)
|
||||
begin
|
||||
declare i int default 1;
|
||||
while (i <= total) DO
|
||||
insert into t1 values (i, Point(i, i));
|
||||
set i = i + 1;
|
||||
end while;
|
||||
end|
|
||||
create procedure update_t1(IN total int)
|
||||
begin
|
||||
declare i int default 1;
|
||||
while (i <= total) DO
|
||||
update t1 set c2 = Point(i + 10000, i + 10000) where c2 = Point(i, i);
|
||||
set i = i + 1;
|
||||
end while;
|
||||
end|
|
||||
CALL insert_t1(367);
|
||||
COMMIT;
|
||||
# Kill and restart
|
||||
check table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
drop table t1;
|
||||
create table t1 (c1 int, c2 point not null, spatial index (c2))engine=innodb;
|
||||
CALL insert_t1(367);
|
||||
CALL update_t1(367);
|
||||
SET @poly1 = ST_GeomFromText('POLYGON((10000 10000, 10000 10350, 10350 10350, 10350 10000, 10000 10000))');
|
||||
delete from t1 where ST_Contains(@poly1, c2);
|
||||
COMMIT;
|
||||
# Kill and restart
|
||||
check table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
18
|
||||
select c1, ST_astext(c2) from t1;
|
||||
c1 ST_astext(c2)
|
||||
350 POINT(10350 10350)
|
||||
351 POINT(10351 10351)
|
||||
352 POINT(10352 10352)
|
||||
353 POINT(10353 10353)
|
||||
354 POINT(10354 10354)
|
||||
355 POINT(10355 10355)
|
||||
356 POINT(10356 10356)
|
||||
357 POINT(10357 10357)
|
||||
358 POINT(10358 10358)
|
||||
359 POINT(10359 10359)
|
||||
360 POINT(10360 10360)
|
||||
361 POINT(10361 10361)
|
||||
362 POINT(10362 10362)
|
||||
363 POINT(10363 10363)
|
||||
364 POINT(10364 10364)
|
||||
365 POINT(10365 10365)
|
||||
366 POINT(10366 10366)
|
||||
367 POINT(10367 10367)
|
||||
drop procedure insert_t1;
|
||||
drop procedure update_t1;
|
||||
drop table t1;
|
43
mysql-test/suite/innodb_gis/r/rtree_rollback1.result
Normal file
43
mysql-test/suite/innodb_gis/r/rtree_rollback1.result
Normal file
@ -0,0 +1,43 @@
|
||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;
|
||||
insert into t1 values(1, Point(1,1));
|
||||
insert into t1 values(2, Point(2,2));
|
||||
insert into t1 values(3, Point(3,3));
|
||||
insert into t1 values(4, Point(4,4));
|
||||
insert into t1 values(5, Point(5,5));
|
||||
insert into t1 values(6, Point(6,6));
|
||||
insert into t1 values(7, Point(7,7));
|
||||
insert into t1 values(8, Point(8,8));
|
||||
insert into t1 values(9, Point(9,9));
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
start transaction;
|
||||
insert into t1 select * from t1;
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
73728
|
||||
rollback;
|
||||
check table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
36864
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 100,100 100,100 0,0 0))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
count(*)
|
||||
36864
|
||||
set @g1 = ST_GeomFromText('Polygon((10 10,10 800,800 800,800 10,10 10))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
count(*)
|
||||
0
|
||||
drop table t1;
|
17
mysql-test/suite/innodb_gis/r/rtree_rollback2.result
Normal file
17
mysql-test/suite/innodb_gis/r/rtree_rollback2.result
Normal file
@ -0,0 +1,17 @@
|
||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;
|
||||
create procedure insert_t1(IN total int)
|
||||
begin
|
||||
declare i int default 1;
|
||||
while (i <= total) DO
|
||||
insert into t1 values (i, Point(i, i));
|
||||
set i = i + 1;
|
||||
end while;
|
||||
end|
|
||||
start transaction;
|
||||
CALL insert_t1(70000);
|
||||
rollback;
|
||||
check table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
drop procedure insert_t1;
|
||||
drop table t1;
|
252
mysql-test/suite/innodb_gis/r/rtree_search.result
Normal file
252
mysql-test/suite/innodb_gis/r/rtree_search.result
Normal file
@ -0,0 +1,252 @@
|
||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;
|
||||
create procedure insert_t1(IN total int)
|
||||
begin
|
||||
declare i int default 1;
|
||||
while (i <= total) DO
|
||||
insert into t1 values (i, Point(i, i));
|
||||
set i = i + 1;
|
||||
end while;
|
||||
end|
|
||||
CALL insert_t1(1000);
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
1000
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 1000,1000 1000,1000 0,0 0))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
count(*)
|
||||
999
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 100,100 100,100 0,0 0))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
count(*)
|
||||
99
|
||||
set @g1 = ST_GeomFromText('Polygon((10 10,10 800,800 800,800 10,10 10))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
count(*)
|
||||
789
|
||||
set @g1 = ST_GeomFromText('Polygon((100 100,100 800,800 800,800 100,100 100))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
count(*)
|
||||
699
|
||||
set @g1 = ST_GeomFromText('Point(1 1)');
|
||||
select count(*) from t1 where MBRequals(t1.c2, @g1);
|
||||
count(*)
|
||||
1
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 100,100 100,100 0,0 0))');
|
||||
select count(*) from t1 where MBRdisjoint(t1.c2, @g1);
|
||||
count(*)
|
||||
900
|
||||
DROP PROCEDURE insert_t1;
|
||||
truncate t1;
|
||||
INSERT INTO t1 VALUES (150, ST_GeomFromText('LineString(150 150, 150 150)'));
|
||||
INSERT INTO t1 VALUES (149, ST_GeomFromText('LineString(149 149, 151 151)'));
|
||||
INSERT INTO t1 VALUES (148, ST_GeomFromText('LineString(148 148, 152 152)'));
|
||||
INSERT INTO t1 VALUES (147, ST_GeomFromText('LineString(147 147, 153 153)'));
|
||||
INSERT INTO t1 VALUES (146, ST_GeomFromText('LineString(146 146, 154 154)'));
|
||||
INSERT INTO t1 VALUES (145, ST_GeomFromText('LineString(145 145, 155 155)'));
|
||||
INSERT INTO t1 VALUES (144, ST_GeomFromText('LineString(144 144, 156 156)'));
|
||||
INSERT INTO t1 VALUES (143, ST_GeomFromText('LineString(143 143, 157 157)'));
|
||||
INSERT INTO t1 VALUES (142, ST_GeomFromText('LineString(142 142, 158 158)'));
|
||||
INSERT INTO t1 VALUES (141, ST_GeomFromText('LineString(141 141, 159 159)'));
|
||||
INSERT INTO t1 VALUES (140, ST_GeomFromText('LineString(140 140, 160 160)'));
|
||||
INSERT INTO t1 VALUES (139, ST_GeomFromText('LineString(139 139, 161 161)'));
|
||||
INSERT INTO t1 VALUES (138, ST_GeomFromText('LineString(138 138, 162 162)'));
|
||||
INSERT INTO t1 VALUES (137, ST_GeomFromText('LineString(137 137, 163 163)'));
|
||||
INSERT INTO t1 VALUES (136, ST_GeomFromText('LineString(136 136, 164 164)'));
|
||||
INSERT INTO t1 VALUES (135, ST_GeomFromText('LineString(135 135, 165 165)'));
|
||||
INSERT INTO t1 VALUES (134, ST_GeomFromText('LineString(134 134, 166 166)'));
|
||||
INSERT INTO t1 VALUES (133, ST_GeomFromText('LineString(133 133, 167 167)'));
|
||||
INSERT INTO t1 VALUES (132, ST_GeomFromText('LineString(132 132, 168 168)'));
|
||||
INSERT INTO t1 VALUES (131, ST_GeomFromText('LineString(131 131, 169 169)'));
|
||||
INSERT INTO t1 VALUES (130, ST_GeomFromText('LineString(130 130, 170 170)'));
|
||||
INSERT INTO t1 VALUES (129, ST_GeomFromText('LineString(129 129, 171 171)'));
|
||||
INSERT INTO t1 VALUES (128, ST_GeomFromText('LineString(128 128, 172 172)'));
|
||||
INSERT INTO t1 VALUES (127, ST_GeomFromText('LineString(127 127, 173 173)'));
|
||||
INSERT INTO t1 VALUES (126, ST_GeomFromText('LineString(126 126, 174 174)'));
|
||||
INSERT INTO t1 VALUES (125, ST_GeomFromText('LineString(125 125, 175 175)'));
|
||||
INSERT INTO t1 VALUES (124, ST_GeomFromText('LineString(124 124, 176 176)'));
|
||||
INSERT INTO t1 VALUES (123, ST_GeomFromText('LineString(123 123, 177 177)'));
|
||||
INSERT INTO t1 VALUES (122, ST_GeomFromText('LineString(122 122, 178 178)'));
|
||||
INSERT INTO t1 VALUES (121, ST_GeomFromText('LineString(121 121, 179 179)'));
|
||||
INSERT INTO t1 VALUES (120, ST_GeomFromText('LineString(120 120, 180 180)'));
|
||||
INSERT INTO t1 VALUES (119, ST_GeomFromText('LineString(119 119, 181 181)'));
|
||||
INSERT INTO t1 VALUES (118, ST_GeomFromText('LineString(118 118, 182 182)'));
|
||||
INSERT INTO t1 VALUES (117, ST_GeomFromText('LineString(117 117, 183 183)'));
|
||||
INSERT INTO t1 VALUES (116, ST_GeomFromText('LineString(116 116, 184 184)'));
|
||||
INSERT INTO t1 VALUES (115, ST_GeomFromText('LineString(115 115, 185 185)'));
|
||||
INSERT INTO t1 VALUES (114, ST_GeomFromText('LineString(114 114, 186 186)'));
|
||||
INSERT INTO t1 VALUES (113, ST_GeomFromText('LineString(113 113, 187 187)'));
|
||||
INSERT INTO t1 VALUES (112, ST_GeomFromText('LineString(112 112, 188 188)'));
|
||||
INSERT INTO t1 VALUES (111, ST_GeomFromText('LineString(111 111, 189 189)'));
|
||||
INSERT INTO t1 VALUES (110, ST_GeomFromText('LineString(110 110, 190 190)'));
|
||||
INSERT INTO t1 VALUES (109, ST_GeomFromText('LineString(109 109, 191 191)'));
|
||||
INSERT INTO t1 VALUES (108, ST_GeomFromText('LineString(108 108, 192 192)'));
|
||||
INSERT INTO t1 VALUES (107, ST_GeomFromText('LineString(107 107, 193 193)'));
|
||||
INSERT INTO t1 VALUES (106, ST_GeomFromText('LineString(106 106, 194 194)'));
|
||||
INSERT INTO t1 VALUES (105, ST_GeomFromText('LineString(105 105, 195 195)'));
|
||||
INSERT INTO t1 VALUES (104, ST_GeomFromText('LineString(104 104, 196 196)'));
|
||||
INSERT INTO t1 VALUES (103, ST_GeomFromText('LineString(103 103, 197 197)'));
|
||||
INSERT INTO t1 VALUES (102, ST_GeomFromText('LineString(102 102, 198 198)'));
|
||||
INSERT INTO t1 VALUES (101, ST_GeomFromText('LineString(101 101, 199 199)'));
|
||||
INSERT INTO t1 VALUES (100, ST_GeomFromText('LineString(100 100, 200 200)'));
|
||||
INSERT INTO t1 VALUES (99, ST_GeomFromText('LineString(99 99, 201 201)'));
|
||||
INSERT INTO t1 VALUES (98, ST_GeomFromText('LineString(98 98, 202 202)'));
|
||||
INSERT INTO t1 VALUES (97, ST_GeomFromText('LineString(97 97, 203 203)'));
|
||||
INSERT INTO t1 VALUES (96, ST_GeomFromText('LineString(96 96, 204 204)'));
|
||||
INSERT INTO t1 VALUES (95, ST_GeomFromText('LineString(95 95, 205 205)'));
|
||||
INSERT INTO t1 VALUES (94, ST_GeomFromText('LineString(94 94, 206 206)'));
|
||||
INSERT INTO t1 VALUES (93, ST_GeomFromText('LineString(93 93, 207 207)'));
|
||||
INSERT INTO t1 VALUES (92, ST_GeomFromText('LineString(92 92, 208 208)'));
|
||||
INSERT INTO t1 VALUES (91, ST_GeomFromText('LineString(91 91, 209 209)'));
|
||||
INSERT INTO t1 VALUES (90, ST_GeomFromText('LineString(90 90, 210 210)'));
|
||||
INSERT INTO t1 VALUES (89, ST_GeomFromText('LineString(89 89, 211 211)'));
|
||||
INSERT INTO t1 VALUES (88, ST_GeomFromText('LineString(88 88, 212 212)'));
|
||||
INSERT INTO t1 VALUES (87, ST_GeomFromText('LineString(87 87, 213 213)'));
|
||||
INSERT INTO t1 VALUES (86, ST_GeomFromText('LineString(86 86, 214 214)'));
|
||||
INSERT INTO t1 VALUES (85, ST_GeomFromText('LineString(85 85, 215 215)'));
|
||||
INSERT INTO t1 VALUES (84, ST_GeomFromText('LineString(84 84, 216 216)'));
|
||||
INSERT INTO t1 VALUES (83, ST_GeomFromText('LineString(83 83, 217 217)'));
|
||||
INSERT INTO t1 VALUES (82, ST_GeomFromText('LineString(82 82, 218 218)'));
|
||||
INSERT INTO t1 VALUES (81, ST_GeomFromText('LineString(81 81, 219 219)'));
|
||||
INSERT INTO t1 VALUES (80, ST_GeomFromText('LineString(80 80, 220 220)'));
|
||||
INSERT INTO t1 VALUES (79, ST_GeomFromText('LineString(79 79, 221 221)'));
|
||||
INSERT INTO t1 VALUES (78, ST_GeomFromText('LineString(78 78, 222 222)'));
|
||||
INSERT INTO t1 VALUES (77, ST_GeomFromText('LineString(77 77, 223 223)'));
|
||||
INSERT INTO t1 VALUES (76, ST_GeomFromText('LineString(76 76, 224 224)'));
|
||||
INSERT INTO t1 VALUES (75, ST_GeomFromText('LineString(75 75, 225 225)'));
|
||||
INSERT INTO t1 VALUES (74, ST_GeomFromText('LineString(74 74, 226 226)'));
|
||||
INSERT INTO t1 VALUES (73, ST_GeomFromText('LineString(73 73, 227 227)'));
|
||||
INSERT INTO t1 VALUES (72, ST_GeomFromText('LineString(72 72, 228 228)'));
|
||||
INSERT INTO t1 VALUES (71, ST_GeomFromText('LineString(71 71, 229 229)'));
|
||||
INSERT INTO t1 VALUES (70, ST_GeomFromText('LineString(70 70, 230 230)'));
|
||||
INSERT INTO t1 VALUES (69, ST_GeomFromText('LineString(69 69, 231 231)'));
|
||||
INSERT INTO t1 VALUES (68, ST_GeomFromText('LineString(68 68, 232 232)'));
|
||||
INSERT INTO t1 VALUES (67, ST_GeomFromText('LineString(67 67, 233 233)'));
|
||||
INSERT INTO t1 VALUES (66, ST_GeomFromText('LineString(66 66, 234 234)'));
|
||||
INSERT INTO t1 VALUES (65, ST_GeomFromText('LineString(65 65, 235 235)'));
|
||||
INSERT INTO t1 VALUES (64, ST_GeomFromText('LineString(64 64, 236 236)'));
|
||||
INSERT INTO t1 VALUES (63, ST_GeomFromText('LineString(63 63, 237 237)'));
|
||||
INSERT INTO t1 VALUES (62, ST_GeomFromText('LineString(62 62, 238 238)'));
|
||||
INSERT INTO t1 VALUES (61, ST_GeomFromText('LineString(61 61, 239 239)'));
|
||||
INSERT INTO t1 VALUES (60, ST_GeomFromText('LineString(60 60, 240 240)'));
|
||||
INSERT INTO t1 VALUES (59, ST_GeomFromText('LineString(59 59, 241 241)'));
|
||||
INSERT INTO t1 VALUES (58, ST_GeomFromText('LineString(58 58, 242 242)'));
|
||||
INSERT INTO t1 VALUES (57, ST_GeomFromText('LineString(57 57, 243 243)'));
|
||||
INSERT INTO t1 VALUES (56, ST_GeomFromText('LineString(56 56, 244 244)'));
|
||||
INSERT INTO t1 VALUES (55, ST_GeomFromText('LineString(55 55, 245 245)'));
|
||||
INSERT INTO t1 VALUES (54, ST_GeomFromText('LineString(54 54, 246 246)'));
|
||||
INSERT INTO t1 VALUES (53, ST_GeomFromText('LineString(53 53, 247 247)'));
|
||||
INSERT INTO t1 VALUES (52, ST_GeomFromText('LineString(52 52, 248 248)'));
|
||||
INSERT INTO t1 VALUES (51, ST_GeomFromText('LineString(51 51, 249 249)'));
|
||||
INSERT INTO t1 VALUES (50, ST_GeomFromText('LineString(50 50, 250 250)'));
|
||||
INSERT INTO t1 VALUES (49, ST_GeomFromText('LineString(49 49, 251 251)'));
|
||||
INSERT INTO t1 VALUES (48, ST_GeomFromText('LineString(48 48, 252 252)'));
|
||||
INSERT INTO t1 VALUES (47, ST_GeomFromText('LineString(47 47, 253 253)'));
|
||||
INSERT INTO t1 VALUES (46, ST_GeomFromText('LineString(46 46, 254 254)'));
|
||||
INSERT INTO t1 VALUES (45, ST_GeomFromText('LineString(45 45, 255 255)'));
|
||||
INSERT INTO t1 VALUES (44, ST_GeomFromText('LineString(44 44, 256 256)'));
|
||||
INSERT INTO t1 VALUES (43, ST_GeomFromText('LineString(43 43, 257 257)'));
|
||||
INSERT INTO t1 VALUES (42, ST_GeomFromText('LineString(42 42, 258 258)'));
|
||||
INSERT INTO t1 VALUES (41, ST_GeomFromText('LineString(41 41, 259 259)'));
|
||||
INSERT INTO t1 VALUES (40, ST_GeomFromText('LineString(40 40, 260 260)'));
|
||||
INSERT INTO t1 VALUES (39, ST_GeomFromText('LineString(39 39, 261 261)'));
|
||||
INSERT INTO t1 VALUES (38, ST_GeomFromText('LineString(38 38, 262 262)'));
|
||||
INSERT INTO t1 VALUES (37, ST_GeomFromText('LineString(37 37, 263 263)'));
|
||||
INSERT INTO t1 VALUES (36, ST_GeomFromText('LineString(36 36, 264 264)'));
|
||||
INSERT INTO t1 VALUES (35, ST_GeomFromText('LineString(35 35, 265 265)'));
|
||||
INSERT INTO t1 VALUES (34, ST_GeomFromText('LineString(34 34, 266 266)'));
|
||||
INSERT INTO t1 VALUES (33, ST_GeomFromText('LineString(33 33, 267 267)'));
|
||||
INSERT INTO t1 VALUES (32, ST_GeomFromText('LineString(32 32, 268 268)'));
|
||||
INSERT INTO t1 VALUES (31, ST_GeomFromText('LineString(31 31, 269 269)'));
|
||||
INSERT INTO t1 VALUES (30, ST_GeomFromText('LineString(30 30, 270 270)'));
|
||||
INSERT INTO t1 VALUES (29, ST_GeomFromText('LineString(29 29, 271 271)'));
|
||||
INSERT INTO t1 VALUES (28, ST_GeomFromText('LineString(28 28, 272 272)'));
|
||||
INSERT INTO t1 VALUES (27, ST_GeomFromText('LineString(27 27, 273 273)'));
|
||||
INSERT INTO t1 VALUES (26, ST_GeomFromText('LineString(26 26, 274 274)'));
|
||||
INSERT INTO t1 VALUES (25, ST_GeomFromText('LineString(25 25, 275 275)'));
|
||||
INSERT INTO t1 VALUES (24, ST_GeomFromText('LineString(24 24, 276 276)'));
|
||||
INSERT INTO t1 VALUES (23, ST_GeomFromText('LineString(23 23, 277 277)'));
|
||||
INSERT INTO t1 VALUES (22, ST_GeomFromText('LineString(22 22, 278 278)'));
|
||||
INSERT INTO t1 VALUES (21, ST_GeomFromText('LineString(21 21, 279 279)'));
|
||||
INSERT INTO t1 VALUES (20, ST_GeomFromText('LineString(20 20, 280 280)'));
|
||||
INSERT INTO t1 VALUES (19, ST_GeomFromText('LineString(19 19, 281 281)'));
|
||||
INSERT INTO t1 VALUES (18, ST_GeomFromText('LineString(18 18, 282 282)'));
|
||||
INSERT INTO t1 VALUES (17, ST_GeomFromText('LineString(17 17, 283 283)'));
|
||||
INSERT INTO t1 VALUES (16, ST_GeomFromText('LineString(16 16, 284 284)'));
|
||||
INSERT INTO t1 VALUES (15, ST_GeomFromText('LineString(15 15, 285 285)'));
|
||||
INSERT INTO t1 VALUES (14, ST_GeomFromText('LineString(14 14, 286 286)'));
|
||||
INSERT INTO t1 VALUES (13, ST_GeomFromText('LineString(13 13, 287 287)'));
|
||||
INSERT INTO t1 VALUES (12, ST_GeomFromText('LineString(12 12, 288 288)'));
|
||||
INSERT INTO t1 VALUES (11, ST_GeomFromText('LineString(11 11, 289 289)'));
|
||||
INSERT INTO t1 VALUES (10, ST_GeomFromText('LineString(10 10, 290 290)'));
|
||||
INSERT INTO t1 VALUES (9, ST_GeomFromText('LineString(9 9, 291 291)'));
|
||||
INSERT INTO t1 VALUES (8, ST_GeomFromText('LineString(8 8, 292 292)'));
|
||||
INSERT INTO t1 VALUES (7, ST_GeomFromText('LineString(7 7, 293 293)'));
|
||||
INSERT INTO t1 VALUES (6, ST_GeomFromText('LineString(6 6, 294 294)'));
|
||||
INSERT INTO t1 VALUES (5, ST_GeomFromText('LineString(5 5, 295 295)'));
|
||||
INSERT INTO t1 VALUES (4, ST_GeomFromText('LineString(4 4, 296 296)'));
|
||||
INSERT INTO t1 VALUES (3, ST_GeomFromText('LineString(3 3, 297 297)'));
|
||||
INSERT INTO t1 VALUES (2, ST_GeomFromText('LineString(2 2, 298 298)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(1 1, 299 299)'));
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
150
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 1000,1000 1000,1000 0,0 0))');
|
||||
select count(*) from t1 where MBRwithin(t1.c2, @g1);
|
||||
count(*)
|
||||
150
|
||||
truncate t1;
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(2 2, 150 150)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(3 3, 160 160)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(4 4, 170 170)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(5 5, 180 180)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(6 6, 190 190)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(7 7, 200 200)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(8 8, 210 210)'));
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 2, 2 2, 2 0, 0 0))');
|
||||
select count(*) from t1 where MBRtouches(t1.c2, @g1);
|
||||
count(*)
|
||||
2048
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 200,200 200,200 0,0 0))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
count(*)
|
||||
12288
|
||||
set @g1 = ST_GeomFromText('LineString(2 2, 150 150)');
|
||||
select count(*) from t1 where MBRequals(t1.c2, @g1);
|
||||
count(*)
|
||||
2048
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 200,200 200,200 0,0 0))');
|
||||
create table t3 (a int) engine = innodb;
|
||||
CREATE PROCEDURE curdemo()
|
||||
BEGIN
|
||||
DECLARE done INT DEFAULT FALSE;
|
||||
DECLARE a INT;
|
||||
DECLARE cur1 CURSOR FOR SELECT c1 from t1 where MBRWithin(t1.c2, @g1);
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
|
||||
OPEN cur1;
|
||||
read_loop: LOOP
|
||||
FETCH cur1 INTO a;
|
||||
IF done THEN
|
||||
LEAVE read_loop;
|
||||
END IF;
|
||||
INSERT INTO test.t3 VALUES (a);
|
||||
END LOOP;
|
||||
CLOSE cur1;
|
||||
END|
|
||||
call curdemo();
|
||||
select count(*) from t3;
|
||||
count(*)
|
||||
12288
|
||||
drop procedure curdemo;
|
||||
drop table t3;
|
||||
drop table t1;
|
86
mysql-test/suite/innodb_gis/r/rtree_split.result
Normal file
86
mysql-test/suite/innodb_gis/r/rtree_split.result
Normal file
@ -0,0 +1,86 @@
|
||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;
|
||||
insert into t1 values(1, Point(1,1));
|
||||
insert into t1 values(2, Point(2,2));
|
||||
insert into t1 values(3, Point(3,3));
|
||||
insert into t1 values(4, Point(4,4));
|
||||
insert into t1 values(5, Point(5,5));
|
||||
insert into t1 values(6, Point(6,6));
|
||||
insert into t1 values(7, Point(7,7));
|
||||
insert into t1 values(8, Point(8,8));
|
||||
insert into t1 values(9, Point(9,9));
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
SET SESSION debug="+d, rtr_page_need_second_split";
|
||||
insert into t1 select * from t1;
|
||||
SET SESSION debug="-d, rtr_page_need_second_split";
|
||||
delete from t1;
|
||||
insert into t1 values(1, Point(1,1));
|
||||
insert into t1 values(2, Point(2,2));
|
||||
insert into t1 values(3, Point(3,3));
|
||||
insert into t1 values(4, Point(4,4));
|
||||
insert into t1 values(5, Point(5,5));
|
||||
insert into t1 values(6, Point(6,6));
|
||||
insert into t1 values(7, Point(7,7));
|
||||
insert into t1 values(8, Point(8,8));
|
||||
insert into t1 values(9, Point(9,9));
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
start transaction;
|
||||
insert into t1 select * from t1;
|
||||
rollback;
|
||||
check table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
check table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
73728
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 100,100 100,100 0,0 0))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
count(*)
|
||||
73728
|
||||
set @g1 = ST_GeomFromText('Polygon((10 10,10 800,800 800,800 10,10 10))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
count(*)
|
||||
0
|
||||
drop index c2 on t1;
|
||||
create spatial index idx2 on t1(c2);
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) DEFAULT NULL,
|
||||
`c2` geometry NOT NULL,
|
||||
SPATIAL KEY `idx2` (`c2`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 100,100 100,100 0,0 0))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
count(*)
|
||||
73728
|
||||
# restart: --innodb-read-only
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 100,100 100,100 0,0 0))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
count(*)
|
||||
73728
|
||||
set @g1 = ST_GeomFromText('Polygon((2 2,2 800,800 800,800 2,2 2))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
count(*)
|
||||
57344
|
||||
# restart
|
||||
drop table t1;
|
272
mysql-test/suite/innodb_gis/r/rtree_undo.result
Normal file
272
mysql-test/suite/innodb_gis/r/rtree_undo.result
Normal file
File diff suppressed because one or more lines are too long
80
mysql-test/suite/innodb_gis/r/types.result
Normal file
80
mysql-test/suite/innodb_gis/r/types.result
Normal file
@ -0,0 +1,80 @@
|
||||
SET SESSION debug="+d,row_print_geometry_data";
|
||||
CREATE TABLE t_wl6455 ( i INT, g GEOMETRY NOT NULL) ENGINE=InnoDB;
|
||||
SHOW CREATE TABLE t_wl6455;
|
||||
Table Create Table
|
||||
t_wl6455 CREATE TABLE `t_wl6455` (
|
||||
`i` int(11) DEFAULT NULL,
|
||||
`g` geometry NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
INSERT INTO t_wl6455 VALUES(1, POINT(1,1));
|
||||
INSERT INTO t_wl6455 VALUES(2, POINT(2,2));
|
||||
SET @mp = 'MULTIPOINT(0 0, 20 20, 60 60)';
|
||||
INSERT INTO t_wl6455 VALUES(3, ST_GeomFromText(@mp));
|
||||
INSERT INTO t_wl6455 VALUES(4, LINESTRING(POINT(1,1), POINT(4, 4)));
|
||||
INSERT INTO t_wl6455 VALUES(5, LINESTRING(POINT(2,2), POINT(5, 5)));
|
||||
SET @mls = 'MultiLineString((1 1,2 2,3 3),(4 4,5 5))';
|
||||
INSERT INTO t_wl6455 VALUES(6, ST_GeomFromText(@mls));
|
||||
SET @poly = 'Polygon((0 0,0 3,3 0,0 0),(1 1,1 2,2 1,1 1))';
|
||||
INSERT INTO t_wl6455 VALUES(7, ST_GeomFromText(@poly));
|
||||
SET @mpoly = 'MultiPolygon(((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1)))';
|
||||
INSERT INTO t_wl6455 VALUES(8, ST_GeomFromText(@mpoly));
|
||||
SET @gc = 'GeometryCollection(Point(1 1),LineString(2 2, 3 3))';
|
||||
INSERT INTO t_wl6455 VALUES(9, ST_GeomFromText(@gc));
|
||||
SELECT ST_AsText(g) FROM t_wl6455;
|
||||
ST_AsText(g)
|
||||
POINT(1 1)
|
||||
POINT(2 2)
|
||||
MULTIPOINT((0 0),(20 20),(60 60))
|
||||
LINESTRING(1 1,4 4)
|
||||
LINESTRING(2 2,5 5)
|
||||
MULTILINESTRING((1 1,2 2,3 3),(4 4,5 5))
|
||||
POLYGON((0 0,0 3,3 0,0 0),(1 1,1 2,2 1,1 1))
|
||||
MULTIPOLYGON(((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1)))
|
||||
GEOMETRYCOLLECTION(POINT(1 1),LINESTRING(2 2,3 3))
|
||||
CREATE INDEX i_p ON t_wl6455 (g(10));
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t_wl6455 WHERE g = POINT(2,2);
|
||||
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t_wl6455 NULL ref i_p i_p 12 const # 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select st_astext(`test`.`t_wl6455`.`g`) AS `ST_AsText(g)` from `test`.`t_wl6455` where (`test`.`t_wl6455`.`g` = <cache>(point(2,2)))
|
||||
SELECT ST_AsText(g) FROM t_wl6455 WHERE g = POINT(2,2);
|
||||
ST_AsText(g)
|
||||
POINT(2 2)
|
||||
SET AUTOCOMMIT = 0;
|
||||
INSERT INTO t_wl6455 VALUES(10, POINT(10,10));
|
||||
SELECT ST_AsText(g) FROM t_wl6455 WHERE g = POINT(10,10);
|
||||
ST_AsText(g)
|
||||
POINT(10 10)
|
||||
ROLLBACK;
|
||||
SELECT ST_AsText(g) FROM t_wl6455 WHERE g = POINT(10,10);
|
||||
ST_AsText(g)
|
||||
INSERT INTO t_wl6455 VALUES(10, POINT(10,10));
|
||||
COMMIT;
|
||||
INSERT INTO t_wl6455 VALUES(11, POINT(11,11));
|
||||
BEGIN;
|
||||
INSERT INTO t_wl6455 VALUES(1, POINT(1,1));
|
||||
# Kill and restart
|
||||
CHECK TABLE t_wl6455;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t_wl6455 check status OK
|
||||
SELECT ST_AsText(g) FROM t_wl6455;
|
||||
ST_AsText(g)
|
||||
POINT(1 1)
|
||||
POINT(2 2)
|
||||
MULTIPOINT((0 0),(20 20),(60 60))
|
||||
LINESTRING(1 1,4 4)
|
||||
LINESTRING(2 2,5 5)
|
||||
MULTILINESTRING((1 1,2 2,3 3),(4 4,5 5))
|
||||
POLYGON((0 0,0 3,3 0,0 0),(1 1,1 2,2 1,1 1))
|
||||
MULTIPOLYGON(((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1)))
|
||||
GEOMETRYCOLLECTION(POINT(1 1),LINESTRING(2 2,3 3))
|
||||
POINT(10 10)
|
||||
POINT(11 11)
|
||||
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/t_wl6455' AND sc.NAME='g';
|
||||
name pos mtype
|
||||
g 1 14
|
||||
DROP TABLE t_wl6455;
|
19
mysql-test/suite/innodb_gis/r/update_root.result
Normal file
19
mysql-test/suite/innodb_gis/r/update_root.result
Normal file
@ -0,0 +1,19 @@
|
||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;
|
||||
create procedure insert_t1(IN total int)
|
||||
begin
|
||||
declare i int default 1;
|
||||
while (i <= total) DO
|
||||
insert into t1 values (i, Point(i, i));
|
||||
set i = i + 1;
|
||||
end while;
|
||||
end|
|
||||
CALL insert_t1(70000);
|
||||
CALL insert_t1(90);
|
||||
CALL insert_t1(90);
|
||||
CALL insert_t1(83);
|
||||
insert into t1 values (0, Point(0.9, 0.9));
|
||||
check table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
drop procedure insert_t1;
|
||||
drop table t1;
|
64
mysql-test/suite/innodb_gis/t/bug16236208.test
Normal file
64
mysql-test/suite/innodb_gis/t/bug16236208.test
Normal file
@ -0,0 +1,64 @@
|
||||
#********************************************************
|
||||
# Bug 16236208 - GEOMETRY : SERVER CRASHES IN
|
||||
# SEL_TREES_CAN_BE_ORED WHEN THE QUERY USES GIS COLS.
|
||||
#********************************************************
|
||||
|
||||
--source include/have_geometry.inc
|
||||
--source include/not_embedded.inc
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS linestring;
|
||||
--enable_warnings
|
||||
|
||||
CREATE TABLE linestring (pk INTEGER NOT NULL PRIMARY KEY, linestring_key
|
||||
GEOMETRY NOT NULL, linestring_nokey GEOMETRY NOT NULL) ENGINE=InnoDB ;
|
||||
|
||||
INSERT INTO linestring (pk, linestring_key, linestring_nokey) VALUES (1,
|
||||
ST_GeomFromText('POINT(10 10) '), ST_GeomFromText('POINT(10 10) '));
|
||||
|
||||
INSERT INTO linestring (pk, linestring_key, linestring_nokey) VALUES (2,
|
||||
ST_GeomFromText('LINESTRING(10 10,20 20,30 30)'), ST_GeomFromText('LINESTRING(10
|
||||
10,20 20,30 30)'));
|
||||
|
||||
INSERT INTO linestring (pk, linestring_key, linestring_nokey) VALUES (3,
|
||||
ST_GeomFromText('POLYGON((0 0,5 5,10 10,15 15,0 0),(10 10,20 20,30 30,40 40,10
|
||||
10))'), ST_GeomFromText('POLYGON((0 0,5 5,10 10,15 15,0 0),(10 10,20 20,30 30,40
|
||||
40,10 10))'));
|
||||
|
||||
INSERT INTO linestring (pk, linestring_key, linestring_nokey) VALUES (4,
|
||||
ST_GeomFromText('MULTIPOINT(0 0,5 5,10 10,20 20) '), ST_GeomFromText('MULTIPOINT(0
|
||||
0,5 5,10 10,20 20) '));
|
||||
|
||||
INSERT INTO linestring (pk, linestring_key, linestring_nokey) VALUES (5,
|
||||
ST_GeomFromText('MULTILINESTRING((1 1,2 2,3 3),(10 10,20 20,30 30))'),
|
||||
ST_GeomFromText('MULTILINESTRING((1 1,2 2,3 3),(10 10,20 20,30 30))'));
|
||||
|
||||
INSERT INTO linestring (pk, linestring_key, linestring_nokey) VALUES (6,
|
||||
ST_GeomFromText('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)))'),
|
||||
ST_GeomFromText('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)))'));
|
||||
|
||||
INSERT INTO linestring (pk, linestring_key, linestring_nokey) VALUES (7,
|
||||
ST_GeomFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))'),
|
||||
ST_GeomFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))'));
|
||||
|
||||
CREATE INDEX linestring_index ON linestring(linestring_nokey(5));
|
||||
ALTER TABLE linestring ADD KEY (linestring_key(5));
|
||||
|
||||
--error ER_GIS_INVALID_DATA
|
||||
SELECT ST_AsText(linestring_nokey) FROM linestring FORCE KEY (
|
||||
linestring_key ) WHERE ST_CONTAINS( ST_GeomFromText('POLYGON( ( 3923 2815 , 4246
|
||||
2122 , 4028 2971 , 4017 3019 , 3923 2815 ) )') , linestring_key ) AND
|
||||
ST_WITHIN( ST_GeomFromText('POLYGON( ( 4135 3009 , 4914 3087 , 4236 3194 , 4091
|
||||
3036 , 4022 3004 , 4087 3004 , 3853 2825 , 3490 3118 , 3784 3141 , 4052 3072
|
||||
, 4205 2787 , 4024 2951 , 4076 3036 , 4041 3053 , 3789 3401 , 4080 3100 ,
|
||||
4169 2867 , 4056 3029 , 4715 3943 , 4052 3098 , 4035 3080 , 4013 3077 , 4218
|
||||
2915 , 3789 2980 , 4058 3046 , 4042 3043 , 4135 3009 ) )') , linestring_nokey
|
||||
) AND ST_CONTAINS( ST_GeomFromText('POLYGON( ( 4082 2842 , 3678 3647 , 3420 3068
|
||||
, 4018 3030 , 4082 2842 ) )') , linestring_key ) OR ST_INTERSECTS(
|
||||
ST_GeomFromText('MULTILINESTRING( ( 4147 2871 , 4072 3042 , 4081 3099 , 3796
|
||||
3021 , 4007 3463 ) , ( 4042 2808 , 4109 2816 , 3730 3673 ) )') ,
|
||||
linestring_key ) AND ST_Length( linestring_nokey ) > 1;
|
||||
|
||||
DROP TABLE linestring;
|
18
mysql-test/suite/innodb_gis/t/bug16266012.test
Normal file
18
mysql-test/suite/innodb_gis/t/bug16266012.test
Normal file
@ -0,0 +1,18 @@
|
||||
#********************************************************
|
||||
# Bug 16266012 - GEOMETRY : SERVER CRASHES IN
|
||||
# COLLECTION_INIT_FROM_OPRESULT
|
||||
#********************************************************
|
||||
|
||||
--source include/have_geometry.inc
|
||||
--source include/not_embedded.inc
|
||||
--source include/have_debug.inc
|
||||
--error ER_BOOST_GEOMETRY_OVERLAY_INVALID_INPUT_EXCEPTION
|
||||
SELECT ST_WITHIN( LINESTRINGFROMTEXT(' LINESTRING( 5 9 , 3 4 , 4 1 , 4
|
||||
4 , 4 9 ) ') , ST_SYMDIFFERENCE( ST_UNION( ST_ENVELOPE( POLYGONFROMTEXT('
|
||||
POLYGON( ( 3 2 , 0 6 , 2 3 , 8 0 , 4 6 , 7 2 , 3 2 ) ) ') ) ,
|
||||
MULTIPOLYGONFROMTEXT('
|
||||
MULTIPOLYGON( ( ( 0 0 , 7 1 , 6 8 , 0 0 ) ) , ( ( 9 9 , 4 0 , 4 7 , 9 9) ) )
|
||||
') ) , ST_SYMDIFFERENCE( POLYGONFROMTEXT(' POLYGON( ( 9 9 , 6 5 , 2 3 , 9 9
|
||||
) ) ') , MULTIPOLYGONFROMTEXT(' MULTIPOLYGON( ( ( 2 2 , 5 2 , 5 2 , 2 6 , 2
|
||||
2 ) ) , ( ( 7 7 , 3 7 , 2 9 , 7 1 , 7 7 ) ) ) ') ) ) );
|
||||
|
32
mysql-test/suite/innodb_gis/t/bug17057168.test
Normal file
32
mysql-test/suite/innodb_gis/t/bug17057168.test
Normal file
@ -0,0 +1,32 @@
|
||||
#********************************************************
|
||||
# Bug 17057168 - LARGE PERFORMANCE REGRESSION FOR INNODB
|
||||
# GEOMETRY/SPATIAL INDEX LOOKUP
|
||||
#********************************************************
|
||||
--source include/have_geometry.inc
|
||||
--source include/not_embedded.inc
|
||||
--source include/no_valgrind_without_big.inc
|
||||
|
||||
CREATE DATABASE geotest;
|
||||
use geotest;
|
||||
CREATE TABLE tmp (id int unsigned NOT NULL PRIMARY KEY);
|
||||
INSERT INTO tmp VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);
|
||||
INSERT INTO tmp SELECT 10+id FROM tmp;
|
||||
INSERT INTO tmp SELECT 20+id FROM tmp;
|
||||
INSERT INTO tmp SELECT 40+id FROM tmp;
|
||||
INSERT INTO tmp SELECT 80+id FROM tmp;
|
||||
|
||||
CREATE TABLE t1 (id int unsigned NOT NULL auto_increment PRIMARY KEY,
|
||||
location point, INDEX (location)) ENGINE=InnoDB;
|
||||
INSERT INTO t1 (location) SELECT POINT(tmp1.id, tmp2.id) FROM tmp tmp1,
|
||||
tmp tmp2 ORDER BY tmp1.id, tmp2.id;
|
||||
|
||||
#Befor fix, the row number will be the total number of index recs,
|
||||
#After fix, the row number will be 1.
|
||||
EXPLAIN SELECT id, ST_AsText(location) FROM t1 WHERE location = POINT(1,
|
||||
2);
|
||||
SELECT id, ST_AsText(location) FROM t1 WHERE location = POINT(1, 2);
|
||||
|
||||
DROP TABLE t1;
|
||||
DROP TABLE tmp;
|
||||
|
||||
DROP DATABASE geotest;
|
704
mysql-test/suite/innodb_gis/t/geometry.test
Normal file
704
mysql-test/suite/innodb_gis/t/geometry.test
Normal file
@ -0,0 +1,704 @@
|
||||
#********************************************************
|
||||
# wl6455: GIS Datatypes covers the following tests.
|
||||
# DDL: ALTER PRIMARY, DROP KEY,INDEX,COLUMN TYPE etc
|
||||
# INSERT/SELECT operations with WKT & WKB functions
|
||||
# SELECT/DELETE/UPDATE with =,>,< predicate conditions
|
||||
# Datatypes with Procedure (IN/INOUT/OUT,Cursors,Trigger)
|
||||
# Datatypes with Aggregate functions
|
||||
# File Formts Compressed & Dynamic
|
||||
# All Geometric functions.
|
||||
#********************************************************
|
||||
--source include/have_geometry.inc
|
||||
--source include/not_embedded.inc
|
||||
--source include/have_debug.inc
|
||||
--source include/have_innodb_zip.inc
|
||||
|
||||
SET default_storage_engine=InnoDB;
|
||||
SET innodb_strict_mode=OFF;
|
||||
|
||||
# Turn on the geometry data print.
|
||||
SET SESSION debug="+d,row_print_geometry_data";
|
||||
|
||||
SHOW VARIABLES LIKE '%engine%';
|
||||
|
||||
#
|
||||
# Spatial objects
|
||||
#
|
||||
|
||||
USE test;
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1, gis_point, gis_line, gis_polygon;
|
||||
DROP TABLE IF EXISTS gis_multi_point, gis_multi_line, gis_multi_polygon;
|
||||
DROP TABLE IF EXISTS gis_geometrycollection, gis_geometry;
|
||||
DROP TABLE IF EXISTS tab,tab2,tab3,parent,emp2;
|
||||
DROP PROCEDURE IF EXISTS geominout;
|
||||
DROP PROCEDURE IF EXISTS geom_insert;
|
||||
DROP TRIGGER IF EXISTS geom_trigger;
|
||||
DROP PROCEDURE IF EXISTS geom_cursor;
|
||||
|
||||
|
||||
--enable_warnings
|
||||
|
||||
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;
|
||||
SHOW FIELDS FROM gis_line;
|
||||
SHOW FIELDS FROM gis_polygon;
|
||||
SHOW FIELDS FROM gis_multi_point;
|
||||
SHOW FIELDS FROM gis_multi_line;
|
||||
SHOW FIELDS FROM gis_multi_polygon;
|
||||
SHOW FIELDS FROM gis_geometrycollection;
|
||||
SHOW FIELDS FROM gis_geometry;
|
||||
|
||||
--echo #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))))));
|
||||
|
||||
--echo #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;
|
||||
|
||||
--echo #check format coversion functions & spatial values
|
||||
SELECT fid, ST_AsText(g) FROM gis_point;
|
||||
SELECT fid, ST_AsText(g) FROM gis_line;
|
||||
SELECT fid, ST_AsText(g) FROM gis_polygon;
|
||||
SELECT fid, ST_AsText(g) FROM gis_multi_point;
|
||||
SELECT fid, ST_AsText(g) FROM gis_multi_line;
|
||||
SELECT fid, ST_AsText(g) FROM gis_multi_polygon;
|
||||
SELECT fid, ST_AsText(g) FROM gis_geometrycollection;
|
||||
SELECT fid, ST_AsText(g) FROM gis_geometry;
|
||||
|
||||
--echo #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;
|
||||
|
||||
--echo #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;
|
||||
|
||||
--echo #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))');
|
||||
|
||||
--echo #Insert the spatial values
|
||||
INSERT INTO tab VALUES(@c1,@c2,@c3,@c4,@c5,@c6,@c7,@c8);
|
||||
|
||||
--echo #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) ;
|
||||
|
||||
--echo #check equality predicate on the index columns
|
||||
--replace_column 10 #
|
||||
EXPLAIN SELECT ST_ASText(c1),ST_AsText(c2),ST_AsText(c8) FROM tab
|
||||
WHERE c2=ST_LineFromText('LINESTRING(10 10,20 20,30 30)');
|
||||
|
||||
--echo #check index with WKB function
|
||||
--replace_column 10 #
|
||||
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)')));
|
||||
|
||||
--echo #check index with WKT function
|
||||
--replace_column 10 #
|
||||
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))');
|
||||
|
||||
--echo #check index with WKB function
|
||||
--replace_column 10 #
|
||||
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))')));
|
||||
|
||||
--echo #check index with WKT function
|
||||
--replace_column 10 #
|
||||
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))');
|
||||
|
||||
--echo #check index with WKB function
|
||||
--replace_column 10 #
|
||||
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))')));
|
||||
|
||||
--echo #check range predicate on the index columns
|
||||
--replace_column 10 #
|
||||
--error ER_WRONG_ARGUMENTS
|
||||
EXPLAIN SELECT ST_ASText(c1),ST_AsText(c2),ST_AsText(c8) FROM tab
|
||||
WHERE c2>=ST_LineFromText('LINESTRING(10 10,20 20,30 30)');
|
||||
|
||||
--replace_column 10 #
|
||||
--error ER_WRONG_ARGUMENTS
|
||||
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))');
|
||||
|
||||
--replace_column 10 #
|
||||
--error ER_WRONG_ARGUMENTS
|
||||
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))');
|
||||
|
||||
--echo #check index with DELETE operation
|
||||
--replace_column 10 #
|
||||
EXPLAIN DELETE FROM tab
|
||||
WHERE c8=ST_GeometryFromWKB(ST_AsWKB(ST_GeomCollFromText('GeometryCollection(Point(1 1),LineString(2 2, 3 3))')));
|
||||
|
||||
|
||||
--echo #check the spatial values
|
||||
SELECT ST_AsText(c1) FROM tab;
|
||||
SELECT ST_AsText(c2) FROM tab;
|
||||
SELECT ST_AsText(c3) FROM tab;
|
||||
SELECT ST_AsText(c4) FROM tab;
|
||||
SELECT ST_AsText(c5) FROM tab;
|
||||
SELECT ST_AsText(c6) FROM tab;
|
||||
SELECT ST_AsText(c7) FROM tab;
|
||||
SELECT ST_AsText(c8) From tab;
|
||||
|
||||
--echo #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;
|
||||
|
||||
--echo #check column datatypes
|
||||
SHOW FIELDS FROM tab;
|
||||
|
||||
--echo #check the data after modify
|
||||
SELECT ST_AsText(c1) FROM tab;
|
||||
SELECT ST_AsText(c2) FROM tab;
|
||||
SELECT ST_AsText(c3) FROM tab;
|
||||
SELECT ST_AsText(c4) FROM tab;
|
||||
SELECT ST_AsText(c5) FROM tab;
|
||||
SELECT ST_AsText(c6) FROM tab;
|
||||
SELECT ST_AsText(c7) FROM tab;
|
||||
SELECT ST_AsText(c8) From tab;
|
||||
|
||||
--echo #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;
|
||||
|
||||
--echo #check column datatypes
|
||||
SHOW FIELDS FROM tab;
|
||||
|
||||
--echo #check the data after modify
|
||||
SELECT ST_AsText(c1) FROM tab;
|
||||
SELECT ST_AsText(c2) FROM tab;
|
||||
SELECT ST_AsText(c3) FROM tab;
|
||||
SELECT ST_AsText(c4) FROM tab;
|
||||
SELECT ST_AsText(c5) FROM tab;
|
||||
SELECT ST_AsText(c6) FROM tab;
|
||||
SELECT ST_AsText(c7) FROM tab;
|
||||
SELECT ST_AsText(c8) From tab;
|
||||
|
||||
--echo #check change the column type
|
||||
ALTER TABLE tab MODIFY COLUMN c1 BLOB;
|
||||
|
||||
--echo #check column datatypes
|
||||
SHOW CREATE TABLE tab;
|
||||
|
||||
--echo #check the data after modify
|
||||
SELECT ST_AsText(c1) FROM tab;
|
||||
|
||||
--echo #change the column name
|
||||
ALTER TABLE tab CHANGE COLUMN c1 c0 GEOMETRY ;
|
||||
|
||||
|
||||
--echo #check column datatypes
|
||||
SHOW FIELDS FROM tab;
|
||||
|
||||
--echo #add primary key
|
||||
ALTER TABLE tab ADD PRIMARY KEY pk2(c8(5));
|
||||
|
||||
--echo #check columns
|
||||
SHOW FIELDS FROM tab;
|
||||
|
||||
--echo #drop key
|
||||
ALTER TABLE tab DROP PRIMARY KEY;
|
||||
|
||||
--echo #check columns
|
||||
SHOW FIELDS FROM tab;
|
||||
|
||||
--echo #cleanup the table
|
||||
TRUNCATE TABLE tab;
|
||||
|
||||
--echo #check with procedures
|
||||
|
||||
delimiter |;
|
||||
|
||||
--echo #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 |
|
||||
|
||||
delimiter ;|
|
||||
|
||||
--echo #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))');
|
||||
|
||||
--echo #call the proc
|
||||
CALL geom_insert(@c1,@c2,@c3,@c4,@c5,@c6,@c7,@c8);
|
||||
|
||||
--echo #check the values ofter proc call
|
||||
SELECT ST_AsText(c0) FROM tab;
|
||||
SELECT ST_AsText(c2) FROM tab;
|
||||
SELECT ST_AsText(c3) FROM tab;
|
||||
SELECT ST_AsText(c4) FROM tab;
|
||||
SELECT ST_AsText(c5) FROM tab;
|
||||
SELECT ST_AsText(c6) FROM tab;
|
||||
SELECT ST_AsText(c7) FROM tab;
|
||||
SELECT ST_AsText(c8) From tab;
|
||||
|
||||
|
||||
--echo #set the input spatial value
|
||||
SET @c9=ST_GeomCollFromText('GeometryCollection(Point(1 1),LineString(2 2, 3 3))');
|
||||
|
||||
delimiter |;
|
||||
|
||||
--echo #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|
|
||||
|
||||
delimiter ;|
|
||||
|
||||
--echo #call the proc and then change the spatial value of c8
|
||||
CALL geominout(@c9);
|
||||
|
||||
--echo #now check the out spatial values should be changed to new values
|
||||
SELECT ST_AsText(@c9);
|
||||
|
||||
#check GIS datatype with Triggers
|
||||
|
||||
--echo #delete the records
|
||||
TRUNCATE TABLE tab;
|
||||
|
||||
--echo #create another table same as tab
|
||||
CREATE TABLE tab2 AS SELECT * FROM tab;
|
||||
|
||||
--echo #check the table definition
|
||||
SHOW CREATE TABLE tab2;
|
||||
|
||||
|
||||
delimiter |;
|
||||
|
||||
--echo #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|
|
||||
|
||||
delimiter ;|
|
||||
|
||||
--echo #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))');
|
||||
|
||||
--echo #Insert the spatial values
|
||||
INSERT INTO tab VALUES(@c1,@c2,@c3,@c4,@c5,@c6,@c7,@c8);
|
||||
|
||||
--echo #check the values whether populated
|
||||
SELECT ST_AsText(c0) FROM tab2;
|
||||
SELECT ST_AsText(c2) FROM tab2;
|
||||
SELECT ST_AsText(c3) FROM tab2;
|
||||
SELECT ST_AsText(c4) FROM tab2;
|
||||
SELECT ST_AsText(c5) FROM tab2;
|
||||
SELECT ST_AsText(c6) FROM tab2;
|
||||
SELECT ST_AsText(c7) FROM tab2;
|
||||
SELECT ST_AsText(c8) From tab2;
|
||||
|
||||
--echo #check Cursor with Geometry
|
||||
|
||||
delimiter |;
|
||||
|
||||
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|
|
||||
|
||||
delimiter ;|
|
||||
|
||||
--echo # the following line was commented due the Bug#16282246
|
||||
--echo # Once it is fixed, the comment will be removed.
|
||||
--echo # right now bug fixing date is unknown.
|
||||
#CALL geom_cursor();
|
||||
|
||||
--echo 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;
|
||||
|
||||
--echo #check equi join
|
||||
SELECT ST_AsText(a.c2),ST_AsText(b.c2) FROM tab a,tab2 b WHERE a.c2=b.c2;
|
||||
|
||||
--echo #check DELETE stmt with Where clause and a constant predicate
|
||||
DELETE FROM tab
|
||||
Where c8=c8=ST_GeometryFromWKB(ST_AsWKB(ST_GeomCollFromText('GeometryCollection(Point(1 1),LineString(2 2, 3 3))')));
|
||||
|
||||
--echo #check the data, should 0
|
||||
SELECT COUNT(*) FROM tab;
|
||||
|
||||
--echo #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)')));
|
||||
|
||||
--echo #check the column should be modified to LINESTRING(10 10,20 20,30 30)
|
||||
SELECT ST_AsText(c8) From tab2;
|
||||
|
||||
--echo #check GIS datatypes with aggregate functions
|
||||
SELECT COUNT(ST_AsText(g)) FROM gis_point;
|
||||
SELECT COUNT(ST_AsText(g)) FROM gis_line;
|
||||
SELECT COUNT(ST_AsText(g)) FROM gis_polygon;
|
||||
SELECT COUNT(ST_AsText(g)) FROM gis_multi_point;
|
||||
SELECT COUNT(ST_AsText(g)) FROM gis_multi_line;
|
||||
SELECT COUNT(ST_AsText(g)) FROM gis_multi_polygon;
|
||||
SELECT COUNT(ST_AsText(g)) FROM gis_geometrycollection;
|
||||
SELECT COUNT(ST_AsText(g)) FROM gis_geometry;
|
||||
|
||||
SELECT SUM(ST_AsText(g)) FROM gis_point;
|
||||
SELECT SUM(ST_AsText(g)) FROM gis_line;
|
||||
SELECT AVG(ST_AsText(g)) FROM gis_polygon;
|
||||
--echo #here it show some string value no meaning
|
||||
SELECT MAX(ST_AsText(g)) FROM gis_multi_point;
|
||||
--echo #here it show some string value no meaning
|
||||
SELECT MIN(ST_AsText(g)) FROM gis_multi_line;
|
||||
SELECT STD(ST_AsText(g)) FROM gis_multi_polygon;
|
||||
SELECT COUNT(ST_AsText(g)) FROM gis_geometrycollection;
|
||||
SELECT AVG(ST_AsText(g)) FROM gis_geometry;
|
||||
|
||||
--disable_warnings
|
||||
--echo #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;
|
||||
|
||||
--echo #check file format
|
||||
SHOW CREATE TABLE tab3;
|
||||
|
||||
ALTER TABLE tab3 KEY_BLOCK_SIZE=16 ROW_FORMAT=Dynamic;
|
||||
|
||||
--echo #check file format
|
||||
SHOW CREATE TABLE tab3;
|
||||
|
||||
--echo #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;
|
||||
|
||||
--echo #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))');
|
||||
|
||||
--echo #Insert the spatial values
|
||||
INSERT INTO tab3 VALUES(@c1,@c2,@c3,@c4,@c5,@c6,@c7,@c8);
|
||||
|
||||
--echo #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) ;
|
||||
|
||||
--enable_warnings
|
||||
|
||||
--echo #check equality predicate on the index columns
|
||||
--replace_column 10 #
|
||||
EXPLAIN SELECT ST_ASText(c1),ST_AsText(c2),ST_AsText(c8) FROM tab3
|
||||
WHERE c2=ST_LineFromText('LINESTRING(10 10,20 20,30 30)');
|
||||
|
||||
--echo #check index with WKB function
|
||||
--replace_column 10 #
|
||||
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)')));
|
||||
|
||||
--echo #check index with WKT function
|
||||
--replace_column 10 #
|
||||
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))');
|
||||
|
||||
--echo #check index with WKB function
|
||||
--replace_column 10 #
|
||||
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))')));
|
||||
|
||||
--echo #check index with WKT function
|
||||
--replace_column 10 #
|
||||
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))');
|
||||
|
||||
--echo #check index with WKB function
|
||||
--replace_column 10 #
|
||||
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))')));
|
||||
|
||||
--echo #check range predicate on the index columns
|
||||
--replace_column 10 #
|
||||
--error ER_WRONG_ARGUMENTS
|
||||
EXPLAIN SELECT ST_ASText(c1),ST_AsText(c2),ST_AsText(c8) FROM tab3
|
||||
WHERE c2>=ST_LineFromText('LINESTRING(10 10,20 20,30 30)');
|
||||
|
||||
--replace_column 10 #
|
||||
--error ER_WRONG_ARGUMENTS
|
||||
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))');
|
||||
|
||||
--replace_column 10 #
|
||||
--error ER_WRONG_ARGUMENTS
|
||||
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))');
|
||||
|
||||
--echo #check index with DELETE operation
|
||||
--replace_column 10 #
|
||||
EXPLAIN DELETE FROM tab3
|
||||
WHERE c8=ST_GeometryFromWKB(ST_AsWKB(ST_GeomCollFromText('GeometryCollection(Point(1 1),LineString(2 2, 3 3))')));
|
||||
|
||||
|
||||
--echo #check the spatial values
|
||||
SELECT ST_AsText(c1) FROM tab3;
|
||||
SELECT ST_AsText(c2) FROM tab3;
|
||||
SELECT ST_AsText(c3) FROM tab3;
|
||||
SELECT ST_AsText(c4) FROM tab3;
|
||||
SELECT ST_AsText(c5) FROM tab3;
|
||||
SELECT ST_AsText(c6) FROM tab3;
|
||||
SELECT ST_AsText(c7) FROM tab3;
|
||||
SELECT ST_AsText(c8) From tab3;
|
||||
|
||||
--echo #check with Row_format = Dynamic
|
||||
--disable_warnings
|
||||
ALTER TABLE tab3 ROW_FORMAT=Dynamic;
|
||||
--enable_warnings
|
||||
|
||||
--echo #check file format
|
||||
SHOW CREATE TABLE tab3;
|
||||
|
||||
--echo #check index with WKB function
|
||||
--replace_column 10 #
|
||||
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)')));
|
||||
|
||||
--echo #check index with WKT function
|
||||
--replace_column 10 #
|
||||
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))');
|
||||
|
||||
|
||||
|
||||
--echo #check the Geometry property functions
|
||||
SELECT fid, ST_Dimension(g) FROM gis_geometry;
|
||||
SELECT fid, ST_GeometryType(g) FROM gis_geometry;
|
||||
SELECT fid, ST_IsEmpty(g) FROM gis_geometry;
|
||||
SELECT fid, ST_AsText(ST_Envelope(g)) FROM gis_geometry;
|
||||
--replace_column 10 #
|
||||
explain extended select ST_Dimension(g), ST_GeometryType(g), ST_IsEmpty(g), ST_AsText(ST_Envelope(g)) from gis_geometry;
|
||||
|
||||
--echo #check Geometry point functions
|
||||
SELECT fid, ST_X(g) FROM gis_point;
|
||||
SELECT fid, ST_Y(g) FROM gis_point;
|
||||
--replace_column 10 #
|
||||
explain extended select ST_X(g),ST_Y(g) FROM gis_point;
|
||||
|
||||
SELECT fid, ST_AsText(ST_StartPoint(g)) FROM gis_line;
|
||||
SELECT fid, ST_AsText(ST_EndPoint(g)) FROM gis_line;
|
||||
SELECT fid, ST_Length(g) FROM gis_line;
|
||||
SELECT fid, ST_NumPoints(g) FROM gis_line;
|
||||
SELECT fid, ST_AsText(ST_PointN(g, 2)) FROM gis_line;
|
||||
SELECT fid, ST_IsClosed(g) FROM gis_line;
|
||||
--replace_column 10 #
|
||||
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;
|
||||
|
||||
SELECT fid, ST_AsText(ST_Centroid(g)) FROM gis_polygon;
|
||||
SELECT fid, ST_Area(g) FROM gis_polygon;
|
||||
SELECT fid, ST_AsText(ST_ExteriorRing(g)) FROM gis_polygon;
|
||||
SELECT fid, ST_NumInteriorRings(g) FROM gis_polygon;
|
||||
SELECT fid, ST_AsText(ST_InteriorRingN(g, 1)) FROM gis_polygon;
|
||||
--replace_column 10 #
|
||||
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;
|
||||
|
||||
SELECT fid, ST_IsClosed(g) FROM gis_multi_line;
|
||||
|
||||
SELECT fid, ST_AsText(ST_Centroid(g)) FROM gis_multi_polygon;
|
||||
SELECT fid, ST_Area(g) FROM gis_multi_polygon;
|
||||
|
||||
SELECT fid, ST_NumGeometries(g) from gis_multi_point;
|
||||
SELECT fid, ST_NumGeometries(g) from gis_multi_line;
|
||||
SELECT fid, ST_NumGeometries(g) from gis_multi_polygon;
|
||||
SELECT fid, ST_NumGeometries(g) from gis_geometrycollection;
|
||||
--replace_column 10 #
|
||||
explain extended SELECT fid, ST_NumGeometries(g) from gis_multi_point;
|
||||
|
||||
SELECT fid, ST_AsText(ST_GeometryN(g, 2)) from gis_multi_point;
|
||||
SELECT fid, ST_AsText(ST_GeometryN(g, 2)) from gis_multi_line;
|
||||
SELECT fid, ST_AsText(ST_GeometryN(g, 2)) from gis_multi_polygon;
|
||||
SELECT fid, ST_AsText(ST_GeometryN(g, 2)) from gis_geometrycollection;
|
||||
SELECT fid, ST_AsText(ST_GeometryN(g, 1)) from gis_geometrycollection;
|
||||
--replace_column 10 #
|
||||
explain extended SELECT fid, ST_AsText(ST_GeometryN(g, 2)) from 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;
|
||||
--replace_column 10 #
|
||||
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;
|
||||
|
||||
--echo # check support of Foreign Key constraint
|
||||
CREATE TABLE parent (id GEOMETRY NOT NULL,PRIMARY KEY (id(10))) ENGINE=INNODB;
|
||||
|
||||
--error 1215
|
||||
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;
|
||||
|
||||
--echo #check partition table support
|
||||
--error 1178
|
||||
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)
|
||||
);
|
||||
|
||||
--echo #check start transaction commit & Rollback
|
||||
START TRANSACTION;
|
||||
DELETE FROM tab3;
|
||||
ROLLBACK;
|
||||
|
||||
SELECT COUNT(*) FROM tab3;
|
||||
|
||||
START TRANSACTION;
|
||||
DELETE FROM tab3;
|
||||
COMMIT;
|
||||
|
||||
SELECT COUNT(*) FROM tab3;
|
||||
|
||||
DROP TABLE IF EXISTS gis_point, gis_line, gis_polygon, gis_multi_point;
|
||||
DROP TABLE IF EXISTS gis_multi_line, gis_multi_polygon;
|
||||
DROP TABLE IF EXISTS gis_geometrycollection, gis_geometry;
|
||||
DROP TABLE IF EXISTS tab,tab2,tab3,parent,emp2;
|
||||
DROP PROCEDURE IF EXISTS geominout;
|
||||
DROP PROCEDURE IF EXISTS geom_insert;
|
||||
DROP TRIGGER IF EXISTS geom_trigger;
|
||||
DROP PROCEDURE IF EXISTS geom_cursor;
|
31
mysql-test/suite/innodb_gis/t/gis_split_inf.test
Normal file
31
mysql-test/suite/innodb_gis/t/gis_split_inf.test
Normal file
@ -0,0 +1,31 @@
|
||||
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_debug.inc
|
||||
|
||||
create table t1(a geometrycollection not null,spatial key(a))engine=innodb;
|
||||
|
||||
--error ER_GIS_INVALID_DATA
|
||||
insert into t1(a) values( geometrycollection(multipolygon(polygon(linestring(point(-14,98), point(-14,98)), linestring(point(-97,64), point(-70,99), point(-97,64)), linestring(point(143851215403059150000000000000000000000.000000,13040009882500140000000000000000000000.000000), point(-73,85), point(-88,-29)))), multipolygon(polygon(linestring(point(41,95), point(4294967298,2050)), linestring(point(-61,85), point(-75,93), point(14,-2), point(1,84), point(-61,85)), linestring(point(-62,52), point(39,5), point(-18,12), point(-62,52))), polygon(linestring(point(-77,1), point(66,61), point(-77,1)), linestring(point(18446744073709551615,1125899906842622), point(-72,49), point(24,-66), point(82,73), point(68,22))), polygon(linestring(point(1048576,17179869181), point(-18,95), point(-90,-3), point(-33,82), point(20,-85)), linestring(point(-43,-97), point(-7,-3), point(39,-82), point(-65,-58), point(-43,-97)), linestring(point(44,-34), point(-69,58), point(44,-34)), linestring(point(57,-13), point(-17,74), point(57,-13)), linestring(point(3,71), point(-58,81), point(3,71)), linestring(point(9,25), point(77,-71), point(8388607,67108864), point(46,46), point(9,25)), linestring(point(98,-82), point(98,-82))))) ) ;
|
||||
|
||||
insert into t1(a) values( geometrycollection(multilinestring(linestring(point(39,-60), point(-62,-11), point(-24,35), point(54,1)), linestring(point(-4,69), point(-22,-64), point(1.694824e+308,5.688896e+307), point(-33,-58), point(-64,-80), point(-15,-44), point(40,54)), linestring(point(-86,-54), point(11,41), point(-46,-38), point(-21,-8), point(10,70), point(-81,22), point(-46,-100)), linestring(point(-30,-48), point(50,58), point(-53,92), point(10,41), point(-46,-8)), linestring(point(-65,34), point(-92,93), point(-33,-74), point(75,-28)), linestring(point(25,-55), point(22,-10), point(-42,0), point(-86,-59), point(2,-37), point(63,-44), point(-55,-22)), linestring(point(28,0), point(-94,99), point(-32,-86)), linestring(point(9,-12), point(16,9), point(80,-73)), linestring(point(6,-55), point(83,-4)), linestring(point(-15,21), point(144115188075855876,16777212), point(-85,-31), point(-90,-50)), linestring(point(-33,33), point(21,90), point(-89,32)), linestring(point(16,24), point(73,-13), point(25,-48), point(71,52), point(-54,-78), point(-84,59), point(53,29)), linestring(point(-15,-81), point(83,43), point(-71,33), point(-8,0), point(84,-54), point(-35,38), point(-10,-50)), linestring(point(38,-50), point(20,-2), point(-57,-92)), linestring(point(5,-93), point(231601833467477080000000000000000000000.000000,51914987457169239000000000000000000000.000000), point(-94,62))), point(2,0)) ) ;
|
||||
insert into t1(a) values( geometrycollection(multilinestring(linestring(point(80,-15), point(65,-57), point(-59,16), point(22,-67)), linestring(point(20,-55), point(-38,-64), point(19,-53), point(-63,-36), point(56,-37)), linestring(point(27,-8), point(-85,-75), point(4398046511106,2251799813685245)), linestring(point(45,32), point(-79,46))), multilinestring(linestring(point(8,-4), point(40,-38), point(100,95), point(5,-80), point(82,88)), linestring(point(-14,30), point(-94,51), point(-16,-29), point(37,-97), point(-26,92)), linestring(point(32,34), point(83,-23), point(-55,57), point(-15,90), point(32,-50), point(-20,-73), point(77,28)), linestring(point(4,88), point(87,74), point(-67,-58)), linestring(point(5.660747e+307,6.385657e+307), point(-58,-15), point(1.172095e+308,1.448533e+308)), linestring(point(-21,-37), point(-52,79), point(-16,-76), point(-65,-94), point(36,7), point(37,74), point(100,-57)), linestring(point(-23,-82), point(-73,23), point(18,-34)), linestring(point(20,-51), point(93,62), point(-65,84)), linestring(point(-48,31), point(-69,-96)), linestring(point(-5,78), point(10,-99), point(36,-33)), linestring(point(-84,55), point(96,1), point(-98,-29), point(-15,81), point(-27,-6), point(58,-32), point(54,-16)), linestring(point(2,5), point(2199023255553,8192)), linestring(point(12,-78), point(-97,-83)), linestring(point(-74,79), point(35,-56), point(50,95)), linestring(point(28,16), point(-39,-40), point(48,-3)), linestring(point(2199023255550,-65539), point(62,-25), point(94,-62)), linestring(point(-74,83), point(-18,75), point(91,17), point(-11,-48), point(30,100)), linestring(point(57,-13), point(88,-45)), linestring(point(20,-64), point(-37,13), point(20,35))), point(-3,-4)) ) ;
|
||||
--error ER_GIS_INVALID_DATA
|
||||
insert into t1(a) values( geometrycollection(multipolygon(polygon(linestring(point(-34,19), point(-25,92), point(61921390294166805000000000000000000000.000000,319674749161701840000000000000000000000.000000), point(56,50), point(-34,19)), linestring(point(-26,-58), point(99,-50), point(34,-20), point(-26,-58)), linestring(point(-42,45), point(-63,-7), point(5,-89), point(-97,36), point(-42,45)), linestring(point(94,11), point(-71,4), point(94,11)), linestring(point(16,25), point(4,-33), point(-45,-33), point(-64,-77), point(16,25)), linestring(point(19,45), point(36,45), point(-83,-96), point(19,45)), linestring(point(85,-31), point(-87,52), point(85,-31))), polygon(linestring(point(55,-88), point(63,-12), point(55,-88)), linestring(point(-49,10), point(-49,10)), linestring(point(-51,-32), point(-51,-32)))), multipolygon(polygon(linestring(point(-21,-8), point(66,-58), point(100,-27), point(-21,-8)), linestring(point(-29,-13), point(-29,-13))), polygon(linestring(point(91307574660224730000000000000000000000.000000,101214152547755520000000000000000000000.000000), point(89,64), point(77,87), point(66,29), point(-71,-53)), linestring(point(38,-78), point(-43,-90), point(37,20), point(81,65), point(38,-78))), polygon(linestring(point(51,0), point(-62,8), point(-11,22), point(51,0)), linestring(point(-4,-44), point(6,82), point(-19,-90), point(131,32)))), point(-4,-7)) ) ;
|
||||
insert into t1(a) values( geometrycollection(point(10,9), linestring(point(2305843009213693955,-1125899906842621), point(78,15)), multipoint(point(-1,3), point(4,-6))) ) ;
|
||||
--error ER_GIS_INVALID_DATA
|
||||
insert into t1(a) values( geometrycollection(polygon(linestring(point(0,13), point(-12,5), point(0,13)), linestring(point(11,-2), point(6,6), point(20,-14), point(-3,-10), point(1.330588e+308,2.666476e+307)), linestring(point(16382,67), point(7,4)), linestring(point(2,7), point(-14,15), point(2,7)), linestring(point(-14,12), point(-8,-8), point(-17,-2), point(-14,12)), linestring(point(-20,-10), point(-8,-13), point(-19,-17), point(13,-3), point(-20,-10)), linestring(point(-5,13), point(7,-9), point(6,8), point(-5,13))), linestring(point(-87,19), point(-64,51), point(-16,12)), multipoint(point(-1,-10), point(2,-10), point(3.670354e+307,2.501459e+307))) ) ;
|
||||
--error ER_GIS_INVALID_DATA
|
||||
insert into t1(a) values( geometrycollection(multipoint(point(-3,7), point(4,-3), point(-6,-2), point(-9,1)), polygon(linestring(point(-17,-5), point(2,-8), point(-6,9), point(-9,19), point(-17,-5)), linestring(point(10,-1), point(15,-7), point(-13,6), point(10,-1))), multipolygon(polygon(linestring(point(69,-69), point(-90,-64), point(-17,4), point(47,-73), point(69,-69)), linestring(point(-35,-77), point(-35,-77)), linestring(point(95,-76), point(1.636688e+308,1.828723e+307), point(68719476740,536870916), point(95,-76)), linestring(point(-26,-85), point(-26,-85)), linestring(point(-53,57), point(-53,57)), linestring(point(-98,-64), point(79,-57), point(-98,-64)), linestring(point(-91,59), point(16,0), point(73,97), point(-35,-70), point(-91,59))))) ) ;
|
||||
insert into t1(a) values( geometrycollection(linestring(point(85,-29), point(15,84), point(39,-92), point(-99,19)), multilinestring(linestring(point(63,10), point(-47,95), point(10,-49), point(16,-65), point(-98,40), point(25,44), point(-55,-92)), linestring(point(5.266810e+307,6.648813e+307), point(47,33), point(-15,-13), point(-92,-58), point(36,73)), linestring(point(77,-56), point(-53,-10), point(-28,76), point(-51,6), point(51,-31), point(-95,81), point(92,26)), linestring(point(-91,7), point(58,53)), linestring(point(18,5), point(18,40), point(71,89), point(7.898707e+307,1.202585e+308), point(53,100)), linestring(point(-60,-18), point(-10,-31), point(-6,-25), point(-57,-95), point(16,77)))) ) ;
|
||||
--error ER_GIS_INVALID_DATA
|
||||
insert into t1(a) values( geometrycollection(polygon(linestring(point(-9,0), point(-17,-15), point(-9,0)), linestring(point(-11,1), point(18,12), point(15,3), point(7,0), point(-11,1)), linestring(point(19,5), point(19,5)), linestring(point(17,-11), point(8,4), point(17,-11)), linestring(point(14914539334033432000000000000000000000.000000,127247994336690690000000000000000000000.000000), point(-14,-7), point(13,-2))), point(-4,-7), polygon(linestring(point(-18,9), point(11,-1), point(-18,9)), linestring(point(9,-3), point(9,-3)), linestring(point(-7,-9), point(9,-11), point(11,14), point(1.663324e+308,1.572127e+308)), linestring(point(-15,4), point(18,12), point(7,2), point(-15,4)), linestring(point(-15,-18), point(-20,-15), point(1152921504606846972,34359738370))), polygon(linestring(point(-5,-19), point(-11,11), point(10,5), point(-7,13), point(-5,-19)), linestring(point(-8,-6), point(-4,16), point(-8,-6)), linestring(point(-6,-10), point(3,-12), point(-6,-10)), linestring(point(-16,1), point(20,-12), point(-16,1)), linestring(point(-8,5), point(-20,-4), point(4,1), point(-6,-6), point(-8,5)), linestring(point(-8,-11), point(-5,-14), point(-8,-11)), linestring(point(3,-16), point(-15,-13), point(1.166708e+308,1.901147e+307), point(-8,6), point(3,-16))), point(0,-5)) ) ;
|
||||
insert into t1(a) values( geometrycollection(linestring(point(-33,99), point(99,-87), point(38,-79), point(33,-39), point(-91,-8), point(46,-87))) ) ;
|
||||
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
|
||||
drop table t1;
|
297
mysql-test/suite/innodb_gis/t/gis_split_nan.test
Normal file
297
mysql-test/suite/innodb_gis/t/gis_split_nan.test
Normal file
@ -0,0 +1,297 @@
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_debug.inc
|
||||
--source include/have_geometry.inc
|
||||
--source include/have_innodb_4k.inc
|
||||
|
||||
############################################################################################
|
||||
# Creating the spatial objects #
|
||||
############################################################################################
|
||||
|
||||
--echo # Creating the spatial objects
|
||||
USE test;
|
||||
|
||||
CREATE TABLE gis_point (fid INTEGER NOT NULL PRIMARY KEY, g POINT);
|
||||
CREATE TABLE gis_linestring (fid INTEGER NOT NULL PRIMARY KEY, g LINESTRING);
|
||||
CREATE TABLE gis_polygon (fid INTEGER NOT NULL PRIMARY KEY, g POLYGON);
|
||||
CREATE TABLE gis_multi_point (fid INTEGER NOT NULL PRIMARY KEY, g MULTIPOINT);
|
||||
CREATE TABLE gis_multi_linestring (fid INTEGER NOT NULL PRIMARY KEY, g MULTILINESTRING);
|
||||
CREATE TABLE gis_multi_polygon (fid INTEGER NOT NULL PRIMARY KEY, g MULTIPOLYGON);
|
||||
CREATE TABLE gis_geometrycollection (fid INTEGER NOT NULL PRIMARY KEY, g GEOMETRYCOLLECTION);
|
||||
|
||||
############################################################################################
|
||||
# Inserting the values specific to the spatial objects #
|
||||
############################################################################################
|
||||
|
||||
--echo # Inserting POINT Geometry Values
|
||||
INSERT INTO gis_point VALUES
|
||||
(101, ST_POINTFROMTEXT('POINT(0 0)')),
|
||||
(102, ST_POINTFROMTEXT('POINT(1 0)')),
|
||||
(103, ST_POINTFROMTEXT('POINT(0 1)')),
|
||||
(104, ST_POINTFROMTEXT('POINT(1 1)')),
|
||||
(105, ST_POINTFROMTEXT('POINT(-1 1)'));
|
||||
|
||||
INSERT INTO gis_point VALUES
|
||||
(106, ST_POINTFROMWKB(POINT(0,0))),
|
||||
(107, ST_POINTFROMWKB(POINT(10,0))),
|
||||
(108, ST_POINTFROMWKB(POINT(0,10))),
|
||||
(109, ST_POINTFROMWKB(POINT(-10,0))),
|
||||
(110, ST_POINTFROMWKB(POINT(0,-10)));
|
||||
|
||||
INSERT INTO gis_point VALUES
|
||||
(111, ST_POINTFROMWKB(ST_ASWKB(ST_POINTFROMTEXT('POINT(1 1)')))),
|
||||
(112, ST_POINTFROMWKB(ST_ASWKB(ST_POINTFROMTEXT('POINT(1e308 1e308)')))),
|
||||
(113, ST_POINTFROMWKB(ST_ASWKB(ST_POINTFROMTEXT('POINT(1e308 -1e308)')))),
|
||||
(114, ST_POINTFROMWKB(ST_ASWKB(ST_POINTFROMTEXT('POINT(-1e308 1e308)')))),
|
||||
(115, ST_POINTFROMWKB(ST_ASWKB(ST_POINTFROMTEXT('POINT(-1e308 -1e308)'))));
|
||||
|
||||
--echo # Inserting LINESTRING Geometry Values
|
||||
INSERT INTO gis_linestring VALUES
|
||||
(201, ST_LINEFROMTEXT('LINESTRING(0 0,5 5)')),
|
||||
(202, ST_LINEFROMTEXT('LINESTRING(0 0,2 2,4 4)')),
|
||||
(203, ST_LINEFROMTEXT('LINESTRING(0 0,5 5,10 10)'));
|
||||
|
||||
INSERT INTO gis_linestring VALUES
|
||||
(204, ST_LINESTRINGFROMTEXT('LINESTRING(10 10,5 5)')),
|
||||
(205, ST_LINESTRINGFROMTEXT('LINESTRING(0 0,12 12,24 24)')),
|
||||
(206, ST_LINESTRINGFROMTEXT('LINESTRING(0 0,50 50,100 100)'));
|
||||
|
||||
INSERT INTO gis_linestring VALUES
|
||||
(207, ST_LINEFROMWKB(LINESTRING(POINT(0,0), POINT(5,5)))),
|
||||
(208, ST_LINEFROMWKB(LINESTRING(POINT(0,0), POINT(-5,-5), POINT(-10,10)))),
|
||||
(209, ST_LINEFROMWKB(LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4), POINT(6,6), POINT(8,8))));
|
||||
|
||||
INSERT INTO gis_linestring VALUES
|
||||
(210, ST_LINESTRINGFROMWKB(LINESTRING(POINT(0,0), POINT(5,5)))),
|
||||
(211, ST_LINESTRINGFROMWKB(LINESTRING(POINT(0,0), POINT(-50,-50), POINT(10,-10)))),
|
||||
(212, ST_LINESTRINGFROMWKB(LINESTRING(POINT(0,0), POINT(1e308,1e308), POINT(1e308,-1e308))));
|
||||
|
||||
INSERT INTO gis_linestring VALUES
|
||||
(213, ST_LINEFROMWKB(ST_ASWKB(ST_LINEFROMTEXT('LINESTRING(1e308 1e308,1e308 -1e308)')))),
|
||||
(214, ST_LINEFROMWKB(ST_ASWKB(ST_LINEFROMTEXT('LINESTRING(1 1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,9 9)')))),
|
||||
(215, ST_LINESTRINGFROMWKB(ST_ASWKB(ST_LINESTRINGFROMTEXT('LINESTRING(10 10,10 -10,-10 -10,-10 10,10 10)'))));
|
||||
|
||||
--echo # Inserting POLYGON Geometry Values
|
||||
INSERT INTO gis_polygon VALUES
|
||||
(301, ST_POLYFROMTEXT('POLYGON((0 0,0 5,5 5,0 0))')),
|
||||
(302, ST_POLYFROMTEXT('POLYGON((0 0,0 5,5 5,5 0,0 0))')),
|
||||
(303, ST_POLYFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0))'));
|
||||
|
||||
INSERT INTO gis_polygon VALUES
|
||||
(304, ST_POLYGONFROMTEXT('POLYGON((0 0,0 50,50 50,50 0,0 0))')),
|
||||
(305, ST_POLYGONFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0,0 0,0 0),(4 4,4 6,6 6,6 4,4 4))')),
|
||||
(306, ST_POLYGONFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0,0 0,0 0),(2 2,2 4,4 4,4 2,2 2),(6 6,6 8,8 8,8 6,6 6))'));
|
||||
|
||||
INSERT INTO gis_polygon VALUES
|
||||
(307, ST_POLYFROMWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,5), POINT(5,5), POINT(0,0))))),
|
||||
(308, ST_POLYFROMWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,15), POINT(15,15), POINT(15,0), POINT(0,0))))),
|
||||
(309, ST_POLYFROMWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,10), POINT(10,10), POINT(10,0), POINT(0,0)),
|
||||
LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4)))));
|
||||
|
||||
INSERT INTO gis_polygon VALUES
|
||||
(310, ST_POLYGONFROMWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,5), POINT(5,5), POINT(0,0))))),
|
||||
(311, ST_POLYGONFROMWKB(POLYGON(LINESTRING(POINT(10,10), POINT(10,15), POINT(15,15), POINT(15,10), POINT(10,10))))),
|
||||
(312, ST_POLYGONFROMWKB(POLYGON(LINESTRING(POINT(10,10), POINT(10,20), POINT(20,20), POINT(20,10), POINT(10,10)),
|
||||
LINESTRING(POINT(14,14), POINT(14,16), POINT(16,16), POINT(16,14), POINT(14,14)))));
|
||||
|
||||
INSERT INTO gis_polygon VALUES
|
||||
(313, ST_POLYFROMWKB(ST_ASWKB(ST_POLYFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0,0 0,5 5,0 0))')))),
|
||||
(314, ST_POLYFROMWKB(ST_ASWKB(ST_POLYGONFROMTEXT('POLYGON((10 0,10 10,0 10,-10 10,-10 0,-10 -10,0 10,10 -10,10 0))')))),
|
||||
(315, ST_POLYGONFROMWKB(ST_ASWKB(ST_POLYGONFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0,0 0,0 0),(2 2,2 4,4 4,4 2,2 2),(6 6,6 8,8 8,8 6,6 6))'))));
|
||||
|
||||
--echo # Inserting MULTIPOINT Geometry Values
|
||||
INSERT INTO gis_multi_point VALUES
|
||||
(401, ST_GEOMFROMTEXT('MULTIPOINT(0 0)')),
|
||||
(402, ST_GEOMFROMTEXT('MULTIPOINT(0 0,2 2,4 4)')),
|
||||
(403, ST_GEOMFROMTEXT('MULTIPOINT(0 0,5 5,10 10)'));
|
||||
|
||||
INSERT INTO gis_multi_point VALUES
|
||||
(404, ST_GEOMFROMTEXT('MULTIPOINT(0 0,100 100)')),
|
||||
(405, ST_GEOMFROMTEXT('MULTIPOINT(0 0,1e308 1e308)')),
|
||||
(406, ST_GEOMFROMTEXT('MULTIPOINT(1e308 1e308,1e308 -1e308,-1e308 1e308,-1e308 -1e308)'));
|
||||
|
||||
INSERT INTO gis_multi_point VALUES
|
||||
(407, ST_GEOMFROMWKB(MULTIPOINT(POINT(0,0)))),
|
||||
(408, ST_GEOMFROMWKB(MULTIPOINT(POINT(0,0), POINT(10,10)))),
|
||||
(409, ST_GEOMFROMWKB(MULTIPOINT(POINT(0,0), POINT(2,2), POINT(4,4), POINT(6,6))));
|
||||
|
||||
INSERT INTO gis_multi_point VALUES
|
||||
(410, ST_GEOMFROMWKB(MULTIPOINT(POINT(0,0)))),
|
||||
(411, ST_GEOMFROMWKB(MULTIPOINT(POINT(0,0), POINT(1e308,1e308)))),
|
||||
(412, ST_GEOMFROMWKB(MULTIPOINT(POINT(1e308,1e308), POINT(-1e308,1e308), POINT(1e308,-1e308), POINT(-1e308,-1e308))));
|
||||
|
||||
INSERT INTO gis_multi_point VALUES
|
||||
(413, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTIPOINT(0 0)')))),
|
||||
(414, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTIPOINT(0 0,1e308 1e308,-1e308 -1e308)')))),
|
||||
(415, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTIPOINT(1e308 1e308,1e308 -1e308,-1e308 1e308,-1e308 -1e308,1e308 1e308)'))));
|
||||
|
||||
--echo # Inserting MULTILINESTRING Geometry Values
|
||||
INSERT INTO gis_multi_linestring VALUES
|
||||
(501, ST_GEOMFROMTEXT('MULTILINESTRING((0 0,2 2))')),
|
||||
(502, ST_GEOMFROMTEXT('MULTILINESTRING((0 0,2 2,4 4))')),
|
||||
(503, ST_GEOMFROMTEXT('MULTILINESTRING((0 0,2 2,4 4),(6 6,8 8,10 10))'));
|
||||
|
||||
INSERT INTO gis_multi_linestring VALUES
|
||||
(504, ST_GEOMFROMTEXT('MULTILINESTRING((0 0,100 100,-100 -100))')),
|
||||
(505, ST_GEOMFROMTEXT('MULTILINESTRING((1e308 1e308,-1e308 -1e308))')),
|
||||
(506, ST_GEOMFROMTEXT('MULTILINESTRING((1e308 1e308,-1e308 -1e308),(1e308 -1e308,-1e308 1e308))'));
|
||||
|
||||
INSERT INTO gis_multi_linestring VALUES
|
||||
(507, ST_GEOMFROMWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(2,2))))),
|
||||
(508, ST_GEOMFROMWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(12,12), POINT(24,24))))),
|
||||
(509, ST_GEOMFROMWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4)),
|
||||
LINESTRING(POINT(6,6), POINT(8,8), POINT(10,10)))));
|
||||
|
||||
INSERT INTO gis_multi_linestring VALUES
|
||||
(510, ST_GEOMFROMWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4))))),
|
||||
(511, ST_GEOMFROMWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(1,1), POINT(2,2))))),
|
||||
(512, ST_GEOMFROMWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(12,12), POINT(24,24)),
|
||||
LINESTRING(POINT(36,36), POINT(48,48), POINT(50,50)))));
|
||||
|
||||
INSERT INTO gis_multi_linestring VALUES
|
||||
(513, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,10 10),(0 10,10 0))')))),
|
||||
(514, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,10 10,-10 10,0 0),(0 0,-10 -10,10 -10,0 0))')))),
|
||||
(515, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,0 100),(0 0,100 0),(0 0,0 -100),(0 0,-100 0))'))));
|
||||
|
||||
--echo # Inserting MULTIPOLGYON Geometry Values
|
||||
INSERT INTO gis_multi_polygon VALUES
|
||||
(601, ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 5,5 5,0 0)))')),
|
||||
(602, ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 5,5 5,0 0)),((5 5,5 10,10 10,5 5)))')),
|
||||
(603, ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0,0 0,0 0),(4 4,4 6,6 6,6 4,4 4)))'));
|
||||
|
||||
INSERT INTO gis_multi_polygon VALUES
|
||||
(604, ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 5,5 5,0 0)))')),
|
||||
(605, ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0,0 0,0 0),(4 4,4 6,6 6,6 4,4 4)),((0 0,0 -2,-2 -2,0 0)))')),
|
||||
(606, ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,5 5,-5 5,0 0)),((0 0,-5 -5,5 -5,0 0)))'));
|
||||
|
||||
INSERT INTO gis_multi_polygon VALUES
|
||||
(607, ST_GEOMFROMWKB(MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(5,0), POINT(5,5), POINT(0,5), POINT(0,0)))))),
|
||||
(608, ST_GEOMFROMWKB(MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(10,0), POINT(10,10), POINT(0,10), POINT(0,0)),
|
||||
LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4)))))),
|
||||
(609, ST_GEOMFROMWKB(MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(5,0), POINT(5,5), POINT(0,5), POINT(0,0))),
|
||||
POLYGON(LINESTRING(POINT(0,0), POINT(-5,0), POINT(-5,-5), POINT(0,-5), POINT(0,0))))));
|
||||
|
||||
INSERT INTO gis_multi_polygon VALUES
|
||||
(610, ST_GEOMFROMWKB(MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(-5,0), POINT(-5,-5), POINT(0,-5), POINT(0,0)))))),
|
||||
(611, ST_GEOMFROMWKB(MULTIPOLYGON(POLYGON(LINESTRING(POINT(10,10), POINT(20,10), POINT(20,20), POINT(10,20), POINT(10,10)),
|
||||
LINESTRING(POINT(14,14), POINT(14,16), POINT(16,16), POINT(16,14), POINT(14,14)))))),
|
||||
(612, ST_GEOMFROMWKB(MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(0,10), POINT(10,10), POINT(10,0), POINT(0,0)),
|
||||
LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4))),
|
||||
POLYGON(LINESTRING(POINT(0,0), POINT(-5,0), POINT(-5,-5), POINT(0,-5), POINT(0,0))))));
|
||||
|
||||
INSERT INTO gis_multi_polygon VALUES
|
||||
(613, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,5 5,5 -5,0 0)),((0 0,-5 5,-5 -5,0 0)))')))),
|
||||
(614, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,10 10,-10 10,0 0)),((0 0,-10 -10,10 -10,0 0)))')))),
|
||||
(615, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,5 5,10 0,5 -5,0 0)))'))));
|
||||
|
||||
--echo # Inserting GEOMETRYCOLLECTION Geometry Values
|
||||
INSERT INTO gis_geometrycollection VALUES
|
||||
(701, ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0))')),
|
||||
(702, ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))')),
|
||||
(703, ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION(POINT(5 5), POLYGON((0 0,0 10,10 10,10 0,0 0)))'));
|
||||
|
||||
INSERT INTO gis_geometrycollection VALUES
|
||||
(704, ST_GEOMETRYCOLLECTIONFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))')),
|
||||
(705, ST_GEOMETRYCOLLECTIONFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0),'
|
||||
'LINESTRING(0 0,10 10),'
|
||||
'POLYGON((0 0,0 10,10 10,10 0,0 0,0 0, 0 0)))')),
|
||||
(706, ST_GEOMETRYCOLLECTIONFROMTEXT('GEOMETRYCOLLECTION(MULTIPOINT(0 0,5 5,10 10),'
|
||||
'MULTILINESTRING((0 0,10 10),(0 10,10 0)),'
|
||||
'MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)),'
|
||||
'((0 0,-10 0,-10 -10,0 -10,0 0))))'));
|
||||
|
||||
INSERT INTO gis_geometrycollection VALUES
|
||||
(707, ST_GEOMCOLLFROMWKB(GEOMETRYCOLLECTION(POINT(0,0)))),
|
||||
(708, ST_GEOMCOLLFROMWKB(GEOMETRYCOLLECTION(POINT(0,0),
|
||||
LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4), POINT(6,6), POINT(8,8)),
|
||||
POLYGON(LINESTRING(POINT(0,0), POINT(0,10), POINT(10,10), POINT(10,0), POINT(0,0)),
|
||||
LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4)))))),
|
||||
(709, ST_GEOMCOLLFROMWKB(GEOMETRYCOLLECTION(MULTIPOINT(POINT(0,0), POINT(5,5), POINT(10,10)),
|
||||
MULTILINESTRING(LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4), POINT(6,6), POINT(8,8)),
|
||||
LINESTRING(POINT(10,10), POINT(5,5), POINT(0,10))),
|
||||
MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(0,10), POINT(10,10), POINT(10,0), POINT(0,0)),
|
||||
LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4))),
|
||||
POLYGON(LINESTRING(POINT(0,0), POINT(-10,0), POINT(-10,-10), POINT(0,0)))))));
|
||||
|
||||
INSERT INTO gis_geometrycollection VALUES
|
||||
(710, ST_GEOMETRYCOLLECTIONFROMWKB(GEOMETRYCOLLECTION(POINT(0,0),
|
||||
LINESTRING(POINT(0,0), POINT(100,100))))),
|
||||
(711, ST_GEOMETRYCOLLECTIONFROMWKB(GEOMETRYCOLLECTION(POINT(10,10),
|
||||
LINESTRING(POINT(10,10), POINT(12,12), POINT(14,14), POINT(16,16), POINT(18,18)),
|
||||
POLYGON(LINESTRING(POINT(0,0), POINT(0,10), POINT(10,10), POINT(10,0), POINT(0,0)),
|
||||
LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4)))))),
|
||||
(712, ST_GEOMETRYCOLLECTIONFROMWKB(GEOMETRYCOLLECTION(MULTIPOINT(POINT(10,10), POINT(15,15), POINT(20,20)),
|
||||
MULTILINESTRING(LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4), POINT(6,6), POINT(8,8)),
|
||||
LINESTRING(POINT(10,10), POINT(5,5), POINT(0,10))),
|
||||
MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(0,10), POINT(10,10), POINT(10,0), POINT(0,0)),
|
||||
LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4))),
|
||||
POLYGON(LINESTRING(POINT(0,0), POINT(-10,0), POINT(-10,-10), POINT(0,0)))))));
|
||||
|
||||
INSERT INTO gis_geometrycollection VALUES
|
||||
(713, ST_GEOMCOLLFROMWKB(ST_ASWKB(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION('
|
||||
'POINT(0 0),'
|
||||
'LINESTRING(0 0,10 10),'
|
||||
'POLYGON((0 0,0 10,10 10,10 0,0 0)),'
|
||||
'MULTIPOINT(0 0,2 2,4 4,6 6,8 8,10 10),'
|
||||
'MULTILINESTRING((0 0,10 10),(0 10,10 0)),'
|
||||
'MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)),((5 5,5 10,10 10,10 5,5 5))))')))),
|
||||
(714, ST_GEOMCOLLFROMWKB(ST_ASWKB(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION('
|
||||
'GEOMETRYCOLLECTION('
|
||||
'POINT(0 0)),'
|
||||
'GEOMETRYCOLLECTION('
|
||||
'LINESTRING(0 0,10 10)),'
|
||||
'GEOMETRYCOLLECTION('
|
||||
'POLYGON((0 0,0 10,10 10,10 0,0 0))),'
|
||||
'GEOMETRYCOLLECTION('
|
||||
'MULTIPOINT(0 0,2 2,4 4,6 6,8 8,10 10)),'
|
||||
'GEOMETRYCOLLECTION('
|
||||
'MULTILINESTRING((0 0,10 10),(0 10,10 0))),'
|
||||
'GEOMETRYCOLLECTION('
|
||||
'MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)),((5 5,5 10,10 10,10 5,5 5)))))')))),
|
||||
(715, ST_GEOMCOLLFROMWKB(ST_ASWKB(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION('
|
||||
'GEOMETRYCOLLECTION(),'
|
||||
'POINT(0 0),'
|
||||
'GEOMETRYCOLLECTION('
|
||||
'LINESTRING(0 0,10 10),'
|
||||
'GEOMETRYCOLLECTION('
|
||||
'GEOMETRYCOLLECTION())),'
|
||||
'GEOMETRYCOLLECTION(),'
|
||||
'GEOMETRYCOLLECTION('
|
||||
'GEOMETRYCOLLECTION()),'
|
||||
'POLYGON((0 0,0 10,10 10,10 0,0 0)),'
|
||||
'MULTIPOINT(0 0,2 2,4 4,6 6,8 8,10 10),'
|
||||
'MULTILINESTRING((0 0,10 10),(0 10,10 0)),'
|
||||
'MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)),((5 5,5 10,10 10,10 5,5 5))))'))));
|
||||
|
||||
############################################################################################
|
||||
# Checking spatial index with geometry data #
|
||||
############################################################################################
|
||||
|
||||
--echo # Creating a table with spatial index column
|
||||
CREATE TABLE geom_index (fid INTEGER NOT NULL PRIMARY KEY, g GEOMETRY NOT NULL, SPATIAL INDEX(g));
|
||||
|
||||
--echo # Inserting geometry values
|
||||
INSERT INTO geom_index SELECT * FROM gis_point;
|
||||
|
||||
INSERT INTO geom_index SELECT * FROM gis_linestring;
|
||||
|
||||
INSERT INTO geom_index SELECT * FROM gis_polygon;
|
||||
|
||||
INSERT INTO geom_index SELECT * FROM gis_multi_point;
|
||||
|
||||
INSERT INTO geom_index SELECT * FROM gis_multi_linestring;
|
||||
|
||||
INSERT INTO geom_index SELECT * FROM gis_multi_polygon;
|
||||
|
||||
INSERT INTO geom_index SELECT * FROM gis_geometrycollection;
|
||||
|
||||
check table geom_index;
|
||||
|
||||
--echo # Final cleanup
|
||||
DROP TABLE gis_point;
|
||||
DROP TABLE gis_linestring;
|
||||
DROP TABLE gis_polygon;
|
||||
DROP TABLE gis_multi_point;
|
||||
DROP TABLE gis_multi_linestring;
|
||||
DROP TABLE gis_multi_polygon;
|
||||
DROP TABLE gis_geometrycollection;
|
||||
DROP TABLE geom_index;
|
64
mysql-test/suite/innodb_gis/t/kill_server.test
Normal file
64
mysql-test/suite/innodb_gis/t/kill_server.test
Normal file
@ -0,0 +1,64 @@
|
||||
# WL#6745 InnoDB R-tree support
|
||||
# This test case will test R-tree multi level split.
|
||||
|
||||
# Not supported in embedded
|
||||
--source include/not_embedded.inc
|
||||
|
||||
--source include/have_innodb.inc
|
||||
--source include/big_test.inc
|
||||
|
||||
# Create table with R-tree index.
|
||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;
|
||||
|
||||
# Insert enough values to let R-tree split.
|
||||
delimiter |;
|
||||
create procedure insert_t1(IN total int)
|
||||
begin
|
||||
declare i int default 1;
|
||||
while (i <= total) DO
|
||||
insert into t1 values (i, Point(i, i));
|
||||
set i = i + 1;
|
||||
end while;
|
||||
end|
|
||||
delimiter ;|
|
||||
|
||||
# Test level 1 rtree.
|
||||
CALL insert_t1(5000);
|
||||
select count(*) from t1;
|
||||
|
||||
# Check table.
|
||||
check table t1;
|
||||
|
||||
# Test level 2 rtree.
|
||||
truncate table t1;
|
||||
CALL insert_t1(10000);
|
||||
select count(*) from t1;
|
||||
|
||||
drop index c2 on t1;
|
||||
|
||||
create spatial index idx on t1(c2);
|
||||
|
||||
show create table t1;
|
||||
|
||||
# Check table.
|
||||
check table t1;
|
||||
|
||||
# Test level 3 rtree.
|
||||
truncate table t1;
|
||||
|
||||
# Test crash recovery.
|
||||
#
|
||||
#
|
||||
call mtr.add_suppression("InnoDB: page [0-9]+ in the doublewrite buffer is not within space bounds.*");
|
||||
|
||||
# Test rtree enlarge recovery.
|
||||
START TRANSACTION;
|
||||
CALL insert_t1(5000);
|
||||
|
||||
COMMIT;
|
||||
|
||||
--source include/kill_and_restart_mysqld.inc
|
||||
|
||||
# Clean up.
|
||||
drop procedure insert_t1;
|
||||
drop table t1;
|
80
mysql-test/suite/innodb_gis/t/multi_pk.test
Normal file
80
mysql-test/suite/innodb_gis/t/multi_pk.test
Normal file
@ -0,0 +1,80 @@
|
||||
# WL#6745 InnoDB R-tree support
|
||||
# This test case will test R-tree split.
|
||||
|
||||
# Not supported in embedded
|
||||
--source include/not_embedded.inc
|
||||
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_debug.inc
|
||||
--source include/big_test.inc
|
||||
--source include/not_valgrind.inc
|
||||
|
||||
# Create table with R-tree index.
|
||||
create table t1 (c1 int, c2 varchar(255), c3 geometry not null, primary key(c1, c2), spatial index (c3))engine=innodb;
|
||||
|
||||
# Insert enough values to let R-tree split.
|
||||
delimiter |;
|
||||
|
||||
create function rand_string(str_length tinyint unsigned, str_type tinyint unsigned) returns varchar(255)
|
||||
begin
|
||||
declare counter int unsigned default 0;
|
||||
declare const_chars varchar(64) default '0123456789';
|
||||
declare result varchar(255) default '';
|
||||
|
||||
if str_type = 1 then
|
||||
set const_chars = '0123456789';
|
||||
elseif str_type = 2 then
|
||||
set const_chars = 'abcdefghijklmnopqrstuvwxyz';
|
||||
elseif str_type = 3 then
|
||||
set const_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
||||
elseif str_type = 4 then
|
||||
set const_chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
||||
elseif str_type = 5 then
|
||||
set const_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
||||
else
|
||||
set const_chars = '0123456789';
|
||||
end if;
|
||||
|
||||
while counter < str_length do
|
||||
set result = concat(result,substr(const_chars,ceil(rand()*(length(const_chars)-1)),1));
|
||||
set counter = counter + 1;
|
||||
end while;
|
||||
|
||||
return result;
|
||||
end|
|
||||
|
||||
create procedure insert_t1(IN total int)
|
||||
begin
|
||||
declare i int default 1;
|
||||
declare i2 int default 1;
|
||||
declare str varchar(100) default '';
|
||||
declare dup_key int default 1;
|
||||
while i <= total DO
|
||||
set i2 = floor(0+(rand()*100));
|
||||
set str = rand_string(i2, 5);
|
||||
select count(*) into dup_key from t1 where c2 = str and c1 = i;
|
||||
while dup_key <> 0 do
|
||||
set i2 = floor(0+(rand()*100));
|
||||
set str = rand_string(i2, 5);
|
||||
select count(*) into dup_key from t1 where c2 = str and c1 = i;
|
||||
end while;
|
||||
insert into t1 values (i, str, Point(i, i));
|
||||
set i = i + 1;
|
||||
end while;
|
||||
end|
|
||||
|
||||
delimiter ;|
|
||||
|
||||
CALL insert_t1(10000);
|
||||
check table t1;
|
||||
|
||||
start transaction;
|
||||
CALL insert_t1(30000);
|
||||
rollback;
|
||||
check table t1;
|
||||
|
||||
# Clean up.
|
||||
drop procedure insert_t1;
|
||||
drop function rand_string;
|
||||
drop table t1;
|
||||
|
801
mysql-test/suite/innodb_gis/t/point_basic.test
Normal file
801
mysql-test/suite/innodb_gis/t/point_basic.test
Normal file
@ -0,0 +1,801 @@
|
||||
#********************************************************
|
||||
# wl6942: Store certain GIS data type in the row rather
|
||||
# than as BLOB.
|
||||
#
|
||||
#********************************************************
|
||||
|
||||
--source include/have_geometry.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Test for basic POINT operation
|
||||
--echo #
|
||||
CREATE TABLE gis_point(p1 POINT, p2 POINT) ENGINE=InnoDB;
|
||||
INSERT INTO gis_point VALUES
|
||||
(ST_PointFromText('POINT(0 0)'), ST_PointFromText('POINT(0 0)')),
|
||||
(ST_PointFromText('POINT(10 -20)'), ST_PointFromText('POINT(10 -20)')),
|
||||
(ST_PointFromText('POINT(3.1415926 3.535897)'), ST_PointFromText('POINT(-3.932626 -3.488272)')),
|
||||
(ST_PointFromText('POINT(-111.9876 234.1357)'), ST_PointFromText('POINT(-957.1914 958.1919)'));
|
||||
SELECT ST_X(p1), ST_Y(p2) FROM gis_point;
|
||||
DROP TABLE gis_point;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Test when POINT is not on any indexes
|
||||
--echo #
|
||||
CREATE TABLE gis_point(p1 POINT, p2 POINT) ENGINE=InnoDB;
|
||||
INSERT INTO gis_point VALUES
|
||||
(ST_PointFromText('POINT(100.32374832 101.23741821)'), ST_PointFromText('POINT(100.32374832 101.23741821)')),
|
||||
(ST_PointFromText('POINT(105.34523342 103.18492302)'), ST_PointFromText('POINT(100.32374832 101.23741821)')),
|
||||
(ST_PointFromText('POINT(100.32374832 101.23741821)'), ST_PointFromText('POINT(200.32247328 101.86728201)')),
|
||||
(ST_PointFromText('POINT(100.32374832 101.23741821)'), ST_PointFromText('POINT(100.32374832 101.98527111)'));
|
||||
|
||||
--replace_column 10 #
|
||||
EXPLAIN SELECT ST_AsText(p1), ST_AsText(p2) FROM gis_point GROUP BY p1, p2;
|
||||
SELECT ST_AsText(p1), ST_AsText(p2) FROM gis_point GROUP BY p1, p2;
|
||||
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE p1 = p2;
|
||||
SELECT ST_AsText(p1), ST_AsText(p2) FROM gis_point WHERE p1 = ST_PointFromText('POINT(100.32374832 101.23741821)');
|
||||
SELECT ST_AsText(p1), ST_AsText(p2) FROM gis_point WHERE p2 = ST_PointFromText('POINT(200.32247328 101.86728201)');
|
||||
|
||||
DROP TABLE gis_point;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Test some ALTER TABLE operations on POINT tables
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (
|
||||
p POINT NOT NULL,
|
||||
g GEOMETRY NOT NULL
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
INSERT INTO t1 VALUES(ST_PointFromText('POINT(0 1)'), ST_PointFromText('POINT(10 11)'));
|
||||
INSERT INTO t1 VALUES(ST_PointFromText('POINT(1 1)'), ST_PointFromText('POINT(10 12)'));
|
||||
INSERT INTO t1 VALUES(ST_PointFromText('POINT(1 0)'), ST_PointFromText('POINT(10 13)'));
|
||||
INSERT INTO t1 VALUES(ST_PointFromText('POINT(0 0)'), ST_PointFromText('POINT(10 14)'));
|
||||
|
||||
SELECT ST_AsText(p), ST_AsText(g) FROM t1;
|
||||
|
||||
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p' OR name = 'g';
|
||||
|
||||
ALTER TABLE t1 ADD COLUMN p1 POINT, ADD COLUMN p2 POINT, ADD KEY(p);
|
||||
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p' OR name = 'g' OR name = 'p1' OR name = 'p2';
|
||||
|
||||
--echo # NOT NULL POINT will use ''
|
||||
SELECT count(*) AS `Expect 4` FROM t1 WHERE p1 = '';
|
||||
SELECT count(*) AS `Expect 4` FROM t1 WHERE p2 = '';
|
||||
|
||||
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE p = p1;
|
||||
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE p = p2;
|
||||
|
||||
ALTER TABLE t1 DROP COLUMN p2;
|
||||
|
||||
--echo # NULLABLE POINT will use NULL
|
||||
ALTER TABLE t1 ADD COLUMN p2 POINT, ADD KEY(p2);
|
||||
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p' OR name = 'g' OR name = 'p1' OR name = 'p2';
|
||||
|
||||
SELECT count(*) AS `Expect 4` FROM t1 WHERE p2 IS NULL;
|
||||
UPDATE t1 SET p2 = ST_PointFromText('POINT(10 20)');
|
||||
UPDATE t1 SET p1 = ST_PointFromText('POINT(10 20)');
|
||||
|
||||
ALTER TABLE t1 DROP COLUMN p2;
|
||||
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p' OR name = 'g' OR name = 'p1';
|
||||
|
||||
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE p = p1;
|
||||
|
||||
INSERT INTO t1 VALUES (ST_PointFromText('POINT(0.5 0.5)'), ST_PointFromText('POINT(0 1)'), ST_PointFromText('POINT(10 19)'));
|
||||
SELECT ST_AsText(p1) FROM t1;
|
||||
DELETE FROM t1 WHERE p1 = ST_PointFromText('POINT(10 19)');
|
||||
SELECT ST_AsText(p1) FROM t1;
|
||||
|
||||
--echo # Add spatial keys on the table
|
||||
--error ER_SPATIAL_CANT_HAVE_NULL
|
||||
ALTER TABLE t1 ADD SPATIAL(p), ADD SPATIAL(p1);
|
||||
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p' OR name = 'g' OR name = 'p1';
|
||||
|
||||
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE p1 = ST_PointFromText('POINT(10 30)');
|
||||
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE p1 = ST_PointFromText('POINT(10 20)');
|
||||
|
||||
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE MBRWithin(p1, ST_GeomFromText('POLYGON((5 5, 20 5, 20 21, 5 21, 5 5))'));
|
||||
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE MBRWithin(p, ST_GeomFromText('POLYGON((-1 0.5, -1 -0.5, 1 -0.5, 1 0.5, -1 0.5))'));
|
||||
|
||||
--echo # Drop spatial keys on the table
|
||||
--error ER_CANT_DROP_FIELD_OR_KEY
|
||||
ALTER TABLE t1 DROP KEY p, DROP KEY p1;
|
||||
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p' OR name = 'g' OR name = 'p1';
|
||||
|
||||
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE p1 = ST_PointFromText('POINT(10 30)');
|
||||
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE p1 = ST_PointFromText('POINT(10 20)');
|
||||
|
||||
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE MBRWithin(p1, ST_GeomFromText('POLYGON((5 5, 20 5, 20 21, 5 21, 5 5))'));
|
||||
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE MBRWithin(p, ST_GeomFromText('POLYGON((-1 0.5, -1 -0.5, 1 -0.5, 1 0.5, -1 0.5))'));
|
||||
|
||||
TRUNCATE t1;
|
||||
|
||||
ALTER TABLE t1 DROP COLUMN p, DROP COLUMN p1;
|
||||
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p' OR name = 'g' OR name = 'p1';
|
||||
|
||||
ALTER TABLE t1 ADD COLUMN p POINT, ADD COLUMN p1 POINT;
|
||||
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p' OR name = 'g' OR name = 'p1';
|
||||
|
||||
SHOW CREATE TABLE t1;
|
||||
|
||||
INSERT INTO t1 VALUES(ST_PointFromText('POINT(0.5 0.5)'), ST_PointFromText('POINT(0 1)'), ST_PointFromText('POINT(10 19)'));
|
||||
INSERT INTO t1 VALUES(ST_PointFromText('POINT(0.6 0.6)'), ST_PointFromText('POINT(1 1)'), ST_PointFromText('POINT(10 20)'));
|
||||
INSERT INTO t1 VALUES(ST_PointFromText('POINT(0.7 0.7)'), ST_PointFromText('POINT(1 0)'), ST_PointFromText('POINT(10 21)'));
|
||||
INSERT INTO t1 VALUES(ST_PointFromText('POINT(0.8 0.8)'), ST_PointFromText('POINT(0 0)'), ST_PointFromText('POINT(10 22)'));
|
||||
|
||||
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE p1 = ST_PointFromText('POINT(10 30)');
|
||||
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE p1 = ST_PointFromText('POINT(10 20)');
|
||||
|
||||
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE MBRWithin(p1, ST_GeomFromText('POLYGON((5 5, 20 5, 20 21, 5 21, 5 5))'));
|
||||
SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE MBRWithin(p, ST_GeomFromText('POLYGON((-1 0.5, -1 -0.5, 1 -0.5, 1 0.5, -1 0.5))'));
|
||||
|
||||
ALTER TABLE t1 DROP COLUMN p1, ADD COLUMN p1 POINT, CHANGE COLUMN p pp POINT AFTER p1;
|
||||
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'pp' OR name = 'g' OR name = 'p1';
|
||||
|
||||
UPDATE t1 SET p1 = ST_PointFromText('POINT(5 5)');
|
||||
|
||||
SELECT ST_AsText(pp), ST_AsText(p1) FROM t1;
|
||||
|
||||
--error ER_SPATIAL_CANT_HAVE_NULL
|
||||
ALTER TABLE t1 ADD SPATIAL(p1), ADD SPATIAL(pp), ALGORITHM = COPY;
|
||||
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'pp' OR name = 'g' OR name = 'p1';
|
||||
|
||||
SELECT ST_AsText(pp), ST_AsText(p1) FROM t1 WHERE p1 = ST_PointFromText('POINT(10 30)');
|
||||
SELECT ST_AsText(pp), ST_AsText(p1) FROM t1 WHERE p1 = ST_PointFromText('POINT(10 20)');
|
||||
|
||||
SELECT ST_AsText(pp), ST_AsText(p1) FROM t1 WHERE MBRWithin(p1, ST_GeomFromText('POLYGON((5 5, 20 5, 20 21, 5 21, 5 5))')) ORDER BY pp;
|
||||
SELECT ST_AsText(pp), ST_AsText(p1) FROM t1 WHERE MBRWithin(pp, ST_GeomFromText('POLYGON((-1 0.5, -1 -0.5, 1 -0.5, 1 0.5, -1 0.5))')) ORDER BY pp;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Test when the POINT is on B-TREE
|
||||
--echo #
|
||||
CREATE TABLE gis_point(fid INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, p POINT, KEY(p)) ENGINE=InnoDB;
|
||||
|
||||
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)'))));
|
||||
|
||||
SELECT ST_AsText(p) FROM gis_point;
|
||||
SELECT ST_AsText(p) FROM gis_point WHERE p = ST_PointFromText('POINT(20 20)');
|
||||
|
||||
INSERT INTO gis_point VALUES
|
||||
(201, ST_PointFromText('POINT(100.32374832 101.23741821)')),
|
||||
(202, ST_PointFromText('POINT(102.43287328 100.23489233)')),
|
||||
(203, ST_PointFromText('POINT(101.43284962 100.45892392)')),
|
||||
(204, ST_PointFromWKB(ST_AsWKB(ST_PointFromText('POINT(103.43718640 105.248206478)')))),
|
||||
(205, ST_PointFromText('POINT(101.43284962 100.45892392)')),
|
||||
(206, ST_PointFromWKB(ST_AsWKB(ST_PointFromText('POINT(103.43718640 105.248206478)'))));
|
||||
|
||||
-- echo 'The ORDER BY will use filesort'
|
||||
--replace_column 10 #
|
||||
EXPLAIN SELECT ST_AsText(p) FROM gis_point ORDER BY p;
|
||||
SELECT ST_AsText(p) FROM gis_point ORDER BY p;
|
||||
|
||||
SELECT ST_AsText(p), COUNT(*) FROM gis_point GROUP BY p;
|
||||
|
||||
TRUNCATE gis_point;
|
||||
|
||||
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)'))));
|
||||
|
||||
--echo # Check if we can create prefix index on POINT
|
||||
ALTER TABLE gis_point ADD COLUMN g POINT, ADD KEY(g(8));
|
||||
|
||||
INSERT INTO gis_point VALUES
|
||||
(105, ST_PointFromText('POINT(25 15)'), ST_PointFromText('POINT(100 100)')),
|
||||
(106, ST_PointFromText('POINT(25 25)'), ST_PointFromText('POINT(110 110)'));
|
||||
|
||||
SELECT ST_AsText(p) FROM gis_point;
|
||||
SELECT ST_AsText(p), ST_AsText(g) FROM gis_point WHERE g IS NULL;
|
||||
|
||||
UPDATE gis_point SET g = ST_PointFromText('POINT(200 200)') WHERE g IS NULL OR g = ST_PointFromText('POINT(110 110)');
|
||||
SELECT ST_AsText(g) FROM gis_point WHERE g IS NULL OR g = ST_PointFromText('POINT(200 200)');
|
||||
|
||||
--echo # Check the information schema tables
|
||||
SELECT table_name, column_name, data_type, column_type FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name='gis_point' AND (column_name = 'p' OR column_name = 'g');
|
||||
|
||||
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p' OR name = 'g';
|
||||
|
||||
SELECT length(p) FROM gis_point;
|
||||
|
||||
ALTER TABLE gis_point DROP COLUMN g, ALGORITHM = COPY;
|
||||
|
||||
TRUNCATE gis_point;
|
||||
|
||||
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)'))));
|
||||
|
||||
--echo # Check if we can create prefix index on POINT
|
||||
ALTER TABLE gis_point ADD COLUMN g POINT, ADD KEY(g(8));
|
||||
|
||||
INSERT INTO gis_point VALUES
|
||||
(105, ST_PointFromText('POINT(25 15)'), ST_PointFromText('POINT(100 100)')),
|
||||
(106, ST_PointFromText('POINT(25 25)'), ST_PointFromText('POINT(110 110)'));
|
||||
|
||||
SELECT ST_AsText(p) FROM gis_point;
|
||||
SELECT ST_AsText(p), ST_AsText(g) FROM gis_point WHERE g IS NULL;
|
||||
|
||||
UPDATE gis_point SET g = ST_PointFromText('POINT(200 200)') WHERE g IS NULL OR g = ST_PointFromText('POINT(110 110)');
|
||||
SELECT ST_AsText(g) FROM gis_point WHERE g IS NULL OR g = ST_PointFromText('POINT(200 200)');
|
||||
|
||||
CHECK TABLE gis_point;
|
||||
|
||||
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p' OR name = 'g';
|
||||
|
||||
DROP TABLE gis_point;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Check the mtype of other geometry data types should be 15
|
||||
--echo #
|
||||
CREATE TABLE g (
|
||||
geom GEOMETRY NOT NULL,
|
||||
l LINESTRING NOT NULL,
|
||||
poly POLYGON NOT NULL,
|
||||
mp MULTIPOINT NOT NULL,
|
||||
ml MULTILINESTRING NOT NULL,
|
||||
mpoly MULTIPOLYGON NOT NULL,
|
||||
gc GEOMETRYCOLLECTION NOT NULL
|
||||
) ENGINE=InnoDB;
|
||||
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p' OR name = 'g' OR name = 'geom' OR name = 'l' OR name = 'poly' OR name = 'mp' OR name = 'ml' OR name = 'mpoly' OR name = 'gc';
|
||||
|
||||
DROP TABLE g;
|
||||
|
||||
--echo #
|
||||
--echo # check the mtype and len with CREATE TABLE AS
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (
|
||||
p POINT NOT NULL,
|
||||
g GEOMETRY NOT NULL
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
|
||||
INSERT INTO t1 VALUES(ST_PointFromText('POINT(10 10)'),ST_GeomFromText('POLYGON((30 30,40 40,50 50,30 50,30 40,30 30))'));
|
||||
|
||||
# Check the mtype and len of the table
|
||||
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p' OR name = 'g' AND name='t1';
|
||||
|
||||
CREATE TABLE t2 AS SELECT * FROM t1;
|
||||
|
||||
# Cleanup
|
||||
DROP TABLE t1;
|
||||
|
||||
# Check the mtype and len of the table, should be 14,25
|
||||
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p' OR name = 'g' AND name='t2';
|
||||
|
||||
# Cleanup
|
||||
DROP table t2;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Test when POINT is used in spatial index
|
||||
--echo #
|
||||
SET @ls1 = ST_GeomFromText('LINESTRING(0 20, 10 0)');
|
||||
SET @ls2 = ST_GeomFromText('LINESTRING(0 0, 10 20)');
|
||||
SET @ls3 = ST_GeomFromText('LINESTRING(20 -40, 21 -42)');
|
||||
SET @ls4 = ST_GeomFromText('LINESTRING(20 -42, 21 -40)');
|
||||
SET @poly1 = ST_GeomFromText('POLYGON((2 2, 2 10, 10 10, 10 2, 2 2))');
|
||||
SET @poly2 = ST_GeomFromText('POLYGON((0 0, -5 0, -4 -1, -6 -15, -3 -15, 0 0))');
|
||||
SET @poly3 = ST_GeomFromText('POLYGON((10.0 10.0, 20.5 20, 20.5 50, 32.0 64.0, 32.3 64.6, 5 60, 10 10))');
|
||||
SET @poly4 = ST_GeomFromText('POLYGON((0 10, -10 10, -10 -10, 0 -10, 0 10))');
|
||||
SET @p1 = ST_PointFromText('POINT(0 0)');
|
||||
SET @mpoly = ST_GeomFromText('MULTIPOLYGON(((3 3, 3 16, 16 16, 16 3, 3 3)), ((10 10, 10 50, 50 50, 50 10, 10 10)))');
|
||||
|
||||
CREATE TABLE gis_point (p1 POINT NOT NULL, p2 POINT NOT NULL, SPATIAL KEY k1 (p1), SPATIAL KEY k2 (p2)) ENGINE=InnoDB;
|
||||
|
||||
INSERT INTO gis_point VALUES
|
||||
(ST_PointFromText('POINT(1 2)'), ST_PointFromText('POINT(-1 -3)')),
|
||||
(ST_PointFromText('POINT(2 4)'), ST_PointFromText('POINT(-2 -6)')),
|
||||
(ST_PointFromText('POINT(3 6)'), ST_PointFromText('POINT(-3 -9)')),
|
||||
(ST_PointFromText('POINT(4 8)'), ST_PointFromText('POINT(-4 -12)')),
|
||||
(ST_PointFromText('POINT(5 10)'), ST_PointFromText('POINT(-5 -15)')),
|
||||
(ST_PointFromText('POINT(6 12)'), ST_PointFromText('POINT(-6 -18)')),
|
||||
(ST_PointFromText('POINT(7 14)'), ST_PointFromText('POINT(-7 -21)')),
|
||||
(ST_PointFromText('POINT(8 16)'), ST_PointFromText('POINT(0 0)')),
|
||||
(ST_PointFromText('POINT(9 18)'), ST_PointFromText('POINT(-4 2)')),
|
||||
(ST_PointFromText('POINT(10 21)'), ST_PointFromText('POINT(-6 3)')),
|
||||
(ST_PointFromText('POINT(20.5 41)'), ST_PointFromText('POINT(-8 4)')),
|
||||
(ST_PointFromText('POINT(26.25 57)'), ST_PointFromText('POINT(1 2)')),
|
||||
(ST_PointFromText('POINT(32.1234 64.2468)'), ST_PointFromText('POINT(-1 -1)'));
|
||||
|
||||
CREATE TABLE gis_point1 SELECT * FROM gis_point;
|
||||
|
||||
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p1' OR name = 'p2';
|
||||
|
||||
SELECT ST_AsText(p1), ST_AsText(p2) FROM gis_point1;
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Intersection(@ls1, @ls2) = p1;
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRWithin(p1, @poly1);
|
||||
SELECT ST_AsText(p2) FROM gis_point1 WHERE ST_Contains(@poly2, p2);
|
||||
SELECT ST_AsText(p2) FROM gis_point1 WHERE ST_Equals(p2, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Touches(@poly3, p1) AND MBRWithin(p2, @poly4);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Contains(@mpoly, p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Contains(@mpoly, p1) AND NOT MBRWithin(p1, @mpoly);
|
||||
|
||||
--echo # Check functions that use MBR, with line type data
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRIntersects(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRWithin(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Touches(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRDisjoint(p1, @ls1);
|
||||
|
||||
--echo # No matching records
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBREquals(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRContains(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBROverlaps(p1, @ls3);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Crosses(p1, @ls1);
|
||||
|
||||
--echo # Check functions that use MBR, with polygon type data
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRIntersects(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRWithin(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Touches(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Crosses(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRDisjoint(p1, @poly1);
|
||||
|
||||
--echo # No matching records
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBREquals(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRContains(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBROverlaps(p1, @poly1);
|
||||
|
||||
--echo # Check functions that use MBR, with point type data
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRIntersects(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRWithin(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Touches(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBREquals(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRContains(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRDisjoint(p1, @p1);
|
||||
|
||||
--echo # No matching records
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBROverlaps(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Crosses(p1, @p1);
|
||||
|
||||
--echo # Check with MBR functions point type data
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRIntersects(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRWithin(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Touches(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRContains(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRDisjoint(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRequals(p1, @p1);
|
||||
|
||||
--echo # No matching records
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBROverlaps(p1, @p1);
|
||||
|
||||
--echo # Check with MBR functions point polygon data
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRIntersects(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRWithin(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Touches(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRContains(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRDisjoint(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRequals(p1, @p1);
|
||||
|
||||
--echo # No matching records
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBROverlaps(p1, @p1);
|
||||
|
||||
--echo # Check with MBR functions polygon type data
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRIntersects(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRWithin(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Touches(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRDisjoint(p1, @poly1);
|
||||
|
||||
--echo # No matching records
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBROverlaps(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRContains(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRequals(p1, @poly1);
|
||||
|
||||
--echo # Check with MBR functions line type data
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRIntersects(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRWithin(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Touches(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRDisjoint(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRequals(p1, @ls1);
|
||||
|
||||
--echo # No matching records
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBROverlaps(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRContains(p1, @ls1);
|
||||
|
||||
DROP TABLE gis_point1;
|
||||
|
||||
SELECT ST_AsText(p1), ST_AsText(p2) FROM gis_point;
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Intersection(@ls1, @ls2) = p1;
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @poly1);
|
||||
SELECT ST_AsText(p2) FROM gis_point WHERE ST_Contains(@poly2, p2);
|
||||
SELECT ST_AsText(p2) FROM gis_point WHERE ST_Equals(p2, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(@poly3, p1) AND MBRWithin(p2, @poly4);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Contains(@mpoly, p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Contains(@mpoly, p1) AND NOT MBRWithin(p1, @mpoly);
|
||||
|
||||
--echo # Check functions that use MBR, with line type data
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRIntersects(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRDisjoint(p1, @ls1);
|
||||
|
||||
--echo # No matching records
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBREquals(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRContains(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBROverlaps(p1, @ls3);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Crosses(p1, @ls1);
|
||||
|
||||
--echo # Check functions that use MBR, with polygon type data
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRIntersects(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Crosses(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRDisjoint(p1, @poly1);
|
||||
|
||||
--echo # No matching records
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBREquals(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRContains(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBROverlaps(p1, @poly1);
|
||||
|
||||
--echo # Check functions that use MBR, with point type data
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRIntersects(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBREquals(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRContains(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRDisjoint(p1, @p1);
|
||||
|
||||
--echo # No matching records
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBROverlaps(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Crosses(p1, @p1);
|
||||
|
||||
--echo # Check with MBR functions point type data
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRIntersects(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRContains(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRDisjoint(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRequals(p1, @p1);
|
||||
|
||||
--echo # No matching records
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBROverlaps(p1, @p1);
|
||||
|
||||
--echo # Check with MBR functions point polygon data
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRIntersects(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRContains(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRDisjoint(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRequals(p1, @p1);
|
||||
|
||||
--echo # No matching records
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBROverlaps(p1, @p1);
|
||||
|
||||
--echo # Check with MBR functions polygon type data
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRIntersects(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRDisjoint(p1, @poly1);
|
||||
|
||||
--echo # No matching records
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBROverlaps(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRContains(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRequals(p1, @poly1);
|
||||
|
||||
--echo # Check with MBR functions line type data
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRIntersects(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRDisjoint(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRequals(p1, @ls1);
|
||||
|
||||
--echo # No matching records
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBROverlaps(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRContains(p1, @ls1);
|
||||
|
||||
--echo # Modify the storage engine to Myisam, Check the spatial functions
|
||||
ALTER TABLE gis_point ENGINE Myisam;
|
||||
|
||||
--echo # Check functions that use MBR, with line type data
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRIntersects(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRDisjoint(p1, @ls1);
|
||||
|
||||
--echo # No matching records
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBREquals(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRContains(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBROverlaps(p1, @ls3);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Crosses(p1, @ls1);
|
||||
|
||||
--echo # Check functions that use MBR, with polygon type data
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRIntersects(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Crosses(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRDisjoint(p1, @poly1);
|
||||
|
||||
--echo # No matching records
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBREquals(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRContains(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBROverlaps(p1, @poly1);
|
||||
|
||||
--echo # Check functions that use MBR, with point type data
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRIntersects(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBREquals(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRContains(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRDisjoint(p1, @p1);
|
||||
|
||||
--echo # No matching records
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBROverlaps(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Crosses(p1, @p1);
|
||||
|
||||
--echo # Check with MBR functions point type data
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRIntersects(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRContains(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRDisjoint(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRequals(p1, @p1);
|
||||
|
||||
--echo # No matching records
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBROverlaps(p1, @p1);
|
||||
|
||||
--echo # Check with MBR functions point polygon data
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRIntersects(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRContains(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRDisjoint(p1, @p1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRequals(p1, @p1);
|
||||
|
||||
--echo # No matching records
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBROverlaps(p1, @p1);
|
||||
|
||||
--echo # Check with MBR functions polygon type data
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRIntersects(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRDisjoint(p1, @poly1);
|
||||
|
||||
--echo # No matching records
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBROverlaps(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRContains(p1, @poly1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRequals(p1, @poly1);
|
||||
|
||||
--echo # Check with MBR functions line type data
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRIntersects(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRDisjoint(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRequals(p1, @ls1);
|
||||
|
||||
--echo # No matching records
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBROverlaps(p1, @ls1);
|
||||
SELECT ST_AsText(p1) FROM gis_point WHERE MBRContains(p1, @ls1);
|
||||
|
||||
--echo # Modify the storage engine to InnoDB again, do following testing
|
||||
ALTER TABLE gis_point ENGINE InnoDB;
|
||||
|
||||
CHECK TABLE gis_point;
|
||||
|
||||
-- echo The ORDER BY for spatial index will use filesort
|
||||
--replace_column 10 #
|
||||
EXPLAIN SELECT ST_AsText(p1), ST_AsText(p2) FROM gis_point ORDER BY p1, p2;
|
||||
SELECT ST_AsText(p1), ST_AsText(p2) FROM gis_point ORDER BY p1, p2;
|
||||
|
||||
-- echo Try to do IDU on the table and verify the result
|
||||
DELETE FROM gis_point WHERE ST_Equals(p2, ST_PointFromText('POINT(-8 4)'));
|
||||
|
||||
INSERT INTO gis_point VALUES(ST_PointFromText('POINT(20.5 -41)'), ST_PointFromText('POINT(8 -4)'));
|
||||
|
||||
SELECT ST_AsText(p1) AS 'Expect (32.1234 64.2468)' FROM gis_point WHERE ST_Touches(@poly3, p1) AND MBRWithin(p2, @poly4);
|
||||
|
||||
UPDATE gis_point SET p1 = ST_PointFromText('POINT(20.5 41)'), p2 = ST_PointFromText('POINT(-8 4)') WHERE ST_Intersection(@ls3, @ls4) = p1;
|
||||
|
||||
SELECT ST_AsText(p1) AS 'Expect (32.1234 64.2468) AND (20.5 41)' FROM gis_point WHERE ST_Touches(@poly3, p1) AND MBRWithin(p2, @poly4);
|
||||
|
||||
CHECK TABLE gis_point;
|
||||
|
||||
-- echo Use a trx to test the IDU on the table and verify the result
|
||||
START TRANSACTION;
|
||||
|
||||
DELETE FROM gis_point WHERE ST_Equals(p2, ST_PointFromText('POINT(-8 4)'));
|
||||
|
||||
INSERT INTO gis_point VALUES(ST_PointFromText('POINT(20.5 -41)'), ST_PointFromText('POINT(8 -4)'));
|
||||
|
||||
SELECT ST_AsText(p1) AS 'Expect (32.1234 64.2468)' FROM gis_point WHERE ST_Touches(@poly3, p1) AND MBRWithin(p2, @poly4);
|
||||
|
||||
UPDATE gis_point SET p1 = ST_PointFromText('POINT(20.5 49)'), p2 = ST_PointFromText('POINT(-8 4)') WHERE ST_Intersection(@ls3, @ls4) = p1;
|
||||
|
||||
SELECT ST_AsText(p1) AS 'Expect (32.1234 64.2468) AND (20.5 49)' FROM gis_point WHERE ST_Touches(@poly3, p1) AND MBRWithin(p2, @poly4);
|
||||
|
||||
ROLLBACK;
|
||||
|
||||
SELECT ST_AsText(p1) AS 'Expect (32.1234 64.2468) AND (20.5 41)' FROM gis_point WHERE ST_Touches(@poly3, p1) AND MBRWithin(p2, @poly4);
|
||||
|
||||
CHECK TABLE gis_point;
|
||||
|
||||
DROP TABLE gis_point;
|
||||
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Test inserting/updating different type data into POINT field
|
||||
--echo #
|
||||
|
||||
CREATE TABLE gis_point (i INT, p POINT) ENGINE=InnoDB;
|
||||
CREATE TABLE geom (i INT, g GEOMETRY NOT NULL, SPATIAL KEY(g)) ENGINE=InnoDB;
|
||||
|
||||
INSERT INTO gis_point VALUES(0, ST_PointFromText('POINT(1 1)'));
|
||||
INSERT INTO gis_point VALUES(1, ST_PointFromText('POINT(2 2)'));
|
||||
INSERT INTO gis_point VALUES(2, NULL);
|
||||
|
||||
ALTER TABLE gis_point ADD COLUMN j INT, ALGORITHM = COPY;
|
||||
|
||||
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p';
|
||||
|
||||
SELECT name, mtype, prtype, len FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS WHERE name = 'p';
|
||||
|
||||
SELECT i, ST_AsText(p) FROM gis_point;
|
||||
|
||||
UPDATE gis_point SET p = NULL WHERE p = ST_PointFromText('POINT(1 1)');
|
||||
UPDATE gis_point SET p = ST_PointFromText('POINT(1 2)') WHERE p = ST_PointFromText('POINT(2 2)');
|
||||
UPDATE gis_point SET p = ST_PointFromText('POINT(1 1)') WHERE p IS NULL;
|
||||
|
||||
SELECT i, ST_AsText(p) FROM gis_point;
|
||||
|
||||
INSERT INTO geom VALUES(0, ST_PointFromText('POINT(0 0)'));
|
||||
INSERT INTO geom VALUES(1, ST_PointFromText('POINT(10 10)'));
|
||||
INSERT INTO geom VALUES(2, ST_GeomFromText('POLYGON((7 1,6 2,6 3,10 3,10 1,7 1))'));
|
||||
|
||||
SELECT ST_AsText(g) FROM geom;
|
||||
|
||||
SELECT ST_AsText(p) FROM gis_point;
|
||||
|
||||
DELETE FROM geom WHERE g = ST_GeomFromText('POLYGON((7 1,6 2,6 3,10 3,10 1,7 1))');
|
||||
--echo From GEOMETRY to POINT, now ALL the data are POINT
|
||||
ALTER TABLE geom MODIFY g POINT NOT NULL;
|
||||
SHOW CREATE TABLE geom;
|
||||
SELECT ST_AsText(g) FROM geom;
|
||||
|
||||
--echo From POINT to GEOMETRY, all data are POINT
|
||||
ALTER TABLE geom MODIFY g GEOMETRY NOT NULL;
|
||||
SHOW CREATE TABLE geom;
|
||||
|
||||
TRUNCATE TABLE geom;
|
||||
|
||||
--echo From GEOMETRY to POINT, the table is empty
|
||||
ALTER TABLE geom MODIFY g POINT NOT NULL;
|
||||
SHOW CREATE TABLE geom;
|
||||
SELECT ST_AsText(g) FROM geom;
|
||||
|
||||
CHECK TABLE gis_point;
|
||||
CHECK TABLE geom;
|
||||
|
||||
DROP TABLE gis_point, geom;
|
||||
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Test when a geom field, such as POINT, is also a primary key
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (
|
||||
a INT NOT NULL,
|
||||
p POINT NOT NULL,
|
||||
l LINESTRING NOT NULL,
|
||||
g GEOMETRY NOT NULL,
|
||||
PRIMARY KEY(p),
|
||||
SPATIAL KEY `idx2` (p),
|
||||
SPATIAL KEY `idx3` (l),
|
||||
SPATIAL KEY `idx4` (g)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
INSERT INTO t1 VALUES(
|
||||
1, ST_GeomFromText('POINT(10 10)'),
|
||||
ST_GeomFromText('LINESTRING(1 1, 5 5, 10 10)'),
|
||||
ST_GeomFromText('POLYGON((30 30, 40 40, 50 50, 30 50, 30 40, 30 30))'));
|
||||
|
||||
INSERT INTO t1 VALUES(
|
||||
2, ST_GeomFromText('POINT(20 20)'),
|
||||
ST_GeomFromText('LINESTRING(2 3, 7 8, 9 10, 15 16)'),
|
||||
ST_GeomFromText('POLYGON((10 30, 30 40, 40 50, 40 30, 30 20, 10 30))'));
|
||||
|
||||
SELECT a, ST_AsText(p), ST_AsText(l), ST_AsText(g) FROM t1;
|
||||
|
||||
--replace_column 10 #
|
||||
EXPLAIN UPDATE t1 SET p = ST_GeomFromText('POINT(30 30)') WHERE p = ST_GeomFromText('POINT(20 20)');
|
||||
UPDATE t1 SET p = ST_GeomFromText('POINT(30 30)') WHERE p = ST_GeomFromText('POINT(20 20)');
|
||||
|
||||
# Once Bug 18265942 - GIS: INNODB WOULD GET POSSIBLE WRONG FIND_FLAG FOR SELECT FROM SERVER is fixed, we can test all the following statements commented out.
|
||||
#SELECT ST_AsText(p) FROM t1 WHERE MBRWithin(p, ST_GeomFromText('POLYGON((25 25, 25 35, 35 35, 35 25, 25 25))'));
|
||||
#UPDATE t1 SET p = ST_GeomFromText('POINT(15 15)') WHERE MBRWithin(p, ST_GeomFromText('POLYGON((25 25, 25 35, 35 35, 35 25, 25 25))'));
|
||||
#DELETE FROM t1 WHERE MBRWithin(p, ST_GeomFromText('LINESTRING(15 15, 15 25, 25 25, 35 15, 15 15)'));
|
||||
#SELECT a, ST_AsText(p), ST_AsText(l), ST_AsText(g) FROM t1;
|
||||
#INSERT INTO t1 VALUES(
|
||||
#3, ST_GeomFromText('POINT(25 25)'),
|
||||
#ST_GeomFromText('LINESTRING(2 3, 7 8, 9 10, 15 16)'),
|
||||
#ST_GeomFromText('POLYGON((10 30, 30 40, 40 50, 40 30, 30 20, 10 30))'));
|
||||
#UPDATE t1 SET p = ST_GeomFromText('POINT(50 50)'), l = ST_GeomFromText('LINESTRING(20 20, 21 21, 22 22, 23 23)') WHERE MBRWithin(g, ST_GeomFromText('LINESTRING(25 25, 25 50, 50 50, 50 25, 25 25)'));
|
||||
|
||||
SELECT a, ST_AsText(p), ST_AsText(l), ST_AsText(g) FROM t1;
|
||||
|
||||
ALTER TABLE t1 DROP PRIMARY KEY;
|
||||
ALTER TABLE t1 ADD PRIMARY KEY(a);
|
||||
|
||||
SELECT a, ST_AsText(p), ST_AsText(l), ST_AsText(g) FROM t1;
|
||||
|
||||
ALTER TABLE t1 DROP PRIMARY KEY;
|
||||
ALTER TABLE t1 ADD PRIMARY KEY(p);
|
||||
|
||||
SELECT a, ST_AsText(p), ST_AsText(l), ST_AsText(g) FROM t1;
|
||||
|
||||
SHOW CREATE TABLE t1;
|
||||
|
||||
# Also waiting for Bug 18265942
|
||||
#UPDATE t1 SET p = ST_PointFromText('POINT(20 20)') WHERE ST_Equals(p, ST_PointFromText('POINT(30 30)'));
|
||||
#INSERT INTO t1 VALUES(
|
||||
#3, ST_GeomFromText('POINT(25 25)'),
|
||||
#ST_GeomFromText('LINESTRING(2 3, 7 8, 9 10, 15 16)'),
|
||||
#ST_GeomFromText('POLYGON((10 30, 30 40, 40 50, 40 30, 30 20, 10 30))'));
|
||||
|
||||
SELECT a, ST_AsText(p), ST_AsText(l), ST_AsText(g) FROM t1;
|
||||
|
||||
ALTER TABLE t1 DROP PRIMARY KEY;
|
||||
ALTER TABLE t1 ADD PRIMARY KEY(p);
|
||||
|
||||
--replace_column 10 #
|
||||
EXPLAIN SELECT a, ST_AsText(p) FROM t1 WHERE a = 2 AND p = ST_GeomFromText('POINT(30 30)');
|
||||
SELECT a, ST_AsText(p) FROM t1 WHERE a = 2 AND p = ST_GeomFromText('POINT(30 30)');
|
||||
|
||||
SELECT a, ST_AsText(p), ST_AsText(l), ST_AsText(g) FROM t1;
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # Test for foreign keys.
|
||||
--echo #
|
||||
CREATE TABLE parent(p POINT, PRIMARY KEY(p)) ENGINE=InnoDB;
|
||||
CREATE TABLE child(p POINT NOT NULL) ENGINE=InnoDB;
|
||||
ALTER TABLE parent ADD SPATIAL INDEX idx1(p ASC);
|
||||
ALTER TABLE child ADD SPATIAL INDEX idx2(p ASC);
|
||||
SHOW CREATE TABLE parent;
|
||||
SHOW CREATE TABLE child;
|
||||
|
||||
--error ER_CANNOT_ADD_FOREIGN
|
||||
ALTER TABLE child ADD FOREIGN KEY(p) REFERENCES parent(p);
|
||||
|
||||
ALTER TABLE parent DROP INDEX idx1;
|
||||
--error ER_CANNOT_ADD_FOREIGN
|
||||
ALTER TABLE child ADD FOREIGN KEY(p) REFERENCES parent(p);
|
||||
|
||||
ALTER TABLE child DROP INDEX idx2;
|
||||
--error ER_CANNOT_ADD_FOREIGN
|
||||
ALTER TABLE child ADD FOREIGN KEY(p) REFERENCES parent(p);
|
||||
|
||||
DROP TABLE child, parent;
|
||||
|
||||
--echo #
|
||||
--echo # Bug#28763: Selecting geometry fields in UNION caused server crash.
|
||||
--echo #
|
||||
CREATE TABLE t1(f1 GEOMETRY, f2 POINT, f3 GEOMETRY) ENGINE=InnoDB;
|
||||
SELECT f1 FROM t1 UNION SELECT f1 FROM t1;
|
||||
INSERT INTO t1 (f2,f3) VALUES (ST_GeomFromText('POINT(1 1)'),
|
||||
ST_GeomFromText('POINT(2 2)'));
|
||||
SELECT ST_AsText(f2),ST_AsText(f3) FROM t1;
|
||||
SELECT ST_AsText(a) FROM (SELECT f2 AS a FROM t1 UNION SELECT f3 FROM t1) t;
|
||||
CREATE TABLE t2 AS SELECT f2 AS a FROM t1 UNION SELECT f3 FROM t1;
|
||||
DESC t2;
|
||||
SELECT ST_AsText(a) FROM t2;
|
||||
DROP TABLE t1, t2;
|
||||
|
322
mysql-test/suite/innodb_gis/t/point_big.test
Normal file
322
mysql-test/suite/innodb_gis/t/point_big.test
Normal file
@ -0,0 +1,322 @@
|
||||
#********************************************************
|
||||
# wl6942: Store certain GIS data type in the row rather
|
||||
# than as BLOB.
|
||||
#
|
||||
#********************************************************
|
||||
|
||||
--source include/have_geometry.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
--source include/not_embedded.inc
|
||||
--source include/big_test.inc
|
||||
--source include/not_valgrind.inc
|
||||
|
||||
--echo #
|
||||
--echo # Test when the POINT is on B-TREE
|
||||
--echo #
|
||||
CREATE TABLE t1(fid INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, p POINT, KEY(p)) ENGINE=InnoDB;
|
||||
|
||||
INSERT INTO t1 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)'))));
|
||||
|
||||
SELECT ST_AsText(p) FROM t1;
|
||||
SELECT ST_AsText(p) FROM t1 WHERE p = ST_PointFromText('POINT(20 20)');
|
||||
|
||||
INSERT INTO t1 VALUES
|
||||
(201, ST_PointFromText('POINT(100.32374832 101.23741821)')),
|
||||
(202, ST_PointFromText('POINT(102.43287328 100.23489233)')),
|
||||
(203, ST_PointFromText('POINT(101.43284962 100.45892392)')),
|
||||
(204, ST_PointFromWKB(ST_AsWKB(ST_PointFromText('POINT(103.43718640 105.248206478)')))),
|
||||
(205, ST_PointFromText('POINT(101.43284962 100.45892392)')),
|
||||
(206, ST_PointFromWKB(ST_AsWKB(ST_PointFromText('POINT(103.43718640 105.248206478)'))));
|
||||
|
||||
SELECT ST_AsText(p), COUNT(*) FROM t1 GROUP BY p;
|
||||
|
||||
TRUNCATE t1;
|
||||
|
||||
SELECT * FROM t1;
|
||||
|
||||
INSERT INTO t1(p) VALUES(ST_PointFromText('POINT(10 10)')),
|
||||
(ST_PointFromText('POINT(10 20)')),
|
||||
(ST_PointFromText('POINT(10 40)')),
|
||||
(ST_PointFromText('POINT(10 60)')),
|
||||
(ST_PointFromText('POINT(20 15)')),
|
||||
(ST_PointFromText('POINT(30 10)')),
|
||||
(ST_PointFromText('POINT(40 10)')),
|
||||
(ST_PointFromText('POINT(50 10)')),
|
||||
(ST_PointFromText('POINT(60 5)')),
|
||||
(ST_PointFromText('POINT(60 10)')),
|
||||
(ST_PointFromText('POINT(60 20)')),
|
||||
(ST_PointFromText('POINT(60 100)')),
|
||||
(ST_PointFromText('POINT(100 100)')),
|
||||
(ST_PointFromText('POINT(80 60)')),
|
||||
(ST_PointFromText('POINT(81 50)')),
|
||||
(ST_PointFromText('POINT(82 70)')),
|
||||
(ST_PointFromText('POINT(83 30)')),
|
||||
(ST_PointFromText('POINT(20 100)')),
|
||||
(ST_PointFromText('POINT(150 2000)')),
|
||||
(ST_PointFromText('POINT(109 230)')),
|
||||
(ST_PointFromText('POINT(280 250)')),
|
||||
(ST_PointFromText('POINT(176 175)')),
|
||||
(ST_PointFromText('POINT(200 10)')),
|
||||
(NULL),
|
||||
(NULL);
|
||||
|
||||
SELECT ST_AsText(p) FROM t1;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
SELECT ST_AsText(p) FROM t1;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
INSERT INTO t1(p) SELECT p FROM t1;
|
||||
INSERT INTO t1(p) SELECT p FROM t1;
|
||||
INSERT INTO t1(p) SELECT p FROM t1;
|
||||
INSERT INTO t1(p) SELECT p FROM t1;
|
||||
INSERT INTO t1(p) SELECT p FROM t1;
|
||||
INSERT INTO t1(p) SELECT p FROM t1;
|
||||
INSERT INTO t1(p) SELECT p FROM t1;
|
||||
INSERT INTO t1(p) SELECT p FROM t1;
|
||||
INSERT INTO t1(p) SELECT p FROM t1;
|
||||
INSERT INTO t1(p) SELECT p FROM t1;
|
||||
INSERT INTO t1(p) SELECT p FROM t1;
|
||||
INSERT INTO t1(p) SELECT p FROM t1;
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
SELECT COUNT(*) FROM t1;
|
||||
SELECT ST_AsText(p), COUNT(*) FROM t1 GROUP BY p;
|
||||
SELECT COUNT(*) FROM t1 WHERE p = ST_PointFromText('POINT(280 250)');
|
||||
DELETE FROM t1 WHERE p = ST_PointFromText('POINT(280 250)');
|
||||
SELECT COUNT(*) FROM t1 WHERE p = ST_PointFromText('POINT(280 250)');
|
||||
SELECT COUNT(*) FROM t1 WHERE p = ST_PointFromText('POINT(60 5)');
|
||||
DELETE FROM t1 WHERE P = ST_PointFromText('POINT(60 5)');
|
||||
SELECT COUNT(*) FROM t1 WHERE p = ST_PointFromText('POINT(60 5)');
|
||||
|
||||
SELECT ST_AsText(p), COUNT(*) FROM t1 WHERE p = ST_PointFromText('POINT(60 10)') OR p = ST_PointFromText('POINT(60 20)') OR p = ST_PointFromText('POINT(60 30)') GROUP BY p;
|
||||
UPDATE t1 SET p = ST_PointFromText('POINT(101 102)') WHERE p = ST_PointFromText('POINT(60 10)') OR p = ST_PointFromText('POINT(60 20)') OR p = ST_PointFromText('POINT(60 30)');
|
||||
SELECT ST_AsText(p), COUNT(*) FROM t1 WHERE p = ST_PointFromText('POINT(60 10)') OR p = ST_PointFromText('POINT(60 20)') OR p = ST_PointFromText('POINT(60 30)') GROUP BY p;
|
||||
SELECT COUNT(*) FROM t1 WHERE p = ST_PointFromText('POINT(101 102)');
|
||||
|
||||
SELECT COUNT(*) FROM t1 WHERE p IS NULL;
|
||||
UPDATE t1 SET p = ST_PointFromText('POINT(160 160)') WHERE p IS NULL;
|
||||
SELECT COUNT(*) FROM t1 WHERE p IS NULL;
|
||||
SELECT COUNT(*) FROM t1 WHERE p = ST_PointFromText('POINT(160 160)');
|
||||
|
||||
SELECT ST_AsText(p), COUNT(*) FROM t1 GROUP BY p;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Test when POINT is used in spatial index
|
||||
--echo #
|
||||
SET @ls1 = ST_GeomFromText('LINESTRING(0 20, 10 0)');
|
||||
SET @ls2 = ST_GeomFromText('LINESTRING(0 0, 10 20)');
|
||||
SET @ls3 = ST_GeomFromText('LINESTRING(20 -40, 21 -42)');
|
||||
SET @ls4 = ST_GeomFromText('LINESTRING(20 -42, 21 -40)');
|
||||
SET @poly1 = ST_GeomFromText('POLYGON((2 2, 2 10, 10 10, 10 2, 2 2))');
|
||||
SET @poly2 = ST_GeomFromText('POLYGON((0 0, -5 0, -4 -1, -6 -15, -3 -15, 0 0))');
|
||||
SET @poly3 = ST_GeomFromText('POLYGON((10.0 10.0, 20.5 20, 20.5 50, 32.0 64.0, 32.3 64.6, 5 60, 10 10))');
|
||||
SET @poly4 = ST_GeomFromText('POLYGON((0 10, -10 10, -10 -10, 0 -10, 0 10))');
|
||||
SET @p1 = ST_PointFromText('POINT(0 0)');
|
||||
SET @mpoly = ST_GeomFromText('MULTIPOLYGON(((3 3, 3 16, 16 16, 16 3, 3 3)), ((10 10, 10 50, 50 50, 50 10, 10 10)))');
|
||||
|
||||
CREATE TABLE gis_point (p1 POINT NOT NULL, p2 POINT NOT NULL, SPATIAL KEY k1 (p1), SPATIAL KEY k2 (p2)) ENGINE=InnoDB;
|
||||
|
||||
INSERT INTO gis_point VALUES
|
||||
(ST_PointFromText('POINT(1 2)'), ST_PointFromText('POINT(-1 -3)')),
|
||||
(ST_PointFromText('POINT(2 4)'), ST_PointFromText('POINT(-2 -6)')),
|
||||
(ST_PointFromText('POINT(3 6)'), ST_PointFromText('POINT(-3 -9)')),
|
||||
(ST_PointFromText('POINT(4 8)'), ST_PointFromText('POINT(-4 -12)')),
|
||||
(ST_PointFromText('POINT(5 10)'), ST_PointFromText('POINT(-5 -15)')),
|
||||
(ST_PointFromText('POINT(6 12)'), ST_PointFromText('POINT(-6 -18)')),
|
||||
(ST_PointFromText('POINT(7 14)'), ST_PointFromText('POINT(-7 -21)')),
|
||||
(ST_PointFromText('POINT(8 16)'), ST_PointFromText('POINT(0 0)')),
|
||||
(ST_PointFromText('POINT(9 18)'), ST_PointFromText('POINT(-4 2)')),
|
||||
(ST_PointFromText('POINT(10 21)'), ST_PointFromText('POINT(-6 3)')),
|
||||
(ST_PointFromText('POINT(20.5 41)'), ST_PointFromText('POINT(-8 4)')),
|
||||
(ST_PointFromText('POINT(26.25 57)'), ST_PointFromText('POINT(1 2)')),
|
||||
(ST_PointFromText('POINT(32.1234 64.2468)'), ST_PointFromText('POINT(-1 -1)'));
|
||||
|
||||
-- echo 'The ORDER BY for spatial index will use filesort'
|
||||
--replace_column 10 #
|
||||
EXPLAIN SELECT ST_AsText(p1), ST_AsText(p2) FROM gis_point ORDER BY p1, p2;
|
||||
SELECT ST_AsText(p1), ST_AsText(p2) FROM gis_point ORDER BY p1, p2;
|
||||
|
||||
-- echo 'Try to do IDU on the table and verify the result'
|
||||
DELETE FROM gis_point WHERE ST_Equals(p2, ST_PointFromText('POINT(-8 4)'));
|
||||
|
||||
INSERT INTO gis_point VALUES(ST_PointFromText('POINT(20.5 -41)'), ST_PointFromText('POINT(8 -4)'));
|
||||
|
||||
SELECT ST_AsText(p1) AS 'Expect (32.1234 64.2468)' FROM gis_point WHERE ST_TOUCHES(@poly3, p1) AND MBRWithin(p2, @poly4);
|
||||
|
||||
UPDATE gis_point SET p1 = ST_PointFromText('POINT(20.5 41)'), p2 = ST_PointFromText('POINT(-8 4)') WHERE ST_Intersection(@ls3, @ls4) = p1;
|
||||
|
||||
SELECT ST_AsText(p1) AS 'Expect (32.1234 64.2468) AND (20.5 41)' FROM gis_point WHERE ST_TOUCHES(@poly3, p1) AND MBRWithin(p2, @poly4);
|
||||
|
||||
CHECK TABLE gis_point;
|
||||
|
||||
-- echo ============================================================
|
||||
-- echo Use a trx to test the IDU on the table and verify the result
|
||||
-- echo ============================================================
|
||||
|
||||
START TRANSACTION;
|
||||
|
||||
DELETE FROM gis_point WHERE ST_Equals(p2, ST_PointFromText('POINT(-8 4)'));
|
||||
|
||||
INSERT INTO gis_point VALUES(ST_PointFromText('POINT(20.5 -41)'), ST_PointFromText('POINT(8 -4)'));
|
||||
|
||||
SELECT ST_AsText(p1) AS 'Expect (32.1234 64.2468)' FROM gis_point WHERE ST_TOUCHES(@poly3, p1) AND MBRWithin(p2, @poly4);
|
||||
|
||||
UPDATE gis_point SET p1 = ST_PointFromText('POINT(20.5 49)'), p2 = ST_PointFromText('POINT(-8 4)') WHERE ST_Intersection(@ls3, @ls4) = p1;
|
||||
|
||||
SELECT ST_AsText(p1) AS 'Expect (32.1234 64.2468) AND (20.5 49)' FROM gis_point WHERE ST_TOUCHES(@poly3, p1) AND MBRWithin(p2, @poly4);
|
||||
|
||||
ROLLBACK;
|
||||
|
||||
SELECT ST_AsText(p1) AS 'Expect (32.1234 64.2468) AND (20.5 41)' FROM gis_point WHERE ST_TOUCHES(@poly3, p1) AND MBRWithin(p2, @poly4);
|
||||
|
||||
CHECK TABLE gis_point;
|
||||
|
||||
-- echo =======================================================
|
||||
-- echo Enlarge the table by inserting the same data and verify
|
||||
-- echo =======================================================
|
||||
|
||||
INSERT INTO gis_point SELECT * FROM gis_point;
|
||||
INSERT INTO gis_point SELECT * FROM gis_point;
|
||||
INSERT INTO gis_point SELECT * FROM gis_point;
|
||||
INSERT INTO gis_point SELECT * FROM gis_point;
|
||||
INSERT INTO gis_point SELECT * FROM gis_point;
|
||||
INSERT INTO gis_point SELECT * FROM gis_point;
|
||||
INSERT INTO gis_point SELECT * FROM gis_point;
|
||||
INSERT INTO gis_point SELECT * FROM gis_point;
|
||||
INSERT INTO gis_point SELECT * FROM gis_point;
|
||||
INSERT INTO gis_point SELECT * FROM gis_point;
|
||||
|
||||
CHECK TABLE gis_point;
|
||||
|
||||
SELECT COUNT(*), ST_AsText(p1), ST_AsText(p2) FROM gis_point GROUP BY p1, p2;
|
||||
|
||||
SELECT COUNT(*), ST_AsText(p1) FROM gis_point WHERE ST_Intersection(@ls1, @ls2) = p1 GROUP BY p1;
|
||||
SELECT COUNT(*), ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @poly1) GROUP BY p1;
|
||||
SELECT COUNT(*), ST_AsText(p2) FROM gis_point WHERE ST_Contains(@poly2, p2) GROUP BY p2;
|
||||
SELECT COUNT(*), ST_AsText(p2) FROM gis_point WHERE ST_Equals(p2, @p1) GROUP BY p2;
|
||||
SELECT COUNT(*), ST_AsText(p1) FROM gis_point WHERE ST_TOUCHES(@poly3, p1) AND MBRWithin(p2, @poly4) GROUP BY p1;
|
||||
SELECT COUNT(*), ST_AsText(p1), ST_AsText(p2) FROM gis_point WHERE ST_Contains(@mpoly, p1) GROUP BY p1, p2;
|
||||
SELECT COUNT(*), ST_AsText(p1), ST_AsText(p2) FROM gis_point WHERE ST_Contains(@mpoly, p1) AND NOT MBRWithin(p1, @mpoly) GROUP BY p1, p2;
|
||||
|
||||
-- echo ======================================================================
|
||||
-- echo Build another new table with the same schema, will insert data from this table to the orignal one
|
||||
-- echo ======================================================================
|
||||
|
||||
CREATE TABLE p(p1 POINT NOT NULL, p2 POINT NOT NULL, SPATIAL INDEX k1(p2)) ENGINE=InnoDB;
|
||||
|
||||
INSERT INTO p VALUES(ST_PointFromText('POINT(1000 -1000)'), ST_PointFromText('POINT(-201 203.56)'));
|
||||
INSERT INTO p VALUES(ST_PointFromText('POINT(20.5 43.9832)'), ST_PointFromText('POINT(-0 0)'));
|
||||
INSERT INTO p VALUES(ST_PointFromText('POINT(-4.2 -6.98)'), ST_PointFromText('POINT(-120.5 343.9832)'));
|
||||
|
||||
INSERT INTO p SELECT * FROM p WHERE MBRWithin(p1, ST_GeomFromText('POLYGON((0 0, 0 2000, 2000 2000, 2000 -2000, 0 -2000, 0 0))'));
|
||||
INSERT INTO p SELECT * FROM p WHERE MBRWithin(p1, ST_GeomFromText('POLYGON((0 0, -10 0, -100 -100, 0 -50, 0 0))'));
|
||||
|
||||
SELECT COUNT(*), ST_AsText(p1), ST_AsText(p2) FROM p GROUP BY p1, p2;
|
||||
|
||||
INSERT INTO gis_point SELECT * FROM p;
|
||||
INSERT INTO gis_point SELECT * FROM p;
|
||||
INSERT INTO gis_point SELECT * FROM p;
|
||||
INSERT INTO gis_point SELECT * FROM p;
|
||||
INSERT INTO gis_point SELECT * FROM p;
|
||||
INSERT INTO gis_point SELECT * FROM p;
|
||||
INSERT INTO gis_point SELECT * FROM p;
|
||||
|
||||
CHECK TABLE gis_point;
|
||||
|
||||
SELECT COUNT(*), ST_AsText(p1), ST_AsText(p2) FROM gis_point GROUP BY p1, p2;
|
||||
|
||||
SELECT COUNT(*), ST_AsText(p1) FROM gis_point WHERE ST_TOUCHES(@poly3, p1) AND MBRWithin(p2, @poly4) GROUP BY p1;
|
||||
|
||||
SELECT COUNT(*), ST_AsText(p2) FROM gis_point WHERE MBRWithin(p2, @poly2) GROUP BY p2;
|
||||
|
||||
DROP TABLE p;
|
||||
|
||||
-- echo ================================
|
||||
-- echo Use a trx to test IUD and verify
|
||||
-- echo ================================
|
||||
|
||||
# Temporarily disabled the following test case, since the ROLLBACK and
|
||||
# some other DML would cost too much of time. We could test them until
|
||||
# we have optimized the UNDO, etc.
|
||||
|
||||
#START TRANSACTION;
|
||||
|
||||
#-- echo 'To remove (-2 -6), (-1 -3)'
|
||||
#DELETE FROM gis_point WHERE ST_Contains(ST_GeomFromText('POLYGON((-8 -8, 4 -7, 1 1, 0 -1, -2 -2, -8 -8))') , p2);
|
||||
|
||||
#SELECT COUNT(*), ST_AsText(p2) FROM gis_point WHERE ST_Contains(@poly2, p2) GROUP BY p2;
|
||||
|
||||
#-- echo 'To set (-1 -1) to (-5.12 -10.84)'
|
||||
#UPDATE gis_point SET p2 = ST_PointFromText('POINT(-5.12 -10.84)') WHERE ST_Intersection(ST_GeomFromText('LINESTRING(-3 4, -2 0, 0.5 -2.5, 5 0)'), ST_GeomFromText('LINESTRING(0.6 0.6, -10 -10)')) = p2;
|
||||
|
||||
#SELECT COUNT(*), ST_AsText(p2) FROM gis_point WHERE MBRWithin(p2, @poly2) GROUP BY p2;
|
||||
|
||||
#-- echo 'To insert several (-3.6 -4.05) (-1 -1)
|
||||
#INSERT INTO gis_point VALUES
|
||||
#(ST_PointFromText('POINT(10.1 2.6)'), ST_PointFromText('POINT(-1 -1)')),
|
||||
#(ST_PointFromText('POINT(100.99 -2.53)'), ST_PointFromText('POINT(-3.6 -4.05)')),
|
||||
#(ST_PointFromText('POINT(13.62 3.87)'), ST_PointFromText('POINT(-1 -1)')),
|
||||
#(ST_PointFromText('POINT(-36.3 0.34)'), ST_PointFromText('POINT(-1 -1)')),
|
||||
#(ST_PointFromText('POINT(1.04 25.6)'), ST_PointFromText('POINT(-3.6 -4.05)'));
|
||||
|
||||
#SELECT COUNT(*), ST_AsText(p2) FROM gis_point WHERE MBRWithin(p2, @poly2) GROUP BY p2;
|
||||
|
||||
#SELECT COUNT(*), ST_AsText(p2) FROM gis_point WHERE ST_Contains(ST_GeomFromText('POLYGON((-0.999 -0.999, -6 -1, -6 -7, -0.99999 -0.99999, -0.999 -0.999))'), p2) GROUP BY p2;
|
||||
|
||||
#ROLLBACK;
|
||||
|
||||
#CHECK TABLE gis_point;
|
||||
|
||||
-- echo =============================================
|
||||
-- echo Delete those rows selected from another table
|
||||
-- echo =============================================
|
||||
|
||||
SELECT COUNT(*), ST_AsText(p1), ST_AsText(p2) FROM gis_point GROUP BY p1, p2;
|
||||
|
||||
UPDATE gis_point SET p2 = ST_PointFromText('POINT(2000 2000)') WHERE ST_Contains(ST_GeomFromText('POLYGON((-100 100, -400 100, -400 400, -100 400, -100 100))'), p2) OR ST_Contains(ST_GeomFromText('POLYGON((-0.0001 -0.0002, -0.0001 0.00002, 0.00000005 0.000001, 0.0000025 -0.001, -0.0001 -0.0002))'), p2);
|
||||
|
||||
CHECK TABLE gis_point;
|
||||
|
||||
-- echo 'To remove all the just updated rows'
|
||||
DELETE FROM gis_point WHERE ST_Intersection(ST_GeomFromText('LINESTRING(1800 1900, 2200 2100)'), ST_GeomFromText('LINESTRING(0 0, 2001 2001)')) = p2;
|
||||
|
||||
INSERT INTO gis_point VALUES
|
||||
(ST_PointFromText('POINT(8 16)'), ST_PointFromText('POINT(0 0)')),
|
||||
(ST_PointFromText('POINT(8 16)'), ST_PointFromText('POINT(0 0)'));
|
||||
|
||||
-- echo ======================================================================
|
||||
-- echo Following results should be almost the same with those at the beginning
|
||||
-- echo ======================================================================
|
||||
|
||||
SELECT COUNT(*), ST_AsText(p1), ST_AsText(p2) FROM gis_point GROUP BY p1, p2;
|
||||
SELECT COUNT(*), ST_AsText(p1), ST_AsText(p2)
|
||||
FROM gis_point
|
||||
WHERE ST_Contains(ST_GeomFromText('POLYGON((-1000 -1000, -1000 1000, 1000 1000, 1001 -1001, -1000 -1000))'), p1)
|
||||
GROUP BY p1, p2;
|
||||
|
||||
SELECT ST_AsText(p1), ST_AsText(p2) FROM gis_point GROUP BY p1, p2;
|
||||
SELECT COUNT(*), ST_AsText(p1) FROM gis_point WHERE ST_Intersection(@ls1, @ls2) = p1 GROUP BY p1;
|
||||
SELECT COUNT(*), ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @poly1) GROUP BY p1;
|
||||
SELECT COUNT(*), ST_AsText(p2) FROM gis_point WHERE ST_Contains(@poly2, p2) GROUP BY p2;
|
||||
SELECT COUNT(*), ST_AsText(p2) FROM gis_point WHERE ST_Equals(p2, @p1) GROUP BY p2;
|
||||
SELECT COUNT(*), ST_AsText(p1) FROM gis_point WHERE ST_TOUCHES(@poly3, p1) AND MBRWithin(p2, @poly4) GROUP BY p1;
|
||||
SELECT COUNT(*), ST_AsText(p1), ST_AsText(p2) FROM gis_point WHERE ST_Contains(@mpoly, p1) GROUP BY p1, p2;
|
||||
SELECT COUNT(*), ST_AsText(p1), ST_AsText(p2) FROM gis_point WHERE ST_Contains(@mpoly, p1) AND NOT MBRWithin(p1, @mpoly) GROUP BY p1, p2;
|
||||
|
||||
CHECK TABLE gis_point;
|
||||
|
||||
DROP TABLE gis_point;
|
||||
|
241
mysql-test/suite/innodb_gis/t/repeatable_spatial.test
Normal file
241
mysql-test/suite/innodb_gis/t/repeatable_spatial.test
Normal file
@ -0,0 +1,241 @@
|
||||
# *****************************************************************
|
||||
# Test spatial index with isolation level Repeatable Read on DML
|
||||
# This will also test the no phantom rows happens
|
||||
# Check the COUNT(*) and SELECT results before & after COMMIT in
|
||||
# the last con1 statment
|
||||
# Test at con1: Global Repeatable Read con2 : Sess Read Committed
|
||||
# Test at con1: Sess Repeatable Read con2 : Sess Read Committed
|
||||
# *****************************************************************
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_geometry.inc
|
||||
--source include/not_embedded.inc
|
||||
|
||||
# Test Repeatable Read & Read committed at Global, Session levels
|
||||
CREATE TABLE tab(c1 int NOT NULL PRIMARY KEY,c2 POINT NOT NULL,
|
||||
c3 LINESTRING NOT NULL,c4 POLYGON NOT NULL,c5 GEOMETRY NOT NULL)
|
||||
ENGINE=InnoDB;
|
||||
|
||||
ALTER TABLE tab ADD SPATIAL INDEX idx2(c2 ASC);
|
||||
|
||||
ALTER TABLE tab ADD SPATIAL KEY idx3(c3 DESC);
|
||||
|
||||
ALTER TABLE tab ADD SPATIAL INDEX idx4(c4 ASC) COMMENT 'testing spatial index on Polygon';
|
||||
|
||||
ALTER TABLE tab ADD SPATIAL KEY idx5(c5 ASC) COMMENT 'testing spatial index on Geometry';
|
||||
|
||||
INSERT INTO tab(c1,c2,c3,c4,c5)
|
||||
VALUES(1,ST_GeomFromText('POINT(10 10)'),ST_GeomFromText('LINESTRING(5 5,20 20,30 30)'),
|
||||
ST_GeomFromText('POLYGON((30 30,40 40,50 50,30 50,30 40,30 30))'),
|
||||
ST_GeomFromText('POLYGON((30 30,40 40,50 50,30 50,30 40,30 30))'));
|
||||
|
||||
# 1 record is expected
|
||||
SELECT c1,ST_AsText(c2),ST_AsText(c3),ST_AsText(c4),ST_AsText(c5) FROM tab;
|
||||
|
||||
# Record count should be 1
|
||||
SELECT COUNT(*) FROM tab;
|
||||
|
||||
--echo "In connection 1"
|
||||
connect (con1,localhost,root,,);
|
||||
connection con1;
|
||||
|
||||
SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||
|
||||
SELECT @@tx_isolation;
|
||||
|
||||
# Record count should be 1
|
||||
SELECT COUNT(*) FROM tab;
|
||||
|
||||
# 1 record is expected
|
||||
SELECT c1,ST_AsText(c2),ST_AsText(c3),ST_AsText(c4),ST_AsText(c5) FROM tab;
|
||||
|
||||
--echo "In connection 2"
|
||||
connect (con2,localhost,root,,);
|
||||
connection con2;
|
||||
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
|
||||
SELECT @@tx_isolation;
|
||||
|
||||
START TRANSACTION;
|
||||
|
||||
INSERT INTO tab(c1,c2,c3,c4,c5)
|
||||
VALUES(2,ST_GeomFromText('POINT(20 20)'),ST_GeomFromText('LINESTRING(20 20,30 30,40 40)'),
|
||||
ST_GeomFromText('POLYGON((40 50,40 70,50 100,70 100,80 80,70 50,40 50))'),
|
||||
ST_GeomFromText('POLYGON((40 50,40 70,50 100,70 100,80 80,70 50,40 50))'));
|
||||
|
||||
SET @g1 = ST_GeomFromText('POLYGON((30 30,40 40,50 50,30 50,30 40,30 30))');
|
||||
SET @g2 = ST_GeomFromText('POINT(10 10)');
|
||||
|
||||
# Record should be updated
|
||||
UPDATE tab SET C5 = ST_GeomFromText('POLYGON((300 300,400 400,500 500,300 500,300 400,300 300))')
|
||||
WHERE MBREquals(tab.c4, @g1) AND MBREquals(tab.c2, @g2);
|
||||
|
||||
--echo "In connection 1"
|
||||
connection con1;
|
||||
|
||||
SET @g3 = ST_GeomFromText('POLYGON((40 50,40 70,50 100,70 100,80 80,70 50,40 50))');
|
||||
|
||||
# No record is expected (No phantom row)
|
||||
SELECT c1,ST_AsText(c2),ST_AsText(c4),ST_AsText(c5) FROM tab WHERE MBREquals(tab.c5, @g3);
|
||||
|
||||
# Record count should be 1
|
||||
SELECT COUNT(*) FROM tab;
|
||||
|
||||
START TRANSACTION;
|
||||
|
||||
# Record count should be 1
|
||||
SELECT COUNT(*) FROM tab;
|
||||
|
||||
--echo "In connection 2"
|
||||
connection con2;
|
||||
|
||||
# Record count should be 2
|
||||
SELECT COUNT(*) FROM tab;
|
||||
|
||||
COMMIT;
|
||||
|
||||
disconnect con2;
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
--echo "In connection 1"
|
||||
connection con1;
|
||||
|
||||
# Record count should be 1
|
||||
SELECT COUNT(*) FROM tab;
|
||||
|
||||
SET @g4 = ST_GeomFromText('POLYGON((300 300,400 400,500 500,300 500,300 400,300 300))');
|
||||
|
||||
# No records are expected (No phantom row)
|
||||
SELECT ST_AsText(c5) FROM tab WHERE MBREquals(tab.c5, @g4);
|
||||
|
||||
COMMIT;
|
||||
|
||||
# The updated record is expected
|
||||
SELECT ST_AsText(c5) FROM tab WHERE MBREquals(tab.c5, @g4);
|
||||
|
||||
# Record count should be 2
|
||||
SELECT COUNT(*) FROM tab;
|
||||
|
||||
# 2 records are expected
|
||||
SELECT c1,ST_AsText(c2),ST_AsText(c4),ST_AsText(c5) FROM tab;
|
||||
|
||||
disconnect con1;
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
--connection default
|
||||
DROP TABLE tab;
|
||||
|
||||
# Test Repeatable Read & Read committed at Session levels
|
||||
CREATE TABLE tab(c1 int NOT NULL PRIMARY KEY,c2 POINT NOT NULL,
|
||||
c3 LINESTRING NOT NULL,c4 POLYGON NOT NULL,c5 GEOMETRY NOT NULL)
|
||||
ENGINE=InnoDB;
|
||||
|
||||
ALTER TABLE tab ADD SPATIAL INDEX idx2(c2 ASC);
|
||||
|
||||
ALTER TABLE tab ADD SPATIAL KEY idx3(c3 DESC);
|
||||
|
||||
ALTER TABLE tab ADD SPATIAL INDEX idx4(c4 ASC) COMMENT 'testing spatial index on Polygon';
|
||||
|
||||
ALTER TABLE tab ADD SPATIAL KEY idx5(c5 ASC) COMMENT 'testing spatial index on Geometry';
|
||||
|
||||
INSERT INTO tab(c1,c2,c3,c4,c5)
|
||||
VALUES(1,ST_GeomFromText('POINT(10 10)'),ST_GeomFromText('LINESTRING(5 5,20 20,30 30)'),
|
||||
ST_GeomFromText('POLYGON((30 30,40 40,50 50,30 50,30 40,30 30))'),
|
||||
ST_GeomFromText('POLYGON((30 30,40 40,50 50,30 50,30 40,30 30))'));
|
||||
|
||||
# 1 record is expected
|
||||
SELECT c1,ST_AsText(c2),ST_AsText(c3),ST_AsText(c4),ST_AsText(c5) FROM tab;
|
||||
|
||||
# Record count should be 1
|
||||
SELECT COUNT(*) FROM tab;
|
||||
|
||||
--echo "In connection 1"
|
||||
connect (con1,localhost,root,,);
|
||||
connection con1;
|
||||
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||
|
||||
SELECT @@tx_isolation;
|
||||
|
||||
# Record count should be 1
|
||||
SELECT COUNT(*) FROM tab;
|
||||
|
||||
# 1 record is expected
|
||||
SELECT c1,ST_AsText(c2),ST_AsText(c3),ST_AsText(c4),ST_AsText(c5) FROM tab;
|
||||
|
||||
--echo "In connection 2"
|
||||
connect (con2,localhost,root,,);
|
||||
connection con2;
|
||||
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
|
||||
SELECT @@tx_isolation;
|
||||
|
||||
START TRANSACTION;
|
||||
|
||||
INSERT INTO tab(c1,c2,c3,c4,c5)
|
||||
VALUES(2,ST_GeomFromText('POINT(20 20)'),ST_GeomFromText('LINESTRING(20 20,30 30,40 40)'),
|
||||
ST_GeomFromText('POLYGON((40 50,40 70,50 100,70 100,80 80,70 50,40 50))'),
|
||||
ST_GeomFromText('POLYGON((40 50,40 70,50 100,70 100,80 80,70 50,40 50))'));
|
||||
|
||||
SET @g1 = ST_GeomFromText('POLYGON((30 30,40 40,50 50,30 50,30 40,30 30))');
|
||||
SET @g2 = ST_GeomFromText('POINT(10 10)');
|
||||
|
||||
# Record should be updated
|
||||
UPDATE tab SET C5 = ST_GeomFromText('POLYGON((300 300,400 400,500 500,300 500,300 400,300 300))')
|
||||
WHERE MBREquals(tab.c4, @g1) AND MBREquals(tab.c2, @g2);
|
||||
|
||||
--echo "In connection 1"
|
||||
connection con1;
|
||||
|
||||
SET @g3 = ST_GeomFromText('POLYGON((40 50,40 70,50 100,70 100,80 80,70 50,40 50))');
|
||||
|
||||
# No record is expected (No phantom row)
|
||||
SELECT c1,ST_AsText(c2),ST_AsText(c4),ST_AsText(c5) FROM tab WHERE MBREquals(tab.c5, @g3);
|
||||
|
||||
# Record count should be 1
|
||||
SELECT COUNT(*) FROM tab;
|
||||
|
||||
START TRANSACTION;
|
||||
|
||||
# Record count should be 1
|
||||
SELECT COUNT(*) FROM tab;
|
||||
|
||||
--echo "In connection 2"
|
||||
connection con2;
|
||||
|
||||
# Record count should be 2
|
||||
SELECT COUNT(*) FROM tab;
|
||||
|
||||
COMMIT;
|
||||
|
||||
disconnect con2;
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
--echo "In connection 1"
|
||||
connection con1;
|
||||
|
||||
# Record count should be 1
|
||||
SELECT COUNT(*) FROM tab;
|
||||
|
||||
SET @g4 = ST_GeomFromText('POLYGON((300 300,400 400,500 500,300 500,300 400,300 300))');
|
||||
|
||||
# No records are expected (No phantom row)
|
||||
SELECT ST_AsText(c5) FROM tab WHERE MBREquals(tab.c5, @g4);
|
||||
|
||||
COMMIT;
|
||||
|
||||
# The updated record is expected
|
||||
SELECT ST_AsText(c5) FROM tab WHERE MBREquals(tab.c5, @g4);
|
||||
|
||||
# Record count should be 2
|
||||
SELECT COUNT(*) FROM tab;
|
||||
|
||||
# 2 records are expected
|
||||
SELECT c1,ST_AsText(c2),ST_AsText(c4),ST_AsText(c5) FROM tab;
|
||||
|
||||
disconnect con1;
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
--connection default
|
||||
DROP TABLE tab;
|
480
mysql-test/suite/innodb_gis/t/rollback.test
Normal file
480
mysql-test/suite/innodb_gis/t/rollback.test
Normal file
File diff suppressed because one or more lines are too long
34
mysql-test/suite/innodb_gis/t/row_format.test
Normal file
34
mysql-test/suite/innodb_gis/t/row_format.test
Normal file
@ -0,0 +1,34 @@
|
||||
--source include/not_embedded.inc
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_innodb_zip.inc
|
||||
|
||||
# Test the redundant format
|
||||
LET $file_per_table='off';
|
||||
LET $file_format='Antelope';
|
||||
LET $row_format=REDUNDANT;
|
||||
|
||||
--source include/innodb_gis_row_format_basic.inc
|
||||
|
||||
|
||||
# Test the compressed format
|
||||
LET $file_per_table='on';
|
||||
LET $file_format='Barracuda';
|
||||
LET $row_format=COMPRESSED;
|
||||
|
||||
--source include/innodb_gis_row_format_basic.inc
|
||||
|
||||
|
||||
# Test the dynamic format
|
||||
LET $file_per_table='on';
|
||||
LET $file_format='Barracuda';
|
||||
LET $row_format=DYNAMIC;
|
||||
|
||||
--source include/innodb_gis_row_format_basic.inc
|
||||
|
||||
# Test the compact format
|
||||
LET $file_per_table='off';
|
||||
LET $file_format='Antelope';
|
||||
LET $row_format=COMPACT;
|
||||
|
||||
--source include/innodb_gis_row_format_basic.inc
|
||||
|
64
mysql-test/suite/innodb_gis/t/rtree_compress.test
Normal file
64
mysql-test/suite/innodb_gis/t/rtree_compress.test
Normal file
@ -0,0 +1,64 @@
|
||||
# WL#6745 InnoDB R-tree support
|
||||
# This test case will test R-tree split.
|
||||
|
||||
# Not supported in embedded
|
||||
--source include/not_embedded.inc
|
||||
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_innodb_zip.inc
|
||||
--source include/have_debug.inc
|
||||
--source include/big_test.inc
|
||||
# Valgrind takes too much time on PB2 even in the --big-test runs.
|
||||
--source include/not_valgrind.inc
|
||||
|
||||
# Create table with R-tree index.
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
|
||||
#Create table with R-tree index.
|
||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb ROW_FORMAT=COMPRESSED;
|
||||
|
||||
# Insert enough values to let R-tree split.
|
||||
insert into t1 values(1, Point(1,1));
|
||||
insert into t1 values(2, Point(2,2));
|
||||
insert into t1 values(3, Point(3,3));
|
||||
insert into t1 values(4, Point(4,4));
|
||||
insert into t1 values(5, Point(5,5));
|
||||
insert into t1 values(6, Point(6,6));
|
||||
insert into t1 values(7, Point(7,7));
|
||||
insert into t1 values(8, Point(8,8));
|
||||
insert into t1 values(9, Point(9,9));
|
||||
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
start transaction;
|
||||
insert into t1 select * from t1;
|
||||
select count(*) from t1;
|
||||
rollback;
|
||||
|
||||
check table t1;
|
||||
|
||||
select count(*) from t1;
|
||||
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 100,100 100,100 0,0 0))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
|
||||
set @g1 = ST_GeomFromText('Polygon((10 10,10 800,800 800,800 10,10 10))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
|
||||
SET DEBUG='+d,page_copy_rec_list_start_compress_fail';
|
||||
delete from t1;
|
||||
SET DEBUG='-d,page_copy_rec_list_start_compress_fail';
|
||||
|
||||
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
|
||||
# Clean up.
|
||||
drop table t1;
|
58
mysql-test/suite/innodb_gis/t/rtree_compress2.test
Normal file
58
mysql-test/suite/innodb_gis/t/rtree_compress2.test
Normal file
@ -0,0 +1,58 @@
|
||||
# WL#6745 InnoDB R-tree support
|
||||
# This test case will test R-tree multi level split.
|
||||
|
||||
# Restarting is not supported in embedded
|
||||
--source include/not_embedded.inc
|
||||
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_innodb_zip.inc
|
||||
--source include/big_test.inc
|
||||
# Valgrind takes too much time on PB2 even in the --big-test runs.
|
||||
--source include/not_valgrind.inc
|
||||
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
|
||||
# Create table with R-tree index.
|
||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb ROW_FORMAT=COMPRESSED;
|
||||
|
||||
# Insert enough values to let R-tree split.
|
||||
delimiter |;
|
||||
create procedure insert_t1(IN total int)
|
||||
begin
|
||||
declare i int default 1;
|
||||
while (i <= total) DO
|
||||
insert into t1 values (i, Point(i, i));
|
||||
set i = i + 1;
|
||||
end while;
|
||||
end|
|
||||
delimiter ;|
|
||||
|
||||
# Test level 3 rtree.
|
||||
CALL insert_t1(70000);
|
||||
select count(*) from t1;
|
||||
|
||||
# Check table.
|
||||
check table t1;
|
||||
|
||||
truncate table t1;
|
||||
|
||||
# Test crash recovery.
|
||||
#
|
||||
#
|
||||
call mtr.add_suppression("InnoDB: page [0-9]+ in the doublewrite buffer is not within space bounds.*");
|
||||
|
||||
# Test rtree enlarge recovery.
|
||||
START TRANSACTION;
|
||||
CALL insert_t1(5000);
|
||||
#select count(*) from t1;
|
||||
|
||||
# Check table.
|
||||
#check table t1;
|
||||
|
||||
COMMIT;
|
||||
|
||||
--source include/kill_and_restart_mysqld.inc
|
||||
|
||||
# Clean up.
|
||||
drop procedure insert_t1;
|
||||
drop table t1;
|
451
mysql-test/suite/innodb_gis/t/rtree_concurrent_srch.test
Normal file
451
mysql-test/suite/innodb_gis/t/rtree_concurrent_srch.test
Normal file
@ -0,0 +1,451 @@
|
||||
# WL#6745 InnoDB R-tree support
|
||||
# This test case will test R-tree split.
|
||||
|
||||
# Not supported in embedded
|
||||
--source include/not_embedded.inc
|
||||
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_debug.inc
|
||||
--source include/have_debug_sync.inc
|
||||
--source include/big_test.inc
|
||||
|
||||
# Create table with R-tree index.
|
||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;
|
||||
|
||||
# Insert enough values to let R-tree split.
|
||||
insert into t1 values(1, Point(1,1));
|
||||
insert into t1 values(2, Point(2,2));
|
||||
insert into t1 values(3, Point(3,3));
|
||||
insert into t1 values(4, Point(4,4));
|
||||
insert into t1 values(5, Point(5,5));
|
||||
insert into t1 values(6, Point(6,6));
|
||||
insert into t1 values(7, Point(7,7));
|
||||
insert into t1 values(8, Point(8,8));
|
||||
insert into t1 values(9, Point(9,9));
|
||||
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
|
||||
connect (a,localhost,root,,);
|
||||
connection a;
|
||||
SET SESSION debug="+d,rtr_pcur_move_to_next_return";
|
||||
|
||||
set session transaction isolation level serializable;
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 100,100 100,100 0,0 0))');
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
SET DEBUG_SYNC = 'row_search_for_mysql_before_return SIGNAL started WAIT_FOR go_ahead';
|
||||
--send select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
|
||||
--echo # Establish session con1 (user=root)
|
||||
connect (con1,localhost,root,,);
|
||||
connection con1;
|
||||
set session transaction isolation level serializable;
|
||||
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR started';
|
||||
insert into t1 select * from t1;
|
||||
SET DEBUG_SYNC = 'now SIGNAL go_ahead';
|
||||
|
||||
connection a;
|
||||
reap;
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
|
||||
connection default;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 100,100 100,100 0,0 0))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
|
||||
set @g1 = ST_GeomFromText('Polygon((10 10,10 800,800 800,800 10,10 10))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
|
||||
set session transaction isolation level serializable;
|
||||
|
||||
truncate t1;
|
||||
|
||||
# Test on predicate locking
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(2 2, 150 150)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(3 3, 160 160)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(4 4, 170 170)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(5 5, 180 180)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(6 6, 190 190)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(7 7, 200 200)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(8 8, 210 210)'));
|
||||
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
|
||||
# Connection 'a' will place predicate lock on almost all pages
|
||||
connection a;
|
||||
set session transaction isolation level serializable;
|
||||
select @@tx_isolation;
|
||||
start transaction;
|
||||
set @g1 = ST_GeomFromText('Polygon((100 100, 100 110, 110 110, 110 100, 100 100))');
|
||||
select count(*) from t1 where MBRwithin(t1.c2, @g1);
|
||||
|
||||
# The split will replicate locks across pages
|
||||
connect (b,localhost,root,,);
|
||||
connection b;
|
||||
set session transaction isolation level serializable;
|
||||
set session innodb_lock_wait_timeout = 1;
|
||||
|
||||
select @@tx_isolation;
|
||||
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
|
||||
# FIXME: Put this back once we sort out the shrink business
|
||||
#insert into t1 select * from t1;
|
||||
|
||||
connection a;
|
||||
commit;
|
||||
|
||||
connection default;
|
||||
select count(*) from t1;
|
||||
|
||||
# Insert a record that would be in the search range
|
||||
insert into t1 values (105, Point(105, 105));
|
||||
|
||||
# Connection 'a' will place predicate lock on almost all pages
|
||||
connection a;
|
||||
start transaction;
|
||||
set @g1 = ST_GeomFromText('Polygon((100 100, 100 110, 110 110, 110 100, 100 100))');
|
||||
select count(*) from t1 where MBRwithin(t1.c2, @g1);
|
||||
|
||||
connection b;
|
||||
select @@innodb_lock_wait_timeout;
|
||||
select @@tx_isolation;
|
||||
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
insert into t1 select * from t1;
|
||||
select count(*) from t1;
|
||||
|
||||
connection a;
|
||||
select sleep(2);
|
||||
commit;
|
||||
|
||||
#==================Test predicates on "MBRIntersects"==========================
|
||||
connection default;
|
||||
truncate t1;
|
||||
|
||||
# Test on predicate locking
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(2 2, 150 150)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(3 3, 160 160)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(4 4, 170 170)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(5 5, 180 180)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(6 6, 190 190)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(7 7, 200 200)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(8 8, 210 210)'));
|
||||
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
|
||||
# Connection 'a' will place predicate lock on almost all pages
|
||||
connection a;
|
||||
set session transaction isolation level serializable;
|
||||
select @@tx_isolation;
|
||||
start transaction;
|
||||
set @g1 = ST_GeomFromText('Polygon((100 100, 100 110, 110 110, 110 100, 100 100))');
|
||||
select count(*) from t1 where MBRwithin(t1.c2, @g1);
|
||||
|
||||
# The split will replicate locks across pages
|
||||
connection b;
|
||||
set session transaction isolation level serializable;
|
||||
set session innodb_lock_wait_timeout = 1;
|
||||
|
||||
select @@tx_isolation;
|
||||
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
|
||||
connection a;
|
||||
commit;
|
||||
|
||||
connection default;
|
||||
select count(*) from t1;
|
||||
|
||||
# Insert a record that would be in the search range
|
||||
insert into t1 values (105, Point(105, 105));
|
||||
|
||||
# Connection 'a' will place predicate lock on almost all pages
|
||||
connection a;
|
||||
start transaction;
|
||||
set @g1 = ST_GeomFromText('Polygon((100 100, 100 110, 110 110, 110 100, 100 100))');
|
||||
select count(*) from t1 where MBRwithin(t1.c2, @g1);
|
||||
select count(*) from t1 where MBRIntersects(t1.c2, @g1);
|
||||
|
||||
connection b;
|
||||
select @@innodb_lock_wait_timeout;
|
||||
select @@tx_isolation;
|
||||
|
||||
# this should conflict with the "MBRIntersects" predicate lock in session "a"
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(8 105, 200 105)'));
|
||||
select count(*) from t1;
|
||||
|
||||
connection a;
|
||||
select sleep(2);
|
||||
commit;
|
||||
|
||||
#==================Test predicate lock on "delete"==========================
|
||||
connection default;
|
||||
truncate t1;
|
||||
|
||||
# Test on predicate locking
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(2 2, 150 150)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(3 3, 160 160)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(5 5, 180 180)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(6 6, 190 190)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(7 7, 200 200)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(8 8, 210 210)'));
|
||||
|
||||
# Connection default will place predicate lock on follow range
|
||||
set @g1 = ST_GeomFromText('Polygon((3 3, 3 5, 5 5, 5 3, 3 3))');
|
||||
start transaction;
|
||||
delete from t1 where MBRWithin(t1.c2, @g1);
|
||||
|
||||
connection a;
|
||||
set session innodb_lock_wait_timeout = 1;
|
||||
select @@innodb_lock_wait_timeout;
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
insert into t1 values(4, Point(4,4));
|
||||
|
||||
connection default;
|
||||
rollback;
|
||||
|
||||
#==================Test predicate lock on "select for update"==================
|
||||
connection default;
|
||||
truncate t1;
|
||||
|
||||
# Test on predicate locking
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(2 2, 150 150)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(3 3, 160 160)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(5 5, 180 180)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(6 6, 190 190)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(7 7, 200 200)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(8 8, 210 210)'));
|
||||
|
||||
# Connection default will place predicate lock on follow range
|
||||
set @g1 = ST_GeomFromText('Polygon((3 3, 3 5, 5 5, 5 3, 3 3))');
|
||||
start transaction;
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1) for update;
|
||||
|
||||
connection a;
|
||||
set session innodb_lock_wait_timeout = 1;
|
||||
select @@innodb_lock_wait_timeout;
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
insert into t1 values(4, Point(4,4));
|
||||
|
||||
connection default;
|
||||
rollback;
|
||||
#==================Test predicates replicate through split =================
|
||||
connection default;
|
||||
truncate t1;
|
||||
|
||||
delimiter |;
|
||||
create procedure insert_t1(IN start int, IN total int)
|
||||
begin
|
||||
declare i int default 1;
|
||||
set i = start;
|
||||
while (i <= total) DO
|
||||
insert into t1 values (i, Point(i, i));
|
||||
set i = i + 1;
|
||||
end while;
|
||||
end|
|
||||
delimiter ;|
|
||||
|
||||
CALL insert_t1(0, 1000);
|
||||
|
||||
# Connection 'a' will place predicate lock on root and last leaf page
|
||||
connection a;
|
||||
set session transaction isolation level serializable;
|
||||
select @@tx_isolation;
|
||||
start transaction;
|
||||
set @g1 = ST_GeomFromText('Polygon((800 800, 800 1000, 1000 1000, 1000 800, 800 800))');
|
||||
select count(*) from t1 where MBRwithin(t1.c2, @g1);
|
||||
|
||||
# Connection 'b' will split the last leaf page, so the predicate
|
||||
# lock should replicate
|
||||
connection b;
|
||||
|
||||
CALL insert_t1(1001, 2000);
|
||||
|
||||
# This insert goes to the new page after split, it should be blocked
|
||||
set session transaction isolation level serializable;
|
||||
set session innodb_lock_wait_timeout = 1;
|
||||
# Insert a record that would be in the search range
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
insert into t1 values (1200, Point(950, 950));
|
||||
|
||||
connection a;
|
||||
select sleep(2);
|
||||
commit;
|
||||
|
||||
connection a;
|
||||
SET SESSION debug="-d,rtr_pcur_move_to_next_return";
|
||||
disconnect a;
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
connection b;
|
||||
disconnect b;
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
# Clean up.
|
||||
connection default;
|
||||
drop table t1;
|
||||
|
||||
drop procedure insert_t1;
|
||||
|
||||
#============ Test row locks =======================
|
||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;
|
||||
|
||||
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(2 2, 150 150)'));
|
||||
INSERT INTO t1 VALUES (2, ST_GeomFromText('LineString(3 3, 160 160)'));
|
||||
INSERT INTO t1 VALUES (2, ST_GeomFromText('LineString(4 4, 170 170)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(5 5, 180 180)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(6 6, 190 190)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(7 7, 200 200)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(8 8, 210 210)'));
|
||||
|
||||
connect (a,localhost,root,,);
|
||||
connection a;
|
||||
SET SESSION debug="+d,rtr_pcur_move_to_next_return";
|
||||
|
||||
set transaction isolation level serializable;
|
||||
start transaction;
|
||||
set @g1 = ST_GeomFromText('Polygon((100 100, 100 110, 110 110, 110 100, 100 100))');
|
||||
select count(*) from t1 where MBRwithin(t1.c2, @g1);
|
||||
|
||||
connect (b,localhost,root,,);
|
||||
connection b;
|
||||
|
||||
# This should be successful
|
||||
delete from t1 where c1 = 1;
|
||||
|
||||
connection a;
|
||||
commit;
|
||||
set transaction isolation level serializable;
|
||||
start transaction;
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0, 0 300, 300 300, 300 0, 0 0))');
|
||||
select count(*) from t1 where MBRwithin(t1.c2, @g1);
|
||||
|
||||
connection b;
|
||||
|
||||
set session innodb_lock_wait_timeout = 1;
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
delete from t1 where c1 = 2;
|
||||
|
||||
# Clean up.
|
||||
connection a;
|
||||
commit;
|
||||
|
||||
connection default;
|
||||
drop table t1;
|
||||
SET DEBUG_SYNC= 'RESET';
|
||||
|
||||
# Test btr_discard_page adjust concurrent search path
|
||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;
|
||||
|
||||
start transaction;
|
||||
insert into t1 values(1, Point(1,1));
|
||||
insert into t1 values(2, Point(2,2));
|
||||
insert into t1 values(3, Point(3,3));
|
||||
insert into t1 values(4, Point(4,4));
|
||||
insert into t1 values(5, Point(5,5));
|
||||
insert into t1 values(6, Point(6,6));
|
||||
insert into t1 values(7, Point(7,7));
|
||||
insert into t1 values(8, Point(8,8));
|
||||
insert into t1 values(9, Point(9,9));
|
||||
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
|
||||
insert into t1 select * from t1;
|
||||
|
||||
select count(*) from t1;
|
||||
|
||||
connection b;
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 100,100 100,100 0,0 0))');
|
||||
set transaction isolation level read uncommitted;
|
||||
SET DEBUG_SYNC= 'row_search_for_mysql_before_return SIGNAL siga WAIT_FOR sigb';
|
||||
send select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
|
||||
connection default;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR siga';
|
||||
rollback;
|
||||
SET DEBUG_SYNC= 'now SIGNAL sigb';
|
||||
|
||||
connection b;
|
||||
--reap
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
|
||||
connection default;
|
||||
DROP TABLE t1;
|
||||
SET DEBUG_SYNC = 'RESET';
|
||||
|
||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;
|
||||
|
||||
delimiter |;
|
||||
create procedure insert_t1(IN total int)
|
||||
begin
|
||||
declare i int default 1;
|
||||
while (i <= total) DO
|
||||
insert into t1 values (i, Point(i, i));
|
||||
set i = i + 1;
|
||||
end while;
|
||||
end|
|
||||
delimiter ;|
|
||||
|
||||
start transaction;
|
||||
|
||||
CALL insert_t1(100);
|
||||
|
||||
connection a;
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 1000,1000 1000,1000 0,0 0))');
|
||||
SET DEBUG_SYNC= 'rtr_pcur_move_to_next_return SIGNAL siga WAIT_FOR sigb';
|
||||
--send select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
|
||||
connection default;
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR siga';
|
||||
rollback;
|
||||
|
||||
SET DEBUG_SYNC= 'now SIGNAL sigb';
|
||||
|
||||
connection a;
|
||||
--reap;
|
||||
|
||||
connection default;
|
||||
drop procedure insert_t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
connection a;
|
||||
SET SESSION debug="-d,rtr_pcur_move_to_next_return";
|
||||
disconnect a;
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
connection b;
|
||||
disconnect b;
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
connection default;
|
||||
SET DEBUG_SYNC = 'RESET';
|
49
mysql-test/suite/innodb_gis/t/rtree_create_inplace.test
Normal file
49
mysql-test/suite/innodb_gis/t/rtree_create_inplace.test
Normal file
@ -0,0 +1,49 @@
|
||||
# This is to test create GIS index with algorithm=inplace.
|
||||
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_debug.inc
|
||||
--source include/no_valgrind_without_big.inc
|
||||
|
||||
# Create table with geometry column
|
||||
CREATE TABLE t1 (c1 INT, c2 GEOMETRY NOT NULL, c3 GEOMETRY NOT NULL) ENGINE=INNODB;
|
||||
|
||||
# Insert enough values
|
||||
INSERT INTO t1 VALUES(1, Point(1,1), ST_GeomFromText('POLYGON (( 0 -1, 0 1, 2 1, 2 -1, 0 -1))'));
|
||||
INSERT INTO t1 VALUES(2, Point(2,2), ST_GeomFromText('POLYGON (( 0 -3, 0 -1, 2 -1, 2 -3, 0 -3))'));
|
||||
INSERT INTO t1 VALUES(3, Point(3,3), ST_GeomFromText('POLYGON (( 1 0, 1 2, 3 2, 3 0, 1 0))'));
|
||||
INSERT INTO t1 VALUES(4, Point(4,4), ST_GeomFromText('POLYGON (( -3 0, -3 2, -1 2, -1 0, -3 0))'));
|
||||
INSERT INTO t1 VALUES(5, Point(5,5), ST_GeomFromText('POLYGON (( 0 0, 0 1, 1 1, 1 0, 0 0))'));
|
||||
INSERT INTO t1 VALUES(6, Point(6,6), ST_GeomFromText('POLYGON (( 2 0, 2 2, 4 2, 4 0, 2 0))'));
|
||||
INSERT INTO t1 VALUES(7, Point(7,7), ST_GeomFromText('POLYGON (( 0 3, 0 5, 2 5, 2 3, 0 3))'));
|
||||
INSERT INTO t1 VALUES(8, Point(8,8), ST_GeomFromText('POLYGON (( 0 1, 0 3, 2 3, 2 1, 0 1))'));
|
||||
INSERT INTO t1 VALUES(9, Point(9,9), ST_GeomFromText('POLYGON (( 0 0, 0 3, 3 3, 3 0, 0 0))'));
|
||||
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
|
||||
# create spatial index
|
||||
CREATE SPATIAL INDEX idx ON t1(c2);
|
||||
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
SET @g1 = ST_GeomFromText('Polygon((0 0,0 100,100 100,100 0,0 0))');
|
||||
SELECT COUNT(*) FROM t1 WHERE MBRWithin(t1.c2, @g1);
|
||||
|
||||
SET @g1 = ST_GeomFromText('Polygon((10 10,10 800,800 800,800 10,10 10))');
|
||||
SELECT COUNT(*) FROM t1 WHERE MBRWithin(t1.c2, @g1);
|
||||
|
||||
ALTER TABLE t1 DROP INDEX idx, ADD SPATIAL INDEX idx3(c2);
|
||||
|
||||
SET SESSION debug="+d,row_merge_instrument_log_check_flush";
|
||||
ALTER TABLE t1 DROP INDEX idx3, ADD SPATIAL INDEX idx4(c2), ADD SPATIAL INDEX idx5(c3);
|
||||
|
||||
# Clean up.
|
||||
DROP TABLE t1;
|
73
mysql-test/suite/innodb_gis/t/rtree_debug.test
Normal file
73
mysql-test/suite/innodb_gis/t/rtree_debug.test
Normal file
@ -0,0 +1,73 @@
|
||||
# WL#6745 InnoDB R-tree support
|
||||
# This test case will test R-tree multi level split.
|
||||
|
||||
--source include/have_innodb.inc
|
||||
--source include/big_test.inc
|
||||
--source include/not_valgrind.inc
|
||||
--source include/have_debug.inc
|
||||
|
||||
# Create table with R-tree index.
|
||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;
|
||||
|
||||
# Insert enough values to let R-tree split.
|
||||
delimiter |;
|
||||
create procedure insert_t1(IN total int)
|
||||
begin
|
||||
declare i int default 1;
|
||||
while (i <= total) DO
|
||||
insert into t1 values
|
||||
(i, Point(i, i)),
|
||||
(i + 1, Point(i + 1, i + 1)),
|
||||
(i + 2, Point(i + 2, i + 2)),
|
||||
(i + 3, Point(i + 3, i + 3)),
|
||||
(i + 4, Point(i + 4, i + 4)),
|
||||
(i + 5, Point(i + 5, i + 5)),
|
||||
(i + 6, Point(i + 6, i + 6)),
|
||||
(i + 7, Point(i + 7, i + 7)),
|
||||
(i + 8, Point(i + 8, i + 8)),
|
||||
(i + 9, Point(i + 9, i + 9));
|
||||
set i = i + 10;
|
||||
end while;
|
||||
end|
|
||||
delimiter ;|
|
||||
|
||||
# Test level 1 rtree.
|
||||
CALL insert_t1(5000);
|
||||
select count(*) from t1;
|
||||
|
||||
# Check table.
|
||||
check table t1;
|
||||
|
||||
# Test level 2 rtree.
|
||||
truncate table t1;
|
||||
CALL insert_t1(10000);
|
||||
select count(*) from t1;
|
||||
|
||||
drop index c2 on t1;
|
||||
|
||||
create spatial index idx on t1(c2);
|
||||
|
||||
show create table t1;
|
||||
|
||||
SET DEBUG='+d,row_merge_ins_spatial_fail';
|
||||
--error ER_GET_ERRNO
|
||||
create spatial index idx2 on t1(c2);
|
||||
SET DEBUG='-d,row_merge_ins_spatial_fail';
|
||||
show create table t1;
|
||||
|
||||
# Check table.
|
||||
check table t1;
|
||||
|
||||
# Test level 3 rtree.
|
||||
truncate table t1;
|
||||
CALL insert_t1(100000);
|
||||
select count(*) from t1;
|
||||
|
||||
# Check table.
|
||||
check table t1;
|
||||
|
||||
truncate table t1;
|
||||
|
||||
# Clean up.
|
||||
drop procedure insert_t1;
|
||||
drop table t1;
|
25
mysql-test/suite/innodb_gis/t/rtree_drop_index.test
Normal file
25
mysql-test/suite/innodb_gis/t/rtree_drop_index.test
Normal file
File diff suppressed because one or more lines are too long
79
mysql-test/suite/innodb_gis/t/rtree_estimate.test
Normal file
79
mysql-test/suite/innodb_gis/t/rtree_estimate.test
Normal file
@ -0,0 +1,79 @@
|
||||
#
|
||||
# BUG#21245805 HA_INNOBASE::RECORDS_IN_RANGE() RETURNS CONSTANT FOR SPATIAL INDEXES
|
||||
#
|
||||
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_debug.inc
|
||||
|
||||
CREATE TABLE t1 (
|
||||
g GEOMETRY NOT NULL
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
ALTER TABLE t1 ADD SPATIAL(g);
|
||||
|
||||
SET @g1 = ST_GeomFromText('POINT(10 10)');
|
||||
SET @g2 = ST_GeomFromText('POLYGON((5 5, 20 5, 20 21, 5 21, 5 5))');
|
||||
SET @g3 = ST_GeomFromText('POLYGON((1.79769e+308 1.79769e+308, 20 5, -1.79769e+308 -1.79769e+308, 1.79769e+308 1.79769e+308))');
|
||||
|
||||
# Test empty table
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBRContains(g, @g1);
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g1);
|
||||
|
||||
# Insert gis data
|
||||
INSERT INTO t1 VALUES(@g1);
|
||||
INSERT INTO t1 VALUES(@g2);
|
||||
INSERT INTO t1 VALUES(@g3);
|
||||
|
||||
SELECT ST_AsText(g) FROM t1;
|
||||
|
||||
ANALYZE TABLE t1;
|
||||
|
||||
# Test g1
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBRContains(g, @g1);
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g1);
|
||||
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBRDisjoint(g, @g1);
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g1);
|
||||
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBREquals(g, @g1);
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g1);
|
||||
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBRIntersects(g, @g1);
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g1);
|
||||
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g1);
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g1);
|
||||
|
||||
# Test g2
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBRContains(g, @g2);
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g2);
|
||||
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBRDisjoint(g, @g2);
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g2);
|
||||
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBREquals(g, @g2);
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g2);
|
||||
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBRIntersects(g, @g2);
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g2);
|
||||
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g2);
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g2);
|
||||
|
||||
# Test g3
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBRContains(g, @g3);
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g3);
|
||||
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBRDisjoint(g, @g3);
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g3);
|
||||
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBREquals(g, @g3);
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g3);
|
||||
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBRIntersects(g, @g3);
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g3);
|
||||
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g3);
|
||||
SELECT ST_AsText(g) FROM t1 WHERE MBRWithin(g, @g3);
|
||||
|
||||
DROP TABLE t1;
|
125
mysql-test/suite/innodb_gis/t/rtree_multi_pk.test
Normal file
125
mysql-test/suite/innodb_gis/t/rtree_multi_pk.test
Normal file
@ -0,0 +1,125 @@
|
||||
# WL#6745 InnoDB R-tree support
|
||||
# This test case will test basic R-tree support features.
|
||||
|
||||
--source include/have_innodb.inc
|
||||
|
||||
# Create table with R-tree index.
|
||||
create table t1 (i int, i2 char(10), g geometry not null, primary key (i, i2), spatial index (g))engine=innodb;
|
||||
|
||||
# Insert values.
|
||||
insert into t1 values (1, "111", POINT(1,1));
|
||||
insert into t1 values (2, "222", POINT(1.5,1.5));
|
||||
insert into t1 values (3, "333", POINT(3,3));
|
||||
insert into t1 values (4, "444", POINT(3.1,3.1));
|
||||
insert into t1 values (5, "555", POINT(5,5));
|
||||
|
||||
analyze table t1;
|
||||
|
||||
# Select by R-tree index.
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))');
|
||||
explain select ST_astext(t1.g) from t1 where MBRWithin(t1.g, @g1);
|
||||
select ST_astext(t1.g) from t1 where MBRWithin(t1.g, @g1);
|
||||
|
||||
# Delete values.
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))');
|
||||
delete from t1 where MBRWithin(t1.g, @g1);
|
||||
check table t1;
|
||||
|
||||
select ST_astext(t1.g) from t1;
|
||||
|
||||
# Update values.
|
||||
set @g1 = ST_GeomFromText('Polygon((5 5,5 5,5 5,5 5,5 5))');
|
||||
update t1 set g = POINT(2,2) where MBRWithin(t1.g, @g1);
|
||||
check table t1;
|
||||
|
||||
select ST_astext(t1.g) from t1;
|
||||
|
||||
# Show index.
|
||||
--replace_column 7 #
|
||||
show indexes from t1;
|
||||
|
||||
# Cleanup.
|
||||
drop table t1;
|
||||
|
||||
# Test functions.
|
||||
create table t1 (name VARCHAR(100), square GEOMETRY not null, spatial index (square))engine=innodb;
|
||||
|
||||
|
||||
INSERT INTO t1 VALUES("small", ST_GeomFromText('POLYGON (( 0 0, 0 1, 1 1, 1 0, 0 0))'));
|
||||
INSERT INTO t1 VALUES("big", ST_GeomFromText('POLYGON (( 0 0, 0 3, 3 3, 3 0, 0 0))'));
|
||||
|
||||
INSERT INTO t1 VALUES("up", ST_GeomFromText('POLYGON (( 0 1, 0 3, 2 3, 2 1, 0 1))'));
|
||||
INSERT INTO t1 VALUES("up2", ST_GeomFromText('POLYGON (( 0 2, 0 4, 2 4, 2 2, 0 2))'));
|
||||
INSERT INTO t1 VALUES("up3", ST_GeomFromText('POLYGON (( 0 3, 0 5, 2 5, 2 3, 0 3))'));
|
||||
|
||||
INSERT INTO t1 VALUES("down", ST_GeomFromText('POLYGON (( 0 -1, 0 1, 2 1, 2 -1, 0 -1))'));
|
||||
INSERT INTO t1 VALUES("down2", ST_GeomFromText('POLYGON (( 0 -2, 0 0, 2 0, 2 -2, 0 -2))'));
|
||||
INSERT INTO t1 VALUES("down3", ST_GeomFromText('POLYGON (( 0 -3, 0 -1, 2 -1, 2 -3, 0 -3))'));
|
||||
|
||||
INSERT INTO t1 VALUES("right", ST_GeomFromText('POLYGON (( 1 0, 1 2, 3 2, 3 0, 1 0))'));
|
||||
INSERT INTO t1 VALUES("right2", ST_GeomFromText('POLYGON (( 2 0, 2 2, 4 2, 4 0, 2 0))'));
|
||||
INSERT INTO t1 VALUES("right3", ST_GeomFromText('POLYGON (( 3 0, 3 2, 5 2, 5 0, 3 0))'));
|
||||
|
||||
INSERT INTO t1 VALUES("left", ST_GeomFromText('POLYGON (( -1 0, -1 2, 1 2, 1 0, -1 0))'));
|
||||
INSERT INTO t1 VALUES("left2", ST_GeomFromText('POLYGON (( -2 0, -2 2, 0 2, 0 0, -2 0))'));
|
||||
INSERT INTO t1 VALUES("left3", ST_GeomFromText('POLYGON (( -3 0, -3 2, -1 2, -1 0, -3 0))'));
|
||||
|
||||
SET @p = ST_GeomFromText('POLYGON (( 0 0, 0 2, 2 2, 2 0, 0 0))');
|
||||
SELECT name, ST_AsText(square) from t1 where MBRContains(@p, square);
|
||||
SELECT name, ST_AsText(square) from t1 where MBRDisjoint(@p, square);
|
||||
SELECT name, ST_AsText(square) from t1 where MBREquals(@p, square);
|
||||
SELECT name, ST_AsText(square) from t1 where MBRIntersects(@p, square);
|
||||
SELECT name, ST_AsText(square) from t1 where MBROverlaps(@p, square);
|
||||
SELECT name, ST_AsText(square) from t1 where MBRTouches(@p, square);
|
||||
SELECT name, ST_AsText(square) from t1 where MBRWithin(@p, square);
|
||||
|
||||
# MBROverlaps needs a few more tests, with point and line dimensions
|
||||
|
||||
--error ER_GIS_INVALID_DATA
|
||||
SET @vert1 = ST_GeomFromText('POLYGON ((0 -2, 0 2, 0 -2))');
|
||||
--error ER_GIS_INVALID_DATA
|
||||
SET @horiz1 = ST_GeomFromText('POLYGON ((-2 0, 2 0, -2 0))');
|
||||
--error ER_GIS_INVALID_DATA
|
||||
SET @horiz2 = ST_GeomFromText('POLYGON ((-1 0, 3 0, -1 0))');
|
||||
--error ER_GIS_INVALID_DATA
|
||||
SET @horiz3 = ST_GeomFromText('POLYGON ((2 0, 3 0, 2 0))');
|
||||
--error ER_GIS_INVALID_DATA
|
||||
SET @point1 = ST_GeomFromText('POLYGON ((0 0))');
|
||||
--error ER_GIS_INVALID_DATA
|
||||
SET @point2 = ST_GeomFromText('POLYGON ((-2 0))');
|
||||
|
||||
SELECT GROUP_CONCAT(a1.name ORDER BY a1.name) AS MBRoverlaps FROM t1 a1 WHERE MBROverlaps(a1.square, @vert1) GROUP BY a1.name;
|
||||
SELECT GROUP_CONCAT(a1.name ORDER BY a1.name) AS MBRoverlaps FROM t1 a1 WHERE MBROverlaps(a1.square, @horiz1) GROUP BY a1.name;
|
||||
SELECT MBROverlaps(@horiz1, @vert1) FROM DUAL;
|
||||
SELECT MBROverlaps(@horiz1, @horiz2) FROM DUAL;
|
||||
SELECT MBROverlaps(@horiz1, @horiz3) FROM DUAL;
|
||||
SELECT MBROverlaps(@horiz1, @point1) FROM DUAL;
|
||||
SELECT MBROverlaps(@horiz1, @point2) FROM DUAL;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
# Inplace create spatial index is not supported
|
||||
create table t1 (i int not null, g geometry not null)engine=innodb;
|
||||
|
||||
# Insert values.
|
||||
insert into t1 values (1, POINT(1,1));
|
||||
insert into t1 values (2, POINT(1.5,1.5));
|
||||
insert into t1 values (3, POINT(3,3));
|
||||
insert into t1 values (4, POINT(3.1,3.1));
|
||||
insert into t1 values (5, POINT(5,5));
|
||||
|
||||
alter table t1 add primary key(i), algorithm=inplace;
|
||||
alter table t1 drop primary key;
|
||||
|
||||
create spatial index idx on t1(g) algorithm=inplace;
|
||||
|
||||
create spatial index idx2 on t1(g);
|
||||
|
||||
alter table t1 add primary key(i), algorithm=inplace;
|
||||
|
||||
show create table t1;
|
||||
|
||||
drop index idx on t1;
|
||||
|
||||
drop table t1;
|
||||
|
1014
mysql-test/suite/innodb_gis/t/rtree_old.test
Normal file
1014
mysql-test/suite/innodb_gis/t/rtree_old.test
Normal file
File diff suppressed because it is too large
Load Diff
52
mysql-test/suite/innodb_gis/t/rtree_purge.test
Normal file
52
mysql-test/suite/innodb_gis/t/rtree_purge.test
Normal file
@ -0,0 +1,52 @@
|
||||
# This test case will test R-tree purge.
|
||||
|
||||
# Not supported in embedded
|
||||
--source include/not_embedded.inc
|
||||
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_innodb_zip.inc
|
||||
--source include/have_debug.inc
|
||||
--source include/big_test.inc
|
||||
# Valgrind takes too much time on PB2 even in the --big-test runs.
|
||||
--source include/not_valgrind.inc
|
||||
|
||||
# Temporarily disable it for 4k page size. Since it'll take too long
|
||||
# time.
|
||||
--disable_warnings
|
||||
if (`SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE LOWER(variable_name) = 'innodb_page_size' AND variable_value = 4096`)
|
||||
{
|
||||
--skip Test requires InnoDB with not 4k Page size.
|
||||
}
|
||||
--enable_warnings
|
||||
|
||||
create table t (
|
||||
a point not null,b point not null,c point,
|
||||
d point not null,e point,f point,
|
||||
spatial key (d),spatial key (b)
|
||||
) engine=innodb;
|
||||
|
||||
delimiter |;
|
||||
create procedure p(i int)
|
||||
begin
|
||||
declare n int default 0;
|
||||
declare continue handler for sqlexception begin end;
|
||||
delete from t;
|
||||
repeat
|
||||
set @p=point(1,1);
|
||||
insert into t values(@p,@p,@p,@p,@p,@p);
|
||||
insert into t values(@p,@p,@p,@p,@p,@p);
|
||||
insert into t select @p,@p,@p,@p,@p,@p
|
||||
from t a,t b,t c,t d,t e,t f,t g,t h,t i,t j;
|
||||
delete from t;
|
||||
set n:=n+1;
|
||||
until n >= i end repeat;
|
||||
end|
|
||||
delimiter ;|
|
||||
|
||||
call p(200);
|
||||
|
||||
--source include/wait_innodb_all_purged.inc
|
||||
|
||||
# Clean up.
|
||||
drop procedure p;
|
||||
drop table t;
|
77
mysql-test/suite/innodb_gis/t/rtree_recovery.test
Normal file
77
mysql-test/suite/innodb_gis/t/rtree_recovery.test
Normal file
@ -0,0 +1,77 @@
|
||||
# WL#6745 InnoDB R-tree support
|
||||
# This test case test R-tree crash/recovery.
|
||||
|
||||
# Restart is not supported in embedded
|
||||
--source include/not_embedded.inc
|
||||
--source include/have_innodb.inc
|
||||
--source include/no_valgrind_without_big.inc
|
||||
|
||||
# Do a clean shutdown and restart so that the redo log is cleaned up from previous tests.
|
||||
--source include/restart_mysqld.inc
|
||||
|
||||
# Create table with R-tree index.
|
||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;
|
||||
|
||||
# Insert enough values to let R-tree split.
|
||||
delimiter |;
|
||||
create procedure insert_t1(IN total int)
|
||||
begin
|
||||
declare i int default 1;
|
||||
while (i <= total) DO
|
||||
insert into t1 values (i, Point(i, i));
|
||||
set i = i + 1;
|
||||
end while;
|
||||
end|
|
||||
delimiter ;|
|
||||
|
||||
# Update values
|
||||
delimiter |;
|
||||
create procedure update_t1(IN total int)
|
||||
begin
|
||||
declare i int default 1;
|
||||
while (i <= total) DO
|
||||
update t1 set c2 = Point(i + 10000, i + 10000) where c2 = Point(i, i);
|
||||
set i = i + 1;
|
||||
end while;
|
||||
end|
|
||||
delimiter ;|
|
||||
|
||||
|
||||
# Test crash recovery.
|
||||
#
|
||||
|
||||
# Test level 1 rtree.
|
||||
CALL insert_t1(367);
|
||||
COMMIT;
|
||||
|
||||
--source include/kill_and_restart_mysqld.inc
|
||||
|
||||
# Check table.
|
||||
check table t1;
|
||||
|
||||
# Clean up.
|
||||
drop table t1;
|
||||
|
||||
# Test crash recovery on point spatial index.
|
||||
create table t1 (c1 int, c2 point not null, spatial index (c2))engine=innodb;
|
||||
|
||||
# Some DML on point spatial index.
|
||||
CALL insert_t1(367);
|
||||
CALL update_t1(367);
|
||||
|
||||
SET @poly1 = ST_GeomFromText('POLYGON((10000 10000, 10000 10350, 10350 10350, 10350 10000, 10000 10000))');
|
||||
delete from t1 where ST_Contains(@poly1, c2);
|
||||
COMMIT;
|
||||
|
||||
--source include/kill_and_restart_mysqld.inc
|
||||
|
||||
# Check table.
|
||||
check table t1;
|
||||
|
||||
select count(*) from t1;
|
||||
select c1, ST_astext(c2) from t1;
|
||||
|
||||
# Clean up.
|
||||
drop procedure insert_t1;
|
||||
drop procedure update_t1;
|
||||
drop table t1;
|
54
mysql-test/suite/innodb_gis/t/rtree_rollback1.test
Normal file
54
mysql-test/suite/innodb_gis/t/rtree_rollback1.test
Normal file
@ -0,0 +1,54 @@
|
||||
# WL#6745 InnoDB R-tree support
|
||||
# This test case will test R-tree split.
|
||||
|
||||
# Not supported in embedded
|
||||
--source include/not_embedded.inc
|
||||
|
||||
--source include/have_innodb.inc
|
||||
--source include/big_test.inc
|
||||
--source include/not_valgrind.inc
|
||||
--source include/have_innodb_16k.inc
|
||||
|
||||
# Create table with R-tree index.
|
||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;
|
||||
|
||||
# Insert enough values to let R-tree split.
|
||||
insert into t1 values(1, Point(1,1));
|
||||
insert into t1 values(2, Point(2,2));
|
||||
insert into t1 values(3, Point(3,3));
|
||||
insert into t1 values(4, Point(4,4));
|
||||
insert into t1 values(5, Point(5,5));
|
||||
insert into t1 values(6, Point(6,6));
|
||||
insert into t1 values(7, Point(7,7));
|
||||
insert into t1 values(8, Point(8,8));
|
||||
insert into t1 values(9, Point(9,9));
|
||||
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
start transaction;
|
||||
insert into t1 select * from t1;
|
||||
select count(*) from t1;
|
||||
rollback;
|
||||
check table t1;
|
||||
|
||||
select count(*) from t1;
|
||||
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 100,100 100,100 0,0 0))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
|
||||
set @g1 = ST_GeomFromText('Polygon((10 10,10 800,800 800,800 10,10 10))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
|
||||
# Clean up.
|
||||
drop table t1;
|
||||
|
34
mysql-test/suite/innodb_gis/t/rtree_rollback2.test
Normal file
34
mysql-test/suite/innodb_gis/t/rtree_rollback2.test
Normal file
@ -0,0 +1,34 @@
|
||||
# WL#6745 InnoDB R-tree support
|
||||
# This test case will test R-tree split.
|
||||
|
||||
# Not supported in embedded
|
||||
--source include/not_embedded.inc
|
||||
|
||||
--source include/have_innodb.inc
|
||||
--source include/big_test.inc
|
||||
--source include/not_valgrind.inc
|
||||
|
||||
# Create table with R-tree index.
|
||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;
|
||||
|
||||
# Insert enough values to let R-tree split.
|
||||
delimiter |;
|
||||
create procedure insert_t1(IN total int)
|
||||
begin
|
||||
declare i int default 1;
|
||||
while (i <= total) DO
|
||||
insert into t1 values (i, Point(i, i));
|
||||
set i = i + 1;
|
||||
end while;
|
||||
end|
|
||||
delimiter ;|
|
||||
|
||||
start transaction;
|
||||
CALL insert_t1(70000);
|
||||
rollback;
|
||||
check table t1;
|
||||
|
||||
# Clean up.
|
||||
drop procedure insert_t1;
|
||||
drop table t1;
|
||||
|
140
mysql-test/suite/innodb_gis/t/rtree_search.test
Normal file
140
mysql-test/suite/innodb_gis/t/rtree_search.test
Normal file
@ -0,0 +1,140 @@
|
||||
# WL#6968 InnoDB R-tree cursor support
|
||||
|
||||
# Not supported in embedded
|
||||
--source include/not_embedded.inc
|
||||
--source include/not_valgrind.inc
|
||||
|
||||
--source include/have_innodb.inc
|
||||
|
||||
# Create table with R-tree index.
|
||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;
|
||||
|
||||
# Insert enough values to let R-tree split.
|
||||
delimiter |;
|
||||
create procedure insert_t1(IN total int)
|
||||
begin
|
||||
declare i int default 1;
|
||||
while (i <= total) DO
|
||||
insert into t1 values (i, Point(i, i));
|
||||
set i = i + 1;
|
||||
end while;
|
||||
end|
|
||||
delimiter ;|
|
||||
|
||||
# Test level 1 rtree.
|
||||
CALL insert_t1(1000);
|
||||
select count(*) from t1;
|
||||
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 1000,1000 1000,1000 0,0 0))');
|
||||
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 100,100 100,100 0,0 0))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
|
||||
set @g1 = ST_GeomFromText('Polygon((10 10,10 800,800 800,800 10,10 10))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
|
||||
set @g1 = ST_GeomFromText('Polygon((100 100,100 800,800 800,800 100,100 100))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
|
||||
#SET DEBUG='+d, rtr_pessimistic_position';
|
||||
#select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
#SET DEBUG='-d, rtr_pessimistic_position';
|
||||
|
||||
# Equality search
|
||||
set @g1 = ST_GeomFromText('Point(1 1)');
|
||||
select count(*) from t1 where MBRequals(t1.c2, @g1);
|
||||
|
||||
# MBRDisjoint search
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 100,100 100,100 0,0 0))');
|
||||
select count(*) from t1 where MBRdisjoint(t1.c2, @g1);
|
||||
|
||||
# Clean up.
|
||||
DROP PROCEDURE insert_t1;
|
||||
|
||||
truncate t1;
|
||||
|
||||
let $1=150;
|
||||
let $2=150;
|
||||
while ($1)
|
||||
{
|
||||
eval INSERT INTO t1 VALUES ($1, ST_GeomFromText('LineString($1 $1, $2 $2)'));
|
||||
dec $1;
|
||||
inc $2;
|
||||
}
|
||||
|
||||
select count(*) from t1;
|
||||
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 1000,1000 1000,1000 0,0 0))');
|
||||
select count(*) from t1 where MBRwithin(t1.c2, @g1);
|
||||
truncate t1;
|
||||
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(2 2, 150 150)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(3 3, 160 160)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(4 4, 170 170)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(5 5, 180 180)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(6 6, 190 190)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(7 7, 200 200)'));
|
||||
INSERT INTO t1 VALUES (1, ST_GeomFromText('LineString(8 8, 210 210)'));
|
||||
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
|
||||
# Testing "MBRtouches"
|
||||
# This is apparently now treated as "intersects"
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 2, 2 2, 2 0, 0 0))');
|
||||
select count(*) from t1 where MBRtouches(t1.c2, @g1);
|
||||
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 200,200 200,200 0,0 0))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
|
||||
# Test MBRequals
|
||||
set @g1 = ST_GeomFromText('LineString(2 2, 150 150)');
|
||||
select count(*) from t1 where MBRequals(t1.c2, @g1);
|
||||
|
||||
# Test store procedure with open cursor
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 200,200 200,200 0,0 0))');
|
||||
create table t3 (a int) engine = innodb;
|
||||
|
||||
delimiter |;
|
||||
|
||||
CREATE PROCEDURE curdemo()
|
||||
BEGIN
|
||||
DECLARE done INT DEFAULT FALSE;
|
||||
DECLARE a INT;
|
||||
|
||||
DECLARE cur1 CURSOR FOR SELECT c1 from t1 where MBRWithin(t1.c2, @g1);
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
|
||||
|
||||
OPEN cur1;
|
||||
read_loop: LOOP
|
||||
FETCH cur1 INTO a;
|
||||
IF done THEN
|
||||
LEAVE read_loop;
|
||||
END IF;
|
||||
INSERT INTO test.t3 VALUES (a);
|
||||
END LOOP;
|
||||
|
||||
CLOSE cur1;
|
||||
END|
|
||||
|
||||
delimiter ;|
|
||||
|
||||
call curdemo();
|
||||
|
||||
select count(*) from t3;
|
||||
|
||||
drop procedure curdemo;
|
||||
drop table t3;
|
||||
drop table t1;
|
||||
|
102
mysql-test/suite/innodb_gis/t/rtree_split.test
Normal file
102
mysql-test/suite/innodb_gis/t/rtree_split.test
Normal file
@ -0,0 +1,102 @@
|
||||
# WL#6745 InnoDB R-tree support
|
||||
# This test case will test R-tree split, mostly on duplciate records.
|
||||
|
||||
# Not supported in embedded
|
||||
--source include/not_embedded.inc
|
||||
|
||||
--source include/have_innodb.inc
|
||||
--source include/big_test.inc
|
||||
--source include/not_valgrind.inc
|
||||
--source include/have_debug.inc
|
||||
|
||||
# Create table with R-tree index.
|
||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;
|
||||
|
||||
# Insert enough values to let R-tree split.
|
||||
insert into t1 values(1, Point(1,1));
|
||||
insert into t1 values(2, Point(2,2));
|
||||
insert into t1 values(3, Point(3,3));
|
||||
insert into t1 values(4, Point(4,4));
|
||||
insert into t1 values(5, Point(5,5));
|
||||
insert into t1 values(6, Point(6,6));
|
||||
insert into t1 values(7, Point(7,7));
|
||||
insert into t1 values(8, Point(8,8));
|
||||
insert into t1 values(9, Point(9,9));
|
||||
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
|
||||
#Check second round spliting.
|
||||
SET SESSION debug="+d, rtr_page_need_second_split";
|
||||
insert into t1 select * from t1;
|
||||
SET SESSION debug="-d, rtr_page_need_second_split";
|
||||
|
||||
delete from t1;
|
||||
|
||||
insert into t1 values(1, Point(1,1));
|
||||
insert into t1 values(2, Point(2,2));
|
||||
insert into t1 values(3, Point(3,3));
|
||||
insert into t1 values(4, Point(4,4));
|
||||
insert into t1 values(5, Point(5,5));
|
||||
insert into t1 values(6, Point(6,6));
|
||||
insert into t1 values(7, Point(7,7));
|
||||
insert into t1 values(8, Point(8,8));
|
||||
insert into t1 values(9, Point(9,9));
|
||||
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
start transaction;
|
||||
insert into t1 select * from t1;
|
||||
rollback;
|
||||
check table t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
check table t1;
|
||||
|
||||
select count(*) from t1;
|
||||
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 100,100 100,100 0,0 0))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
|
||||
set @g1 = ST_GeomFromText('Polygon((10 10,10 800,800 800,800 10,10 10))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
|
||||
drop index c2 on t1;
|
||||
|
||||
# Test create index with algorithm=inplace
|
||||
create spatial index idx2 on t1(c2);
|
||||
|
||||
show create table t1;
|
||||
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 100,100 100,100 0,0 0))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
|
||||
# test read only case
|
||||
let $restart_parameters = restart: --innodb-read-only;
|
||||
--source include/restart_mysqld.inc
|
||||
set @g1 = ST_GeomFromText('Polygon((0 0,0 100,100 100,100 0,0 0))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
|
||||
set @g1 = ST_GeomFromText('Polygon((2 2,2 800,800 800,800 2,2 2))');
|
||||
select count(*) from t1 where MBRWithin(t1.c2, @g1);
|
||||
|
||||
let $restart_parameters = restart;
|
||||
--source include/restart_mysqld.inc
|
||||
|
||||
# Clean up.
|
||||
drop table t1;
|
38
mysql-test/suite/innodb_gis/t/rtree_undo.test
Normal file
38
mysql-test/suite/innodb_gis/t/rtree_undo.test
Normal file
@ -0,0 +1,38 @@
|
||||
#
|
||||
# BUG#21340268 INNODB: BOGUS CHECK FOR MAXIMUM RECORD LENGTH WITH SPATIAL KEY
|
||||
# BUG#21508582 UNDO LOG DOES NOT CONTAIN ENOUGH INFORMATION ON SPATIAL COLUMNS
|
||||
#
|
||||
|
||||
--source include/have_innodb.inc
|
||||
--source include/count_sessions.inc
|
||||
|
||||
connect (con1,localhost,root,,);
|
||||
connection default;
|
||||
|
||||
let $row_format = DYNAMIC;
|
||||
let $prefix_size = 767;
|
||||
|
||||
let $index = spatial_none;
|
||||
--source include/innodb_gis_undo.inc
|
||||
|
||||
let $index = spatial_only;
|
||||
--source include/innodb_gis_undo.inc
|
||||
|
||||
let $index = spatial_mixed;
|
||||
--source include/innodb_gis_undo.inc
|
||||
|
||||
|
||||
let $row_format = COMPACT;
|
||||
let $prefix_size = 767;
|
||||
|
||||
let $index = spatial_none;
|
||||
--source include/innodb_gis_undo.inc
|
||||
|
||||
let $index = spatial_only;
|
||||
--source include/innodb_gis_undo.inc
|
||||
|
||||
let $index = spatial_mixed;
|
||||
--source include/innodb_gis_undo.inc
|
||||
|
||||
disconnect con1;
|
||||
--source include/wait_until_count_sessions.inc
|
89
mysql-test/suite/innodb_gis/t/types.test
Normal file
89
mysql-test/suite/innodb_gis/t/types.test
Normal file
@ -0,0 +1,89 @@
|
||||
# WL#6455 GEOMETRY datatypes support
|
||||
# In order to implement GIS indexing in InnoDB,
|
||||
# InnoDB needs to support GEOMETRY datatypes,
|
||||
# so that InnoDB stores them properly and understands them.
|
||||
|
||||
# Restarting is not supported in embedded
|
||||
--source include/not_embedded.inc
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_debug.inc
|
||||
|
||||
# Avoid CrashReporter popup on Mac
|
||||
--source include/not_crashrep.inc
|
||||
|
||||
# Turn on the geometry data print.
|
||||
SET SESSION debug="+d,row_print_geometry_data";
|
||||
|
||||
# Test GEOMETRY datatype.
|
||||
CREATE TABLE t_wl6455 ( i INT, g GEOMETRY NOT NULL) ENGINE=InnoDB;
|
||||
SHOW CREATE TABLE t_wl6455;
|
||||
|
||||
# Insert Point.
|
||||
INSERT INTO t_wl6455 VALUES(1, POINT(1,1));
|
||||
|
||||
INSERT INTO t_wl6455 VALUES(2, POINT(2,2));
|
||||
|
||||
# Insert MultiPoint.
|
||||
SET @mp = 'MULTIPOINT(0 0, 20 20, 60 60)';
|
||||
INSERT INTO t_wl6455 VALUES(3, ST_GeomFromText(@mp));
|
||||
|
||||
# Insert LineString.
|
||||
INSERT INTO t_wl6455 VALUES(4, LINESTRING(POINT(1,1), POINT(4, 4)));
|
||||
|
||||
INSERT INTO t_wl6455 VALUES(5, LINESTRING(POINT(2,2), POINT(5, 5)));
|
||||
|
||||
# Insert MultiLineString.
|
||||
SET @mls = 'MultiLineString((1 1,2 2,3 3),(4 4,5 5))';
|
||||
INSERT INTO t_wl6455 VALUES(6, ST_GeomFromText(@mls));
|
||||
|
||||
# Insert Polygon.
|
||||
SET @poly = 'Polygon((0 0,0 3,3 0,0 0),(1 1,1 2,2 1,1 1))';
|
||||
INSERT INTO t_wl6455 VALUES(7, ST_GeomFromText(@poly));
|
||||
|
||||
# Insert MultiPolygon.
|
||||
SET @mpoly = 'MultiPolygon(((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1)))';
|
||||
INSERT INTO t_wl6455 VALUES(8, ST_GeomFromText(@mpoly));
|
||||
|
||||
# Insert GeometryCollection.
|
||||
SET @gc = 'GeometryCollection(Point(1 1),LineString(2 2, 3 3))';
|
||||
INSERT INTO t_wl6455 VALUES(9, ST_GeomFromText(@gc));
|
||||
|
||||
# Show result.
|
||||
SELECT ST_AsText(g) FROM t_wl6455;
|
||||
|
||||
# Test create prefix index.
|
||||
CREATE INDEX i_p ON t_wl6455 (g(10));
|
||||
|
||||
# Select on prefix index.
|
||||
--replace_column 10 #
|
||||
EXPLAIN SELECT ST_AsText(g) FROM t_wl6455 WHERE g = POINT(2,2);
|
||||
SELECT ST_AsText(g) FROM t_wl6455 WHERE g = POINT(2,2);
|
||||
|
||||
# Test rollback/commit
|
||||
SET AUTOCOMMIT = 0;
|
||||
INSERT INTO t_wl6455 VALUES(10, POINT(10,10));
|
||||
SELECT ST_AsText(g) FROM t_wl6455 WHERE g = POINT(10,10);
|
||||
ROLLBACK;
|
||||
SELECT ST_AsText(g) FROM t_wl6455 WHERE g = POINT(10,10);
|
||||
|
||||
INSERT INTO t_wl6455 VALUES(10, POINT(10,10));
|
||||
COMMIT;
|
||||
|
||||
INSERT INTO t_wl6455 VALUES(11, POINT(11,11));
|
||||
BEGIN;
|
||||
INSERT INTO t_wl6455 VALUES(1, POINT(1,1));
|
||||
|
||||
--source include/kill_and_restart_mysqld.inc
|
||||
|
||||
CHECK TABLE t_wl6455;
|
||||
SELECT ST_AsText(g) FROM t_wl6455;
|
||||
|
||||
# Check information_schema, the mtype of GEOMETRY datatype is 14.
|
||||
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/t_wl6455' AND sc.NAME='g';
|
||||
|
||||
# Clean up
|
||||
DROP TABLE t_wl6455;
|
39
mysql-test/suite/innodb_gis/t/update_root.test
Normal file
39
mysql-test/suite/innodb_gis/t/update_root.test
Normal file
@ -0,0 +1,39 @@
|
||||
# WL#6745 InnoDB R-tree support
|
||||
# This test case will test R-tree multi level split.
|
||||
|
||||
# Not supported in embedded
|
||||
--source include/not_embedded.inc
|
||||
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_debug.inc
|
||||
--source include/big_test.inc
|
||||
--source include/not_valgrind.inc
|
||||
# Create table with R-tree index.
|
||||
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;
|
||||
|
||||
# Insert enough values to let R-tree split.
|
||||
delimiter |;
|
||||
create procedure insert_t1(IN total int)
|
||||
begin
|
||||
declare i int default 1;
|
||||
while (i <= total) DO
|
||||
insert into t1 values (i, Point(i, i));
|
||||
set i = i + 1;
|
||||
end while;
|
||||
end|
|
||||
delimiter ;|
|
||||
|
||||
# Test level 3 rtree.
|
||||
CALL insert_t1(70000);
|
||||
|
||||
CALL insert_t1(90);
|
||||
CALL insert_t1(90);
|
||||
CALL insert_t1(83);
|
||||
|
||||
insert into t1 values (0, Point(0.9, 0.9));
|
||||
|
||||
# Check table.
|
||||
check table t1;
|
||||
|
||||
drop procedure insert_t1;
|
||||
drop table t1;
|
Reference in New Issue
Block a user