2 # This is a shared file included from t/gis-precise.test and t/gis-debug.test
4 # - gis-precise.test is executed both in debug and production builds
5 # and makes sure that the checked GIS functions return the expected results.
7 # - gis-debug.test is executed only in debug builds
8 # (and is skipped in production builds).
9 # gis-debug.test activates tracing of the internal GIS routines.
10 # The trace log is printed to the client side warnings.
11 # So gis-debug.test makes sure not only that the correct results are returned,
12 # but also check *how* these results were generated - makes sure that
13 # the internal GIS routines went through the expected data and code flow paths.
17 DROP
TABLE IF EXISTS p1;
21 CREATE PROCEDURE p1(dist DOUBLE, geom TEXT)
24 SET g=GeomFromText(geom);
25 SELECT geom AS `-----`;
26 SELECT dist, GeometryType(@
buf:=ST_Buffer(g, dist)) AS `buffer`, ROUND(ST_AREA(@
buf),2) AS buf_area;
33 --echo # Testing ST_BUFFER with positive distance
36 CALL p1(1,
'POINT(0 0))');
37 CALL p1(1,
'LineString(0 1, 1 1))');
38 CALL p1(1,
'LineString(9 9,8 1,1 5,0 0)');
39 CALL p1(1,
'Polygon((2 2,2 8,8 8,8 2,2 2))');
40 CALL p1(1,
'Polygon((0 0,0 8,8 8,8 0,0 0),(2 2,6 2,6 6,2 6,2 2))');
41 CALL p1(1,
'Polygon((0 0, 0 8, 8 8, 8 10, -10 10, -10 0, 0 0))');
42 CALL p1(1,
'MultiPoint(9 9,8 1,1 5)');
43 CALL p1(1,
'MultiLineString((0 0,2 2))');
44 CALL p1(1,
'MultiLineString((0 0,2 2,0 4))');
45 CALL p1(1,
'MultiLineString((0 0,2 2),(0 2,2 0))');
46 CALL p1(1,
'MultiLineString((2 2,2 8,-2 8),(-6 -6, 6 6),(10 10, 14 14))');
47 CALL p1(1,
'MultiPolygon(((2 2,2 8,8 8,8 2,2 2)), ((9 9,8 1,1 5,9 9)))');
48 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)))');
49 CALL p1(1,
'GeometryCollection(Point(0 0))');
50 CALL p1(1,
'GeometryCollection(LineString(0 0, 2 2)))');
51 CALL p1(1,
'GeometryCollection(Polygon((2 2,2 8,8 8,8 2,2 2))))');
52 CALL p1(1,
'GeometryCollection(MultiPoint(9 9,8 1,1 5))');
53 CALL p1(1,
'GeometryCollection(MultiLineString((0 0,0 1),(3 0,3 1)))');
54 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))))');
55 CALL p1(1,
'GeometryCollection(Point(9 9),LineString(1 5,0 0),Polygon((2 2,2 8,8 8,8 2,2 2)))');
59 --echo # Testing ST_BUFFER with zero distance
62 CALL p1(0,
'POINT(0 0))');
63 CALL p1(0,
'LineString(0 1, 1 1))');
64 CALL p1(0,
'LineString(9 9,8 1,1 5,0 0)');
65 CALL p1(0,
'Polygon((2 2,2 8,8 8,8 2,2 2))');
66 CALL p1(0,
'Polygon((0 0,0 8,8 8,8 0,0 0),(2 2,6 2,6 6,2 6,2 2))');
67 CALL p1(0,
'Polygon((0 0, 0 8, 8 8, 8 10, -10 10, -10 0, 0 0))');
68 CALL p1(0,
'MultiPoint(9 9,8 1,1 5)');
69 CALL p1(0,
'MultiLineString((0 0,2 2))');
70 CALL p1(0,
'MultiLineString((0 0,2 2,0 4))');
71 CALL p1(0,
'MultiLineString((0 0,2 2),(0 2,2 0))');
72 CALL p1(0,
'MultiLineString((2 2,2 8,-2 8),(-6 -6, 6 6),(10 10, 14 14))');
73 CALL p1(0,
'MultiPolygon(((2 2,2 8,8 8,8 2,2 2)), ((9 9,8 1,1 5,9 9)))');
74 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)))');
75 CALL p1(0,
'GeometryCollection(Point(0 0))');
76 CALL p1(0,
'GeometryCollection(LineString(0 0, 2 2)))');
77 CALL p1(0,
'GeometryCollection(Polygon((2 2,2 8,8 8,8 2,2 2))))');
78 CALL p1(0,
'GeometryCollection(MultiPoint(9 9,8 1,1 5))');
79 CALL p1(0,
'GeometryCollection(MultiLineString((0 0,0 1),(3 0,3 1)))');
80 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))))');
81 CALL p1(0,
'GeometryCollection(Point(9 9),LineString(1 5,0 0),Polygon((2 2,2 8,8 8,8 2,2 2)))');
85 --echo # Testing ST_BUFFER with negative distance
88 CALL p1(-1,
'POINT(0 0))');
89 CALL p1(-1,
'LineString(0 1, 1 1))');
90 CALL p1(-1,
'LineString(9 9,8 1,1 5,0 0)');
91 CALL p1(-1,
'Polygon((2 2,2 8,8 8,8 2,2 2))');
94 # CALL p1(-1, 'Polygon((0 0,0 8,8 8,8 0,0 0),(2 2,6 2,6 6,2 6,2 2))');
96 # CALL p1(-1, 'Polygon((0 0, 0 8, 8 8, 8 10, -10 10, -10 0, 0 0))');
98 CALL p1(-1,
'MultiPoint(9 9,8 1,1 5)');
99 CALL p1(-1,
'MultiLineString((0 0,2 2))');
100 CALL p1(-1,
'MultiLineString((0 0,2 2,0 4))');
101 CALL p1(-1,
'MultiLineString((0 0,2 2),(0 2,2 0))');
102 CALL p1(-1,
'MultiLineString((2 2,2 8,-2 8),(-6 -6, 6 6),(10 10, 14 14))');
105 #CALL p1(-1, 'MultiPolygon(((2 2,2 8,8 8,8 2,2 2)), ((9 9,8 1,1 5,9 9)))');
106 #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)))');
108 CALL p1(-1,
'GeometryCollection(Point(0 0))');
109 CALL p1(-1,
'GeometryCollection(LineString(0 0, 2 2)))');
110 CALL p1(-1,
'GeometryCollection(Polygon((2 2,2 8,8 8,8 2,2 2))))');
111 CALL p1(-1,
'GeometryCollection(MultiPoint(9 9,8 1,1 5))');
112 CALL p1(-1,
'GeometryCollection(MultiLineString((0 0,0 1),(3 0,3 1)))');
115 # 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))))');
117 CALL p1(-1,
'GeometryCollection(Point(9 9),LineString(1 5,0 0),Polygon((2 2,2 8,8 8,8 2,2 2)))');
123 GeomFromText(
'MULTIPOLYGON(((0 0, 0 5, 5 5, 5 0, 0 0)),((6 6, 6 11, 11 11, 11 6, 6 6)))'),
124 GeomFromText(
'POINT(5 10)'));
125 SELECT AsText(ST_UNION(
126 GeomFromText(
'MULTIPOLYGON(((0 0, 0 5, 5 5, 5 0, 0 0)),((6 6, 6 11, 11 11, 11 6, 6 6)))'),
127 GeomFromText(
'POINT(5 10)')));
132 --echo # Bug #13833019 ASSERTION `
T1->RESULT_RANGE
' FAILED IN GCALC_OPERATION_REDUCER::END_COUPLE
134 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));
137 --echo # Bug #13832749 HANDLE_FATAL_SIGNAL IN GCALC_FUNCTION::COUNT_INTERNAL
139 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));
143 --echo # Bug#13358363 - ASSERTION: N > 0 && N < SINUSES_CALCULATED*2+1 | GET_N_SINCOS/ADD_EDGE_BUFFER
146 DO ST_BUFFER(ST_GEOMCOLLFROMTEXT('linestring(1 1,2 2)
'),'');
149 LINESTRINGFROMTEXT(' LINESTRING(3 8,9 2,3 8,3 3,7 6,4 7,4 7,8 1)
'),
150 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)))
'),
151 ST_NUMINTERIORRINGS(POLYGONFROMTEXT('POLYGON((3 5,2 4,2 5,3 5))
'))));
153 SELECT ST_DIMENSION(ST_BUFFER(POLYGONFROMTEXT(' POLYGON((3 5,2 5,2 4,3 4,3 5))
'),
154 ST_NUMINTERIORRINGS(POLYGONFROMTEXT(' POLYGON((0 0,9 3,4 2,0 0))
'))));
156 SELECT ST_NUMINTERIORRINGS(
157 ST_ENVELOPE(ST_BUFFER(MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((3 5,2 5,2 4,3 4,3 5)))
'),
158 SRID(MULTILINESTRINGFROMTEXT('MULTILINESTRING((2 2,4 2,1 2,2 4,2 2))
')))));
160 SELECT ASTEXT(ST_BUFFER(POLYGONFROMTEXT(' POLYGON((9 9,5 2,4 5,9 9))
'),
161 SRID(GEOMETRYFROMTEXT(' MULTIPOINT(8 4,5 0,7 8,6 9,3 4,7 3,5 5)
'))));