[Commits] Rev 4269: MDEV-6073 Merge gis test cases form 5.6. in file:///home/hf/wmar/mdev-6073/

holyfoot at askmonty.org holyfoot at askmonty.org
Tue Jul 1 00:49:56 EEST 2014


At file:///home/hf/wmar/mdev-6073/

------------------------------------------------------------
revno: 4269
revision-id: holyfoot at askmonty.org-20140630193024-56wpcvwwy24kuzt4
parent: knielsen at knielsen-hq.org-20140630115921-qmt9ykg7aqop0ly6
committer: Alexey Botchkov <holyfoot at askmonty.org>
branch nick: mdev-6073
timestamp: Tue 2014-07-01 00:30:24 +0500
message:
  MDEV-6073 Merge gis test cases form 5.6.
          Tests were merged.
          As the implementation is different, the 'internal debugging' part
          was not merged, only a stub for it created.
-------------- next part --------------
=== added file 'mysql-test/include/gis_debug.inc'
--- a/mysql-test/include/gis_debug.inc	1970-01-01 00:00:00 +0000
+++ b/mysql-test/include/gis_debug.inc	2014-06-30 19:30:24 +0000
@@ -0,0 +1,161 @@
+#
+# This is a shared file included from t/gis-precise.test and t/gis-debug.test
+#
+# - gis-precise.test is executed both in debug and production builds
+# and makes sure that the checked GIS functions return the expected results.
+# 
+# - gis-debug.test is executed only in debug builds
+# (and is skipped in production builds).
+# gis-debug.test activates tracing of the internal GIS routines.
+# The trace log is printed to the client side warnings.
+# So gis-debug.test makes sure not only that the correct results are returned,
+# but also check *how* these results were generated - makes sure that
+# the internal GIS routines went through the expected data and code flow paths.
+#
+
+--disable_warnings
+DROP TABLE IF EXISTS p1;
+--enable_warnings
+
+DELIMITER |;
+CREATE PROCEDURE p1(dist DOUBLE, geom TEXT)
+BEGIN
+  DECLARE g GEOMETRY;
+  SET g=GeomFromText(geom);
+  SELECT geom AS `-----`;
+  SELECT dist, GeometryType(@buf:=ST_Buffer(g, dist)) AS `buffer`, ROUND(ST_AREA(@buf),2) AS buf_area;
+END|
+DELIMITER ;|
+
+--disable_query_log
+
+--echo #
+--echo # Testing ST_BUFFER with positive distance
+--echo #
+
+CALL p1(1, 'POINT(0 0))');
+CALL p1(1, 'LineString(0 1, 1 1))');
+CALL p1(1, 'LineString(9 9,8 1,1 5,0 0)');
+CALL p1(1, 'Polygon((2 2,2 8,8 8,8 2,2 2))');
+CALL p1(1, 'Polygon((0 0,0 8,8 8,8 0,0 0),(2 2,6 2,6 6,2 6,2 2))');
+CALL p1(1, 'Polygon((0 0, 0 8, 8 8, 8 10, -10 10, -10 0, 0 0))');
+CALL p1(1, 'MultiPoint(9 9,8 1,1 5)');
+CALL p1(1, 'MultiLineString((0 0,2 2))');
+CALL p1(1, 'MultiLineString((0 0,2 2,0 4))');
+CALL p1(1, 'MultiLineString((0 0,2 2),(0 2,2 0))');
+CALL p1(1, 'MultiLineString((2 2,2 8,-2 8),(-6 -6, 6 6),(10 10, 14 14))');
+CALL p1(1, 'MultiPolygon(((2 2,2 8,8 8,8 2,2 2)), ((9 9,8 1,1 5,9 9)))');
+CALL p1(1, 'MultiPolygon(((2 2,2 8,8 8,8 2,2 2), (4 4,4 6,6 6,6 4,4 4)),((9 9,8 1,1 5,9 9)))');
+CALL p1(1, 'GeometryCollection(Point(0 0))');
+CALL p1(1, 'GeometryCollection(LineString(0 0, 2 2)))');
+CALL p1(1, 'GeometryCollection(Polygon((2 2,2 8,8 8,8 2,2 2))))');
+CALL p1(1, 'GeometryCollection(MultiPoint(9 9,8 1,1 5))');
+CALL p1(1, 'GeometryCollection(MultiLineString((0 0,0 1),(3 0,3 1)))');
+CALL p1(1, 'GeometryCollection(MultiPolygon(((0 0, 3 0, 3 3, 0 3, 0 0)),((6 6,6 9,9 9,9 6,6 6))))');
+CALL p1(1, 'GeometryCollection(Point(9 9),LineString(1 5,0 0),Polygon((2 2,2 8,8 8,8 2,2 2)))');
+
+
+--echo #
+--echo # Testing ST_BUFFER with zero distance
+--echo #
+
+CALL p1(0, 'POINT(0 0))');
+CALL p1(0, 'LineString(0 1, 1 1))');
+CALL p1(0, 'LineString(9 9,8 1,1 5,0 0)');
+CALL p1(0, 'Polygon((2 2,2 8,8 8,8 2,2 2))');
+CALL p1(0, 'Polygon((0 0,0 8,8 8,8 0,0 0),(2 2,6 2,6 6,2 6,2 2))');
+CALL p1(0, 'Polygon((0 0, 0 8, 8 8, 8 10, -10 10, -10 0, 0 0))');
+CALL p1(0, 'MultiPoint(9 9,8 1,1 5)');
+CALL p1(0, 'MultiLineString((0 0,2 2))');
+CALL p1(0, 'MultiLineString((0 0,2 2,0 4))');
+CALL p1(0, 'MultiLineString((0 0,2 2),(0 2,2 0))');
+CALL p1(0, 'MultiLineString((2 2,2 8,-2 8),(-6 -6, 6 6),(10 10, 14 14))');
+CALL p1(0, 'MultiPolygon(((2 2,2 8,8 8,8 2,2 2)), ((9 9,8 1,1 5,9 9)))');
+CALL p1(0, 'MultiPolygon(((2 2,2 8,8 8,8 2,2 2), (4 4,4 6,6 6,6 4,4 4)),((9 9,8 1,1 5,9 9)))');
+CALL p1(0, 'GeometryCollection(Point(0 0))');
+CALL p1(0, 'GeometryCollection(LineString(0 0, 2 2)))');
+CALL p1(0, 'GeometryCollection(Polygon((2 2,2 8,8 8,8 2,2 2))))');
+CALL p1(0, 'GeometryCollection(MultiPoint(9 9,8 1,1 5))');
+CALL p1(0, 'GeometryCollection(MultiLineString((0 0,0 1),(3 0,3 1)))');
+CALL p1(0, 'GeometryCollection(MultiPolygon(((0 0, 3 0, 3 3, 0 3, 0 0)),((6 6,6 9,9 9,9 6,6 6))))');
+CALL p1(0, 'GeometryCollection(Point(9 9),LineString(1 5,0 0),Polygon((2 2,2 8,8 8,8 2,2 2)))');
+
+
+--echo #
+--echo # Testing ST_BUFFER with negative distance
+--echo #
+
+CALL p1(-1, 'POINT(0 0))');
+CALL p1(-1, 'LineString(0 1, 1 1))');
+CALL p1(-1, 'LineString(9 9,8 1,1 5,0 0)');
+CALL p1(-1, 'Polygon((2 2,2 8,8 8,8 2,2 2))');
+#
+# Wrong shape
+# CALL p1(-1, 'Polygon((0 0,0 8,8 8,8 0,0 0),(2 2,6 2,6 6,2 6,2 2))');
+# Wrong shape
+# CALL p1(-1, 'Polygon((0 0, 0 8, 8 8, 8 10, -10 10, -10 0, 0 0))');
+#
+CALL p1(-1, 'MultiPoint(9 9,8 1,1 5)');
+CALL p1(-1, 'MultiLineString((0 0,2 2))');
+CALL p1(-1, 'MultiLineString((0 0,2 2,0 4))');
+CALL p1(-1, 'MultiLineString((0 0,2 2),(0 2,2 0))');
+CALL p1(-1, 'MultiLineString((2 2,2 8,-2 8),(-6 -6, 6 6),(10 10, 14 14))');
+#
+# Wrong shape
+#CALL p1(-1, 'MultiPolygon(((2 2,2 8,8 8,8 2,2 2)), ((9 9,8 1,1 5,9 9)))');
+#CALL p1(-1, 'MultiPolygon(((2 2,2 8,8 8,8 2,2 2), (4 4,4 6,6 6,6 4,4 4)),((9 9,8 1,1 5,9 9)))');
+#
+CALL p1(-1, 'GeometryCollection(Point(0 0))');
+CALL p1(-1, 'GeometryCollection(LineString(0 0, 2 2)))');
+CALL p1(-1, 'GeometryCollection(Polygon((2 2,2 8,8 8,8 2,2 2))))');
+CALL p1(-1, 'GeometryCollection(MultiPoint(9 9,8 1,1 5))');
+CALL p1(-1, 'GeometryCollection(MultiLineString((0 0,0 1),(3 0,3 1)))');
+#
+# Wrong shape
+# CALL p1(-1, 'GeometryCollection(MultiPolygon(((0 0, 3 0, 3 3, 0 3, 0 0)),((6 6,6 9,9 9,9 6,6 6))))');
+#
+CALL p1(-1, 'GeometryCollection(Point(9 9),LineString(1 5,0 0),Polygon((2 2,2 8,8 8,8 2,2 2)))');
+
+
+--enable_query_log
+
+SELECT ST_CONTAINS(
+  GeomFromText('MULTIPOLYGON(((0 0, 0 5, 5 5, 5 0, 0 0)),((6 6, 6 11, 11 11, 11 6, 6 6)))'),
+  GeomFromText('POINT(5 10)'));
+SELECT AsText(ST_UNION(
+  GeomFromText('MULTIPOLYGON(((0 0, 0 5, 5 5, 5 0, 0 0)),((6 6, 6 11, 11 11, 11 6, 6 6)))'),
+  GeomFromText('POINT(5 10)')));
+
+DROP PROCEDURE p1;
+
+--echo #
+--echo # Bug #13833019 ASSERTION `T1->RESULT_RANGE' FAILED IN GCALC_OPERATION_REDUCER::END_COUPLE
+--echo #
+SELECT GeometryType(ST_BUFFER(MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((0 0,9 4,3 3,0 0)),((2 2,2 2,8 8,2 3,2 2)))'), 3));
+
+--echo #
+--echo # Bug #13832749  HANDLE_FATAL_SIGNAL IN GCALC_FUNCTION::COUNT_INTERNAL
+--echo #
+SELECT GeometryType(ST_BUFFER(MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((3 5,2 5,2 4,3 4,3 5)),((2 2,2 8,8 8,8 2,2 2), (4 4,4 6,6 6,6 4,4 4)), ((9 9,8 1,1 5,9 9)))'),1));
+
+
+--echo #
+--echo # Bug#13358363 - ASSERTION: N > 0 && N < SINUSES_CALCULATED*2+1 | GET_N_SINCOS/ADD_EDGE_BUFFER
+--echo #
+
+DO ST_BUFFER(ST_GEOMCOLLFROMTEXT('linestring(1 1,2 2)'),'');
+
+SELECT ST_WITHIN(
+        LINESTRINGFROMTEXT(' LINESTRING(3 8,9 2,3 8,3 3,7 6,4 7,4 7,8 1) '),
+        ST_BUFFER(MULTIPOLYGONFROMTEXT(' MULTIPOLYGON(((3 5,2 5,2 4,3 4,3 5)),((2 2,2 8,8 8,8 2,2 2),(4 4,4 6,6 6,6 4,4 4)),((0 5,3 5,3 2,1 2,1 1,3 1,3 0,0 0,0 3,2 3,2 4,0 4,0 5))) '),
+                  ST_NUMINTERIORRINGS(POLYGONFROMTEXT('POLYGON((3 5,2 4,2 5,3 5)) '))));
+
+SELECT ST_DIMENSION(ST_BUFFER(POLYGONFROMTEXT(' POLYGON((3 5,2 5,2 4,3 4,3 5)) '),
+                              ST_NUMINTERIORRINGS(POLYGONFROMTEXT(' POLYGON((0 0,9 3,4 2,0 0))'))));
+
+SELECT ST_NUMINTERIORRINGS(
+       ST_ENVELOPE(ST_BUFFER(MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((3 5,2 5,2 4,3 4,3 5))) '),
+                             SRID(MULTILINESTRINGFROMTEXT('MULTILINESTRING((2 2,4 2,1 2,2 4,2 2)) ')))));
+
+SELECT ASTEXT(ST_BUFFER(POLYGONFROMTEXT(' POLYGON((9 9,5 2,4 5,9 9))'),
+                        SRID(GEOMETRYFROMTEXT(' MULTIPOINT(8 4,5 0,7 8,6 9,3 4,7 3,5 5) '))));

=== modified file 'mysql-test/include/gis_generic.inc'
--- a/mysql-test/include/gis_generic.inc	2007-03-29 10:00:32 +0000
+++ b/mysql-test/include/gis_generic.inc	2014-06-30 19:30:24 +0000
@@ -72,6 +72,19 @@ INSERT into gis_geometry SELECT * FROM g
 INSERT into gis_geometry SELECT * FROM gis_multi_polygon;
 INSERT into gis_geometry SELECT * FROM gis_geometrycollection;
 
+-- disable_query_log
+-- disable_result_log
+ANALYZE TABLE gis_point;
+ANALYZE TABLE gis_line;
+ANALYZE TABLE gis_polygon;
+ANALYZE TABLE gis_multi_point;
+ANALYZE TABLE gis_multi_line;
+ANALYZE TABLE gis_multi_polygon;
+ANALYZE TABLE gis_geometrycollection;
+ANALYZE TABLE gis_geometry;
+-- enable_result_log
+-- enable_query_log
+
 SELECT fid, AsText(g) FROM gis_point ORDER by fid;
 SELECT fid, AsText(g) FROM gis_line ORDER by fid;
 SELECT fid, AsText(g) FROM gis_polygon ORDER by fid;

=== added file 'mysql-test/r/gis-debug.result'
--- a/mysql-test/r/gis-debug.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/r/gis-debug.result	2014-06-30 19:30:24 +0000
@@ -0,0 +1,294 @@
+SET @tmp=ST_GIS_DEBUG(1);
+DROP TABLE IF EXISTS p1;
+CREATE PROCEDURE p1(dist DOUBLE, geom TEXT)
+BEGIN
+DECLARE g GEOMETRY;
+SET g=GeomFromText(geom);
+SELECT geom AS `-----`;
+SELECT dist, GeometryType(@buf:=ST_Buffer(g, dist)) AS `buffer`, ROUND(ST_AREA(@buf),2) AS buf_area;
+END|
+#
+# Testing ST_BUFFER with positive distance
+#
+-----
+POINT(0 0))
+dist    buffer  buf_area
+1       POLYGON 3.14
+-----
+LineString(0 1, 1 1))
+dist    buffer  buf_area
+1       POLYGON 5.14
+-----
+LineString(9 9,8 1,1 5,0 0)
+dist    buffer  buf_area
+1       POLYGON 44.63
+-----
+Polygon((2 2,2 8,8 8,8 2,2 2))
+dist    buffer  buf_area
+1       POLYGON 63.14
+-----
+Polygon((0 0,0 8,8 8,8 0,0 0),(2 2,6 2,6 6,2 6,2 2))
+dist    buffer  buf_area
+1       POLYGON 95.14
+-----
+Polygon((0 0, 0 8, 8 8, 8 10, -10 10, -10 0, 0 0))
+dist    buffer  buf_area
+1       POLYGON 174.93
+-----
+MultiPoint(9 9,8 1,1 5)
+dist    buffer  buf_area
+1       MULTIPOLYGON    9.42
+-----
+MultiLineString((0 0,2 2))
+dist    buffer  buf_area
+1       POLYGON 8.80
+-----
+MultiLineString((0 0,2 2,0 4))
+dist    buffer  buf_area
+1       POLYGON 14.24
+-----
+MultiLineString((0 0,2 2),(0 2,2 0))
+dist    buffer  buf_area
+1       POLYGON 13.59
+-----
+MultiLineString((2 2,2 8,-2 8),(-6 -6, 6 6),(10 10, 14 14))
+dist    buffer  buf_area
+1       MULTIPOLYGON    70.06
+-----
+MultiPolygon(((2 2,2 8,8 8,8 2,2 2)), ((9 9,8 1,1 5,9 9)))
+dist    buffer  buf_area
+1       POLYGON 73.18
+-----
+MultiPolygon(((2 2,2 8,8 8,8 2,2 2), (4 4,4 6,6 6,6 4,4 4)),((9 9,8 1,1 5,9 9)))
+dist    buffer  buf_area
+1       POLYGON 73.18
+-----
+GeometryCollection(Point(0 0))
+dist    buffer  buf_area
+1       POLYGON 3.14
+-----
+GeometryCollection(LineString(0 0, 2 2)))
+dist    buffer  buf_area
+1       POLYGON 8.80
+-----
+GeometryCollection(Polygon((2 2,2 8,8 8,8 2,2 2))))
+dist    buffer  buf_area
+1       POLYGON 63.14
+-----
+GeometryCollection(MultiPoint(9 9,8 1,1 5))
+dist    buffer  buf_area
+1       MULTIPOLYGON    9.42
+-----
+GeometryCollection(MultiLineString((0 0,0 1),(3 0,3 1)))
+dist    buffer  buf_area
+1       MULTIPOLYGON    10.28
+-----
+GeometryCollection(MultiPolygon(((0 0, 3 0, 3 3, 0 3, 0 0)),((6 6,6 9,9 9,9 6,6 6))))
+dist    buffer  buf_area
+1       MULTIPOLYGON    48.28
+-----
+GeometryCollection(Point(9 9),LineString(1 5,0 0),Polygon((2 2,2 8,8 8,8 2,2 2)))
+dist    buffer  buf_area
+1       POLYGON 75.92
+#
+# Testing ST_BUFFER with zero distance
+#
+-----
+POINT(0 0))
+dist    buffer  buf_area
+0       POINT   0.00
+-----
+LineString(0 1, 1 1))
+dist    buffer  buf_area
+0       LINESTRING      0.00
+-----
+LineString(9 9,8 1,1 5,0 0)
+dist    buffer  buf_area
+0       LINESTRING      0.00
+-----
+Polygon((2 2,2 8,8 8,8 2,2 2))
+dist    buffer  buf_area
+0       POLYGON 36.00
+-----
+Polygon((0 0,0 8,8 8,8 0,0 0),(2 2,6 2,6 6,2 6,2 2))
+dist    buffer  buf_area
+0       POLYGON 48.00
+-----
+Polygon((0 0, 0 8, 8 8, 8 10, -10 10, -10 0, 0 0))
+dist    buffer  buf_area
+0       POLYGON 116.00
+-----
+MultiPoint(9 9,8 1,1 5)
+dist    buffer  buf_area
+0       MULTIPOINT      NULL
+-----
+MultiLineString((0 0,2 2))
+dist    buffer  buf_area
+0       MULTILINESTRING NULL
+-----
+MultiLineString((0 0,2 2,0 4))
+dist    buffer  buf_area
+0       MULTILINESTRING NULL
+-----
+MultiLineString((0 0,2 2),(0 2,2 0))
+dist    buffer  buf_area
+0       MULTILINESTRING NULL
+-----
+MultiLineString((2 2,2 8,-2 8),(-6 -6, 6 6),(10 10, 14 14))
+dist    buffer  buf_area
+0       MULTILINESTRING NULL
+-----
+MultiPolygon(((2 2,2 8,8 8,8 2,2 2)), ((9 9,8 1,1 5,9 9)))
+dist    buffer  buf_area
+0       MULTIPOLYGON    66.00
+-----
+MultiPolygon(((2 2,2 8,8 8,8 2,2 2), (4 4,4 6,6 6,6 4,4 4)),((9 9,8 1,1 5,9 9)))
+dist    buffer  buf_area
+0       MULTIPOLYGON    62.00
+-----
+GeometryCollection(Point(0 0))
+dist    buffer  buf_area
+0       GEOMETRYCOLLECTION      0.00
+-----
+GeometryCollection(LineString(0 0, 2 2)))
+dist    buffer  buf_area
+0       GEOMETRYCOLLECTION      0.00
+-----
+GeometryCollection(Polygon((2 2,2 8,8 8,8 2,2 2))))
+dist    buffer  buf_area
+0       GEOMETRYCOLLECTION      36.00
+-----
+GeometryCollection(MultiPoint(9 9,8 1,1 5))
+dist    buffer  buf_area
+0       GEOMETRYCOLLECTION      NULL
+-----
+GeometryCollection(MultiLineString((0 0,0 1),(3 0,3 1)))
+dist    buffer  buf_area
+0       GEOMETRYCOLLECTION      NULL
+-----
+GeometryCollection(MultiPolygon(((0 0, 3 0, 3 3, 0 3, 0 0)),((6 6,6 9,9 9,9 6,6 6))))
+dist    buffer  buf_area
+0       GEOMETRYCOLLECTION      18.00
+-----
+GeometryCollection(Point(9 9),LineString(1 5,0 0),Polygon((2 2,2 8,8 8,8 2,2 2)))
+dist    buffer  buf_area
+0       GEOMETRYCOLLECTION      36.00
+#
+# Testing ST_BUFFER with negative distance
+#
+-----
+POINT(0 0))
+dist    buffer  buf_area
+-1      GEOMETRYCOLLECTION      0.00
+-----
+LineString(0 1, 1 1))
+dist    buffer  buf_area
+-1      GEOMETRYCOLLECTION      0.00
+-----
+LineString(9 9,8 1,1 5,0 0)
+dist    buffer  buf_area
+-1      GEOMETRYCOLLECTION      0.00
+-----
+Polygon((2 2,2 8,8 8,8 2,2 2))
+dist    buffer  buf_area
+-1      POLYGON 16.00
+-----
+MultiPoint(9 9,8 1,1 5)
+dist    buffer  buf_area
+-1      GEOMETRYCOLLECTION      0.00
+-----
+MultiLineString((0 0,2 2))
+dist    buffer  buf_area
+-1      GEOMETRYCOLLECTION      0.00
+-----
+MultiLineString((0 0,2 2,0 4))
+dist    buffer  buf_area
+-1      GEOMETRYCOLLECTION      0.00
+-----
+MultiLineString((0 0,2 2),(0 2,2 0))
+dist    buffer  buf_area
+-1      GEOMETRYCOLLECTION      0.00
+-----
+MultiLineString((2 2,2 8,-2 8),(-6 -6, 6 6),(10 10, 14 14))
+dist    buffer  buf_area
+-1      GEOMETRYCOLLECTION      0.00
+-----
+GeometryCollection(Point(0 0))
+dist    buffer  buf_area
+-1      GEOMETRYCOLLECTION      0.00
+-----
+GeometryCollection(LineString(0 0, 2 2)))
+dist    buffer  buf_area
+-1      GEOMETRYCOLLECTION      0.00
+-----
+GeometryCollection(Polygon((2 2,2 8,8 8,8 2,2 2))))
+dist    buffer  buf_area
+-1      POLYGON 16.00
+-----
+GeometryCollection(MultiPoint(9 9,8 1,1 5))
+dist    buffer  buf_area
+-1      GEOMETRYCOLLECTION      0.00
+-----
+GeometryCollection(MultiLineString((0 0,0 1),(3 0,3 1)))
+dist    buffer  buf_area
+-1      GEOMETRYCOLLECTION      0.00
+-----
+GeometryCollection(Point(9 9),LineString(1 5,0 0),Polygon((2 2,2 8,8 8,8 2,2 2)))
+dist    buffer  buf_area
+-1      POLYGON 16.00
+SELECT ST_CONTAINS(
+GeomFromText('MULTIPOLYGON(((0 0, 0 5, 5 5, 5 0, 0 0)),((6 6, 6 11, 11 11, 11 6, 6 6)))'),
+GeomFromText('POINT(5 10)'));
+ST_CONTAINS(
+GeomFromText('MULTIPOLYGON(((0 0, 0 5, 5 5, 5 0, 0 0)),((6 6, 6 11, 11 11, 11 6, 6 6)))'),
+GeomFromText('POINT(5 10)'))
+0
+SELECT AsText(ST_UNION(
+GeomFromText('MULTIPOLYGON(((0 0, 0 5, 5 5, 5 0, 0 0)),((6 6, 6 11, 11 11, 11 6, 6 6)))'),
+GeomFromText('POINT(5 10)')));
+AsText(ST_UNION(
+GeomFromText('MULTIPOLYGON(((0 0, 0 5, 5 5, 5 0, 0 0)),((6 6, 6 11, 11 11, 11 6, 6 6)))'),
+GeomFromText('POINT(5 10)')))
+GEOMETRYCOLLECTION(POLYGON((0 0,0 5,5 5,5 0,0 0)),POLYGON((6 6,6 11,11 11,11 6,6 6)),POINT(5 10))
+DROP PROCEDURE p1;
+#
+# Bug #13833019 ASSERTION `T1->RESULT_RANGE' FAILED IN GCALC_OPERATION_REDUCER::END_COUPLE
+#
+SELECT GeometryType(ST_BUFFER(MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((0 0,9 4,3 3,0 0)),((2 2,2 2,8 8,2 3,2 2)))'), 3));
+GeometryType(ST_BUFFER(MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((0 0,9 4,3 3,0 0)),((2 2,2 2,8 8,2 3,2 2)))'), 3))
+POLYGON
+#
+# Bug #13832749         HANDLE_FATAL_SIGNAL IN GCALC_FUNCTION::COUNT_INTERNAL
+#
+SELECT GeometryType(ST_BUFFER(MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((3 5,2 5,2 4,3 4,3 5)),((2 2,2 8,8 8,8 2,2 2), (4 4,4 6,6 6,6 4,4 4)), ((9 9,8 1,1 5,9 9)))'),1));
+GeometryType(ST_BUFFER(MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((3 5,2 5,2 4,3 4,3 5)),((2 2,2 8,8 8,8 2,2 2), (4 4,4 6,6 6,6 4,4 4)), ((9 9,8 1,1 5,9 9)))'),1))
+POLYGON
+#
+# Bug#13358363 - ASSERTION: N > 0 && N < SINUSES_CALCULATED*2+1 | GET_N_SINCOS/ADD_EDGE_BUFFER
+#
+DO ST_BUFFER(ST_GEOMCOLLFROMTEXT('linestring(1 1,2 2)'),'');
+SELECT ST_WITHIN(
+LINESTRINGFROMTEXT(' LINESTRING(3 8,9 2,3 8,3 3,7 6,4 7,4 7,8 1) '),
+ST_BUFFER(MULTIPOLYGONFROMTEXT(' MULTIPOLYGON(((3 5,2 5,2 4,3 4,3 5)),((2 2,2 8,8 8,8 2,2 2),(4 4,4 6,6 6,6 4,4 4)),((0 5,3 5,3 2,1 2,1 1,3 1,3 0,0 0,0 3,2 3,2 4,0 4,0 5))) '),
+ST_NUMINTERIORRINGS(POLYGONFROMTEXT('POLYGON((3 5,2 4,2 5,3 5)) '))));
+ST_WITHIN(
+LINESTRINGFROMTEXT(' LINESTRING(3 8,9 2,3 8,3 3,7 6,4 7,4 7,8 1) '),
+ST_BUFFER(MULTIPOLYGONFROMTEXT(' MULTIPOLYGON(((3 5,2 5,2 4,3 4,3 5)),((2 2,2 8,8 8,8 2,2 2),(4 4,4 6,6 6,6 4,4 4)),((0 5,3 5,3 2,1 2,1 1,3 1,3 0,0 0,0 3,2 3,2 4,0 4,0 5))) ')
+0
+SELECT ST_DIMENSION(ST_BUFFER(POLYGONFROMTEXT(' POLYGON((3 5,2 5,2 4,3 4,3 5)) '),
+ST_NUMINTERIORRINGS(POLYGONFROMTEXT(' POLYGON((0 0,9 3,4 2,0 0))'))));
+ST_DIMENSION(ST_BUFFER(POLYGONFROMTEXT(' POLYGON((3 5,2 5,2 4,3 4,3 5)) '),
+ST_NUMINTERIORRINGS(POLYGONFROMTEXT(' POLYGON((0 0,9 3,4 2,0 0))'))))
+2
+SELECT ST_NUMINTERIORRINGS(
+ST_ENVELOPE(ST_BUFFER(MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((3 5,2 5,2 4,3 4,3 5))) '),
+SRID(MULTILINESTRINGFROMTEXT('MULTILINESTRING((2 2,4 2,1 2,2 4,2 2)) ')))));
+ST_NUMINTERIORRINGS(
+ST_ENVELOPE(ST_BUFFER(MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((3 5,2 5,2 4,3 4,3 5))) '),
+SRID(MULTILINESTRINGFROMTEXT('MULTILINESTRING((2 2,4 2,1 2,2 4,2 2)) ')))))
+0
+SELECT ASTEXT(ST_BUFFER(POLYGONFROMTEXT(' POLYGON((9 9,5 2,4 5,9 9))'),
+SRID(GEOMETRYFROMTEXT(' MULTIPOINT(8 4,5 0,7 8,6 9,3 4,7 3,5 5) '))));
+ASTEXT(ST_BUFFER(POLYGONFROMTEXT(' POLYGON((9 9,5 2,4 5,9 9))'),
+SRID(GEOMETRYFROMTEXT(' MULTIPOINT(8 4,5 0,7 8,6 9,3 4,7 3,5 5) '))))
+POLYGON((9 9,5 2,4 5,9 9))

=== modified file 'mysql-test/r/gis-precise.result'
--- a/mysql-test/r/gis-precise.result	2014-02-22 21:51:20 +0000
+++ b/mysql-test/r/gis-precise.result	2014-06-30 19:30:24 +0000
@@ -200,6 +200,31 @@ result
 SELECT ST_Equals(PointFromText('POINT (12 13)'),PointFromText('POINT (12 13)')) as result;
 result
 1
+#
+# BUG#11755628/47429: INTERSECTION FUNCTION CRASHED MYSQLD 
+# BUG#11759650/51979: UNION/INTERSECTION OF POLYGONS CRASHES MYSQL 
+#
+SELECT ASTEXT(ST_UNION(GEOMFROMTEXT('POLYGON((525000 183300,525400
+183300,525400 18370, 525000 183700,525000 183300))'),
+geomfromtext('POLYGON((525298.67 183511.53,525296.57
+183510.39,525296.42 183510.31,525289.11 183506.62,525283.17
+183503.47,525280.98 183502.26,525278.63 183500.97,525278.39
+183500.84,525276.79 183500,525260.7 183491.55,525263.95
+183484.75,525265.58 183481.95,525278.97 183488.73,525276.5
+183493.45,525275.5 183495.7,525280.35 183498.2,525282.3
+183499.1,525282.2 183499.3,525283.55 183500,525301.75
+183509.35,525304.45 183504.25,525307.85 183504.95,525304.5
+183510.83,525302.81 183513.8,525298.67 183511.53),(525275.06
+183489.89,525272.06 183488.37,525268.94 183494.51,525271.94
+183496.03,525275.06 183489.89),(525263.26 183491.55,525266.15
+183493.04,525269.88 183485.82,525266.99 183484.33,525263.26
+183491.55))'))) st_u;
+st_u
+MULTIPOLYGON(((525400 18370,525000.9677614468 183300,525400 183300,525400 18370)),((525000 183300,525000 183700,525000.9677614468 183300,525000 183300)),((525265.58 183481.95,525263.95 183484.75,525260.7 183491.55,525276.79 183500,525278.39 183500.84,525278.63 183500.97,525280.98 183502.26,525283.17 183503.47,525289.11 183506.62,525296.42 183510.31,525296.57 183510.39,525298.67 183511.53,525302.81 183513.8,525304.5 183510.83,525307.85 183504.95,525304.45 183504.25,525301.75 183509.35,525283.55 183500,525282.2 183499.3,525282.3 183499.1,525280.35 183498.2,525275.5 183495.7,525276.5 183493.45,525278.97 183488.73,525265.58 183481.95),(525266.99 183484.33,525263.26 183491.55,525266.15 183493.04,525269.88 183485.82,525266.99 183484.33),(525272.06 183488.37,525268.94 183494.51,525271.94 183496.03,525275.06 183489.89,525272.06 183488.37)))
+SET @a=0x0000000001030000000200000005000000000000000000000000000000000000000000000000002440000000000000000000000000000024400000000000002440000000000000000000000000000024400000000000000000000000000000000000000000000000000000F03F000000000000F03F0000000000000040000000000000F03F00000000000000400000000000000040000000000000F03F0000000000000040000000000000F03F000000000000F03F;
+SELECT ASTEXT(TOUCHES(@a, GEOMFROMTEXT('point(0 0)'))) t;
+t
+NULL
 SELECT astext(ST_UNION (
 PolyFromText('POLYGON(( 2 2 ,3 2,2 7,2 2),( 0 0,8 2,1 9,0 0))'),
 ExteriorRing( Envelope( MultiLineStringFromText('MULTILINESTRING((3 4,5 3),(3 0,0 5))')))));
@@ -455,3 +480,296 @@ ST_NUMPOINTS(ST_EXTERIORRING(ST_BUFFER( 
 select astext(buffer(st_linestringfromwkb(linestring(point(-1,1), point(-1,-2))),-1));
 astext(buffer(st_linestringfromwkb(linestring(point(-1,1), point(-1,-2))),-1))
 GEOMETRYCOLLECTION EMPTY
+DROP TABLE IF EXISTS p1;
+CREATE PROCEDURE p1(dist DOUBLE, geom TEXT)
+BEGIN
+DECLARE g GEOMETRY;
+SET g=GeomFromText(geom);
+SELECT geom AS `-----`;
+SELECT dist, GeometryType(@buf:=ST_Buffer(g, dist)) AS `buffer`, ROUND(ST_AREA(@buf),2) AS buf_area;
+END|
+#
+# Testing ST_BUFFER with positive distance
+#
+-----
+POINT(0 0))
+dist    buffer  buf_area
+1       POLYGON 3.14
+-----
+LineString(0 1, 1 1))
+dist    buffer  buf_area
+1       POLYGON 5.14
+-----
+LineString(9 9,8 1,1 5,0 0)
+dist    buffer  buf_area
+1       POLYGON 44.63
+-----
+Polygon((2 2,2 8,8 8,8 2,2 2))
+dist    buffer  buf_area
+1       POLYGON 63.14
+-----
+Polygon((0 0,0 8,8 8,8 0,0 0),(2 2,6 2,6 6,2 6,2 2))
+dist    buffer  buf_area
+1       POLYGON 95.14
+-----
+Polygon((0 0, 0 8, 8 8, 8 10, -10 10, -10 0, 0 0))
+dist    buffer  buf_area
+1       POLYGON 174.93
+-----
+MultiPoint(9 9,8 1,1 5)
+dist    buffer  buf_area
+1       MULTIPOLYGON    9.42
+-----
+MultiLineString((0 0,2 2))
+dist    buffer  buf_area
+1       POLYGON 8.80
+-----
+MultiLineString((0 0,2 2,0 4))
+dist    buffer  buf_area
+1       POLYGON 14.24
+-----
+MultiLineString((0 0,2 2),(0 2,2 0))
+dist    buffer  buf_area
+1       POLYGON 13.59
+-----
+MultiLineString((2 2,2 8,-2 8),(-6 -6, 6 6),(10 10, 14 14))
+dist    buffer  buf_area
+1       MULTIPOLYGON    70.06
+-----
+MultiPolygon(((2 2,2 8,8 8,8 2,2 2)), ((9 9,8 1,1 5,9 9)))
+dist    buffer  buf_area
+1       POLYGON 73.18
+-----
+MultiPolygon(((2 2,2 8,8 8,8 2,2 2), (4 4,4 6,6 6,6 4,4 4)),((9 9,8 1,1 5,9 9)))
+dist    buffer  buf_area
+1       POLYGON 73.18
+-----
+GeometryCollection(Point(0 0))
+dist    buffer  buf_area
+1       POLYGON 3.14
+-----
+GeometryCollection(LineString(0 0, 2 2)))
+dist    buffer  buf_area
+1       POLYGON 8.80
+-----
+GeometryCollection(Polygon((2 2,2 8,8 8,8 2,2 2))))
+dist    buffer  buf_area
+1       POLYGON 63.14
+-----
+GeometryCollection(MultiPoint(9 9,8 1,1 5))
+dist    buffer  buf_area
+1       MULTIPOLYGON    9.42
+-----
+GeometryCollection(MultiLineString((0 0,0 1),(3 0,3 1)))
+dist    buffer  buf_area
+1       MULTIPOLYGON    10.28
+-----
+GeometryCollection(MultiPolygon(((0 0, 3 0, 3 3, 0 3, 0 0)),((6 6,6 9,9 9,9 6,6 6))))
+dist    buffer  buf_area
+1       MULTIPOLYGON    48.28
+-----
+GeometryCollection(Point(9 9),LineString(1 5,0 0),Polygon((2 2,2 8,8 8,8 2,2 2)))
+dist    buffer  buf_area
+1       POLYGON 75.92
+#
+# Testing ST_BUFFER with zero distance
+#
+-----
+POINT(0 0))
+dist    buffer  buf_area
+0       POINT   0.00
+-----
+LineString(0 1, 1 1))
+dist    buffer  buf_area
+0       LINESTRING      0.00
+-----
+LineString(9 9,8 1,1 5,0 0)
+dist    buffer  buf_area
+0       LINESTRING      0.00
+-----
+Polygon((2 2,2 8,8 8,8 2,2 2))
+dist    buffer  buf_area
+0       POLYGON 36.00
+-----
+Polygon((0 0,0 8,8 8,8 0,0 0),(2 2,6 2,6 6,2 6,2 2))
+dist    buffer  buf_area
+0       POLYGON 48.00
+-----
+Polygon((0 0, 0 8, 8 8, 8 10, -10 10, -10 0, 0 0))
+dist    buffer  buf_area
+0       POLYGON 116.00
+-----
+MultiPoint(9 9,8 1,1 5)
+dist    buffer  buf_area
+0       MULTIPOINT      NULL
+-----
+MultiLineString((0 0,2 2))
+dist    buffer  buf_area
+0       MULTILINESTRING NULL
+-----
+MultiLineString((0 0,2 2,0 4))
+dist    buffer  buf_area
+0       MULTILINESTRING NULL
+-----
+MultiLineString((0 0,2 2),(0 2,2 0))
+dist    buffer  buf_area
+0       MULTILINESTRING NULL
+-----
+MultiLineString((2 2,2 8,-2 8),(-6 -6, 6 6),(10 10, 14 14))
+dist    buffer  buf_area
+0       MULTILINESTRING NULL
+-----
+MultiPolygon(((2 2,2 8,8 8,8 2,2 2)), ((9 9,8 1,1 5,9 9)))
+dist    buffer  buf_area
+0       MULTIPOLYGON    66.00
+-----
+MultiPolygon(((2 2,2 8,8 8,8 2,2 2), (4 4,4 6,6 6,6 4,4 4)),((9 9,8 1,1 5,9 9)))
+dist    buffer  buf_area
+0       MULTIPOLYGON    62.00
+-----
+GeometryCollection(Point(0 0))
+dist    buffer  buf_area
+0       GEOMETRYCOLLECTION      0.00
+-----
+GeometryCollection(LineString(0 0, 2 2)))
+dist    buffer  buf_area
+0       GEOMETRYCOLLECTION      0.00
+-----
+GeometryCollection(Polygon((2 2,2 8,8 8,8 2,2 2))))
+dist    buffer  buf_area
+0       GEOMETRYCOLLECTION      36.00
+-----
+GeometryCollection(MultiPoint(9 9,8 1,1 5))
+dist    buffer  buf_area
+0       GEOMETRYCOLLECTION      NULL
+-----
+GeometryCollection(MultiLineString((0 0,0 1),(3 0,3 1)))
+dist    buffer  buf_area
+0       GEOMETRYCOLLECTION      NULL
+-----
+GeometryCollection(MultiPolygon(((0 0, 3 0, 3 3, 0 3, 0 0)),((6 6,6 9,9 9,9 6,6 6))))
+dist    buffer  buf_area
+0       GEOMETRYCOLLECTION      18.00
+-----
+GeometryCollection(Point(9 9),LineString(1 5,0 0),Polygon((2 2,2 8,8 8,8 2,2 2)))
+dist    buffer  buf_area
+0       GEOMETRYCOLLECTION      36.00
+#
+# Testing ST_BUFFER with negative distance
+#
+-----
+POINT(0 0))
+dist    buffer  buf_area
+-1      GEOMETRYCOLLECTION      0.00
+-----
+LineString(0 1, 1 1))
+dist    buffer  buf_area
+-1      GEOMETRYCOLLECTION      0.00
+-----
+LineString(9 9,8 1,1 5,0 0)
+dist    buffer  buf_area
+-1      GEOMETRYCOLLECTION      0.00
+-----
+Polygon((2 2,2 8,8 8,8 2,2 2))
+dist    buffer  buf_area
+-1      POLYGON 16.00
+-----
+MultiPoint(9 9,8 1,1 5)
+dist    buffer  buf_area
+-1      GEOMETRYCOLLECTION      0.00
+-----
+MultiLineString((0 0,2 2))
+dist    buffer  buf_area
+-1      GEOMETRYCOLLECTION      0.00
+-----
+MultiLineString((0 0,2 2,0 4))
+dist    buffer  buf_area
+-1      GEOMETRYCOLLECTION      0.00
+-----
+MultiLineString((0 0,2 2),(0 2,2 0))
+dist    buffer  buf_area
+-1      GEOMETRYCOLLECTION      0.00
+-----
+MultiLineString((2 2,2 8,-2 8),(-6 -6, 6 6),(10 10, 14 14))
+dist    buffer  buf_area
+-1      GEOMETRYCOLLECTION      0.00
+-----
+GeometryCollection(Point(0 0))
+dist    buffer  buf_area
+-1      GEOMETRYCOLLECTION      0.00
+-----
+GeometryCollection(LineString(0 0, 2 2)))
+dist    buffer  buf_area
+-1      GEOMETRYCOLLECTION      0.00
+-----
+GeometryCollection(Polygon((2 2,2 8,8 8,8 2,2 2))))
+dist    buffer  buf_area
+-1      POLYGON 16.00
+-----
+GeometryCollection(MultiPoint(9 9,8 1,1 5))
+dist    buffer  buf_area
+-1      GEOMETRYCOLLECTION      0.00
+-----
+GeometryCollection(MultiLineString((0 0,0 1),(3 0,3 1)))
+dist    buffer  buf_area
+-1      GEOMETRYCOLLECTION      0.00
+-----
+GeometryCollection(Point(9 9),LineString(1 5,0 0),Polygon((2 2,2 8,8 8,8 2,2 2)))
+dist    buffer  buf_area
+-1      POLYGON 16.00
+SELECT ST_CONTAINS(
+GeomFromText('MULTIPOLYGON(((0 0, 0 5, 5 5, 5 0, 0 0)),((6 6, 6 11, 11 11, 11 6, 6 6)))'),
+GeomFromText('POINT(5 10)'));
+ST_CONTAINS(
+GeomFromText('MULTIPOLYGON(((0 0, 0 5, 5 5, 5 0, 0 0)),((6 6, 6 11, 11 11, 11 6, 6 6)))'),
+GeomFromText('POINT(5 10)'))
+0
+SELECT AsText(ST_UNION(
+GeomFromText('MULTIPOLYGON(((0 0, 0 5, 5 5, 5 0, 0 0)),((6 6, 6 11, 11 11, 11 6, 6 6)))'),
+GeomFromText('POINT(5 10)')));
+AsText(ST_UNION(
+GeomFromText('MULTIPOLYGON(((0 0, 0 5, 5 5, 5 0, 0 0)),((6 6, 6 11, 11 11, 11 6, 6 6)))'),
+GeomFromText('POINT(5 10)')))
+GEOMETRYCOLLECTION(POLYGON((0 0,0 5,5 5,5 0,0 0)),POLYGON((6 6,6 11,11 11,11 6,6 6)),POINT(5 10))
+DROP PROCEDURE p1;
+#
+# Bug #13833019 ASSERTION `T1->RESULT_RANGE' FAILED IN GCALC_OPERATION_REDUCER::END_COUPLE
+#
+SELECT GeometryType(ST_BUFFER(MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((0 0,9 4,3 3,0 0)),((2 2,2 2,8 8,2 3,2 2)))'), 3));
+GeometryType(ST_BUFFER(MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((0 0,9 4,3 3,0 0)),((2 2,2 2,8 8,2 3,2 2)))'), 3))
+POLYGON
+#
+# Bug #13832749         HANDLE_FATAL_SIGNAL IN GCALC_FUNCTION::COUNT_INTERNAL
+#
+SELECT GeometryType(ST_BUFFER(MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((3 5,2 5,2 4,3 4,3 5)),((2 2,2 8,8 8,8 2,2 2), (4 4,4 6,6 6,6 4,4 4)), ((9 9,8 1,1 5,9 9)))'),1));
+GeometryType(ST_BUFFER(MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((3 5,2 5,2 4,3 4,3 5)),((2 2,2 8,8 8,8 2,2 2), (4 4,4 6,6 6,6 4,4 4)), ((9 9,8 1,1 5,9 9)))'),1))
+POLYGON
+#
+# Bug#13358363 - ASSERTION: N > 0 && N < SINUSES_CALCULATED*2+1 | GET_N_SINCOS/ADD_EDGE_BUFFER
+#
+DO ST_BUFFER(ST_GEOMCOLLFROMTEXT('linestring(1 1,2 2)'),'');
+SELECT ST_WITHIN(
+LINESTRINGFROMTEXT(' LINESTRING(3 8,9 2,3 8,3 3,7 6,4 7,4 7,8 1) '),
+ST_BUFFER(MULTIPOLYGONFROMTEXT(' MULTIPOLYGON(((3 5,2 5,2 4,3 4,3 5)),((2 2,2 8,8 8,8 2,2 2),(4 4,4 6,6 6,6 4,4 4)),((0 5,3 5,3 2,1 2,1 1,3 1,3 0,0 0,0 3,2 3,2 4,0 4,0 5))) '),
+ST_NUMINTERIORRINGS(POLYGONFROMTEXT('POLYGON((3 5,2 4,2 5,3 5)) '))));
+ST_WITHIN(
+LINESTRINGFROMTEXT(' LINESTRING(3 8,9 2,3 8,3 3,7 6,4 7,4 7,8 1) '),
+ST_BUFFER(MULTIPOLYGONFROMTEXT(' MULTIPOLYGON(((3 5,2 5,2 4,3 4,3 5)),((2 2,2 8,8 8,8 2,2 2),(4 4,4 6,6 6,6 4,4 4)),((0 5,3 5,3 2,1 2,1 1,3 1,3 0,0 0,0 3,2 3,2 4,0 4,0 5))) ')
+0
+SELECT ST_DIMENSION(ST_BUFFER(POLYGONFROMTEXT(' POLYGON((3 5,2 5,2 4,3 4,3 5)) '),
+ST_NUMINTERIORRINGS(POLYGONFROMTEXT(' POLYGON((0 0,9 3,4 2,0 0))'))));
+ST_DIMENSION(ST_BUFFER(POLYGONFROMTEXT(' POLYGON((3 5,2 5,2 4,3 4,3 5)) '),
+ST_NUMINTERIORRINGS(POLYGONFROMTEXT(' POLYGON((0 0,9 3,4 2,0 0))'))))
+2
+SELECT ST_NUMINTERIORRINGS(
+ST_ENVELOPE(ST_BUFFER(MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((3 5,2 5,2 4,3 4,3 5))) '),
+SRID(MULTILINESTRINGFROMTEXT('MULTILINESTRING((2 2,4 2,1 2,2 4,2 2)) ')))));
+ST_NUMINTERIORRINGS(
+ST_ENVELOPE(ST_BUFFER(MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((3 5,2 5,2 4,3 4,3 5))) '),
+SRID(MULTILINESTRINGFROMTEXT('MULTILINESTRING((2 2,4 2,1 2,2 4,2 2)) ')))))
+0
+SELECT ASTEXT(ST_BUFFER(POLYGONFROMTEXT(' POLYGON((9 9,5 2,4 5,9 9))'),
+SRID(GEOMETRYFROMTEXT(' MULTIPOINT(8 4,5 0,7 8,6 9,3 4,7 3,5 5) '))));
+ASTEXT(ST_BUFFER(POLYGONFROMTEXT(' POLYGON((9 9,5 2,4 5,9 9))'),
+SRID(GEOMETRYFROMTEXT(' MULTIPOINT(8 4,5 0,7 8,6 9,3 4,7 3,5 5) '))))
+POLYGON((9 9,5 2,4 5,9 9))

=== modified file 'mysql-test/r/gis.result'
--- a/mysql-test/r/gis.result	2014-02-26 14:28:07 +0000
+++ b/mysql-test/r/gis.result	2014-06-30 19:30:24 +0000
@@ -834,6 +834,17 @@ create table t1 (g geometry not null);
 insert into t1 values(default);
 ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
 drop table t1;
+CREATE TABLE t1 (a GEOMETRY);
+CREATE VIEW v1 AS SELECT GeomFromwkb(ASBINARY(a)) FROM t1;
+CREATE VIEW v2 AS SELECT a FROM t1;
+DESCRIBE v1;
+Field   Type    Null    Key     Default Extra
+GeomFromwkb(ASBINARY(a))        geometry        YES             NULL    
+DESCRIBE v2;
+Field   Type    Null    Key     Default Extra
+a       geometry        YES             NULL    
+DROP VIEW v1,v2;
+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))'));

=== added file 'mysql-test/t/gis-debug.test'
--- a/mysql-test/t/gis-debug.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/t/gis-debug.test	2014-06-30 19:30:24 +0000
@@ -0,0 +1,6 @@
+--source include/have_geometry.inc
+--source include/have_debug.inc
+
+SET @tmp=ST_GIS_DEBUG(1);
+
+--source include/gis_debug.inc

=== modified file 'mysql-test/t/gis-precise.test'
--- a/mysql-test/t/gis-precise.test	2014-02-22 21:51:20 +0000
+++ b/mysql-test/t/gis-precise.test	2014-06-30 19:30:24 +0000
@@ -108,6 +108,32 @@ SELECT ST_Equals(PolyFromText('POLYGON((
 SELECT ST_Equals(PolyFromText('POLYGON((67 13, 67 18, 67 18, 59 18, 59 13, 67 13) )'),PolyFromText('POLYGON((67 13, 67 18, 59 18, 59 13, 59 13, 67 13) )')) as result;
 SELECT ST_Equals(PointFromText('POINT (12 13)'),PointFromText('POINT (12 13)')) as result;
 
+
+--echo #
+--echo # BUG#11755628/47429: INTERSECTION FUNCTION CRASHED MYSQLD 
+--echo # BUG#11759650/51979: UNION/INTERSECTION OF POLYGONS CRASHES MYSQL 
+--echo #
+
+SELECT ASTEXT(ST_UNION(GEOMFROMTEXT('POLYGON((525000 183300,525400
+183300,525400 18370, 525000 183700,525000 183300))'),
+geomfromtext('POLYGON((525298.67 183511.53,525296.57
+183510.39,525296.42 183510.31,525289.11 183506.62,525283.17
+183503.47,525280.98 183502.26,525278.63 183500.97,525278.39
+183500.84,525276.79 183500,525260.7 183491.55,525263.95
+183484.75,525265.58 183481.95,525278.97 183488.73,525276.5
+183493.45,525275.5 183495.7,525280.35 183498.2,525282.3
+183499.1,525282.2 183499.3,525283.55 183500,525301.75
+183509.35,525304.45 183504.25,525307.85 183504.95,525304.5
+183510.83,525302.81 183513.8,525298.67 183511.53),(525275.06
+183489.89,525272.06 183488.37,525268.94 183494.51,525271.94
+183496.03,525275.06 183489.89),(525263.26 183491.55,525266.15
+183493.04,525269.88 183485.82,525266.99 183484.33,525263.26
+183491.55))'))) st_u;
+
+SET @a=0x0000000001030000000200000005000000000000000000000000000000000000000000000000002440000000000000000000000000000024400000000000002440000000000000000000000000000024400000000000000000000000000000000000000000000000000000F03F000000000000F03F0000000000000040000000000000F03F00000000000000400000000000000040000000000000F03F0000000000000040000000000000F03F000000000000F03F;
+SELECT ASTEXT(TOUCHES(@a, GEOMFROMTEXT('point(0 0)'))) t;
+
+
 # bug #801243 Assertion `(0)' failed in Gis_geometry_collection::init_from_opresult on ST_UNION
 
 SELECT astext(ST_UNION (
@@ -328,3 +354,5 @@ SELECT ST_NUMPOINTS(ST_EXTERIORRING(ST_B
 # MDEV-5615 crash in Gcalc_function::add_operation
 select astext(buffer(st_linestringfromwkb(linestring(point(-1,1), point(-1,-2))),-1));
 
+--source include/gis_debug.inc
+

=== modified file 'mysql-test/t/gis.test'
--- a/mysql-test/t/gis.test	2014-02-26 14:28:07 +0000
+++ b/mysql-test/t/gis.test	2014-06-30 19:30:24 +0000
@@ -541,6 +541,18 @@ insert into t1 values(default);
 drop table t1;
 
 #
+# Bug #27300: create view with geometry functions lost columns types
+#
+CREATE TABLE t1 (a GEOMETRY);
+CREATE VIEW v1 AS SELECT GeomFromwkb(ASBINARY(a)) FROM t1;
+CREATE VIEW v2 AS SELECT a FROM t1;
+DESCRIBE v1;
+DESCRIBE v2;
+
+DROP VIEW v1,v2;
+DROP TABLE t1;
+
+#
 # Bug#24563: MBROverlaps does not seem to function propertly
 # Bug#54888: MBROverlaps missing in 5.1?
 #

=== modified file 'sql/item_create.cc'
--- a/sql/item_create.cc	2014-05-30 12:19:00 +0000
+++ b/sql/item_create.cc	2014-06-30 19:30:24 +0000
@@ -1264,6 +1264,21 @@ class Create_func_get_lock : public Crea
 };
 
 
+#if defined(HAVE_SPATIAL) && !defined(DBUG_OFF)
+class Create_func_gis_debug : public Create_func_arg1
+{
+  public:
+    virtual Item *create_1_arg(THD *thd, Item *arg1);
+
+    static Create_func_gis_debug s_singleton;
+
+  protected:
+    Create_func_gis_debug() {}
+    virtual ~Create_func_gis_debug() {}
+};
+#endif
+
+
 #ifdef HAVE_SPATIAL
 class Create_func_glength : public Create_func_arg1
 {
@@ -4159,6 +4174,17 @@ Create_func_get_lock::create_2_arg(THD *
 }
 
 
+#if defined(HAVE_SPATIAL) && !defined(DBUG_OFF)
+Create_func_gis_debug Create_func_gis_debug::s_singleton;
+
+Item*
+Create_func_gis_debug::create_1_arg(THD *thd, Item *arg1)
+{
+  return new (thd->mem_root) Item_func_gis_debug(arg1);
+}
+#endif
+
+
 #ifdef HAVE_SPATIAL
 Create_func_glength Create_func_glength::s_singleton;
 
@@ -5854,6 +5880,9 @@ static Native_func_registry func_array[]
   { { C_STRING_WITH_LEN("ST_GEOMETRYTYPE") }, GEOM_BUILDER(Create_func_geometry_type)},
   { { C_STRING_WITH_LEN("ST_GEOMFROMTEXT") }, GEOM_BUILDER(Create_func_geometry_from_text)},
   { { C_STRING_WITH_LEN("ST_GEOMFROMWKB") }, GEOM_BUILDER(Create_func_geometry_from_wkb)},
+#ifndef DBUG_OFF
+    { { C_STRING_WITH_LEN("ST_GIS_DEBUG") }, GEOM_BUILDER(Create_func_gis_debug)},
+#endif
   { { C_STRING_WITH_LEN("ST_EQUALS") }, GEOM_BUILDER(Create_func_equals)},
   { { C_STRING_WITH_LEN("ST_INTERIORRINGN") }, GEOM_BUILDER(Create_func_interiorringn)},
   { { C_STRING_WITH_LEN("ST_INTERSECTS") }, GEOM_BUILDER(Create_func_intersects)},

=== modified file 'sql/item_geofunc.cc'
--- a/sql/item_geofunc.cc	2014-02-26 14:28:07 +0000
+++ b/sql/item_geofunc.cc	2014-06-30 19:30:24 +0000
@@ -1739,4 +1739,12 @@ double Item_func_distance::val_real()
 }
 
 
+#ifndef DBUG_OFF
+longlong Item_func_gis_debug::val_int()
+{
+  /* For now this is just a stub. TODO: implement the internal GIS debuggign */
+  return 0;
+}
+#endif
+
 #endif /*HAVE_SPATIAL*/

=== modified file 'sql/item_geofunc.h'
--- a/sql/item_geofunc.h	2014-03-26 21:25:38 +0000
+++ b/sql/item_geofunc.h	2014-06-30 19:30:24 +0000
@@ -496,6 +496,18 @@ class Item_func_distance: public Item_re
   const char *func_name() const { return "st_distance"; }
 };
 
+
+#ifndef DBUG_OFF
+class Item_func_gis_debug: public Item_int_func
+{
+  public:
+    Item_func_gis_debug(Item *a) :Item_int_func(a) { null_value= false; }
+    const char *func_name() const  { return "st_gis_debug"; }
+    longlong val_int();
+};
+#endif
+
+
 #define GEOM_NEW(thd, obj_constructor) new (thd->mem_root) obj_constructor
 
 #else /*HAVE_SPATIAL*/



More information about the commits mailing list