1-- source include/have_geometry.inc 2 3 4# 5# Spatial objects 6# 7 8--disable_warnings 9DROP TABLE IF EXISTS t1; 10--enable_warnings 11 12select 1, ST_Intersects(GeomFromText('POLYGON((0 0,20 0,20 20,0 20,0 0))'), GeomFromText('POLYGON((10 10,30 10,30 30,10 30,10 10))')); 13select 0, ST_Intersects(GeomFromText('POLYGON((0 0,20 10,10 30, 0 0))'), GeomFromText('POLYGON((10 40, 40 50, 20 70, 10 40))')); 14select 1, ST_Intersects(GeomFromText('POLYGON((0 0,20 10,10 30, 0 0))'), GeomFromText('POINT(10 10)')); 15select 1, ST_Intersects(GeomFromText('POLYGON((0 0,20 10,10 30, 0 0))'), GeomFromText('POLYGON((10 10,30 20,20 40, 10 10))')); 16select 0, ST_Within(GeomFromText('POLYGON((0 0,20 10,10 30, 0 0))'), GeomFromText('POLYGON((10 10,30 20,20 40, 10 10))')); 17select 1, ST_Within(GeomFromText('POLYGON((1 1,20 10,10 30, 1 1))'), GeomFromText('POLYGON((0 0,30 5,10 40, 0 0))')); 18 19 20create table t1 (g point); 21insert into t1 values 22(GeomFromText('POINT(2 2)')), (GeomFromText('POINT(2 4)')), (GeomFromText('POINT(2 6)')), (GeomFromText('POINT(2 8)')), 23(GeomFromText('POINT(4 2)')), (GeomFromText('POINT(4 4)')), (GeomFromText('POINT(4 6)')), (GeomFromText('POINT(4 8)')), 24(GeomFromText('POINT(6 2)')), (GeomFromText('POINT(6 4)')), (GeomFromText('POINT(6 6)')), (GeomFromText('POINT(6 8)')), 25(GeomFromText('POINT(8 2)')), (GeomFromText('POINT(8 4)')), (GeomFromText('POINT(8 6)')), (GeomFromText('POINT(8 8)')); 26 27select astext(g) from t1 where ST_Within(g, GeomFromText('POLYGON((5 1, 7 1, 7 7, 5 7, 3 3, 5 3, 5 1))')); 28select 'Contains'; 29select astext(g) from t1 where ST_Contains(GeomFromText('POLYGON((5 1, 7 1, 7 7, 5 7, 3 3, 5 3, 5 1))'), g); 30select 'Intersects'; 31select astext(g) from t1 where ST_Intersects(GeomFromText('POLYGON((5 1, 7 1, 7 7, 5 7, 3 3, 5 3, 5 1))'), g); 32select 'Contains'; 33select astext(g) from t1 where ST_Contains(GeomFromText('POLYGON((5 1, 7 1, 7 7, 5 7, 3 3, 5 3, 5 1))'), g); 34select 'Contains2'; 35select astext(g) from t1 where ST_Contains(GeomFromText('POLYGON((5 1, 7 1, 7 7, 5 7, 3 3, 5 3, 5 1), (5.01 3.01, 6 5, 9 5, 8 3, 5.01 3.01))'), g); 36 37DROP TABLE t1; 38 39select 0, ST_Within(GeomFromText('LINESTRING(15 15, 50 50, 60 60)'), GeomFromText('POLYGON((10 10,30 20,20 40, 10 10))')); 40select 1, ST_Within(GeomFromText('LINESTRING(15 15, 16 16)'), GeomFromText('POLYGON((10 10,30 20,20 40, 10 10))')); 41 42 43select 1, ST_Intersects(GeomFromText('LINESTRING(15 15, 50 50)'), GeomFromText('LINESTRING(50 15, 15 50)')); 44select 0, ST_Intersects(GeomFromText('LINESTRING(15 15, 50 50)'), GeomFromText('LINESTRING(16 16, 51 51)')); 45 46select 1, ST_Intersects(GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), GeomFromText('POLYGON((50 5, 55 10, 0 45, 50 5))')); 47 48select astext(ST_Union(geometryfromtext('point(1 1)'), geometryfromtext('polygon((0 0, 2 0, 1 2, 0 0))'))); 49select astext(ST_Intersection(geometryfromtext('point(1 1)'), geometryfromtext('polygon((0 0, 2 0, 1 2, 0 0))'))); 50 51select ST_Intersects(GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), GeomFromText('POLYGON((50 5, 55 10, 0 45, 50 5))')); 52select 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)')); 53select ST_Disjoint(GeomFromText('POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))'), GeomFromText('POLYGON((10 10, 10 15, 15 15, 15 10, 10 10))')); 54select ST_Disjoint(GeomFromText('POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))'), GeomFromText('POLYGON((10 10, 10 4, 4 4, 4 10, 10 10))')); 55select ST_Overlaps(GeomFromText('POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))'), GeomFromText('POLYGON((10 10, 10 4, 4 4, 4 10, 10 10))')); 56select ST_Overlaps(GeomFromText('POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))'), GeomFromText('POLYGON((1 1, 1 4, 4 4, 4 1, 1 1))')); 57 58# Distance tests 59select ST_DISTANCE(geomfromtext('polygon((0 0, 1 2, 2 1, 0 0))'), geomfromtext('polygon((2 2, 3 4, 4 3, 2 2))')); 60select ST_DISTANCE(geomfromtext('polygon((0 0, 1 2, 2 1, 0 0))'), geomfromtext('linestring(0 1, 1 0)')); 61select ST_DISTANCE(geomfromtext('polygon((0 0, 3 6, 6 3, 0 0))'), geomfromtext('polygon((2 2, 3 4, 4 3, 2 2))')); 62select ST_DISTANCE(geomfromtext('polygon((0 0, 3 6, 6 3, 0 0),(2 2, 3 4, 4 3, 2 2))'), geomfromtext('point(3 3)')); 63select ST_DISTANCE(geomfromtext('linestring(0 0, 3 6, 6 3, 0 0)'), geomfromtext('polygon((2 2, 3 4, 4 3, 2 2))')); 64 65 66# Operations tests 67select astext(ST_Intersection(GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), GeomFromText('POLYGON((50 5, 55 10, 0 45, 50 5))'))); 68select astext(ST_Intersection(GeomFromText('LINESTRING(0 0, 50 45, 40 50, 0 0)'), GeomFromText('LINESTRING(50 5, 55 10, 0 45, 50 5)'))); 69select astext(ST_Intersection(GeomFromText('LINESTRING(0 0, 50 45, 40 50)'), GeomFromText('LINESTRING(50 5, 55 10, 0 45)'))); 70select astext(ST_Intersection(GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), GeomFromText('POINT(20 20)'))); 71select astext(ST_Intersection(GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), GeomFromText('LINESTRING(-10 -10, 200 200)'))); 72--replace_result 7.999999999999999 8 73select astext(ST_Intersection(GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), GeomFromText('LINESTRING(-10 -10, 200 200, 199 201, -11 -9)'))); 74--replace_result 7.999999999999999 8 75select astext(ST_UNION(GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), GeomFromText('LINESTRING(-10 -10, 200 200, 199 201, -11 -9)'))); 76 77select astext(ST_intersection(geomfromtext('polygon((0 0, 1 0, 0 1, 0 0))'), geomfromtext('polygon((0 0, 1 1, 0 2, 0 0))'))); 78 79select astext(ST_symdifference(geomfromtext('polygon((0 0, 1 0, 0 1, 0 0))'), geomfromtext('polygon((0 0, 1 1, 0 2, 0 0))'))); 80--replace_result 7.999999999999999 8 81select astext(ST_UNION(GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), GeomFromText('LINESTRING(-10 -10, 200 200, 199 201, -11 -9)'))); 82 83# Buffer() tests 84--replace_result 0012045437948276 00120454379482759 85select astext(ST_buffer(geometryfromtext('point(1 1)'), 1)); 86create table t1(geom geometrycollection); 87insert into t1 values (geomfromtext('POLYGON((0 0, 10 10, 0 8, 0 0))')); 88insert into t1 values (geomfromtext('POLYGON((1 1, 10 10, 0 8, 1 1))')); 89select astext(geom), area(geom),round(area(ST_buffer(geom,2)), 7) from t1; 90select ST_NUMPOINTS(ST_EXTERIORRING(ST_buffer(geom,2))) from t1; 91 92set @geom=geomfromtext('LINESTRING(2 1, 4 2, 2 3, 2 5)'); 93set @buff=ST_buffer(@geom,1); 94--replace_result 40278744502097 40278744502096 95select ST_NUMPOINTS(ST_EXTERIORRING(@buff)); 96 97# cleanup 98DROP TABLE t1; 99 100#Touches tests 101select st_touches(geomfromtext('point(0 0)'), geomfromtext('point(1 1)')); 102select st_touches(geomfromtext('point(1 1)'), geomfromtext('point(1 1)')); 103select st_touches(geomfromtext('polygon((0 0, 2 2, 0 4, 0 0))'), geomfromtext('point(1 1)')); 104select st_touches(geomfromtext('polygon((0 0, 2 2, 0 4, 0 0))'), geomfromtext('point(1 0)')); 105select st_touches(geomfromtext('polygon((0 0, 2 2, 0 4, 0 0))'), geomfromtext('point(1 2)')); 106select st_touches(geomfromtext('polygon((0 0, 2 2, 0 4, 0 0))'), geomfromtext('polygon((1 1.2, 1 0, 2 0, 1 1.2))')); 107select st_touches(geomfromtext('polygon((0 0, 2 2, 0 4, 0 0))'), geomfromtext('polygon((1 1, 1 0, 2 0, 1 1))')); 108 109#Equals test 110SELECT ST_Equals(PolyFromText('POLYGON((67 13, 67 18, 67 18, 59 18, 59 13, 67 13) )'),PolyFromText('POLYGON((67 13, 67 18, 59 19, 59 13, 59 13, 67 13) )')) as result; 111SELECT 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; 112SELECT ST_Equals(PointFromText('POINT (12 13)'),PointFromText('POINT (12 13)')) as result; 113 114 115--echo # 116--echo # BUG#11755628/47429: INTERSECTION FUNCTION CRASHED MYSQLD 117--echo # BUG#11759650/51979: UNION/INTERSECTION OF POLYGONS CRASHES MYSQL 118--echo # 119 120SELECT ASTEXT(ST_UNION(GEOMFROMTEXT('POLYGON((525000 183300,525400 121183300,525400 18370, 525000 183700,525000 183300))'), 122geomfromtext('POLYGON((525298.67 183511.53,525296.57 123183510.39,525296.42 183510.31,525289.11 183506.62,525283.17 124183503.47,525280.98 183502.26,525278.63 183500.97,525278.39 125183500.84,525276.79 183500,525260.7 183491.55,525263.95 126183484.75,525265.58 183481.95,525278.97 183488.73,525276.5 127183493.45,525275.5 183495.7,525280.35 183498.2,525282.3 128183499.1,525282.2 183499.3,525283.55 183500,525301.75 129183509.35,525304.45 183504.25,525307.85 183504.95,525304.5 130183510.83,525302.81 183513.8,525298.67 183511.53),(525275.06 131183489.89,525272.06 183488.37,525268.94 183494.51,525271.94 132183496.03,525275.06 183489.89),(525263.26 183491.55,525266.15 133183493.04,525269.88 183485.82,525266.99 183484.33,525263.26 134183491.55))'))) st_u; 135 136SET @a=0x0000000001030000000200000005000000000000000000000000000000000000000000000000002440000000000000000000000000000024400000000000002440000000000000000000000000000024400000000000000000000000000000000000000000000000000000F03F000000000000F03F0000000000000040000000000000F03F00000000000000400000000000000040000000000000F03F0000000000000040000000000000F03F000000000000F03F; 137--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION 138SELECT ASTEXT(TOUCHES(@a, GEOMFROMTEXT('point(0 0)'))) t; 139 140 141# bug #801243 Assertion `(0)' failed in Gis_geometry_collection::init_from_opresult on ST_UNION 142 143SELECT astext(ST_UNION ( 144 PolyFromText('POLYGON(( 2 2 ,3 2,2 7,2 2),( 0 0,8 2,1 9,0 0))'), 145 ExteriorRing( Envelope( MultiLineStringFromText('MULTILINESTRING((3 4,5 3),(3 0,0 5))'))))); 146 147#bug 801189 ST_BUFFER asserts if radius = 0 148SELECT astext(ST_BUFFER(LineStringFromText('LINESTRING(0 0,1 1)'),0)); 149 150#bug 801199 Infinite recursion in Gcalc_function::count_internal with ST_BUFFER over MULTIPOINT 151SELECT Round(ST_Area(ST_BUFFER(MultipointFromText('MULTIPOINT(7 7,3 7,7 2,7 4 ,7 7)'), 3)), 5); 152 153#bug 801212 Assertion with ST_INTERSECTION on NULL values 154SELECT ST_INTERSECTION(NULL, NULL); 155 156#bug 804305 Crash in wkb_get_double with ST_INTERSECTION 157SELECT ASTEXT(ST_INTERSECTION( 158 MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((2 2,2 8,8 8,8 2,2 2),(4 4,4 6,6 6,6 4,4 4)), 159 ((0 5,3 5,3 0,0 0,0 1,2 1,2 2,0 2,0 5), (1 3,2 3,2 4,1 4,1 3)), 160 ((2 2,5 2,4 4,2 8,2 2)))'), 161 MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((3 5,2 4,2 5,3 5)), 162 ((2 2,9 2,0 2,2 6,2 2)), 163 ((2 2,2 8,8 8,8 2,2 2), (4 4,4 6,6 6,6 4,4 4)), 164 ((9 9,6 8,7 0,9 9)))'))); 165 166#bug 804324 Assertion 0 in Gcalc_scan_iterator::pop_suitable_intersection 167 168SELECT ROUND(ST_LENGTH(ST_UNION( 169 MULTILINESTRINGFROMTEXT('MULTILINESTRING((6 2,4 0,3 5,3 6,4 3,6 4,3 9,0 7,3 7,8 4,2 9,5 0), 170 (8 2,1 3,9 0,4 4))'), 171 MULTILINESTRINGFROMTEXT('MULTILINESTRING((2 5,6 7,9 7,5 2,1 6,3 6))'))), 7); 172 173SELECT ST_NUMGEOMETRIES((ST_UNION(ST_UNION( 174 MULTILINESTRINGFROMTEXT('MULTILINESTRING((2 0,4 2,0 2,1 5,0 3,7 0,8 5,5 8), 175 (6 2,4 0,3 5,3 6,4 3,6 4,3 9,0 7,3 7,8 4,2 9,5 0), 176 (7 8,3 1,0 9,6 0,4 8), 177 (9 3,0 4,5 9,6 4), 178 (8 2,1 3,9 0,4 4))'), 179 MULTILINESTRINGFROMTEXT('MULTILINESTRING((6 0,9 3,2 5,3 6,3 2), 180 (2 5,6 7,9 7,5 2,1 6,3 6))')), 181 MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((7 7,3 7,3 1,7 8,7 7)), 182 ((3 5,2 4,2 5,3 5)), 183 ((7 7,8 7,3 7,7 7,7 7)), 184 ((0 5,3 5,3 4,1 4,1 3,3 3,3 0,0 0,0 5), (1 1,2 1,2 2,1 2,1 1)))')))); 185 186#bug #805860 Second assertion Assertion `n > 0 && n < SINUSES_CALCULATED*2+1' in get_n_sinco 187 188SELECT Round(ST_AREA(ST_BUFFER( ST_UNION( 189 POLYGONFROMTEXT('POLYGON((7 7, 7 7, 7 4, 7 7, 7 7))'), 190 POLYGONFROMTEXT('POLYGON((7 7, 4 7, 2 9, 7 6, 7 7))')), 1)), 6); 191 192 193#bug #804259 Second assertion in Gis_geometry_collection::init_from_opresult 194 195SELECT AsText(ST_UNION(MultiPolygonFromText(' 196 MULTIPOLYGON(((2 2, 2 8, 8 8, 8 2, 2 2), (4 4, 4 6, 6 6, 6 4, 4 4)), 197 ((0 0, 8 3, 7 4, 0 0)), 198 ((2 2, 2 8, 8 8, 8 2, 2 2), (4 4, 4 6, 6 6, 6 4, 4 4)))'), 199MultiPolygonFromText(' MULTIPOLYGON(((0 0, 1 9, 4 6, 0 0)), 200 ((0 5, 3 5, 3 4, 1 4, 1 3, 3 3, 3 0, 0 0, 0 5), (1 1, 2 1, 2 2, 1 2, 1 1)), 201 ((7 7, 4 7, 6 3, 7 2, 7 7)), 202 ((0 5, 3 5, 3 4, 1 4, 1 3, 3 3, 3 0, 0 0, 0 5), (1 1, 2 1, 2 2, 1 2, 1 1))) '))); 203 204 205#bug 801217 Assertion `t1->result_range' in Gcalc_operation_reducer::end_couple 206 207SELECT AsText(ST_SYMDIFFERENCE( 208 MultiLineStringFromText('MULTILINESTRING((7 7, 1 7, 8 5, 7 8, 7 7), 209 (6 3, 3 4, 1 1, 9 9, 9 0, 8 4, 9 9))'), 210 Envelope(GeometryFromText('MULTIPOINT(7 9, 0 0, 3 7, 1 6, 0 0)')))); 211 212#bug 804266 Memory corruption/valgrind warning/crash in move_hole() with ST_UNION 213 214SELECT AsText(ST_UNION( 215 MultiPolygonFromText('MULTIPOLYGON(((9 9, 7 9, 1 1, 9 9)), 216 ((2 2, 1 2, 3 3, 2 2, 2 2)), 217 ((0 0, 7 5, 9 6, 0 0)), 218 ((7 7, 5 7, 1 5, 7 1, 7 7)))'), 219 MultiPolygonFromText('MULTIPOLYGON(((2 2, 2 2, 1 5, 2 7, 2 2)), 220 ((0 5, 3 5, 3 0, 0 0, 0 5), (1 1, 2 1, 2 4, 1 4, 1 1)))'))); 221 222#bug 802376 ST_INTERSECTION returns wrong result on two overlapping linestrings in maria-5.3-gis 223 224SELECT AsText( ST_INTERSECTION( 225 LinestringFromText('LINESTRING( 3 5, 2 5, 2 4, 3 4, 3 5 ) ') , 226 LinestringFromText('LINESTRING( 3 5, 2 4, 2 5, 3 5 ) ') 227)); 228 229#bug 801560 ST_UNION of adjacent polygons includes extra line in maria-5.3-gis 230 231SELECT AsText( ST_UNION( 232 PolygonFromText(' POLYGON( ( 2 2 , 3 2 , 7 5 , 2 0 , 2 2 ) ) ') , 233 PolygonFromText(' POLYGON( ( 2 2 , 3 2 , 3 3 , 2 5 , 2 2 ) ) ') ) ); 234 235#bug 801466 ST_INTERSECTION() returns invalid value on empty intersection in maria-5.3-gis 236 237SELECT AsText(ST_INTERSECTION(LinestringFromText('LINESTRING(1 1, 2 2)'), GeometryFromText('LINESTRING(3 3, 4 4)'))); 238 239#bug 839341 100% CPU usage with ST_UNION in maria-5.3-gis 240SELECT AsText(ST_UNION(GEOMETRYFROMTEXT('POINT(8 1)') ,MULTILINESTRINGFROMTEXT('MULTILINESTRING((3 5, 2 5, 2 4, 3 4, 3 5))'))); 241 242#bug 839318 Crash in Gcalc_scan_iterator::point::get_shape with ST_DISTANCE and MULTILINESTRING in maria-5.3-gis 243SELECT ST_DISTANCE(POINTFROMTEXT('POINT(7 1)'),MULTILINESTRINGFROMTEXT('MULTILINESTRING( 244 (4 7,9 7,6 1,3 4,1 1), (3 5, 2 5, 2 4, 3 4, 3 5))')); 245 246#bug 839327 Crash in Gcalc_operation_reducer::end_couple with ST_UNION and MULTIPOLYGONs in 5.3-gis 247SELECT AsText(ST_UNION(POLYGONFROMTEXT('POLYGON((12 9, 3 6, 3 0, 12 9))'), POLYGONFROMTEXT('POLYGON((2 2, 7 2, 4 2, 2 0, 2 2))'))); 248 249#bug 841622 Assertion `t->rp->type == Gcalc_function::shape_line' failed in Gcalc_operation_reducer::end_line in maria-5.3-gis 250 251--replace_result 276 278 252SELECT ST_NUMPOINTS(ST_EXTERIORRING(ST_BUFFER(ST_UNION( 253 MULTILINESTRINGFROMTEXT('MULTILINESTRING((3 4, 2 5, 7 6, 1 8),(0 0 ,1 6 ,0 1, 8 9, 2 4, 6 1, 3 5, 4 8), (9 3, 5 4, 1 8, 4 2, 5 8, 3 0))' ) , 254 MULTILINESTRINGFROMTEXT('MULTILINESTRING((3 4, 3 1, 2 7, 4 2, 6 2, 1 5))') 255 ), 16))); 256 257#bug 841625 Assertion `m_poly_borders->next' failed in Gcalc_operation_reducer::count_slice in maria-5.3-gis 258 259SELECT ST_NUMGEOMETRIES(ST_DIFFERENCE ( 260 ST_UNION ( 261 MULTILINESTRINGFROMTEXT( ' MULTILINESTRING( ( 2 4 , 5 0 , 2 9 , 6 2 , 0 2 ) , ( 4 3 , 5 6 , 9 4 , 0 7 , 7 2 , 2 0 , 8 2 ) , ( 5 0 , 1 5 , 3 7 , 7 7 ) , ( 2 3 , 9 5 , 2 0 , 8 1 ) , ( 0 9 , 9 3 , 2 8 , 8 1 , 9 4 ) ) ' ), 262 ST_UNION ( 263 MULTIPOLYGONFROMTEXT( ' MULTIPOLYGON( ( ( 2 2 , 7 2 , 6 2 , 2 6 , 2 2 ) ) , ( (3 5, 2 5, 2 4, 3 4, 3 5) ) ) ' ) , 264 ENVELOPE( 265 MULTIPOLYGONFROMTEXT( ' MULTIPOLYGON( ( (3 5, 2 5, 2 4, 3 4, 3 5) ) ) ' ) 266 ) 267 ) 268 ), 269 MULTILINESTRINGFROMTEXT( ' MULTILINESTRING( ( 2 9 , 1 3 , 7 3 , 8 5 ) , ( 5 0 , 8 1 , 2 0 , 7 4 , 1 0 ) , ( 9 2 , 5 2 , 6 5 , 8 8 , 0 2 ) , ( 0 8 , 3 9 , 4 0 , 1 0 ) , ( 0 0 , 7 6 , 8 3 , 0 0 ) ) ' ) 270)); 271 272 273#bug 841745 ssertion `!sp0->is_bottom()' failed in Gcalc_scan_iterator::find_intersections in maria-5.3-gis 274SELECT ASTEXT(ST_DIFFERENCE ( 275 POLYGONFROMTEXT( ' POLYGON( ( 2 2 , 2 8 , 8 8 , 8 2 , 2 2 ) , ( 4 4 , 4 6 , 6 6 , 6 4 , 4 4 ) ) ' ) , 276 ST_UNION ( 277 MULTILINESTRINGFROMTEXT( ' MULTILINESTRING( (3 5, 2 5, 2 4, 3 4, 3 5) ) ' ) , 278 ST_SYMDIFFERENCE ( 279 MULTILINESTRINGFROMTEXT( ' MULTILINESTRING( ( 3 8 , 0 8 , 6 6 , 6 1 , 0 5 , 6 7 , 3 7 ) , ( 5 8 , 7 7 , 9 0 , 8 7 ) , ( 1 5 , 1 8 , 2 3 , 3 9 ) , ( 1 3 , 9 7 , 5 5 , 0 8 , 6 9 ) , ( 3 6 , 6 9 , 8 7 , 0 2 , 4 6 , 9 5 ) ) ' ) , 280 ST_UNION ( 281 MULTILINESTRINGFROMTEXT( ' MULTILINESTRING( ( 9 4 , 2 0 , 2 2 , 7 2 , 6 2 ) , ( 5 2 , 8 2 , 4 8 , 3 4 ) , ( 1 0 , 1 4 , 2 7 , 7 0 , 1 5 ) , ( 2 8 , 4 4 , 5 0 , 7 0 , 4 0 ) ) ' ) , 282 GEOMETRYFROMTEXT( ' MULTILINESTRING( ( 3 7 , 7 3 , 5 8 , 4 8 ) , ( 3 2 , 5 0 , 9 3 , 4 4 ) , ( 6 0 , 4 2 , 7 8 , 1 3 ) ) ' ) 283 ) 284 ) 285 ) 286)); 287 288#bug 841773 Assertion `t0->rp->type == t1->rp->type' failed in Gcalc_operation_reducer::end_couple in maria-5.3-gis 289SELECT ST_NUMGEOMETRIES(ST_UNION ( 290 MULTILINESTRINGFROMTEXT( ' MULTILINESTRING( ( 0 8 , 1 9 , 5 7 , 2 8 , 5 8 , 6 7 ) , ( 4 5 , 8 4 , 0 3 , 5 1 ) , ( 6 8 , 2 7 , 1 6 , 9 9 , 7 2 ) , ( 9 5 , 2 8 , 1 2 , 9 6 , 2 0 ) ) ' ) , 291 MULTIPOLYGONFROMTEXT( ' MULTIPOLYGON( ( ( 7 7 , 2 7, 6 8, 7 1 , 7 7 ) ) ) ' ) 292)); 293 294#bug 841662 Third assertion `n > 0 && n < SINUSES_CALCULATED*2+1' in get_n_sincos 295SELECT ST_BUFFER ( 296 LINESTRINGFROMTEXT( ' LINESTRING( 5 4 , 3 8 , 2 6 , 5 5 , 7 9 ) ' ) , 297 ST_DISTANCE ( 298 MULTIPOLYGONFROMTEXT( ' MULTIPOLYGON( ( (3 5, 2 4, 2 5, 3 5) ) , ( (3 5, 2 5, 2 4, 3 4, 3 5) ) , ( ( 0 0 , 8 3 , 9 5 , 0 0 ) ) ) ' ) , 299 ST_DIFFERENCE ( 300 MULTIPOLYGONFROMTEXT( ' MULTIPOLYGON( ( (3 5, 2 5, 2 4, 3 4, 3 5) ) ) ' ) , 301 MULTIPOLYGONFROMTEXT( ' MULTIPOLYGON( ( ( 2 2 , 2 8 , 8 8 , 8 2 , 2 2 ) , ( 4 4 , 4 6 , 6 6 , 6 4 , 4 4 ) ) , ( ( 0 0 , 3 8 , 9 4 , 0 0 ) ) ) ' ) 302 ) 303 ) 304 ) ; 305SELECT ST_DISTANCE ( ST_DIFFERENCE ( MULTIPOLYGONFROMTEXT( ' MULTIPOLYGON( ( (3 5, 2 5, 2 4, 3 4, 3 5) ) ) ' ) , MULTIPOLYGONFROMTEXT( ' MULTIPOLYGON( ( ( 2 2 , 2 8 , 8 8 , 8 2 , 2 2 ) , ( 4 4 , 4 6 , 6 6 , 6 4 , 4 4 ) ) , ( ( 0 0 , 3 8 , 9 4 , 0 0 ) ) ) ' ) ), MULTIPOLYGONFROMTEXT( ' MULTIPOLYGON( ( (3 5, 2 4, 2 5, 3 5) ) , ( (3 5, 2 5, 2 4, 3 4, 3 5) ) , ( ( 0 0 , 8 3 , 9 5 , 0 0 ) ) ) ' ) ) ; 306 307#bug 848939 Wrong result with ST_INTERSECTION between linestrings and a polygon in 5.3-gis 308SELECT ASTEXT(ST_INTERSECTION( GEOMETRYFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(7 7,5.33333333333333 7),LINESTRING(5.33333333333333 7,0 7,5 8,5.33333333333333 7),LINESTRING(5.33333333333333 7,7 2,7 7),POLYGON((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)))'), geomETRYFROMTEXT(' MULTILINESTRING( ( 5 1 , 3 7 , 6 1 , 7 0 ) , ( 1 6 , 8 5 , 7 5 , 5 6 ) )') )); 309 310#bug 855485 ST_CROSSES returns different result than PostGIS for overlapping polygons 311 312SELECT ST_CROSSES( GEOMETRYFROMTEXT(' POLYGON( (3 5, 2 4, 2 5, 3 5) ) ') , POLYGONFROMTEXT(' POLYGON((2 4,3 4,3 5,2 5,2 4)) ')); 313 314#bug 855487 ST_WITHIN returns wrong result for partially overlapping polygons 315 316SELECT ST_WITHIN( POLYGONFROMTEXT(' POLYGON( (0 5, 3 5, 3 4, 2 0 , 1 0, 2 4 , 0 4, 0 5) ) ') , POLYGONFROMTEXT(' POLYGON( (0 5, 3 5, 3 4, 1 4 , 1 3 , 3 3 , 3 0 , 0 0 , 0 5), ( 1 1 , 2 1 , 2 2 , 1 2 , 1 1 ) ) ') ); 317 318#bug 855492 ST_WITHIN returns TRUE on point on the edge of a polygon 319 320SELECT ST_WITHIN( POINTFROMTEXT(' POINT(1 2 ) ') , MULTIPOLYGONFROMTEXT(' MULTIPOLYGON( ( (0 5, 3 5, 3 0, 0 0, 0 5), ( 1 1 , 2 1 , 2 4, 1 4, 1 1 ) ) ) ')); 321 322#bug 855497 ST_ENVELOPE of GEOMETRYCOLLECTION EMPTY returns NULL and not GEOMETRYCOLLECTION EMPTY 323 324select ST_ASTEXT(envelope(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION EMPTY'))); 325 326#bug 855503 ST_EQUALS reports TRUE between a POLYGON and a MULTILINESTRING 327 328SELECT ST_EQUALS( GEOMETRYFROMTEXT(' MULTILINESTRING( (3 5, 2 5, 2 4, 3 4, 3 5) ) ') , GEOMETRYFROMTEXT(' POLYGON( (3 5, 2 5, 2 4, 3 4, 3 5) ) ') ); 329 330#bug 855505 ST_TOUCHES reports TRUE for intersecting polygon and linestring 331 332SELECT ST_TOUCHES( GEOMETRYFROMTEXT(' LINESTRING( 1 1 , 1 4 , 5 0 , 8 3 ) ') , POLYGONFROMTEXT(' POLYGON( ( 2 2 , 2 8 , 8 8 , 8 2 , 2 2 ) , ( 4 4 , 4 6 , 6 6 , 6 4 , 4 4 ) ) ') ); 333 334#bug 857051 ST_EQUALS returns TRUE on two nonidentical MULTIPOINTs 335 336SELECT ST_EQUALS( MULTIPOINTFROMTEXT(' MULTIPOINT( 5 1 , 6 9 , 1 4 , 4 0 ) ') , MULTIPOINTFROMTEXT(' MULTIPOINT( 5 8 , 5 2 , 1 8 , 3 0 , 3 0 , 7 8 ) ') ); 337SELECT ST_EQUALS( MULTIPOINTFROMTEXT(' MULTIPOINT( 5 1 , 6 9 , 1 4 , 4 0 ) ') , MULTIPOINTFROMTEXT('MULTIPOINT( 4 0 , 6 9 , 5 1, 1 4 )') ); 338 339#bug 857050 ST_WITHIN returns wrong result with MULTIPOINT and POLYGON 340SELECT ST_WITHIN( MULTIPOINTFROMTEXT(' MULTIPOINT( 2 9 , 2 9 , 4 9 , 9 1 ) ') , POLYGONFROMTEXT(' POLYGON( ( 2 2 , 2 8 , 8 8 , 8 2 , 2 2 ) , ( 4 4 , 4 6 , 6 6 , 6 4 , 4 4 ) ) ')); 341 342#bug 857087 Wrong result with ST_INTERSECTS and LINESTRINGs 343 344SELECT ST_INTERSECTS( GeomFromText('MULTILINESTRING( ( 4030 3045 , 3149 2461 , 3004 3831 , 3775 2976 ) )') , GeomFromText('LINESTRING(3058.41 3187.91,3081.52 3153.19,3042.99 3127.57,3019.89 3162.29,3039.07 3175.05,3039.07 3175.05,3058.41 3187.91,3081.52 3153.19,3042.99 3127.57,3019.89 3162.29)') ); 345 346#bug 977201 ST_BUFFER fails with the negative D. TODO - check the result deeper. 347# select ASTEXT(ST_BUFFER(ST_GEOMCOLLFROMTEXT(' GEOMETRYCOLLECTION(LINESTRING(100 100, 31 10, 77 80), POLYGON((0 0,4 7,1 1,0 0)), POINT(20 20))'), -3)); 348 349#bug 986977 Assertion `!cur_p->event' failed in Gcalc_scan_iterator::arrange_event(int, int) 350SELECT ST_NUMPOINTS(ST_EXTERIORRING(ST_BUFFER( POLYGONFROMTEXT( 'POLYGON( ( 0.0 -3.0, 351 -2.910427500435995 0.727606875108998, 352 -0.910427500435995 8.727606875108998, 353 7.664100588675687 1.503849116986468, 354 1.664100588675687 -2.496150883013531, 355 0.0 -3.0 356))' ), 3 ))); 357 358# MDEV-5615 crash in Gcalc_function::add_operation 359select astext(buffer(st_linestringfromwkb(linestring(point(-1,1), point(-1,-2))),-1)); 360 361# MDEV-7925 Inconsistent behavior of ST_Touches with a POINT as one of arguments 362select ST_Touches(ST_LineFromText('LINESTRING(0 0,5 5)'),ST_PointFromText('POINT(0 0)')); 363select ST_Touches(ST_PolygonFromText('POLYGON((0 0,0 5,5 5,5 0,0 0))'),ST_PointFromText('POINT(0 0)')); 364select ST_Touches(ST_PointFromText('POINT(0 0)'),ST_PointFromText('POINT(0 0)')); 365 366# MDEV-12705 10.1.18-MariaDB-1~jessie - mysqld got signal 11. 367SELECT ST_RELATE( 368 ST_DIFFERENCE( 369 GEOMETRYFROMTEXT(' 370 MULTILINESTRING( 371 ( 12841 36140, 8005 31007, 26555 31075, 52765 41191, 372 28978 6548, 45720 32057, 53345 3221 ), 373 ( 8304 59107, 25233 31592, 40502 25303, 8205 42940 ), 374 ( 7829 7305, 58841 56759, 64115 8512, 37562 54145, 2210 14701 ), 375 ( 20379 2805, 40807 27770, 28147 14883, 26439 29383, 55663 5086 ), 376 ( 35944 64702, 14433 23728, 49317 26241, 790 16941 ) 377 ) 378 '), 379 GEOMETRYFROMTEXT('POINT(46061 13545)') 380 ), 381 GEOMETRYFROMTEXT('POINT(4599 60359)'), 382 'F*FFFF**F' 383 ) as relate_res; 384 385# MDEV-18920 Prepared statements with st_convexhull hang and eat 100% cpu. 386prepare s from 'do st_convexhull(st_aswkb(multipoint(point(-11702,15179),point(-5031,27960),point(-30557,11158),point(-27804,30314))))'; 387execute s; 388execute s; 389deallocate prepare s; 390 391# MDEV- 16050 cte + geometry functions lead to crash. 392 393with cte1 as( select (st_symdifference(point(1,1),point(1,1))) as a1 ), cte2 as(select 1 as a2) select 1 from cte1 where cte1.a1 < '1'; 394 395--source include/gis_debug.inc 396 397 398--echo # 399--echo # MDEV-13467 Feature request: Support for ST_Distance_Sphere() 400--echo # 401 402--error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT 403SELECT ST_DISTANCE_SPHERE(); 404--error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT 405SELECT ST_DISTANCE_SPHERE(NULL); 406SELECT ST_DISTANCE_SPHERE(NULL, NULL); 407# NULL args and optional radius will return NULL 408SELECT ST_DISTANCE_SPHERE(NULL, NULL, 3); 409# At least 1 NULL arg and optional radius will return NULL 410SELECT ST_DISTANCE_SPHERE(NULL, 1, 3); 411# At least 1 NULL arg and optional radius will return NULL 412SELECT ST_DISTANCE_SPHERE(1, NULL, 3); 413# Return ER_GIS_INVALID_DATA for invalid geometry 414--error ER_GIS_INVALID_DATA 415SELECT ST_DISTANCE_SPHERE(1, 1); 416--error ER_GIS_INVALID_DATA 417SELECT ST_DISTANCE_SPHERE(1, 1, 3); 418# Return NULL if radius is NULL 419SELECT ST_DISTANCE_SPHERE(1, 1, NULL); 420# Wrong geometry 421--error ER_INTERNAL_ERROR 422SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 0)'), ST_GEOMFROMTEXT('LINESTRING(0 0, 1 1)')); 423 424--echo # Test Points and radius 425SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 1)')); 426# make bb x86 happy 427SELECT TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(-1 -1)'), ST_GEOMFROMTEXT('POINT(-2 -2)')), 10); 428SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 1)'), 1); 429--error ER_INTERNAL_ERROR 430SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 1)'), 0); 431--error ER_INTERNAL_ERROR 432SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 1)'), -1); 433--echo # Test longitude/lattitude 434# make bb x86 happy 435SELECT TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 1)'), ST_GEOMFROMTEXT('POINT(1 2)')), 10); 436SELECT TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 1)'), ST_GEOMFROMTEXT('POINT(2 1)')), 10); 437SELECT TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 0)'), ST_GEOMFROMTEXT('POINT(1 2)')), 10); 438SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 0)'), ST_GEOMFROMTEXT('POINT(2 1)')); 439--echo # Test Points - Multipoints 440SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(1 1)')); 441SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(1 1)'), ST_GEOMFROMTEXT('POINT(0 0)')); 442SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(1 1,2 2)')); 443SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(2 2,1 1)')); 444SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(1 1,2 2)'), 1); 445SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(2 2,1 1)'), 1); 446SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(2 2, 1 1, 3 4)'), 1); 447SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(2 2, 1 1,5 6)'), 1); 448--echo # Test Multipoints - Multipoints 449SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(3 4,8 9 )'), ST_GEOMFROMTEXT('MULTIPOINT(3 4,8 9 )')); 450# make bb x86 happy 451SELECT TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(1 2,1 1 )'), ST_GEOMFROMTEXT('MULTIPOINT(3 4,8 9 )')), 10); 452SELECT TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(1 2,1 1 )'), ST_GEOMFROMTEXT('MULTIPOINT(8 9,3 4 )')), 10); 453# make bb x86 happy 454SELECT TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(1 2,1 1 )'), ST_GEOMFROMTEXT('MULTIPOINT(8 9,3 4 )'),1), 17); 455--error ER_INTERNAL_ERROR 456SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(1 2,1 1 )'), ST_GEOMFROMTEXT('MULTIPOINT(8 9,3 4 )'),0); 457 458# Longitude out of range [-180,180] 459set @pt1 = ST_GeomFromText('POINT(190 -30)'); 460set @pt2 = ST_GeomFromText('POINT(-30 50)'); 461--error ER_STD_OUT_OF_RANGE_ERROR 462SELECT ST_Distance_Sphere(@pt1, @pt2); 463 464# Latitude out of range [-90, 90] 465set @pt1 = ST_GeomFromText('POINT(135 -30)'); 466set @pt2 = ST_GeomFromText('POINT(-30 91)'); 467--error ER_STD_OUT_OF_RANGE_ERROR 468SELECT ST_Distance_Sphere(@pt1, @pt2); 469 470# POINT in form (longitude[-180, 180] latitude[-90, 90]) 471set @zenica = ST_GeomFromText('POINT(17.907743 44.203438)'); 472set @sarajevo = ST_GeomFromText('POINT(18.413076 43.856258)'); 473SELECT TRUNCATE(ST_Distance_Sphere(@zenica, @sarajevo), 10); 474SELECT TRUNCATE(ST_Distance_Sphere(@sarajevo, @zenica), 10); 475