Skip to content

Commit 38cc216

Browse files
Alexey BotchkovDaveGosselin-MariaDB
authored andcommitted
MDEV-35960 st_isvalid(NULL) should not end up with an error, but return NULL.
Now these return NULL if the argument is NULL and an error if the argument is not a valid geometry.
1 parent 4b720b0 commit 38cc216

File tree

4 files changed

+70
-59
lines changed

4 files changed

+70
-59
lines changed

mysql-test/main/gis.result

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1840,7 +1840,7 @@ disjoint
18401840
#
18411841
select ST_IsRing(NULL);
18421842
ST_IsRing(NULL)
1843-
-1
1843+
NULL
18441844
#
18451845
# MDEV-8675 Different results of GIS functions on NULL vs NOT NULL columns
18461846
#
@@ -4398,15 +4398,15 @@ ST_NUMPOINTS(POINT(1,1)),
43984398
ST_SRID(POINT(1,1));
43994399
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
44004400
def ST_ISSIMPLE(POINT(1,1)) 3 2 1 Y 32896 0 63
4401-
def ST_ISRING(POINT(1,1)) 3 22Y 32896 0 63
4401+
def ST_ISRING(POINT(1,1)) 3 21Y 32896 0 63
44024402
def ST_ISCLOSED(POINT(1,1)) 3 2 2 Y 32896 0 63
44034403
def ST_DIMENSION(POINT(1,1)) 3 10 1 Y 32896 0 63
44044404
def ST_NUMGEOMETRIES(POINT(1,1)) 3 10 0 Y 32896 0 63
44054405
def ST_NUMINTERIORRINGS(POINT(1,1)) 3 10 0 Y 32896 0 63
44064406
def ST_NUMPOINTS(POINT(1,1)) 3 10 0 Y 32896 0 63
44074407
def ST_SRID(POINT(1,1)) 3 10 1 Y 32896 0 63
44084408
ST_ISSIMPLE(POINT(1,1)) ST_ISRING(POINT(1,1)) ST_ISCLOSED(POINT(1,1)) ST_DIMENSION(POINT(1,1)) ST_NUMGEOMETRIES(POINT(1,1)) ST_NUMINTERIORRINGS(POINT(1,1)) ST_NUMPOINTS(POINT(1,1)) ST_SRID(POINT(1,1))
4409-
1-1-1 0 NULL NULL NULL 0
4409+
10-1 0 NULL NULL NULL 0
44104410
#
44114411
# MDEV-12803 Improve function parameter data type control
44124412
#

mysql-test/main/spatial_utility_function_isvalid.result

Lines changed: 55 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -247,19 +247,23 @@ SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(0 0))')) c;
247247
c
248248
0
249249
SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(GEOMETRYCOLLECTION()))'));
250-
ERROR 22023: Invalid GIS data provided to function st_isvalid.
250+
ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(GEOMETRYCOLLECTION()))'))
251+
NULL
251252
SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(10 10),MULTIPOINT(0 0,10 10))')) c;
252253
c
253254
1
254255
SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(10 10),MULTIPOINT(0 0,10 10)))'));
255-
ERROR 22023: Invalid GIS data provided to function st_isvalid.
256+
ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(10 10),MULTIPOINT(0 0,10 10)))'))
257+
NULL
256258
SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(0 0),POINT(10 10))')) c;
257259
c
258260
0
259261
SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(0 0),GEOMETRYCOLLECTION())'));
260-
ERROR 22023: Invalid GIS data provided to function st_isvalid.
262+
ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(0 0),GEOMETRYCOLLECTION())'))
263+
NULL
261264
SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POLYGON((0 0,1 1,2 2,0 0)),GEOMETRYCOLLECTION())'));
262-
ERROR 22023: Invalid GIS data provided to function st_isvalid.
265+
ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POLYGON((0 0,1 1,2 2,0 0)),GEOMETRYCOLLECTION())'))
266+
NULL
263267
SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(0 0,10 10,20 20),POLYGON((0 0,10 10,100 100,0 0)))')) c;
264268
c
265269
0
@@ -281,7 +285,9 @@ c
281285
1
282286
SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION('
283287
'GEOMETRYCOLLECTION(POLYGON((0 0,0 10,10 10,10 0,0 0,0 0)))))'));
284-
ERROR 22023: Invalid GIS data provided to function st_isvalid.
288+
ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION('
289+
'GEOMETRYCOLLECTION(POLYGON((0 0,0 10,10 10,10 0,0 0,0 0)))))'))
290+
NULL
285291
SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POLYGON((0 0,0 10,10 10,10 0,0 0,0 0),(4 4,4 6,6 6,6 4,4 4)),'
286292
'MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0,0 0)),((10 10,10 15,15 15,15 10,10 10))))')) c;
287293
c
@@ -290,20 +296,29 @@ SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(1
290296
'MULTIPOINT(0 0,10 10)),'
291297
'GEOMETRYCOLLECTION(LINESTRING(1 1,2 2,3 3),'
292298
'MULTILINESTRING((0 0,0 10,10 10,10 0),(10 10,10 15,15 15,10 10))))'));
293-
ERROR 22023: Invalid GIS data provided to function st_isvalid.
299+
ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(10 10),'
300+
'MULTIPOINT(0 0,10 10)),'
301+
'GEOMETRYCOLLECTION(LIN
302+
NULL
294303
SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(10 10),'
295304
'MULTIPOINT(0 0,10 10)),'
296305
'GEOMETRYCOLLECTION(LINESTRING(1 1,2 2,3 3),'
297306
'MULTILINESTRING((0 0,0 10,10 10,10 0),(10 10,10 15,15 15,10 10))),'
298307
'GEOMETRYCOLLECTION(POLYGON((0 0,0 10,10 10,10 0,0 0,0 0),(4 4,4 6,6 6,6 4,4 4)),'
299308
'MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0,0 0)),((10 10,10 15,15 15,15 10,10 10)))))'));
300-
ERROR 22023: Invalid GIS data provided to function st_isvalid.
309+
ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(10 10),'
310+
'MULTIPOINT(0 0,10 10)),'
311+
'GEOMETRYCOLLECTION(LIN
312+
NULL
301313
SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(10 10),'
302314
'MULTIPOINT(0 0,10 10)),'
303315
'GEOMETRYCOLLECTION(LINESTRING(1 1,2 2,3 3),'
304316
'MULTILINESTRING((0 0,0 10,10 10,10 0),(10 10,10 15,15 15,10 10))),'
305317
'GEOMETRYCOLLECTION(GEOMETRYCOLLECTION()))'));
306-
ERROR 22023: Invalid GIS data provided to function st_isvalid.
318+
ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(10 10),'
319+
'MULTIPOINT(0 0,10 10)),'
320+
'GEOMETRYCOLLECTION(LIN
321+
NULL
307322
SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0),'
308323
'LINESTRING(1 1,2 2,3 3),'
309324
'POLYGON((0 0,0 10,10 10,10 0,0 0,0 0),(4 4,4 6,6 6,6 4,4 4)),'
@@ -323,43 +338,59 @@ c
323338
SELECT ST_ISVALID();
324339
ERROR 42000: Incorrect parameter count in the call to native function 'ST_ISVALID'
325340
SELECT ST_ISVALID(NULL);
326-
ERROR 22023: Invalid GIS data provided to function st_isvalid.
341+
ST_ISVALID(NULL)
342+
NULL
327343
SELECT ST_ISVALID(ST_GEOMFROMTEXT('POINT()'));
328-
ERROR 22023: Invalid GIS data provided to function st_isvalid.
344+
ST_ISVALID(ST_GEOMFROMTEXT('POINT()'))
345+
NULL
329346
SELECT ST_ISVALID(ST_GEOMFROMTEXT('LINESTRING()'));
330-
ERROR 22023: Invalid GIS data provided to function st_isvalid.
347+
ST_ISVALID(ST_GEOMFROMTEXT('LINESTRING()'))
348+
NULL
331349
SELECT ST_ISVALID(ST_GEOMFROMTEXT('POLYGON(())'));
332-
ERROR 22023: Invalid GIS data provided to function st_isvalid.
350+
ST_ISVALID(ST_GEOMFROMTEXT('POLYGON(())'))
351+
NULL
333352
SELECT ST_ISVALID(ST_GEOMFROMTEXT('MULTIPOINT()'));
334-
ERROR 22023: Invalid GIS data provided to function st_isvalid.
353+
ST_ISVALID(ST_GEOMFROMTEXT('MULTIPOINT()'))
354+
NULL
335355
SELECT ST_ISVALID(ST_GEOMFROMTEXT('MULTILINESTRING(())'));
336-
ERROR 22023: Invalid GIS data provided to function st_isvalid.
356+
ST_ISVALID(ST_GEOMFROMTEXT('MULTILINESTRING(())'))
357+
NULL
337358
SELECT ST_ISVALID(ST_GEOMFROMTEXT('MULTIPOLYGON((()))'));
338-
ERROR 22023: Invalid GIS data provided to function st_isvalid.
359+
ST_ISVALID(ST_GEOMFROMTEXT('MULTIPOLYGON((()))'))
360+
NULL
339361
SELECT ST_ISVALID(ST_GEOMFROMTEXT('POINT(a 0)'));
340-
ERROR 22023: Invalid GIS data provided to function st_isvalid.
362+
ST_ISVALID(ST_GEOMFROMTEXT('POINT(a 0)'))
363+
NULL
341364
SELECT ST_ISVALID(ST_GEOMFROMTEXT('POINT(! 0)'));
342-
ERROR 22023: Invalid GIS data provided to function st_isvalid.
365+
ST_ISVALID(ST_GEOMFROMTEXT('POINT(! 0)'))
366+
NULL
343367
SELECT ST_ISVALID(ST_GEOMFROMTEXT('POINT('!' 0)'));
344368
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '!' 0)'))' at line 1
345369
SELECT ST_ISVALID(ST_GEOMFROMTEXT('POINT(12,34 0)'));
346-
ERROR 22023: Invalid GIS data provided to function st_isvalid.
370+
ST_ISVALID(ST_GEOMFROMTEXT('POINT(12,34 0)'))
371+
NULL
347372
SELECT ST_ISVALID(ST_GEOMFROMTEXT('LINESTRING(a 0,10 10)'));
348-
ERROR 22023: Invalid GIS data provided to function st_isvalid.
373+
ST_ISVALID(ST_GEOMFROMTEXT('LINESTRING(a 0,10 10)'))
374+
NULL
349375
SELECT ST_ISVALID(ST_GEOMFROMTEXT('LINESTRING(0 0,! 10)'));
350-
ERROR 22023: Invalid GIS data provided to function st_isvalid.
376+
ST_ISVALID(ST_GEOMFROMTEXT('LINESTRING(0 0,! 10)'))
377+
NULL
351378
SELECT ST_ISVALID(ST_GEOMFROMTEXT('LINESTRING('!' 0,10 10)'));
352379
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '!' 0,10 10)'))' at line 1
353380
SELECT ST_ISVALID(ST_GEOMFROMTEXT('LINESTRING(12,34 0,10 10)'));
354-
ERROR 22023: Invalid GIS data provided to function st_isvalid.
381+
ST_ISVALID(ST_GEOMFROMTEXT('LINESTRING(12,34 0,10 10)'))
382+
NULL
355383
SELECT ST_ISVALID(ST_GEOMFROMTEXT('POLYGON((a 0,10 10,10 0,0 0))'));
356-
ERROR 22023: Invalid GIS data provided to function st_isvalid.
384+
ST_ISVALID(ST_GEOMFROMTEXT('POLYGON((a 0,10 10,10 0,0 0))'))
385+
NULL
357386
SELECT ST_ISVALID(ST_GEOMFROMTEXT('POLYGON((0 0,! 10,10 0,0 0))'));
358-
ERROR 22023: Invalid GIS data provided to function st_isvalid.
387+
ST_ISVALID(ST_GEOMFROMTEXT('POLYGON((0 0,! 10,10 0,0 0))'))
388+
NULL
359389
SELECT ST_ISVALID(ST_GEOMFROMTEXT('POLYGON(('!' 0,10 10,10 0,0 0))'));
360390
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '!' 0,10 10,10 0,0 0))'))' at line 1
361391
SELECT ST_ISVALID(ST_GEOMFROMTEXT('POLYGON((12,34 0,10 10,10 0,0 0))'));
362-
ERROR 22023: Invalid GIS data provided to function st_isvalid.
392+
ST_ISVALID(ST_GEOMFROMTEXT('POLYGON((12,34 0,10 10,10 0,0 0))'))
393+
NULL
363394
SELECT ST_ISVALID(ST_GEOMFROMTEXT(@star_center,-1024));
364395
ST_ISVALID(ST_GEOMFROMTEXT(@star_center,-1024))
365396
1

mysql-test/main/spatial_utility_function_isvalid.test

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -219,20 +219,16 @@ SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION()'));
219219

220220
SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(0 0))')) c;
221221

222-
--error ER_GIS_INVALID_DATA
223222
SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(GEOMETRYCOLLECTION()))'));
224223

225224
SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(10 10),MULTIPOINT(0 0,10 10))')) c;
226225

227-
--error ER_GIS_INVALID_DATA
228226
SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(10 10),MULTIPOINT(0 0,10 10)))'));
229227

230228
SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(0 0),POINT(10 10))')) c;
231229

232-
--error ER_GIS_INVALID_DATA
233230
SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(0 0),GEOMETRYCOLLECTION())'));
234231

235-
--error ER_GIS_INVALID_DATA
236232
SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POLYGON((0 0,1 1,2 2,0 0)),GEOMETRYCOLLECTION())'));
237233

238234
SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(0 0,10 10,20 20),POLYGON((0 0,10 10,100 100,0 0)))')) c;
@@ -249,25 +245,21 @@ SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(10 10),'
249245

250246
SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POLYGON((0 0,0 10,10 10,10 0,0 0,0 0)))')) c;
251247

252-
--error ER_GIS_INVALID_DATA
253248
SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION('
254249
'GEOMETRYCOLLECTION(POLYGON((0 0,0 10,10 10,10 0,0 0,0 0)))))'));
255250

256251
SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POLYGON((0 0,0 10,10 10,10 0,0 0,0 0),(4 4,4 6,6 6,6 4,4 4)),'
257252
'MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0,0 0)),((10 10,10 15,15 15,15 10,10 10))))')) c;
258-
--error ER_GIS_INVALID_DATA
259253
SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(10 10),'
260254
'MULTIPOINT(0 0,10 10)),'
261255
'GEOMETRYCOLLECTION(LINESTRING(1 1,2 2,3 3),'
262256
'MULTILINESTRING((0 0,0 10,10 10,10 0),(10 10,10 15,15 15,10 10))))'));
263-
--error ER_GIS_INVALID_DATA
264257
SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(10 10),'
265258
'MULTIPOINT(0 0,10 10)),'
266259
'GEOMETRYCOLLECTION(LINESTRING(1 1,2 2,3 3),'
267260
'MULTILINESTRING((0 0,0 10,10 10,10 0),(10 10,10 15,15 15,10 10))),'
268261
'GEOMETRYCOLLECTION(POLYGON((0 0,0 10,10 10,10 0,0 0,0 0),(4 4,4 6,6 6,6 4,4 4)),'
269262
'MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0,0 0)),((10 10,10 15,15 15,15 10,10 10)))))'));
270-
--error ER_GIS_INVALID_DATA
271263
SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(10 10),'
272264
'MULTIPOINT(0 0,10 10)),'
273265
'GEOMETRYCOLLECTION(LINESTRING(1 1,2 2,3 3),'
@@ -292,61 +284,45 @@ SELECT ST_ISVALID(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(MULTILINESTRING((-7 -2,-9
292284
--error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
293285
SELECT ST_ISVALID();
294286

295-
--error ER_GIS_INVALID_DATA
296287
SELECT ST_ISVALID(NULL);
297288

298-
--error ER_GIS_INVALID_DATA
299289
SELECT ST_ISVALID(ST_GEOMFROMTEXT('POINT()'));
300290

301-
--error ER_GIS_INVALID_DATA
302291
SELECT ST_ISVALID(ST_GEOMFROMTEXT('LINESTRING()'));
303292

304-
--error ER_GIS_INVALID_DATA
305293
SELECT ST_ISVALID(ST_GEOMFROMTEXT('POLYGON(())'));
306294

307-
--error ER_GIS_INVALID_DATA
308295
SELECT ST_ISVALID(ST_GEOMFROMTEXT('MULTIPOINT()'));
309296

310-
--error ER_GIS_INVALID_DATA
311297
SELECT ST_ISVALID(ST_GEOMFROMTEXT('MULTILINESTRING(())'));
312298

313-
--error ER_GIS_INVALID_DATA
314299
SELECT ST_ISVALID(ST_GEOMFROMTEXT('MULTIPOLYGON((()))'));
315300

316-
--error ER_GIS_INVALID_DATA
317301
SELECT ST_ISVALID(ST_GEOMFROMTEXT('POINT(a 0)'));
318302

319-
--error ER_GIS_INVALID_DATA
320303
SELECT ST_ISVALID(ST_GEOMFROMTEXT('POINT(! 0)'));
321304

322305
--error ER_PARSE_ERROR
323306
SELECT ST_ISVALID(ST_GEOMFROMTEXT('POINT('!' 0)'));
324307

325-
--error ER_GIS_INVALID_DATA
326308
SELECT ST_ISVALID(ST_GEOMFROMTEXT('POINT(12,34 0)'));
327309

328-
--error ER_GIS_INVALID_DATA
329310
SELECT ST_ISVALID(ST_GEOMFROMTEXT('LINESTRING(a 0,10 10)'));
330311

331-
--error ER_GIS_INVALID_DATA
332312
SELECT ST_ISVALID(ST_GEOMFROMTEXT('LINESTRING(0 0,! 10)'));
333313

334314
--error ER_PARSE_ERROR
335315
SELECT ST_ISVALID(ST_GEOMFROMTEXT('LINESTRING('!' 0,10 10)'));
336316

337-
--error ER_GIS_INVALID_DATA
338317
SELECT ST_ISVALID(ST_GEOMFROMTEXT('LINESTRING(12,34 0,10 10)'));
339318

340-
--error ER_GIS_INVALID_DATA
341319
SELECT ST_ISVALID(ST_GEOMFROMTEXT('POLYGON((a 0,10 10,10 0,0 0))'));
342320

343-
--error ER_GIS_INVALID_DATA
344321
SELECT ST_ISVALID(ST_GEOMFROMTEXT('POLYGON((0 0,! 10,10 0,0 0))'));
345322

346323
--error ER_PARSE_ERROR
347324
SELECT ST_ISVALID(ST_GEOMFROMTEXT('POLYGON(('!' 0,10 10,10 0,0 0))'));
348325

349-
--error ER_GIS_INVALID_DATA
350326
SELECT ST_ISVALID(ST_GEOMFROMTEXT('POLYGON((12,34 0,10 10,10 0,0 0))'));
351327

352328
SELECT ST_ISVALID(ST_GEOMFROMTEXT(@star_center,-1024));

sql/item_geofunc.cc

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2093,7 +2093,8 @@ longlong Item_func_isvalid::val_int()
20932093
if ((args[0]->null_value ||
20942094
!(geometry= Geometry::construct(&buffer, wkb->ptr(), wkb->length()))))
20952095
{
2096-
my_error(ER_GIS_INVALID_DATA, MYF(0), func_name());
2096+
if (!args[0]->null_value)
2097+
my_error(ER_GIS_INVALID_DATA, MYF(0), func_name());
20972098
null_value= 1;
20982099
return 1;
20992100
}
@@ -2200,8 +2201,10 @@ longlong Item_func_issimple::val_int()
22002201
if ((args[0]->null_value ||
22012202
!(geometry= Geometry::construct(&buffer, swkb->ptr(), swkb->length()))))
22022203
{
2203-
/* We got NULL as an argument. Have to return -1 */
2204-
DBUG_RETURN(-1);
2204+
if (!args[0]->null_value)
2205+
my_error(ER_GIS_INVALID_DATA, MYF(0), func_name());
2206+
null_value= 1;
2207+
DBUG_RETURN(0);
22052208
}
22062209

22072210
if (geometry->get_class_info()->m_type_id == Geometry::wkb_point)
@@ -2316,14 +2319,15 @@ longlong Item_func_isring::val_int()
23162319
null_value= 0;
23172320
if (!swkb ||
23182321
args[0]->null_value ||
2319-
!(geom= Geometry::construct(&buffer, swkb->ptr(), swkb->length())) ||
2320-
geom->is_closed(&isclosed))
2322+
!(geom= Geometry::construct(&buffer, swkb->ptr(), swkb->length())))
23212323
{
2322-
/* IsRing(NULL) should return -1 */
2323-
return -1;
2324+
if (!args[0]->null_value)
2325+
my_error(ER_GIS_INVALID_DATA, MYF(0), func_name());
2326+
null_value= 1;
2327+
return 0;
23242328
}
23252329

2326-
if (!isclosed)
2330+
if (geom->is_closed(&isclosed) || !isclosed)
23272331
return 0;
23282332

23292333
return Item_func_issimple::val_int();

0 commit comments

Comments
 (0)