|
| 1 | +# |
| 2 | +# This is a shared file included from t/gis-precise.test and t/gis-debug.test |
| 3 | +# |
| 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. |
| 6 | +# |
| 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. |
| 14 | +# |
| 15 | + |
| 16 | +--disable_warnings |
| 17 | +DROP TABLE IF EXISTS p1; |
| 18 | +--enable_warnings |
| 19 | + |
| 20 | +DELIMITER |; |
| 21 | +CREATE PROCEDURE p1(dist DOUBLE, geom TEXT) |
| 22 | +BEGIN |
| 23 | + DECLARE g GEOMETRY; |
| 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; |
| 27 | +END| |
| 28 | +DELIMITER ;| |
| 29 | + |
| 30 | +--disable_query_log |
| 31 | + |
| 32 | +--echo # |
| 33 | +--echo # Testing ST_BUFFER with positive distance |
| 34 | +--echo # |
| 35 | + |
| 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)))'); |
| 56 | + |
| 57 | + |
| 58 | +--echo # |
| 59 | +--echo # Testing ST_BUFFER with zero distance |
| 60 | +--echo # |
| 61 | + |
| 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)))'); |
| 82 | + |
| 83 | + |
| 84 | +--echo # |
| 85 | +--echo # Testing ST_BUFFER with negative distance |
| 86 | +--echo # |
| 87 | + |
| 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))'); |
| 92 | +# |
| 93 | +# Wrong shape |
| 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))'); |
| 95 | +# Wrong shape |
| 96 | +# CALL p1(-1, 'Polygon((0 0, 0 8, 8 8, 8 10, -10 10, -10 0, 0 0))'); |
| 97 | +# |
| 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))'); |
| 103 | +# |
| 104 | +# Wrong shape |
| 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)))'); |
| 107 | +# |
| 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)))'); |
| 113 | +# |
| 114 | +# Wrong shape |
| 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))))'); |
| 116 | +# |
| 117 | +CALL p1(-1, 'GeometryCollection(Point(9 9),LineString(1 5,0 0),Polygon((2 2,2 8,8 8,8 2,2 2)))'); |
| 118 | + |
| 119 | + |
| 120 | +--enable_query_log |
| 121 | + |
| 122 | +SELECT ST_CONTAINS( |
| 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)'))); |
| 128 | + |
| 129 | +DROP PROCEDURE p1; |
| 130 | + |
| 131 | +--echo # |
| 132 | +--echo # Bug #13833019 ASSERTION `T1->RESULT_RANGE' FAILED IN GCALC_OPERATION_REDUCER::END_COUPLE |
| 133 | +--echo # |
| 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)); |
| 135 | + |
| 136 | +--echo # |
| 137 | +--echo # Bug #13832749 HANDLE_FATAL_SIGNAL IN GCALC_FUNCTION::COUNT_INTERNAL |
| 138 | +--echo # |
| 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)); |
0 commit comments