Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
a0ce62f8
Commit
a0ce62f8
authored
Mar 18, 2020
by
Alexey Botchkov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
MDEV-14057 InnoDB GIS tests fail.
Tests fixed. MBR::Within() function fixed.
parent
09e8707d
Changes
19
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
282 additions
and
257 deletions
+282
-257
mysql-test/r/gis-rtree.result
mysql-test/r/gis-rtree.result
+2
-2
mysql-test/suite/innodb_gis/disabled.def
mysql-test/suite/innodb_gis/disabled.def
+0
-6
mysql-test/suite/innodb_gis/r/bug16236208.result
mysql-test/suite/innodb_gis/r/bug16236208.result
+1
-1
mysql-test/suite/innodb_gis/r/bug16266012.result
mysql-test/suite/innodb_gis/r/bug16266012.result
+6
-1
mysql-test/suite/innodb_gis/r/geometry.result
mysql-test/suite/innodb_gis/r/geometry.result
+121
-134
mysql-test/suite/innodb_gis/r/gis_split_inf.result
mysql-test/suite/innodb_gis/r/gis_split_inf.result
+4
-6
mysql-test/suite/innodb_gis/r/innodb_gis_rtree.result
mysql-test/suite/innodb_gis/r/innodb_gis_rtree.result
+2
-2
mysql-test/suite/innodb_gis/r/point_basic.result
mysql-test/suite/innodb_gis/r/point_basic.result
+2
-25
mysql-test/suite/innodb_gis/r/rtree.result
mysql-test/suite/innodb_gis/r/rtree.result
+4
-2
mysql-test/suite/innodb_gis/r/rtree_multi_pk.result
mysql-test/suite/innodb_gis/r/rtree_multi_pk.result
+3
-17
mysql-test/suite/innodb_gis/r/rtree_search.result
mysql-test/suite/innodb_gis/r/rtree_search.result
+4
-4
mysql-test/suite/innodb_gis/t/bug16236208.test
mysql-test/suite/innodb_gis/t/bug16236208.test
+1
-1
mysql-test/suite/innodb_gis/t/bug16266012.test
mysql-test/suite/innodb_gis/t/bug16266012.test
+1
-1
mysql-test/suite/innodb_gis/t/geometry.test
mysql-test/suite/innodb_gis/t/geometry.test
+33
-32
mysql-test/suite/innodb_gis/t/gis_split_inf.test
mysql-test/suite/innodb_gis/t/gis_split_inf.test
+3
-2
mysql-test/suite/innodb_gis/t/rtree_multi_pk.test
mysql-test/suite/innodb_gis/t/rtree_multi_pk.test
+0
-13
mysql-test/t/gis-rtree.test
mysql-test/t/gis-rtree.test
+2
-2
sql/spatial.cc
sql/spatial.cc
+92
-0
sql/spatial.h
sql/spatial.h
+1
-6
No files found.
mysql-test/r/gis-rtree.result
View file @
a0ce62f8
...
...
@@ -1576,13 +1576,13 @@ INSERT INTO t1 VALUES(GeomFromText('LINESTRING(2 2, 3 3)'));
SELECT COUNT(*) FROM t1 IGNORE INDEX(l) WHERE MBRContains(l, GEOMFROMTEXT('POINT(0 0)'));
COUNT(*)
1
SELECT COUNT(*) FROM t1 IGNORE INDEX(l) WHERE MBRWithin(GEOMFROMTEXT('POINT(0
0
)'), l);
SELECT COUNT(*) FROM t1 IGNORE INDEX(l) WHERE MBRWithin(GEOMFROMTEXT('POINT(0
.5 0.5
)'), l);
COUNT(*)
1
SELECT COUNT(*) FROM t1 FORCE INDEX(l) WHERE MBRContains(l, GEOMFROMTEXT('POINT(0 0)'));
COUNT(*)
1
SELECT COUNT(*) FROM t1 FORCE INDEX(l) WHERE MBRWithin(GEOMFROMTEXT('POINT(0
0
)'), l);
SELECT COUNT(*) FROM t1 FORCE INDEX(l) WHERE MBRWithin(GEOMFROMTEXT('POINT(0
.5 0.5
)'), l);
COUNT(*)
1
DROP TABLE t1;
...
...
mysql-test/suite/innodb_gis/disabled.def
View file @
a0ce62f8
...
...
@@ -10,9 +10,3 @@
#
##############################################################################
gis_split_inf : MDEV-14057 InnoDB GIS tests fail
rtree_multi_pk : MDEV-14057 InnoDB GIS tests fail
point_big : MDEV-14057 InnoDB GIS tests fail
geometry : MDEV-14057 InnoDB GIS tests fail
bug16236208 : MDEV-14057 InnoDB GIS tests fail
bug16266012 : MDEV-14057 InnoDB GIS tests fail
mysql-test/suite/innodb_gis/r/bug16236208.result
View file @
a0ce62f8
...
...
@@ -39,5 +39,5 @@ ST_WITHIN( ST_GeomFromText('POLYGON( ( 4135 3009 , 4914 3087 , 4236 3194 , 4091
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.
ST_AsText(linestring_nokey)
DROP TABLE linestring;
mysql-test/suite/innodb_gis/r/bug16266012.result
View file @
a0ce62f8
...
...
@@ -6,4 +6,9 @@ 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.
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
0
mysql-test/suite/innodb_gis/r/geometry.result
View file @
a0ce62f8
This diff is collapsed.
Click to expand it.
mysql-test/suite/innodb_gis/r/gis_split_inf.result
View file @
a0ce62f8
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.
Got one of the listed errors
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.
Got one of the listed errors
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.
Got one of the listed errors
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.
Got one of the listed errors
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;
...
...
mysql-test/suite/innodb_gis/r/innodb_gis_rtree.result
View file @
a0ce62f8
...
...
@@ -1576,13 +1576,13 @@ INSERT INTO t1 VALUES(GeomFromText('LINESTRING(2 2, 3 3)'));
SELECT COUNT(*) FROM t1 IGNORE INDEX(l) WHERE MBRContains(l, GEOMFROMTEXT('POINT(0 0)'));
COUNT(*)
1
SELECT COUNT(*) FROM t1 IGNORE INDEX(l) WHERE MBRWithin(GEOMFROMTEXT('POINT(0
0
)'), l);
SELECT COUNT(*) FROM t1 IGNORE INDEX(l) WHERE MBRWithin(GEOMFROMTEXT('POINT(0
.5 0.5
)'), l);
COUNT(*)
1
SELECT COUNT(*) FROM t1 FORCE INDEX(l) WHERE MBRContains(l, GEOMFROMTEXT('POINT(0 0)'));
COUNT(*)
1
SELECT COUNT(*) FROM t1 FORCE INDEX(l) WHERE MBRWithin(GEOMFROMTEXT('POINT(0
0
)'), l);
SELECT COUNT(*) FROM t1 FORCE INDEX(l) WHERE MBRWithin(GEOMFROMTEXT('POINT(0
.5 0.5
)'), l);
COUNT(*)
1
DROP TABLE t1;
...
...
mysql-test/suite/innodb_gis/r/point_basic.result
View file @
a0ce62f8
...
...
@@ -144,7 +144,6 @@ POINT(1 0) POINT(10 20)
POINT(0 0) POINT(10 20)
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))'));
ST_AsText(p) ST_AsText(p1)
POINT(1 0) POINT(10 20)
POINT(0 0) POINT(10 20)
# Drop spatial keys on the table
ALTER TABLE t1 DROP KEY p, DROP KEY p1;
...
...
@@ -170,7 +169,6 @@ POINT(1 0) POINT(10 20)
POINT(0 0) POINT(10 20)
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))'));
ST_AsText(p) ST_AsText(p1)
POINT(1 0) POINT(10 20)
POINT(0 0) POINT(10 20)
TRUNCATE t1;
ALTER TABLE t1 DROP COLUMN p, DROP COLUMN p1;
...
...
@@ -203,10 +201,8 @@ SELECT ST_AsText(p), ST_AsText(p1) FROM t1 WHERE MBRWithin(p1, ST_GeomFromText('
ST_AsText(p) ST_AsText(p1)
POINT(0 1) POINT(10 19)
POINT(1 1) POINT(10 20)
POINT(1 0) POINT(10 21)
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))'));
ST_AsText(p) ST_AsText(p1)
POINT(1 0) POINT(10 21)
POINT(0 0) POINT(10 22)
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';
...
...
@@ -234,14 +230,9 @@ SELECT ST_AsText(pp), ST_AsText(p1) FROM t1 WHERE p1 = ST_PointFromText('POINT(1
ST_AsText(pp) ST_AsText(p1)
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;
ST_AsText(pp) ST_AsText(p1)
POINT(0 0) POINT(5 5)
POINT(0 1) POINT(5 5)
POINT(1 0) POINT(5 5)
POINT(1 1) POINT(5 5)
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;
ST_AsText(pp) ST_AsText(p1)
POINT(0 0) POINT(5 5)
POINT(1 0) POINT(5 5)
DROP TABLE t1;
#
# Test when the POINT is on B-TREE
...
...
@@ -477,10 +468,8 @@ ST_AsText(p1)
POINT(5 10)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRWithin(p1, @poly1);
ST_AsText(p1)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
SELECT ST_AsText(p2) FROM gis_point1 WHERE ST_Contains(@poly2, p2);
ST_AsText(p2)
POINT(-1 -3)
...
...
@@ -509,6 +498,7 @@ POINT(10 21)
POINT(20.5 41)
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Contains(@mpoly, p1) AND NOT MBRWithin(p1, @mpoly);
ST_AsText(p1)
POINT(3 6)
# Check functions that use MBR, with line type data
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRIntersects(p1, @ls1);
ST_AsText(p1)
...
...
@@ -558,10 +548,8 @@ POINT(4 8)
POINT(5 10)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRWithin(p1, @poly1);
ST_AsText(p1)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Touches(p1, @poly1);
ST_AsText(p1)
POINT(2 4)
...
...
@@ -684,10 +672,8 @@ POINT(4 8)
POINT(5 10)
SELECT ST_AsText(p1) FROM gis_point1 WHERE MBRWithin(p1, @poly1);
ST_AsText(p1)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
SELECT ST_AsText(p1) FROM gis_point1 WHERE ST_Touches(p1, @poly1);
ST_AsText(p1)
POINT(2 4)
...
...
@@ -769,10 +755,8 @@ ST_AsText(p1)
POINT(5 10)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @poly1);
ST_AsText(p1)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
SELECT ST_AsText(p2) FROM gis_point WHERE ST_Contains(@poly2, p2);
ST_AsText(p2)
POINT(-1 -3)
...
...
@@ -801,6 +785,7 @@ POINT(10 21)
POINT(20.5 41)
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Contains(@mpoly, p1) AND NOT MBRWithin(p1, @mpoly);
ST_AsText(p1)
POINT(3 6)
# Check functions that use MBR, with line type data
SELECT ST_AsText(p1) FROM gis_point WHERE MBRIntersects(p1, @ls1);
ST_AsText(p1)
...
...
@@ -850,10 +835,8 @@ POINT(4 8)
POINT(5 10)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @poly1);
ST_AsText(p1)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @poly1);
ST_AsText(p1)
POINT(2 4)
...
...
@@ -976,10 +959,8 @@ POINT(4 8)
POINT(5 10)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @poly1);
ST_AsText(p1)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @poly1);
ST_AsText(p1)
POINT(2 4)
...
...
@@ -1091,10 +1072,8 @@ POINT(4 8)
POINT(5 10)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @poly1);
ST_AsText(p1)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @poly1);
ST_AsText(p1)
POINT(2 4)
...
...
@@ -1217,10 +1196,8 @@ POINT(4 8)
POINT(5 10)
SELECT ST_AsText(p1) FROM gis_point WHERE MBRWithin(p1, @poly1);
ST_AsText(p1)
POINT(2 4)
POINT(3 6)
POINT(4 8)
POINT(5 10)
SELECT ST_AsText(p1) FROM gis_point WHERE ST_Touches(p1, @poly1);
ST_AsText(p1)
POINT(2 4)
...
...
mysql-test/suite/innodb_gis/r/rtree.result
View file @
a0ce62f8
...
...
@@ -15,7 +15,6 @@ select ST_astext(t1.g) from t1 where MBRWithin(t1.g, @g1);
ST_astext(t1.g)
POINT(1 1)
POINT(1.5 1.5)
POINT(3 3)
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;
...
...
@@ -23,6 +22,7 @@ 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))');
...
...
@@ -32,6 +32,7 @@ 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;
...
...
@@ -159,7 +160,6 @@ select ST_astext(t1.g) from t1 where MBRWithin(t1.g, @g1);
ST_astext(t1.g)
POINT(1 1)
POINT(1.5 1.5)
POINT(3 3)
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;
...
...
@@ -167,6 +167,7 @@ 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))');
...
...
@@ -176,6 +177,7 @@ 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;
...
...
mysql-test/suite/innodb_gis/r/rtree_multi_pk.result
View file @
a0ce62f8
...
...
@@ -9,10 +9,8 @@ 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`))
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL g NULL NULL NULL 5 Using where
select ST_astext(t1.g) from t1 where MBRWithin(t1.g, @g1);
ST_astext(t1.g)
POINT(1 1)
...
...
@@ -97,18 +95,6 @@ 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;
...
...
@@ -140,7 +126,7 @@ 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.
Note 1831 Duplicate index `idx2`. 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
...
...
mysql-test/suite/innodb_gis/r/rtree_search.result
View file @
a0ce62f8
...
...
@@ -14,19 +14,19 @@ count(*)
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(*)
1000
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(*)
100
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(*)
7
91
7
89
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(*)
701
699
set @g1 = ST_GeomFromText('Point(1 1)');
select count(*) from t1 where MBRequals(t1.c2, @g1);
count(*)
...
...
mysql-test/suite/innodb_gis/t/bug16236208.test
View file @
a0ce62f8
...
...
@@ -47,7 +47,7 @@ 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
#
--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
...
...
mysql-test/suite/innodb_gis/t/bug16266012.test
View file @
a0ce62f8
...
...
@@ -6,7 +6,7 @@
--
source
include
/
have_geometry
.
inc
--
source
include
/
not_embedded
.
inc
--
source
include
/
have_debug
.
inc
--
error
ER_BOOST_GEOMETRY_OVERLAY_INVALID_INPUT_EXCEPTION
#
--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 ) ) '
)
)
,
...
...
mysql-test/suite/innodb_gis/t/geometry.test
View file @
a0ce62f8
...
...
@@ -10,6 +10,7 @@
#********************************************************
--
source
include
/
have_geometry
.
inc
--
source
include
/
have_innodb
.
inc
--
source
include
/
have_partition
.
inc
SET
default_storage_engine
=
InnoDB
;
SET
innodb_strict_mode
=
OFF
;
...
...
@@ -162,21 +163,21 @@ 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 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
#
...
...
@@ -518,21 +519,21 @@ 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 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
#
...
...
@@ -638,7 +639,7 @@ 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
--
error
ER_CANT_CREATE_TABLE
CREATE
TABLE
child
(
id
GEOMETRY
,
parent_id
GEOMETRY
,
INDEX
par_ind
(
parent_id
(
10
)),
FOREIGN
KEY
(
parent_id
(
10
))
REFERENCES
parent
(
id
)
...
...
@@ -675,7 +676,7 @@ SELECT COUNT(*) FROM tab3;
DROP
TABLE
gis_point
,
gis_line
,
gis_polygon
,
gis_multi_point
;
DROP
TABLE
gis_multi_line
,
gis_multi_polygon
;
DROP
TABLE
gis_geometrycollection
,
gis_geometry
;
DROP
TABLE
tab
,
tab2
,
tab3
,
parent
,
emp2
;
DROP
TABLE
tab
,
tab2
,
tab3
,
parent
;
DROP
PROCEDURE
geominout
;
DROP
PROCEDURE
geom_insert
;
DROP
PROCEDURE
geom_cursor
;
mysql-test/suite/innodb_gis/t/gis_split_inf.test
View file @
a0ce62f8
...
...
@@ -12,13 +12,14 @@ insert into t1(a) values( geometrycollection(multipolygon(polygon(linestring(
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
,
ER_BAD_NULL_ERROR
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
,
ER_BAD_NULL_ERROR
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
,
ER_BAD_NULL_ERROR
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
;
...
...
mysql-test/suite/innodb_gis/t/rtree_multi_pk.test
View file @
a0ce62f8
...
...
@@ -75,19 +75,6 @@ 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
;
...
...
mysql-test/t/gis-rtree.test
View file @
a0ce62f8
...
...
@@ -964,10 +964,10 @@ INSERT INTO t1 VALUES(GeomFromText('LINESTRING(1 1, 2 2)'));
INSERT
INTO
t1
VALUES
(
GeomFromText
(
'LINESTRING(2 2, 3 3)'
));
SELECT
COUNT
(
*
)
FROM
t1
IGNORE
INDEX
(
l
)
WHERE
MBRContains
(
l
,
GEOMFROMTEXT
(
'POINT(0 0)'
));
SELECT
COUNT
(
*
)
FROM
t1
IGNORE
INDEX
(
l
)
WHERE
MBRWithin
(
GEOMFROMTEXT
(
'POINT(0
0
)'
),
l
);
SELECT
COUNT
(
*
)
FROM
t1
IGNORE
INDEX
(
l
)
WHERE
MBRWithin
(
GEOMFROMTEXT
(
'POINT(0
.5 0.5
)'
),
l
);
SELECT
COUNT
(
*
)
FROM
t1
FORCE
INDEX
(
l
)
WHERE
MBRContains
(
l
,
GEOMFROMTEXT
(
'POINT(0 0)'
));
SELECT
COUNT
(
*
)
FROM
t1
FORCE
INDEX
(
l
)
WHERE
MBRWithin
(
GEOMFROMTEXT
(
'POINT(0
0
)'
),
l
);
SELECT
COUNT
(
*
)
FROM
t1
FORCE
INDEX
(
l
)
WHERE
MBRWithin
(
GEOMFROMTEXT
(
'POINT(0
.5 0.5
)'
),
l
);
DROP
TABLE
t1
;
...
...
sql/spatial.cc
View file @
a0ce62f8
...
...
@@ -50,6 +50,98 @@ double my_double_round(double value, longlong dec, bool dec_unsigned,
#define MAX_DIGITS_IN_DOUBLE MY_GCVT_MAX_FIELD_WIDTH
int
MBR
::
within
(
const
MBR
*
mbr
)
{
/*
We have to take into account the 'dimension' of
the MBR, where the dimension of a single point is 0,
the dimesion of an vertical or horizontal line is 1,
and finally the dimension of the solid rectangle is 2.
*/
int
dim1
=
dimension
();
int
dim2
=
mbr
->
dimension
();
DBUG_ASSERT
(
dim1
>=
0
&&
dim1
<=
2
&&
dim2
>=
0
&&
dim2
<=
2
);
/*
Either/both of the two operands can degrade to a point or a
horizontal/vertical line segment, and we have to treat such cases
separately.
*/
switch
(
dim1
)
{
case
0
:
DBUG_ASSERT
(
xmin
==
xmax
&&
ymin
==
ymax
);
switch
(
dim2
)
{
case
0
:
DBUG_ASSERT
(
mbr
->
xmin
==
mbr
->
xmax
&&
mbr
->
ymin
==
mbr
->
ymax
);
return
equals
(
mbr
);
break
;
case
1
:
DBUG_ASSERT
((
mbr
->
xmin
==
mbr
->
xmax
&&
mbr
->
ymin
!=
mbr
->
ymax
)
||
(
mbr
->
ymin
==
mbr
->
ymax
&&
mbr
->
xmin
!=
mbr
->
xmax
));
return
((
xmin
>
mbr
->
xmin
&&
xmin
<
mbr
->
xmax
&&
ymin
==
mbr
->
ymin
)
||
(
ymin
>
mbr
->
ymin
&&
ymin
<
mbr
->
ymax
&&
xmin
==
mbr
->
xmin
));
break
;
case
2
:
DBUG_ASSERT
(
mbr
->
xmin
!=
mbr
->
xmax
&&
mbr
->
ymin
!=
mbr
->
ymax
);
return
(
xmin
>
mbr
->
xmin
&&
xmax
<
mbr
->
xmax
&&
ymin
>
mbr
->
ymin
&&
ymax
<
mbr
->
ymax
);
break
;
}
break
;
case
1
:
DBUG_ASSERT
((
xmin
==
xmax
&&
ymin
!=
ymax
)
||
(
ymin
==
ymax
&&
xmin
!=
xmax
));
switch
(
dim2
)
{
case
0
:
DBUG_ASSERT
(
mbr
->
xmin
==
mbr
->
xmax
&&
mbr
->
ymin
==
mbr
->
ymax
);
return
0
;
break
;
case
1
:
DBUG_ASSERT
((
mbr
->
xmin
==
mbr
->
xmax
&&
mbr
->
ymin
!=
mbr
->
ymax
)
||
(
mbr
->
ymin
==
mbr
->
ymax
&&
mbr
->
xmin
!=
mbr
->
xmax
));
return
((
xmin
==
xmax
&&
mbr
->
xmin
==
mbr
->
xmax
&&
mbr
->
xmin
==
xmin
&&
mbr
->
ymin
<=
ymin
&&
mbr
->
ymax
>=
ymax
)
||
(
ymin
==
ymax
&&
mbr
->
ymin
==
mbr
->
ymax
&&
mbr
->
ymin
==
ymin
&&
mbr
->
xmin
<=
xmin
&&
mbr
->
xmax
>=
xmax
));
break
;
case
2
:
DBUG_ASSERT
(
mbr
->
xmin
!=
mbr
->
xmax
&&
mbr
->
ymin
!=
mbr
->
ymax
);
return
((
xmin
==
xmax
&&
xmin
>
mbr
->
xmin
&&
xmax
<
mbr
->
xmax
&&
ymin
>=
mbr
->
ymin
&&
ymax
<=
mbr
->
ymax
)
||
(
ymin
==
ymax
&&
ymin
>
mbr
->
ymin
&&
ymax
<
mbr
->
ymax
&&
xmin
>=
mbr
->
xmin
&&
xmax
<=
mbr
->
xmax
));
break
;
}
break
;
case
2
:
DBUG_ASSERT
(
xmin
!=
xmax
&&
ymin
!=
ymax
);
switch
(
dim2
)
{
case
0
:
case
1
:
return
0
;
break
;
case
2
:
DBUG_ASSERT
(
mbr
->
xmin
!=
mbr
->
xmax
&&
mbr
->
ymin
!=
mbr
->
ymax
);
return
((
mbr
->
xmin
<=
xmin
)
&&
(
mbr
->
ymin
<=
ymin
)
&&
(
mbr
->
xmax
>=
xmax
)
&&
(
mbr
->
ymax
>=
ymax
));
break
;
}
break
;
}
// Never reached.
DBUG_ASSERT
(
false
);
return
0
;
}
/***************************** Gis_class_info *******************************/
String
Geometry
::
bad_geometry_data
(
"Bad object"
,
&
my_charset_bin
);
...
...
sql/spatial.h
View file @
a0ce62f8
...
...
@@ -145,12 +145,7 @@ struct MBR
(
mbr
->
xmax
>=
xmin
&&
mbr
->
xmax
<=
xmax
)));
}
int
within
(
const
MBR
*
mbr
)
{
/* The following should be safe, even if we compare doubles */
return
((
mbr
->
xmin
<=
xmin
)
&&
(
mbr
->
ymin
<=
ymin
)
&&
(
mbr
->
xmax
>=
xmax
)
&&
(
mbr
->
ymax
>=
ymax
));
}
int
within
(
const
MBR
*
mbr
);
int
contains
(
const
MBR
*
mbr
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment