mirror of
https://github.com/MariaDB/server.git
synced 2026-05-15 11:27:39 +02:00
fix for bug #201189 ST_BUFFER asserts if radius = 0.
Internal caclucations can't handle zero distance properly.
As the ST_BUFFER(geom, 0) is in fact NOOP, we'll just return the
'geom' as the result here.
per-file comments:
mysql-test/r/gis-precise.result
fix for bug #201189 ST_BUFFER asserts if radius = 0.
test result updated.
mysql-test/t/gis-precise.test
fix for bug #201189 ST_BUFFER asserts if radius = 0.
test case added.
sql/item_geofunc.cc
fix for bug #201189 ST_BUFFER asserts if radius = 0.
return the first argument as the result of the ST_BUFFER, if
the distance is 0 there.
This commit is contained in:
parent
4f49cdf8d3
commit
a9a6597d59
3 changed files with 18 additions and 0 deletions
|
|
@ -1406,6 +1406,18 @@ String *Item_func_buffer::val_str(String *str_value)
|
|||
!(g= Geometry::construct(&buffer, obj->ptr(), obj->length())))
|
||||
goto mem_error;
|
||||
|
||||
/*
|
||||
If the distance given is 0, the Buffer function is in fact NOOP,
|
||||
so it's natural just to return the argument1.
|
||||
Besides, internal calculations here can't handle zero distance anyway.
|
||||
*/
|
||||
if (fabs(dist) < GIS_ZERO)
|
||||
{
|
||||
null_value= 0;
|
||||
str_result= obj;
|
||||
goto mem_error;
|
||||
}
|
||||
|
||||
if (func.reserve_op_buffer(2))
|
||||
goto mem_error;
|
||||
/* will specify operands later */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue