MDEV-35117 Improve error message on unexpected geometries for st_distance_sphere
When invoking st_distance_sphere with unexpected geometries, the error message now given is: ERROR HY000: Internal error: Point or multipoint geometries expected This commit fixes a few formatting issues in the affected function.
This commit is contained in:
parent
3a1f9dfda9
commit
fbb6b50499
@ -776,7 +776,7 @@ SELECT ST_DISTANCE_SPHERE(1, 1, NULL);
|
|||||||
ST_DISTANCE_SPHERE(1, 1, NULL)
|
ST_DISTANCE_SPHERE(1, 1, NULL)
|
||||||
NULL
|
NULL
|
||||||
SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 0)'), ST_GEOMFROMTEXT('LINESTRING(0 0, 1 1)')) as result;
|
SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 0)'), ST_GEOMFROMTEXT('LINESTRING(0 0, 1 1)')) as result;
|
||||||
ERROR HY000: Internal error: st_distance_sphere
|
ERROR HY000: Calling geometry function st_distance_sphere with unsupported types of arguments.
|
||||||
# Test Points and radius
|
# Test Points and radius
|
||||||
SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 1)')) as result;
|
SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 1)')) as result;
|
||||||
result
|
result
|
||||||
@ -788,9 +788,9 @@ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(
|
|||||||
result
|
result
|
||||||
0.024682056391766436
|
0.024682056391766436
|
||||||
SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 1)'), 0) as result;
|
SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 1)'), 0) as result;
|
||||||
ERROR HY000: Internal error: Radius must be greater than zero.
|
ERROR HY000: Calling geometry function st_distance_sphere with unsupported types of arguments.
|
||||||
SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 1)'), -1) as result;
|
SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 1)'), -1) as result;
|
||||||
ERROR HY000: Internal error: Radius must be greater than zero.
|
ERROR HY000: Calling geometry function st_distance_sphere with unsupported types of arguments.
|
||||||
# Test longitude/lattitude
|
# Test longitude/lattitude
|
||||||
SELECT TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 1)'), ST_GEOMFROMTEXT('POINT(1 2)')), 10) as result;
|
SELECT TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 1)'), ST_GEOMFROMTEXT('POINT(1 2)')), 10) as result;
|
||||||
result
|
result
|
||||||
@ -843,7 +843,7 @@ SELECT TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(1 2,1 1 )'), ST_G
|
|||||||
result
|
result
|
||||||
0.04933028646581131
|
0.04933028646581131
|
||||||
SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(1 2,1 1 )'), ST_GEOMFROMTEXT('MULTIPOINT(8 9,3 4 )'),0) as result;
|
SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(1 2,1 1 )'), ST_GEOMFROMTEXT('MULTIPOINT(8 9,3 4 )'),0) as result;
|
||||||
ERROR HY000: Internal error: Radius must be greater than zero.
|
ERROR HY000: Calling geometry function st_distance_sphere with unsupported types of arguments.
|
||||||
set @pt1 = ST_GeomFromText('POINT(190 -30)');
|
set @pt1 = ST_GeomFromText('POINT(190 -30)');
|
||||||
set @pt2 = ST_GeomFromText('POINT(-30 50)');
|
set @pt2 = ST_GeomFromText('POINT(-30 50)');
|
||||||
SELECT ST_Distance_Sphere(@pt1, @pt2);
|
SELECT ST_Distance_Sphere(@pt1, @pt2);
|
||||||
|
@ -422,7 +422,7 @@ SELECT ST_DISTANCE_SPHERE(1, 1, 3);
|
|||||||
# Return NULL if radius is NULL
|
# Return NULL if radius is NULL
|
||||||
SELECT ST_DISTANCE_SPHERE(1, 1, NULL);
|
SELECT ST_DISTANCE_SPHERE(1, 1, NULL);
|
||||||
# Wrong geometry
|
# Wrong geometry
|
||||||
--error ER_INTERNAL_ERROR
|
--error ER_GIS_UNSUPPORTED_ARGUMENT
|
||||||
SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 0)'), ST_GEOMFROMTEXT('LINESTRING(0 0, 1 1)')) as result;
|
SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 0)'), ST_GEOMFROMTEXT('LINESTRING(0 0, 1 1)')) as result;
|
||||||
|
|
||||||
--echo # Test Points and radius
|
--echo # Test Points and radius
|
||||||
@ -430,9 +430,9 @@ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(
|
|||||||
# make bb x86 happy
|
# make bb x86 happy
|
||||||
SELECT TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(-1 -1)'), ST_GEOMFROMTEXT('POINT(-2 -2)')), 10) as result;
|
SELECT TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(-1 -1)'), ST_GEOMFROMTEXT('POINT(-2 -2)')), 10) as result;
|
||||||
SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 1)'), 1) as result;
|
SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 1)'), 1) as result;
|
||||||
--error ER_INTERNAL_ERROR
|
--error ER_GIS_UNSUPPORTED_ARGUMENT
|
||||||
SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 1)'), 0) as result;
|
SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 1)'), 0) as result;
|
||||||
--error ER_INTERNAL_ERROR
|
--error ER_GIS_UNSUPPORTED_ARGUMENT
|
||||||
SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 1)'), -1) as result;
|
SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 1)'), -1) as result;
|
||||||
--echo # Test longitude/lattitude
|
--echo # Test longitude/lattitude
|
||||||
# make bb x86 happy
|
# make bb x86 happy
|
||||||
@ -456,7 +456,7 @@ SELECT TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(1 2,1 1 )'), ST_G
|
|||||||
SELECT TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(1 2,1 1 )'), ST_GEOMFROMTEXT('MULTIPOINT(8 9,3 4 )')), 10) as result;
|
SELECT TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(1 2,1 1 )'), ST_GEOMFROMTEXT('MULTIPOINT(8 9,3 4 )')), 10) as result;
|
||||||
# make bb x86 happy
|
# make bb x86 happy
|
||||||
SELECT TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(1 2,1 1 )'), ST_GEOMFROMTEXT('MULTIPOINT(8 9,3 4 )'),1), 17) as result;
|
SELECT TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(1 2,1 1 )'), ST_GEOMFROMTEXT('MULTIPOINT(8 9,3 4 )'),1), 17) as result;
|
||||||
--error ER_INTERNAL_ERROR
|
--error ER_GIS_UNSUPPORTED_ARGUMENT
|
||||||
SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(1 2,1 1 )'), ST_GEOMFROMTEXT('MULTIPOINT(8 9,3 4 )'),0) as result;
|
SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(1 2,1 1 )'), ST_GEOMFROMTEXT('MULTIPOINT(8 9,3 4 )'),0) as result;
|
||||||
|
|
||||||
# Longitude out of range [-180,180]
|
# Longitude out of range [-180,180]
|
||||||
|
@ -5501,4 +5501,9 @@ MULTIPOLYGON(POLYGON(LINESTRING(POINT(4, 3), POINT(4, 4), POINT(3, 4), POINT(4,
|
|||||||
) AS t;
|
) AS t;
|
||||||
ST_SRID(g1) ST_SRID(ST_GeomFromWKB(g1, 4326)) ST_SRID(ST_GeomFromWKB(g1)) ST_AsText(g1) ST_SRID(ST_PointFromWKB(g2, 4326)) ST_SRID(g2) ST_SRID(ST_LineStringFromWKB(g3, 3)) ST_SRID(ST_PolygonFromWKB(g4, 4)) ST_SRID(ST_MultiPointFromWKB(g5, 5)) ST_SRID(ST_MultiLineStringFromWKB(g6, 6)) ST_SRID(ST_MultiPolygonFromWKB(g7, 7))
|
ST_SRID(g1) ST_SRID(ST_GeomFromWKB(g1, 4326)) ST_SRID(ST_GeomFromWKB(g1)) ST_AsText(g1) ST_SRID(ST_PointFromWKB(g2, 4326)) ST_SRID(g2) ST_SRID(ST_LineStringFromWKB(g3, 3)) ST_SRID(ST_PolygonFromWKB(g4, 4)) ST_SRID(ST_MultiPointFromWKB(g5, 5)) ST_SRID(ST_MultiLineStringFromWKB(g6, 6)) ST_SRID(ST_MultiPolygonFromWKB(g7, 7))
|
||||||
0 4326 0 POINT(1 2) 4326 0 3 4 5 6 7
|
0 4326 0 POINT(1 2) 4326 0 3 4 5 6 7
|
||||||
|
#
|
||||||
|
# MDEV-35117 Error message "ERROR 1815 (HY000): Internal error: st_distance_sphere' could be improved
|
||||||
|
#
|
||||||
|
SELECT ST_DISTANCE_SPHERE(st_geomfromtext('linestring( 2 2, 2 8) '), ST_GeomFromText('POINT(18.413076 43.856258)')) ;
|
||||||
|
ERROR HY000: Calling geometry function st_distance_sphere with unsupported types of arguments.
|
||||||
# End of 10.5 tests
|
# End of 10.5 tests
|
||||||
|
@ -3508,4 +3508,10 @@ FROM (
|
|||||||
MULTIPOLYGON(POLYGON(LINESTRING(POINT(4, 3), POINT(4, 4), POINT(3, 4), POINT(4, 3)))) AS g7
|
MULTIPOLYGON(POLYGON(LINESTRING(POINT(4, 3), POINT(4, 4), POINT(3, 4), POINT(4, 3)))) AS g7
|
||||||
) AS t;
|
) AS t;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-35117 Error message "ERROR 1815 (HY000): Internal error: st_distance_sphere' could be improved
|
||||||
|
--echo #
|
||||||
|
--error ER_GIS_UNSUPPORTED_ARGUMENT
|
||||||
|
SELECT ST_DISTANCE_SPHERE(st_geomfromtext('linestring( 2 2, 2 8) '), ST_GeomFromText('POINT(18.413076 43.856258)')) ;
|
||||||
|
|
||||||
--echo # End of 10.5 tests
|
--echo # End of 10.5 tests
|
||||||
|
@ -2553,7 +2553,7 @@ double Item_func_sphere_distance::val_real()
|
|||||||
}
|
}
|
||||||
if (sphere_radius <= 0)
|
if (sphere_radius <= 0)
|
||||||
{
|
{
|
||||||
my_error(ER_INTERNAL_ERROR, MYF(0), "Radius must be greater than zero.");
|
my_error(ER_GIS_UNSUPPORTED_ARGUMENT, MYF(0), func_name());
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2565,25 +2565,26 @@ double Item_func_sphere_distance::val_real()
|
|||||||
my_error(ER_GIS_INVALID_DATA, MYF(0), "ST_Distance_Sphere");
|
my_error(ER_GIS_INVALID_DATA, MYF(0), "ST_Distance_Sphere");
|
||||||
goto handle_errors;
|
goto handle_errors;
|
||||||
}
|
}
|
||||||
// Method allowed for points and multipoints
|
// Method allowed for points and multipoints
|
||||||
if (!(g1->get_class_info()->m_type_id == Geometry::wkb_point ||
|
if (!(g1->get_class_info()->m_type_id == Geometry::wkb_point ||
|
||||||
g1->get_class_info()->m_type_id == Geometry::wkb_multipoint) ||
|
g1->get_class_info()->m_type_id == Geometry::wkb_multipoint) ||
|
||||||
!(g2->get_class_info()->m_type_id == Geometry::wkb_point ||
|
!(g2->get_class_info()->m_type_id == Geometry::wkb_point ||
|
||||||
g2->get_class_info()->m_type_id == Geometry::wkb_multipoint))
|
g2->get_class_info()->m_type_id == Geometry::wkb_multipoint))
|
||||||
{
|
{
|
||||||
// Generate error message in case different geometry is used?
|
// Generate error message in case of unexpected geometry.
|
||||||
my_error(ER_INTERNAL_ERROR, MYF(0), func_name());
|
my_error(ER_GIS_UNSUPPORTED_ARGUMENT, MYF(0), func_name());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
distance= spherical_distance_points(g1, g2, sphere_radius);
|
distance= spherical_distance_points(g1, g2, sphere_radius);
|
||||||
if (distance < 0)
|
if (distance < 0)
|
||||||
{
|
{
|
||||||
my_error(ER_INTERNAL_ERROR, MYF(0), "Returned distance cannot be negative.");
|
my_error(ER_INTERNAL_ERROR, MYF(0),
|
||||||
|
"Returned distance cannot be negative.");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return distance;
|
return distance;
|
||||||
|
|
||||||
handle_errors:
|
handle_errors:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user