Below is the list of changes that have just been committed into a local
5.1 repository of hartmut. When hartmut does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet@stripped, 2006-11-25 21:12:09+01:00, hartmut@stripped +8 -0
Fixes and tests for Bug #24563 "MBROverlaps does not seem to function propertly"
and for Bug #24588 "MBROverlaps missing in 5.1?"
mysql-test/include/gis_generic.inc@stripped, 2006-11-25 21:12:06+01:00, hartmut@stripped
+42 -0
added spatial relation test cases based on resized/shifted squares
this test covers all MBR*() functions and their non-MBR-prefixed
aliases (related to Bug #24563 and Bug #24588)
mysql-test/r/archive_gis.result@stripped, 2006-11-25 21:12:06+01:00, hartmut@stripped
+60 -1
- fixed a Overlaps() result that relied on wrong behavior
(if "121 overlaps 120" is true then "120 overlaps 121" is also true)
- added results for new spatial relation test case
(related to Bug #24563 and Bug #24588)
mysql-test/r/gis.result@stripped, 2006-11-25 21:12:06+01:00, hartmut@stripped +60 -1
- fixed a Overlaps() result that relied on wrong behavior
(if "121 overlaps 120" is true then "120 overlaps 121" is also true)
- added results for new spatial relation test case
(related to Bug #24563 and Bug #24588)
mysql-test/r/innodb_gis.result@stripped, 2006-11-25 21:12:06+01:00, hartmut@stripped +60
-1
- fixed a Overlaps() result that relied on wrong behavior
(if "121 overlaps 120" is true then "120 overlaps 121" is also true)
- added results for new spatial relation test case
(related to Bug #24563 and Bug #24588)
mysql-test/r/ndb_gis.result@stripped, 2006-11-25 21:12:06+01:00, hartmut@stripped +60
-1
- fixed a Overlaps() result that relied on wrong behavior
(if "121 overlaps 120" is true then "120 overlaps 121" is also true)
- added results for new spatial relation test case
(related to Bug #24563 and Bug #24588)
mysql-test/t/gis.test@stripped, 2006-11-25 21:12:06+01:00, hartmut@stripped +50 -0
added spatial relation test cases based on resized/shifted squares
this test covers all MBR*() functions and their non-MBR-prefixed
aliases (related to Bug #24563 and Bug #24588)
sql/item_create.cc@stripped, 2006-11-25 21:12:06+01:00, hartmut@stripped +6 -0
the actual MBR*() functions were not moved to the new function list,
only their non-MBR-prefixed counterparts (Bug #24588)
sql/spatial.h@stripped, 2006-11-25 21:12:06+01:00, hartmut@stripped +1 -7
MBROverlaps() returned false for overlapping rectangles that were
only shifted along either the x- or the y-axis. It also returned
true for "A overlaps B" but false for "B overlaps A" in some cases
(Bug #24563)
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: hartmut
# Host: walhalla.site
# Root: /home/hartmut/projects/mysql/bugs/bug24588/mysql-5.1-new-maint
--- 1.67/sql/item_create.cc 2006-11-02 19:01:49 +01:00
+++ 1.68/sql/item_create.cc 2006-11-25 21:12:06 +01:00
@@ -4712,6 +4712,12 @@
{ C_STRING_WITH_LEN("MAKE_SET"), BUILDER(Create_func_make_set)},
{ C_STRING_WITH_LEN("MASTER_POS_WAIT"), BUILDER(Create_func_master_pos_wait)},
{ C_STRING_WITH_LEN("MBRCONTAINS"), GEOM_BUILDER(Create_func_contains)},
+ { C_STRING_WITH_LEN("MBRDISJOINT"), GEOM_BUILDER(Create_func_disjoint)},
+ { C_STRING_WITH_LEN("MBREQUAL"), GEOM_BUILDER(Create_func_equals)},
+ { C_STRING_WITH_LEN("MBRINTERSECTS"), GEOM_BUILDER(Create_func_intersects)},
+ { C_STRING_WITH_LEN("MBROVERLAPS"), GEOM_BUILDER(Create_func_overlaps)},
+ { C_STRING_WITH_LEN("MBRTOUCHES"), GEOM_BUILDER(Create_func_touches)},
+ { C_STRING_WITH_LEN("MBRWITHIN"), GEOM_BUILDER(Create_func_within)},
{ C_STRING_WITH_LEN("MD5"), BUILDER(Create_func_md5)},
{ C_STRING_WITH_LEN("MLINEFROMTEXT"), GEOM_BUILDER(Create_func_geometry_from_text)},
{ C_STRING_WITH_LEN("MLINEFROMWKB"), GEOM_BUILDER(Create_func_geometry_from_wkb)},
--- 1.21/sql/spatial.h 2006-06-30 14:10:24 +02:00
+++ 1.22/sql/spatial.h 2006-11-25 21:12:06 +01:00
@@ -147,13 +147,7 @@
int overlaps(const MBR *mbr)
{
- int lb= mbr->inner_point(xmin, ymin);
- int rb= mbr->inner_point(xmax, ymin);
- int rt= mbr->inner_point(xmax, ymax);
- int lt= mbr->inner_point(xmin, ymax);
-
- int a = lb+rb+rt+lt;
- return (a>0) && (a<4) && (!within(mbr));
+ return intersects(mbr) && !within(mbr) && !contains(mbr);
}
};
--- 1.4/mysql-test/include/gis_generic.inc 2006-03-03 11:52:46 +01:00
+++ 1.5/mysql-test/include/gis_generic.inc 2006-11-25 21:12:06 +01:00
@@ -178,4 +178,46 @@
drop table t1;
+create table t1 (name VARCHAR(100), square GEOMETRY);
+
+INSERT INTO t1 VALUES("center", GeomFromText('POLYGON (( 0 0, 0 2, 2 2, 2 0, 0 0))'));
+
+INSERT INTO t1 VALUES("small", GeomFromText('POLYGON (( 0 0, 0 1, 1 1, 1 0, 0 0))'));
+INSERT INTO t1 VALUES("big", GeomFromText('POLYGON (( 0 0, 0 3, 3 3, 3 0, 0 0))'));
+
+INSERT INTO t1 VALUES("up", GeomFromText('POLYGON (( 0 1, 0 3, 2 3, 2 1, 0 1))'));
+INSERT INTO t1 VALUES("up2", GeomFromText('POLYGON (( 0 2, 0 4, 2 4, 2 2, 0 2))'));
+INSERT INTO t1 VALUES("up3", GeomFromText('POLYGON (( 0 3, 0 5, 2 5, 2 3, 0 3))'));
+
+INSERT INTO t1 VALUES("down", GeomFromText('POLYGON (( 0 -1, 0 1, 2 1, 2 -1, 0
-1))'));
+INSERT INTO t1 VALUES("down2", GeomFromText('POLYGON (( 0 -2, 0 0, 2 0, 2 -2, 0
-2))'));
+INSERT INTO t1 VALUES("down3", GeomFromText('POLYGON (( 0 -3, 0 -1, 2 -1, 2 -3, 0
-3))'));
+
+INSERT INTO t1 VALUES("right", GeomFromText('POLYGON (( 1 0, 1 2, 3 2, 3 0, 1 0))'));
+INSERT INTO t1 VALUES("right2", GeomFromText('POLYGON (( 2 0, 2 2, 4 2, 4 0, 2 0))'));
+INSERT INTO t1 VALUES("right3", GeomFromText('POLYGON (( 3 0, 3 2, 5 2, 5 0, 3 0))'));
+
+INSERT INTO t1 VALUES("left", GeomFromText('POLYGON (( -1 0, -1 2, 1 2, 1 0, -1
0))'));
+INSERT INTO t1 VALUES("left2", GeomFromText('POLYGON (( -2 0, -2 2, 0 2, 0 0, -2
0))'));
+INSERT INTO t1 VALUES("left3", GeomFromText('POLYGON (( -3 0, -3 2, -1 2, -1 0, -3
0))'));
+
+SELECT GROUP_CONCAT(a2.name) AS mbrcontains FROM t1 a1 JOIN t1 a2 ON MBRContains(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+SELECT GROUP_CONCAT(a2.name) AS mbrdisjoint FROM t1 a1 JOIN t1 a2 ON MBRDisjoint(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+SELECT GROUP_CONCAT(a2.name) AS mbrequal FROM t1 a1 JOIN t1 a2 ON MBREqual(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+SELECT GROUP_CONCAT(a2.name) AS mbrintersect FROM t1 a1 JOIN t1 a2 ON MBRIntersects(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+SELECT GROUP_CONCAT(a2.name) AS mbroverlaps FROM t1 a1 JOIN t1 a2 ON MBROverlaps(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+SELECT GROUP_CONCAT(a2.name) AS mbrtouches FROM t1 a1 JOIN t1 a2 ON MBRTouches(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+SELECT GROUP_CONCAT(a2.name) AS mbrwithin FROM t1 a1 JOIN t1 a2 ON MBRWithin(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+
+SELECT GROUP_CONCAT(a2.name) AS contains FROM t1 a1 JOIN t1 a2 ON Contains(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+SELECT GROUP_CONCAT(a2.name) AS disjoint FROM t1 a1 JOIN t1 a2 ON Disjoint(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+SELECT GROUP_CONCAT(a2.name) AS equals FROM t1 a1 JOIN t1 a2 ON Equals(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+SELECT GROUP_CONCAT(a2.name) AS intersect FROM t1 a1 JOIN t1 a2 ON Intersects(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+SELECT GROUP_CONCAT(a2.name) AS overlaps FROM t1 a1 JOIN t1 a2 ON Overlaps(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+SELECT GROUP_CONCAT(a2.name) AS touches FROM t1 a1 JOIN t1 a2 ON Touches(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+SELECT GROUP_CONCAT(a2.name) AS within FROM t1 a1 JOIN t1 a2 ON Within(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+
+DROP TABLE t1;
+
+
# End of 5.0 tests
--- 1.7/mysql-test/r/archive_gis.result 2006-07-28 19:26:55 +02:00
+++ 1.8/mysql-test/r/archive_gis.result 2006-11-25 21:12:06 +01:00
@@ -393,7 +393,7 @@
FROM gis_geometrycollection g1, gis_geometrycollection g2 ORDER BY first, second;
first second w c o e d t i r
120 120 1 1 0 1 0 0 1 0
-120 121 0 0 0 0 0 0 1 0
+120 121 0 0 1 0 0 0 1 0
121 120 0 0 1 0 0 0 1 0
121 121 1 1 0 1 0 0 1 0
explain extended SELECT g1.fid as first, g2.fid as second,
@@ -460,3 +460,62 @@
insert into t1 (fl) values (pointfromtext('point(1,1)'));
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
drop table t1;
+create table t1 (name VARCHAR(100), square GEOMETRY);
+INSERT INTO t1 VALUES("center", GeomFromText('POLYGON (( 0 0, 0 2, 2 2, 2 0, 0 0))'));
+INSERT INTO t1 VALUES("small", GeomFromText('POLYGON (( 0 0, 0 1, 1 1, 1 0, 0 0))'));
+INSERT INTO t1 VALUES("big", GeomFromText('POLYGON (( 0 0, 0 3, 3 3, 3 0, 0 0))'));
+INSERT INTO t1 VALUES("up", GeomFromText('POLYGON (( 0 1, 0 3, 2 3, 2 1, 0 1))'));
+INSERT INTO t1 VALUES("up2", GeomFromText('POLYGON (( 0 2, 0 4, 2 4, 2 2, 0 2))'));
+INSERT INTO t1 VALUES("up3", GeomFromText('POLYGON (( 0 3, 0 5, 2 5, 2 3, 0 3))'));
+INSERT INTO t1 VALUES("down", GeomFromText('POLYGON (( 0 -1, 0 1, 2 1, 2 -1, 0
-1))'));
+INSERT INTO t1 VALUES("down2", GeomFromText('POLYGON (( 0 -2, 0 0, 2 0, 2 -2, 0
-2))'));
+INSERT INTO t1 VALUES("down3", GeomFromText('POLYGON (( 0 -3, 0 -1, 2 -1, 2 -3, 0
-3))'));
+INSERT INTO t1 VALUES("right", GeomFromText('POLYGON (( 1 0, 1 2, 3 2, 3 0, 1 0))'));
+INSERT INTO t1 VALUES("right2", GeomFromText('POLYGON (( 2 0, 2 2, 4 2, 4 0, 2 0))'));
+INSERT INTO t1 VALUES("right3", GeomFromText('POLYGON (( 3 0, 3 2, 5 2, 5 0, 3 0))'));
+INSERT INTO t1 VALUES("left", GeomFromText('POLYGON (( -1 0, -1 2, 1 2, 1 0, -1
0))'));
+INSERT INTO t1 VALUES("left2", GeomFromText('POLYGON (( -2 0, -2 2, 0 2, 0 0, -2
0))'));
+INSERT INTO t1 VALUES("left3", GeomFromText('POLYGON (( -3 0, -3 2, -1 2, -1 0, -3
0))'));
+SELECT GROUP_CONCAT(a2.name) AS mbrcontains FROM t1 a1 JOIN t1 a2 ON MBRContains(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+mbrcontains
+center,small
+SELECT GROUP_CONCAT(a2.name) AS mbrdisjoint FROM t1 a1 JOIN t1 a2 ON MBRDisjoint(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+mbrdisjoint
+up3,down3,right3,left3
+SELECT GROUP_CONCAT(a2.name) AS mbrequal FROM t1 a1 JOIN t1 a2 ON MBREqual(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+mbrequal
+center
+SELECT GROUP_CONCAT(a2.name) AS mbrintersect FROM t1 a1 JOIN t1 a2 ON MBRIntersects(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+mbrintersect
+center,small,big,up,up2,down,down2,right,right2,left,left2
+SELECT GROUP_CONCAT(a2.name) AS mbroverlaps FROM t1 a1 JOIN t1 a2 ON MBROverlaps(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+mbroverlaps
+up,up2,down,down2,right,right2,left,left2
+SELECT GROUP_CONCAT(a2.name) AS mbrtouches FROM t1 a1 JOIN t1 a2 ON MBRTouches(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+mbrtouches
+up2,down2,right2,left2
+SELECT GROUP_CONCAT(a2.name) AS mbrwithin FROM t1 a1 JOIN t1 a2 ON MBRWithin(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+mbrwithin
+center,big
+SELECT GROUP_CONCAT(a2.name) AS contains FROM t1 a1 JOIN t1 a2 ON Contains(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+contains
+center,small
+SELECT GROUP_CONCAT(a2.name) AS disjoint FROM t1 a1 JOIN t1 a2 ON Disjoint(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+disjoint
+up3,down3,right3,left3
+SELECT GROUP_CONCAT(a2.name) AS equals FROM t1 a1 JOIN t1 a2 ON Equals(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+equals
+center
+SELECT GROUP_CONCAT(a2.name) AS intersect FROM t1 a1 JOIN t1 a2 ON Intersects(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+intersect
+center,small,big,up,up2,down,down2,right,right2,left,left2
+SELECT GROUP_CONCAT(a2.name) AS overlaps FROM t1 a1 JOIN t1 a2 ON Overlaps(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+overlaps
+up,up2,down,down2,right,right2,left,left2
+SELECT GROUP_CONCAT(a2.name) AS touches FROM t1 a1 JOIN t1 a2 ON Touches(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+touches
+up2,down2,right2,left2
+SELECT GROUP_CONCAT(a2.name) AS within FROM t1 a1 JOIN t1 a2 ON Within(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+within
+center,big
+DROP TABLE t1;
--- 1.7/mysql-test/r/innodb_gis.result 2006-07-28 19:26:56 +02:00
+++ 1.8/mysql-test/r/innodb_gis.result 2006-11-25 21:12:06 +01:00
@@ -393,7 +393,7 @@
FROM gis_geometrycollection g1, gis_geometrycollection g2 ORDER BY first, second;
first second w c o e d t i r
120 120 1 1 0 1 0 0 1 0
-120 121 0 0 0 0 0 0 1 0
+120 121 0 0 1 0 0 0 1 0
121 120 0 0 1 0 0 0 1 0
121 121 1 1 0 1 0 0 1 0
explain extended SELECT g1.fid as first, g2.fid as second,
@@ -460,3 +460,62 @@
insert into t1 (fl) values (pointfromtext('point(1,1)'));
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
drop table t1;
+create table t1 (name VARCHAR(100), square GEOMETRY);
+INSERT INTO t1 VALUES("center", GeomFromText('POLYGON (( 0 0, 0 2, 2 2, 2 0, 0 0))'));
+INSERT INTO t1 VALUES("small", GeomFromText('POLYGON (( 0 0, 0 1, 1 1, 1 0, 0 0))'));
+INSERT INTO t1 VALUES("big", GeomFromText('POLYGON (( 0 0, 0 3, 3 3, 3 0, 0 0))'));
+INSERT INTO t1 VALUES("up", GeomFromText('POLYGON (( 0 1, 0 3, 2 3, 2 1, 0 1))'));
+INSERT INTO t1 VALUES("up2", GeomFromText('POLYGON (( 0 2, 0 4, 2 4, 2 2, 0 2))'));
+INSERT INTO t1 VALUES("up3", GeomFromText('POLYGON (( 0 3, 0 5, 2 5, 2 3, 0 3))'));
+INSERT INTO t1 VALUES("down", GeomFromText('POLYGON (( 0 -1, 0 1, 2 1, 2 -1, 0
-1))'));
+INSERT INTO t1 VALUES("down2", GeomFromText('POLYGON (( 0 -2, 0 0, 2 0, 2 -2, 0
-2))'));
+INSERT INTO t1 VALUES("down3", GeomFromText('POLYGON (( 0 -3, 0 -1, 2 -1, 2 -3, 0
-3))'));
+INSERT INTO t1 VALUES("right", GeomFromText('POLYGON (( 1 0, 1 2, 3 2, 3 0, 1 0))'));
+INSERT INTO t1 VALUES("right2", GeomFromText('POLYGON (( 2 0, 2 2, 4 2, 4 0, 2 0))'));
+INSERT INTO t1 VALUES("right3", GeomFromText('POLYGON (( 3 0, 3 2, 5 2, 5 0, 3 0))'));
+INSERT INTO t1 VALUES("left", GeomFromText('POLYGON (( -1 0, -1 2, 1 2, 1 0, -1
0))'));
+INSERT INTO t1 VALUES("left2", GeomFromText('POLYGON (( -2 0, -2 2, 0 2, 0 0, -2
0))'));
+INSERT INTO t1 VALUES("left3", GeomFromText('POLYGON (( -3 0, -3 2, -1 2, -1 0, -3
0))'));
+SELECT GROUP_CONCAT(a2.name) AS mbrcontains FROM t1 a1 JOIN t1 a2 ON MBRContains(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+mbrcontains
+center,small
+SELECT GROUP_CONCAT(a2.name) AS mbrdisjoint FROM t1 a1 JOIN t1 a2 ON MBRDisjoint(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+mbrdisjoint
+up3,down3,right3,left3
+SELECT GROUP_CONCAT(a2.name) AS mbrequal FROM t1 a1 JOIN t1 a2 ON MBREqual(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+mbrequal
+center
+SELECT GROUP_CONCAT(a2.name) AS mbrintersect FROM t1 a1 JOIN t1 a2 ON MBRIntersects(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+mbrintersect
+center,small,big,up,up2,down,down2,right,right2,left,left2
+SELECT GROUP_CONCAT(a2.name) AS mbroverlaps FROM t1 a1 JOIN t1 a2 ON MBROverlaps(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+mbroverlaps
+up,up2,down,down2,right,right2,left,left2
+SELECT GROUP_CONCAT(a2.name) AS mbrtouches FROM t1 a1 JOIN t1 a2 ON MBRTouches(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+mbrtouches
+up2,down2,right2,left2
+SELECT GROUP_CONCAT(a2.name) AS mbrwithin FROM t1 a1 JOIN t1 a2 ON MBRWithin(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+mbrwithin
+center,big
+SELECT GROUP_CONCAT(a2.name) AS contains FROM t1 a1 JOIN t1 a2 ON Contains(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+contains
+center,small
+SELECT GROUP_CONCAT(a2.name) AS disjoint FROM t1 a1 JOIN t1 a2 ON Disjoint(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+disjoint
+up3,down3,right3,left3
+SELECT GROUP_CONCAT(a2.name) AS equals FROM t1 a1 JOIN t1 a2 ON Equals(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+equals
+center
+SELECT GROUP_CONCAT(a2.name) AS intersect FROM t1 a1 JOIN t1 a2 ON Intersects(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+intersect
+center,small,big,up,up2,down,down2,right,right2,left,left2
+SELECT GROUP_CONCAT(a2.name) AS overlaps FROM t1 a1 JOIN t1 a2 ON Overlaps(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+overlaps
+up,up2,down,down2,right,right2,left,left2
+SELECT GROUP_CONCAT(a2.name) AS touches FROM t1 a1 JOIN t1 a2 ON Touches(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+touches
+up2,down2,right2,left2
+SELECT GROUP_CONCAT(a2.name) AS within FROM t1 a1 JOIN t1 a2 ON Within(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+within
+center,big
+DROP TABLE t1;
--- 1.13/mysql-test/r/ndb_gis.result 2006-07-30 16:25:48 +02:00
+++ 1.14/mysql-test/r/ndb_gis.result 2006-11-25 21:12:06 +01:00
@@ -393,7 +393,7 @@
FROM gis_geometrycollection g1, gis_geometrycollection g2 ORDER BY first, second;
first second w c o e d t i r
120 120 1 1 0 1 0 0 1 0
-120 121 0 0 0 0 0 0 1 0
+120 121 0 0 1 0 0 0 1 0
121 120 0 0 1 0 0 0 1 0
121 121 1 1 0 1 0 0 1 0
explain extended SELECT g1.fid as first, g2.fid as second,
@@ -922,3 +922,62 @@
insert into t1 (fl) values (pointfromtext('point(1,1)'));
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
drop table t1;
+create table t1 (name VARCHAR(100), square GEOMETRY);
+INSERT INTO t1 VALUES("center", GeomFromText('POLYGON (( 0 0, 0 2, 2 2, 2 0, 0 0))'));
+INSERT INTO t1 VALUES("small", GeomFromText('POLYGON (( 0 0, 0 1, 1 1, 1 0, 0 0))'));
+INSERT INTO t1 VALUES("big", GeomFromText('POLYGON (( 0 0, 0 3, 3 3, 3 0, 0 0))'));
+INSERT INTO t1 VALUES("up", GeomFromText('POLYGON (( 0 1, 0 3, 2 3, 2 1, 0 1))'));
+INSERT INTO t1 VALUES("up2", GeomFromText('POLYGON (( 0 2, 0 4, 2 4, 2 2, 0 2))'));
+INSERT INTO t1 VALUES("up3", GeomFromText('POLYGON (( 0 3, 0 5, 2 5, 2 3, 0 3))'));
+INSERT INTO t1 VALUES("down", GeomFromText('POLYGON (( 0 -1, 0 1, 2 1, 2 -1, 0
-1))'));
+INSERT INTO t1 VALUES("down2", GeomFromText('POLYGON (( 0 -2, 0 0, 2 0, 2 -2, 0
-2))'));
+INSERT INTO t1 VALUES("down3", GeomFromText('POLYGON (( 0 -3, 0 -1, 2 -1, 2 -3, 0
-3))'));
+INSERT INTO t1 VALUES("right", GeomFromText('POLYGON (( 1 0, 1 2, 3 2, 3 0, 1 0))'));
+INSERT INTO t1 VALUES("right2", GeomFromText('POLYGON (( 2 0, 2 2, 4 2, 4 0, 2 0))'));
+INSERT INTO t1 VALUES("right3", GeomFromText('POLYGON (( 3 0, 3 2, 5 2, 5 0, 3 0))'));
+INSERT INTO t1 VALUES("left", GeomFromText('POLYGON (( -1 0, -1 2, 1 2, 1 0, -1
0))'));
+INSERT INTO t1 VALUES("left2", GeomFromText('POLYGON (( -2 0, -2 2, 0 2, 0 0, -2
0))'));
+INSERT INTO t1 VALUES("left3", GeomFromText('POLYGON (( -3 0, -3 2, -1 2, -1 0, -3
0))'));
+SELECT GROUP_CONCAT(a2.name) AS mbrcontains FROM t1 a1 JOIN t1 a2 ON MBRContains(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+mbrcontains
+center,small
+SELECT GROUP_CONCAT(a2.name) AS mbrdisjoint FROM t1 a1 JOIN t1 a2 ON MBRDisjoint(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+mbrdisjoint
+up3,down3,right3,left3
+SELECT GROUP_CONCAT(a2.name) AS mbrequal FROM t1 a1 JOIN t1 a2 ON MBREqual(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+mbrequal
+center
+SELECT GROUP_CONCAT(a2.name) AS mbrintersect FROM t1 a1 JOIN t1 a2 ON MBRIntersects(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+mbrintersect
+center,small,big,up,up2,down,down2,right,right2,left,left2
+SELECT GROUP_CONCAT(a2.name) AS mbroverlaps FROM t1 a1 JOIN t1 a2 ON MBROverlaps(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+mbroverlaps
+up,up2,down,down2,right,right2,left,left2
+SELECT GROUP_CONCAT(a2.name) AS mbrtouches FROM t1 a1 JOIN t1 a2 ON MBRTouches(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+mbrtouches
+up2,down2,right2,left2
+SELECT GROUP_CONCAT(a2.name) AS mbrwithin FROM t1 a1 JOIN t1 a2 ON MBRWithin(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+mbrwithin
+center,big
+SELECT GROUP_CONCAT(a2.name) AS contains FROM t1 a1 JOIN t1 a2 ON Contains(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+contains
+center,small
+SELECT GROUP_CONCAT(a2.name) AS disjoint FROM t1 a1 JOIN t1 a2 ON Disjoint(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+disjoint
+up3,down3,right3,left3
+SELECT GROUP_CONCAT(a2.name) AS equals FROM t1 a1 JOIN t1 a2 ON Equals(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+equals
+center
+SELECT GROUP_CONCAT(a2.name) AS intersect FROM t1 a1 JOIN t1 a2 ON Intersects(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+intersect
+center,small,big,up,up2,down,down2,right,right2,left,left2
+SELECT GROUP_CONCAT(a2.name) AS overlaps FROM t1 a1 JOIN t1 a2 ON Overlaps(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+overlaps
+up,up2,down,down2,right,right2,left,left2
+SELECT GROUP_CONCAT(a2.name) AS touches FROM t1 a1 JOIN t1 a2 ON Touches(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+touches
+up2,down2,right2,left2
+SELECT GROUP_CONCAT(a2.name) AS within FROM t1 a1 JOIN t1 a2 ON Within(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+within
+center,big
+DROP TABLE t1;
--- 1.39/mysql-test/r/gis.result 2006-11-17 21:28:42 +01:00
+++ 1.40/mysql-test/r/gis.result 2006-11-25 21:12:06 +01:00
@@ -385,7 +385,7 @@
FROM gis_geometrycollection g1, gis_geometrycollection g2 ORDER BY first, second;
first second w c o e d t i r
120 120 1 1 0 1 0 0 1 0
-120 121 0 0 0 0 0 0 1 0
+120 121 0 0 1 0 0 0 1 0
121 120 0 0 1 0 0 0 1 0
121 121 1 1 0 1 0 0 1 0
explain extended SELECT g1.fid as first, g2.fid as second,
@@ -712,3 +712,62 @@
Field Type Null Key Default Extra
GeomFromText('point(1 1)') geometry NO
drop table t1;
+create table t1 (name VARCHAR(100), square GEOMETRY);
+INSERT INTO t1 VALUES("center", GeomFromText('POLYGON (( 0 0, 0 2, 2 2, 2 0, 0 0))'));
+INSERT INTO t1 VALUES("small", GeomFromText('POLYGON (( 0 0, 0 1, 1 1, 1 0, 0 0))'));
+INSERT INTO t1 VALUES("big", GeomFromText('POLYGON (( 0 0, 0 3, 3 3, 3 0, 0 0))'));
+INSERT INTO t1 VALUES("up", GeomFromText('POLYGON (( 0 1, 0 3, 2 3, 2 1, 0 1))'));
+INSERT INTO t1 VALUES("up2", GeomFromText('POLYGON (( 0 2, 0 4, 2 4, 2 2, 0 2))'));
+INSERT INTO t1 VALUES("up3", GeomFromText('POLYGON (( 0 3, 0 5, 2 5, 2 3, 0 3))'));
+INSERT INTO t1 VALUES("down", GeomFromText('POLYGON (( 0 -1, 0 1, 2 1, 2 -1, 0
-1))'));
+INSERT INTO t1 VALUES("down2", GeomFromText('POLYGON (( 0 -2, 0 0, 2 0, 2 -2, 0
-2))'));
+INSERT INTO t1 VALUES("down3", GeomFromText('POLYGON (( 0 -3, 0 -1, 2 -1, 2 -3, 0
-3))'));
+INSERT INTO t1 VALUES("right", GeomFromText('POLYGON (( 1 0, 1 2, 3 2, 3 0, 1 0))'));
+INSERT INTO t1 VALUES("right2", GeomFromText('POLYGON (( 2 0, 2 2, 4 2, 4 0, 2 0))'));
+INSERT INTO t1 VALUES("right3", GeomFromText('POLYGON (( 3 0, 3 2, 5 2, 5 0, 3 0))'));
+INSERT INTO t1 VALUES("left", GeomFromText('POLYGON (( -1 0, -1 2, 1 2, 1 0, -1
0))'));
+INSERT INTO t1 VALUES("left2", GeomFromText('POLYGON (( -2 0, -2 2, 0 2, 0 0, -2
0))'));
+INSERT INTO t1 VALUES("left3", GeomFromText('POLYGON (( -3 0, -3 2, -1 2, -1 0, -3
0))'));
+SELECT GROUP_CONCAT(a2.name) AS mbrcontains FROM t1 a1 JOIN t1 a2 ON MBRContains(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+mbrcontains
+center,small
+SELECT GROUP_CONCAT(a2.name) AS mbrdisjoint FROM t1 a1 JOIN t1 a2 ON MBRDisjoint(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+mbrdisjoint
+up3,down3,right3,left3
+SELECT GROUP_CONCAT(a2.name) AS mbrequal FROM t1 a1 JOIN t1 a2 ON MBREqual(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+mbrequal
+center
+SELECT GROUP_CONCAT(a2.name) AS mbrintersect FROM t1 a1 JOIN t1 a2 ON MBRIntersects(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+mbrintersect
+center,small,big,up,up2,down,down2,right,right2,left,left2
+SELECT GROUP_CONCAT(a2.name) AS mbroverlaps FROM t1 a1 JOIN t1 a2 ON MBROverlaps(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+mbroverlaps
+up,up2,down,down2,right,right2,left,left2
+SELECT GROUP_CONCAT(a2.name) AS mbrtouches FROM t1 a1 JOIN t1 a2 ON MBRTouches(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+mbrtouches
+up2,down2,right2,left2
+SELECT GROUP_CONCAT(a2.name) AS mbrwithin FROM t1 a1 JOIN t1 a2 ON MBRWithin(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+mbrwithin
+center,big
+SELECT GROUP_CONCAT(a2.name) AS contains FROM t1 a1 JOIN t1 a2 ON Contains(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+contains
+center,small
+SELECT GROUP_CONCAT(a2.name) AS disjoint FROM t1 a1 JOIN t1 a2 ON Disjoint(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+disjoint
+up3,down3,right3,left3
+SELECT GROUP_CONCAT(a2.name) AS equals FROM t1 a1 JOIN t1 a2 ON Equals(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+equals
+center
+SELECT GROUP_CONCAT(a2.name) AS intersect FROM t1 a1 JOIN t1 a2 ON Intersects(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+intersect
+center,small,big,up,up2,down,down2,right,right2,left,left2
+SELECT GROUP_CONCAT(a2.name) AS overlaps FROM t1 a1 JOIN t1 a2 ON Overlaps(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+overlaps
+up,up2,down,down2,right,right2,left,left2
+SELECT GROUP_CONCAT(a2.name) AS touches FROM t1 a1 JOIN t1 a2 ON Touches(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+touches
+up2,down2,right2,left2
+SELECT GROUP_CONCAT(a2.name) AS within FROM t1 a1 JOIN t1 a2 ON Within(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+within
+center,big
+DROP TABLE t1;
--- 1.31/mysql-test/t/gis.test 2006-11-17 21:28:43 +01:00
+++ 1.32/mysql-test/t/gis.test 2006-11-25 21:12:06 +01:00
@@ -422,3 +422,53 @@
desc t1;
drop table t1;
+#
+# Bug #54888 MBROverlaps missing in 5.1?
+#
+
+# test *all* MBR functions and their non-MBR counterparts here to make sure none is
missing
+# and check for spatial relation results in a readable format, too
+
+create table t1 (name VARCHAR(100), square GEOMETRY);
+
+INSERT INTO t1 VALUES("center", GeomFromText('POLYGON (( 0 0, 0 2, 2 2, 2 0, 0 0))'));
+
+INSERT INTO t1 VALUES("small", GeomFromText('POLYGON (( 0 0, 0 1, 1 1, 1 0, 0 0))'));
+INSERT INTO t1 VALUES("big", GeomFromText('POLYGON (( 0 0, 0 3, 3 3, 3 0, 0 0))'));
+
+INSERT INTO t1 VALUES("up", GeomFromText('POLYGON (( 0 1, 0 3, 2 3, 2 1, 0 1))'));
+INSERT INTO t1 VALUES("up2", GeomFromText('POLYGON (( 0 2, 0 4, 2 4, 2 2, 0 2))'));
+INSERT INTO t1 VALUES("up3", GeomFromText('POLYGON (( 0 3, 0 5, 2 5, 2 3, 0 3))'));
+
+INSERT INTO t1 VALUES("down", GeomFromText('POLYGON (( 0 -1, 0 1, 2 1, 2 -1, 0
-1))'));
+INSERT INTO t1 VALUES("down2", GeomFromText('POLYGON (( 0 -2, 0 0, 2 0, 2 -2, 0
-2))'));
+INSERT INTO t1 VALUES("down3", GeomFromText('POLYGON (( 0 -3, 0 -1, 2 -1, 2 -3, 0
-3))'));
+
+INSERT INTO t1 VALUES("right", GeomFromText('POLYGON (( 1 0, 1 2, 3 2, 3 0, 1 0))'));
+INSERT INTO t1 VALUES("right2", GeomFromText('POLYGON (( 2 0, 2 2, 4 2, 4 0, 2 0))'));
+INSERT INTO t1 VALUES("right3", GeomFromText('POLYGON (( 3 0, 3 2, 5 2, 5 0, 3 0))'));
+
+INSERT INTO t1 VALUES("left", GeomFromText('POLYGON (( -1 0, -1 2, 1 2, 1 0, -1
0))'));
+INSERT INTO t1 VALUES("left2", GeomFromText('POLYGON (( -2 0, -2 2, 0 2, 0 0, -2
0))'));
+INSERT INTO t1 VALUES("left3", GeomFromText('POLYGON (( -3 0, -3 2, -1 2, -1 0, -3
0))'));
+
+SELECT GROUP_CONCAT(a2.name) AS mbrcontains FROM t1 a1 JOIN t1 a2 ON MBRContains(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+SELECT GROUP_CONCAT(a2.name) AS mbrdisjoint FROM t1 a1 JOIN t1 a2 ON MBRDisjoint(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+SELECT GROUP_CONCAT(a2.name) AS mbrequal FROM t1 a1 JOIN t1 a2 ON MBREqual(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+SELECT GROUP_CONCAT(a2.name) AS mbrintersect FROM t1 a1 JOIN t1 a2 ON MBRIntersects(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+SELECT GROUP_CONCAT(a2.name) AS mbroverlaps FROM t1 a1 JOIN t1 a2 ON MBROverlaps(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+SELECT GROUP_CONCAT(a2.name) AS mbrtouches FROM t1 a1 JOIN t1 a2 ON MBRTouches(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+SELECT GROUP_CONCAT(a2.name) AS mbrwithin FROM t1 a1 JOIN t1 a2 ON MBRWithin(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+
+SELECT GROUP_CONCAT(a2.name) AS contains FROM t1 a1 JOIN t1 a2 ON Contains(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+SELECT GROUP_CONCAT(a2.name) AS disjoint FROM t1 a1 JOIN t1 a2 ON Disjoint(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+SELECT GROUP_CONCAT(a2.name) AS equals FROM t1 a1 JOIN t1 a2 ON Equals(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+SELECT GROUP_CONCAT(a2.name) AS intersect FROM t1 a1 JOIN t1 a2 ON Intersects(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+SELECT GROUP_CONCAT(a2.name) AS overlaps FROM t1 a1 JOIN t1 a2 ON Overlaps(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+SELECT GROUP_CONCAT(a2.name) AS touches FROM t1 a1 JOIN t1 a2 ON Touches(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+SELECT GROUP_CONCAT(a2.name) AS within FROM t1 a1 JOIN t1 a2 ON Within(
a1.square, a2.square) WHERE a1.name = "center" GROUP BY a1.name;
+
+DROP TABLE t1;
+
+
+
| Thread |
|---|
| • bk commit into 5.1 tree (hartmut:1.2396) BUG#24588 | 'Hartmut Holzgraefe' | 25 Nov |