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
 |