357 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			357 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /**
 | |
|  * Copyright (c) 2021 OceanBase
 | |
|  * OceanBase CE is licensed under Mulan PubL v2.
 | |
|  * You can use this software according to the terms and conditions of the Mulan PubL v2.
 | |
|  * You may obtain a copy of Mulan PubL v2 at:
 | |
|  *          http://license.coscl.org.cn/MulanPubL-2.0
 | |
|  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 | |
|  * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 | |
|  * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 | |
|  * See the Mulan PubL v2 for more details.
 | |
|  * This file contains implementation for ob_geo_func_testy.
 | |
|  */
 | |
| 
 | |
| #include "lib/geo/ob_geo_dispatcher.h"
 | |
| #include "ob_geo_func_testy.h"
 | |
| 
 | |
| using namespace oceanbase::common;
 | |
| namespace oceanbase
 | |
| {
 | |
| namespace sql
 | |
| {
 | |
| // unittest codes
 | |
| 
 | |
| constexpr int max_crs_type = 3;
 | |
| constexpr int max_geo_type = 8;
 | |
| int g_test_geo_unary_func_result[max_crs_type][max_geo_type];
 | |
| int g_test_geo_binary_func_result[max_crs_type][max_geo_type][max_crs_type][max_geo_type];
 | |
| 
 | |
| #if 0
 | |
|   ObIWkbGeomPoint cp;
 | |
|   ObIWkbGeomLineString cl;
 | |
|   ObIWkbGeomPolygon ca;
 | |
|   ObIWkbGeomMultiPoint cmp;
 | |
|   ObIWkbGeomMultiLineString cml;
 | |
|   ObIWkbGeomMultiPolygon cma;
 | |
|   ObIWkbGeomCollection cc;
 | |
| 
 | |
|   ObIWkbGeogPoint gp;
 | |
|   ObIWkbGeogLineString gl;
 | |
|   ObIWkbGeogPolygon ga;
 | |
|   ObIWkbGeogMultiPoint gmp;
 | |
|   ObIWkbGeogMultiLineString gml;
 | |
|   ObIWkbGeogMultiPolygon gma;
 | |
|   ObIWkbGeogCollection gc;
 | |
| #endif
 | |
| 
 | |
| template<typename CHECK_TYPE>
 | |
| bool check_geo_type(const ObGeometry *g) {
 | |
|   bool bool_ret = false;
 | |
|   switch(g->crs()) {
 | |
|     case ObGeoCRS::Cartesian :{
 | |
|       switch(g->type()) {
 | |
|         case ObGeoType::POINT: {
 | |
|           bool_ret = (typeid(CHECK_TYPE) == typeid(ObWkbGeomPoint));
 | |
|           break;
 | |
|         }
 | |
|         case ObGeoType::LINESTRING: {
 | |
|           bool_ret = (typeid(CHECK_TYPE) == typeid(ObWkbGeomLineString));
 | |
|           break;
 | |
|         }
 | |
|         case ObGeoType::POLYGON: {
 | |
|           bool_ret = (typeid(CHECK_TYPE) == typeid(ObWkbGeomPolygon));
 | |
|           break;
 | |
|         }
 | |
|         case ObGeoType::MULTIPOINT: {
 | |
|           bool_ret = (typeid(CHECK_TYPE) == typeid(ObWkbGeomMultiPoint));
 | |
|           break;
 | |
|         }
 | |
|         case ObGeoType::MULTILINESTRING: {
 | |
|           bool_ret = (typeid(CHECK_TYPE) == typeid(ObWkbGeomMultiLineString));
 | |
|           break;
 | |
|         }
 | |
|         case ObGeoType::MULTIPOLYGON: {
 | |
|           bool_ret = (typeid(CHECK_TYPE) == typeid(ObWkbGeomMultiPolygon));
 | |
|           break;
 | |
|         }
 | |
|         case ObGeoType::GEOMETRYCOLLECTION: {
 | |
|           bool_ret = (typeid(CHECK_TYPE) == typeid(ObWkbGeomCollection));
 | |
|           break;
 | |
|         }
 | |
|         default:{
 | |
|           break;
 | |
|         }
 | |
|       }
 | |
|       break;
 | |
|     }
 | |
|     case ObGeoCRS::Geographic :{
 | |
|       switch(g->type()) {
 | |
|         case ObGeoType::POINT: {
 | |
|           bool_ret = (typeid(CHECK_TYPE) == typeid(ObWkbGeogPoint));
 | |
|           break;
 | |
|         }
 | |
|         case ObGeoType::LINESTRING: {
 | |
|           bool_ret = (typeid(CHECK_TYPE) == typeid(ObWkbGeogLineString));
 | |
|           break;
 | |
|         }
 | |
|         case ObGeoType::POLYGON: {
 | |
|           bool_ret = (typeid(CHECK_TYPE) == typeid(ObWkbGeogPolygon));
 | |
|           break;
 | |
|         }
 | |
|         case ObGeoType::MULTIPOINT: {
 | |
|           bool_ret = (typeid(CHECK_TYPE) == typeid(ObWkbGeogMultiPoint));
 | |
|           break;
 | |
|         }
 | |
|         case ObGeoType::MULTILINESTRING: {
 | |
|           bool_ret = (typeid(CHECK_TYPE) == typeid(ObWkbGeogMultiLineString));
 | |
|           break;
 | |
|         }
 | |
|         case ObGeoType::MULTIPOLYGON: {
 | |
|           bool_ret = (typeid(CHECK_TYPE) == typeid(ObWkbGeogMultiPolygon));
 | |
|           break;
 | |
|         }
 | |
|         case ObGeoType::GEOMETRYCOLLECTION: {
 | |
|           bool_ret = (typeid(CHECK_TYPE) == typeid(ObWkbGeogCollection));
 | |
|           break;
 | |
|         }
 | |
|         default:{
 | |
|           break;
 | |
|         }
 | |
|       }
 | |
|       break;
 | |
|     }
 | |
|     default:{
 | |
|       break;
 | |
|     }
 | |
|   }
 | |
|   return bool_ret;
 | |
| }
 | |
| 
 | |
| #define OB_GEO_UNARY_TEST_FUNC_DEFINE(GEO_TYPE)                                              \
 | |
|   template <>                                                                                \
 | |
|   struct Eval<GEO_TYPE> {                                                                    \
 | |
|     static int eval(const ObGeometry *g, const ObGeoEvalCtx &context, int &result) {         \
 | |
|       UNUSED(context);                                                                       \
 | |
|       if (check_geo_type<GEO_TYPE>(g) == false) {                                            \
 | |
|         return OB_INVALID_ARGUMENT;                                                          \
 | |
|       }                                                                                      \
 | |
|       result = g_test_geo_unary_func_result[static_cast<int>(g->crs())][static_cast<int>(g->type())]; \
 | |
|       return OB_SUCCESS;                                                                              \
 | |
|     }                                                                                                 \
 | |
|   }
 | |
| 
 | |
| #define OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(GEO_TYPE1, GEO_TYPE2)                           \
 | |
| template <>                                                                                 \
 | |
|   struct EvalWkbBi<GEO_TYPE1, GEO_TYPE2> {                                                 \
 | |
|     static int eval(const ObGeometry *g1, const ObGeometry *g2,                             \
 | |
|                     const ObGeoEvalCtx &context, int &result)                               \
 | |
|     {                                                                                       \
 | |
|       UNUSED(context);                                                                      \
 | |
|       if (check_geo_type<GEO_TYPE1>(g1) == false) {                                         \
 | |
|         return OB_INVALID_ARGUMENT;                                                         \
 | |
|       }                                                                                     \
 | |
|       if (check_geo_type<GEO_TYPE2>(g2) == false) {                                         \
 | |
|         return OB_INVALID_ARGUMENT;                                                         \
 | |
|       }                                                                                     \
 | |
|       result = g_test_geo_binary_func_result[static_cast<int>(g1->crs())][static_cast<int>(g1->type())][static_cast<int>(g2->crs())][static_cast<int>(g2->type())]; \
 | |
|       return OB_SUCCESS;                                                                    \
 | |
|     }                                                                                       \
 | |
|   }
 | |
| 
 | |
| 
 | |
| #define OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(GEO_TYPE1, GEO_TYPE2)                           \
 | |
| template <>                                                                                 \
 | |
|   struct EvalWkbBiGeog<GEO_TYPE1, GEO_TYPE2> {                                       \
 | |
|     static int eval(const ObGeometry *g1, const ObGeometry *g2,                             \
 | |
|                     const ObGeoEvalCtx &context, int &result)                               \
 | |
|     {                                                                                       \
 | |
|       UNUSED(context);                                                                      \
 | |
|       if (check_geo_type<GEO_TYPE1>(g1) == false) {                                         \
 | |
|         return OB_INVALID_ARGUMENT;                                                         \
 | |
|       }                                                                                     \
 | |
|       if (check_geo_type<GEO_TYPE2>(g2) == false) {                                         \
 | |
|         return OB_INVALID_ARGUMENT;                                                         \
 | |
|       }                                                                                     \
 | |
|       result = g_test_geo_binary_func_result[static_cast<int>(g1->crs())][static_cast<int>(g1->type())][static_cast<int>(g2->crs())][static_cast<int>(g2->type())]; \
 | |
|       return OB_SUCCESS;                                                                    \
 | |
|     }                                                                                       \
 | |
|   }
 | |
| 
 | |
| int ob_test_init_geo_dispatcher_result() {
 | |
|   for (int crs_type = 1; crs_type < static_cast<int>(ObGeoCRS::Geographic) + 1; crs_type++) {
 | |
|     for (int g1_type = 0; g1_type < static_cast<int>(ObGeoType::GEOMETRYCOLLECTION) + 1; g1_type++) {
 | |
|       g_test_geo_unary_func_result[crs_type][g1_type] = (crs_type << 8) + g1_type;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   for (int crs_type = 1; crs_type < static_cast<int>(ObGeoCRS::Geographic) + 1; crs_type++) {
 | |
|     for (int g1_type = 0; g1_type < static_cast<int>(ObGeoType::GEOMETRYCOLLECTION) + 1; g1_type++) {
 | |
|       for (int g2_type = 0; g2_type < static_cast<int>(ObGeoType::GEOMETRYCOLLECTION) + 1; g2_type++) {
 | |
|         g_test_geo_binary_func_result[crs_type][g1_type][crs_type][g2_type] = (crs_type << 8) + g1_type + g2_type;
 | |
|       }
 | |
|     }
 | |
|   }
 | |
|   return OB_SUCCESS;
 | |
| }
 | |
| 
 | |
| int ob_test_init_geo_dispatcher_ret = ob_test_init_geo_dispatcher_result();
 | |
| 
 | |
| class ObGeoFuncMockyImpl : public ObIGeoDispatcher<int, ObGeoFuncMockyImpl>
 | |
| {
 | |
| public:
 | |
|   ObGeoFuncMockyImpl();
 | |
|   virtual ~ObGeoFuncMockyImpl() = default;
 | |
| 
 | |
|   // template for unary
 | |
|   OB_GEO_UNARY_FUNC_DEFAULT(int, OB_ERR_GIS_INVALID_DATA);
 | |
|   OB_GEO_TREE_UNARY_FUNC_DEFAULT(int, OB_ERR_GIS_INVALID_DATA);
 | |
| 
 | |
|   OB_GEO_UNARY_TEST_FUNC_DEFINE(ObWkbGeomPoint);
 | |
|   OB_GEO_UNARY_TEST_FUNC_DEFINE(ObWkbGeomLineString);
 | |
|   OB_GEO_UNARY_TEST_FUNC_DEFINE(ObWkbGeomPolygon);
 | |
|   OB_GEO_UNARY_TEST_FUNC_DEFINE(ObWkbGeomMultiPoint);
 | |
|   OB_GEO_UNARY_TEST_FUNC_DEFINE(ObWkbGeomMultiLineString);
 | |
|   OB_GEO_UNARY_TEST_FUNC_DEFINE(ObWkbGeomMultiPolygon);
 | |
|   OB_GEO_UNARY_TEST_FUNC_DEFINE(ObWkbGeomCollection);
 | |
| 
 | |
|   OB_GEO_UNARY_TEST_FUNC_DEFINE(ObWkbGeogPoint);
 | |
|   OB_GEO_UNARY_TEST_FUNC_DEFINE(ObWkbGeogLineString);
 | |
|   OB_GEO_UNARY_TEST_FUNC_DEFINE(ObWkbGeogPolygon);
 | |
|   OB_GEO_UNARY_TEST_FUNC_DEFINE(ObWkbGeogMultiPoint);
 | |
|   OB_GEO_UNARY_TEST_FUNC_DEFINE(ObWkbGeogMultiLineString);
 | |
|   OB_GEO_UNARY_TEST_FUNC_DEFINE(ObWkbGeogMultiPolygon);
 | |
|   OB_GEO_UNARY_TEST_FUNC_DEFINE(ObWkbGeogCollection);
 | |
| 
 | |
| 
 | |
|   // template for binary
 | |
|   OB_GEO_CART_BINARY_FUNC_DEFAULT(int, OB_ERR_NOT_IMPLEMENTED_FOR_CARTESIAN_SRS);
 | |
|   OB_GEO_GEOG_BINARY_FUNC_DEFAULT(int, OB_ERR_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS);
 | |
| 
 | |
| 
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomPoint, ObWkbGeomPoint);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomPoint, ObWkbGeomLineString);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomPoint, ObWkbGeomPolygon);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomPoint, ObWkbGeomMultiPoint);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomPoint, ObWkbGeomMultiLineString);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomPoint, ObWkbGeomMultiPolygon);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomPoint, ObWkbGeomCollection);
 | |
| 
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomLineString, ObWkbGeomPoint);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomLineString, ObWkbGeomLineString);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomLineString, ObWkbGeomPolygon);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomLineString, ObWkbGeomMultiPoint);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomLineString, ObWkbGeomMultiLineString);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomLineString, ObWkbGeomMultiPolygon);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomLineString, ObWkbGeomCollection);
 | |
| 
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomPolygon, ObWkbGeomPoint);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomPolygon, ObWkbGeomLineString);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomPolygon, ObWkbGeomPolygon);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomPolygon, ObWkbGeomMultiPoint);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomPolygon, ObWkbGeomMultiLineString);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomPolygon, ObWkbGeomMultiPolygon);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomPolygon, ObWkbGeomCollection);
 | |
| 
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomMultiPoint, ObWkbGeomPoint);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomMultiPoint, ObWkbGeomLineString);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomMultiPoint, ObWkbGeomPolygon);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomMultiPoint, ObWkbGeomMultiPoint);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomMultiPoint, ObWkbGeomMultiLineString);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomMultiPoint, ObWkbGeomMultiPolygon);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomMultiPoint, ObWkbGeomCollection);
 | |
| 
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomMultiLineString, ObWkbGeomPoint);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomMultiLineString, ObWkbGeomLineString);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomMultiLineString, ObWkbGeomPolygon);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomMultiLineString, ObWkbGeomMultiPoint);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomMultiLineString, ObWkbGeomMultiLineString);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomMultiLineString, ObWkbGeomMultiPolygon);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomMultiLineString, ObWkbGeomCollection);
 | |
| 
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomMultiPolygon, ObWkbGeomPoint);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomMultiPolygon, ObWkbGeomLineString);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomMultiPolygon, ObWkbGeomPolygon);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomMultiPolygon, ObWkbGeomMultiPoint);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomMultiPolygon, ObWkbGeomMultiLineString);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomMultiPolygon, ObWkbGeomMultiPolygon);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomMultiPolygon, ObWkbGeomCollection);
 | |
| 
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomCollection, ObWkbGeomPoint);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomCollection, ObWkbGeomLineString);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomCollection, ObWkbGeomPolygon);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomCollection, ObWkbGeomMultiPoint);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomCollection, ObWkbGeomMultiLineString);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomCollection, ObWkbGeomMultiPolygon);
 | |
|   OB_GEO_CART_BINARY_TEST_FUNC_DEFINE(ObWkbGeomCollection, ObWkbGeomCollection);
 | |
| 
 | |
| 
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogPoint, ObWkbGeogPoint);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogPoint, ObWkbGeogLineString);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogPoint, ObWkbGeogPolygon);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogPoint, ObWkbGeogMultiPoint);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogPoint, ObWkbGeogMultiLineString);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogPoint, ObWkbGeogMultiPolygon);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogPoint, ObWkbGeogCollection);
 | |
| 
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogLineString, ObWkbGeogPoint);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogLineString, ObWkbGeogLineString);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogLineString, ObWkbGeogPolygon);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogLineString, ObWkbGeogMultiPoint);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogLineString, ObWkbGeogMultiLineString);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogLineString, ObWkbGeogMultiPolygon);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogLineString, ObWkbGeogCollection);
 | |
| 
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogPolygon, ObWkbGeogPoint);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogPolygon, ObWkbGeogLineString);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogPolygon, ObWkbGeogPolygon);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogPolygon, ObWkbGeogMultiPoint);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogPolygon, ObWkbGeogMultiLineString);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogPolygon, ObWkbGeogMultiPolygon);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogPolygon, ObWkbGeogCollection);
 | |
| 
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogMultiPoint, ObWkbGeogPoint);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogMultiPoint, ObWkbGeogLineString);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogMultiPoint, ObWkbGeogPolygon);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogMultiPoint, ObWkbGeogMultiPoint);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogMultiPoint, ObWkbGeogMultiLineString);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogMultiPoint, ObWkbGeogMultiPolygon);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogMultiPoint, ObWkbGeogCollection);
 | |
| 
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogMultiLineString, ObWkbGeogPoint);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogMultiLineString, ObWkbGeogLineString);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogMultiLineString, ObWkbGeogPolygon);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogMultiLineString, ObWkbGeogMultiPoint);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogMultiLineString, ObWkbGeogMultiLineString);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogMultiLineString, ObWkbGeogMultiPolygon);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogMultiLineString, ObWkbGeogCollection);
 | |
| 
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogMultiPolygon, ObWkbGeogPoint);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogMultiPolygon, ObWkbGeogLineString);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogMultiPolygon, ObWkbGeogPolygon);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogMultiPolygon, ObWkbGeogMultiPoint);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogMultiPolygon, ObWkbGeogMultiLineString);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogMultiPolygon, ObWkbGeogMultiPolygon);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogMultiPolygon, ObWkbGeogCollection);
 | |
| 
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogCollection, ObWkbGeogPoint);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogCollection, ObWkbGeogLineString);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogCollection, ObWkbGeogPolygon);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogCollection, ObWkbGeogMultiPoint);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogCollection, ObWkbGeogMultiLineString);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogCollection, ObWkbGeogMultiPolygon);
 | |
|   OB_GEO_GEOG_BINARY_TEST_FUNC_DEFINE(ObWkbGeogCollection, ObWkbGeogCollection);
 | |
| 
 | |
|   OB_GEO_CART_TREE_FUNC_DEFAULT(int, OB_ERR_NOT_IMPLEMENTED_FOR_CARTESIAN_SRS);
 | |
|   OB_GEO_GEOG_TREE_FUNC_DEFAULT(int, OB_ERR_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS);
 | |
| };
 | |
| 
 | |
| // implement of outer class eval
 | |
| // use an outer class to void implement templates in header files
 | |
| int ObGeoFuncMockY::eval(const ObGeoEvalCtx &gis_context, int &result)
 | |
| {
 | |
|   return ObGeoFuncMockyImpl::eval_geo_func(gis_context, result);
 | |
| }
 | |
| 
 | |
| } // sql
 | |
| } // oceanbase
 | 
