From 72e79eaaf3e4619bbaf900f6710ffb6a00ff95bf Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Tue, 25 Oct 2022 20:24:11 +0200 Subject: [PATCH] cleanup: put casts in a separate statement remove useless if() --- sql/item_geofunc.cc | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/sql/item_geofunc.cc b/sql/item_geofunc.cc index f2cc2e61b9669..b40105aaf3672 100644 --- a/sql/item_geofunc.cc +++ b/sql/item_geofunc.cc @@ -2601,51 +2601,53 @@ double Item_func_sphere_distance::spherical_distance_points(Geometry *g1, switch (g2->get_class_info()->m_type_id) { case Geometry::wkb_point: - // Optimization for point-point case + { + Gis_point *g2p= static_cast(g2); + // Optimization for point-point case if (g1->get_class_info()->m_type_id == Geometry::wkb_point) { - res= static_cast(g2)->calculate_haversine(g1, r, &error); + res= g2p->calculate_haversine(g1, r, &error); } else { // Optimization for single point in Multipoint if (g1->get_data_size() == len) { - res= static_cast(g2)->calculate_haversine(g1, r, &error); + res= g2p->calculate_haversine(g1, r, &error); } else { // There are multipoints in g1 // g1 is MultiPoint and calculate MP.sphericaldistance from g2 Point if (g1->get_data_size() != GET_SIZE_ERROR) - static_cast(g2)->spherical_distance_multipoints( - (Gis_multi_point *)g1, r, &res, &error); + g2p->spherical_distance_multipoints(g1, r, &res, &error); } } break; + } case Geometry::wkb_multipoint: // Optimization for point-point case if (g1->get_class_info()->m_type_id == Geometry::wkb_point) { + Gis_point *g1p= static_cast(g1); // Optimization for single point in Multipoint g2 if (g2->get_data_size() == len) { - res= static_cast(g1)->calculate_haversine(g2, r, &error); + res= g1p->calculate_haversine(g2, r, &error); } else { if (g2->get_data_size() != GET_SIZE_ERROR) // g1 is a point (casted to multi_point) and g2 multipoint - static_cast(g1)->spherical_distance_multipoints( - (Gis_multi_point *)g2, r, &res, &error); + g1p->spherical_distance_multipoints(g2, r, &res, &error); } } else { + Gis_multi_point *g1mp= static_cast(g1); // Multipoints in g1 and g2 - no optimization - static_cast(g1)->spherical_distance_multipoints( - (Gis_multi_point *)g2, r, &res, &error); + g1mp->spherical_distance_multipoints(g2, r, &res, &error); } break; @@ -2654,16 +2656,12 @@ double Item_func_sphere_distance::spherical_distance_points(Geometry *g1, break; } - if (res < 0) - goto handle_error; - - handle_error: - if (error > 0) - my_error(ER_STD_OUT_OF_RANGE_ERROR, MYF(0), - "Longitude should be [-180,180]", "ST_Distance_Sphere"); - else if(error < 0) - my_error(ER_STD_OUT_OF_RANGE_ERROR, MYF(0), - "Latitude should be [-90,90]", "ST_Distance_Sphere"); + if (error > 0) + my_error(ER_STD_OUT_OF_RANGE_ERROR, MYF(0), + "Longitude should be [-180,180]", "ST_Distance_Sphere"); + else if(error < 0) + my_error(ER_STD_OUT_OF_RANGE_ERROR, MYF(0), + "Latitude should be [-90,90]", "ST_Distance_Sphere"); return res; }