384 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			384 lines
		
	
	
		
			16 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.
 | |
|  */
 | |
| 
 | |
| #include <gtest/gtest.h>
 | |
| #include "sql/engine/expr/ob_expr_mod.h"
 | |
| #include "ob_expr_test_utils.h"
 | |
| 
 | |
| using namespace oceanbase::common;
 | |
| using namespace oceanbase::sql;
 | |
| class ObExprModTest : public ::testing::Test {
 | |
| public:
 | |
|   ObExprModTest();
 | |
|   virtual ~ObExprModTest();
 | |
|   virtual void SetUp();
 | |
|   virtual void TearDown();
 | |
| 
 | |
| private:
 | |
|   // disallow copy
 | |
|   ObExprModTest(const ObExprModTest& other);
 | |
|   ObExprModTest& operator=(const ObExprModTest& other);
 | |
| 
 | |
| protected:
 | |
|   // data members
 | |
| };
 | |
| 
 | |
| ObExprModTest::ObExprModTest()
 | |
| {}
 | |
| 
 | |
| ObExprModTest::~ObExprModTest()
 | |
| {}
 | |
| 
 | |
| void ObExprModTest::SetUp()
 | |
| {}
 | |
| 
 | |
| void ObExprModTest::TearDown()
 | |
| {}
 | |
| 
 | |
| /*
 | |
| #define R(t1, v1, t2, v2, res) ARITH_EXPECT(ObExprMod, &buf, calc_result2, t1, v1, t2, v2, res)
 | |
| #define E(t1, v1, t2, v2, res) ARITH_ERROR(ObExprMod, &buf, calc_result2, t1, v1, t2, v2, res)
 | |
| #define T(t1, t2, res) ARITH_EXPECT_TYPE(ObExprMod, calc_result_type2, t1, t2, res)
 | |
| #define TE(t1, t2, res) ARITH_EXPECT_TYPE_WITH_ROW(ObExprMod, calc_result_type2, t1, t2, res)
 | |
| */
 | |
| #define R(t1, v1, t2, v2, rt, res) ARITH_EXPECT_OBJ(ObExprMod, &buf, calc, t1, v1, t2, v2, rt, res)
 | |
| 
 | |
| TEST_F(ObExprModTest, int_int_test)
 | |
| {
 | |
|   ObMalloc buf;
 | |
|   R(int, 5, int, 12, int, 5);
 | |
|   R(int, 12, int, 5, int, 2);
 | |
|   R(int, -5, int, 12, int, -5);
 | |
|   R(int, 12, int, -5, int, 2);
 | |
|   R(int, 5, int, -12, int, 5);
 | |
|   R(int, -12, int, 5, int, -2);
 | |
|   R(int, -5, int, -12, int, -5);
 | |
|   R(int, -12, int, -5, int, -2);
 | |
|   R(int, INT64_MAX, int, INT64_MIN, int, INT64_MAX);
 | |
|   R(int, INT64_MIN, int, INT64_MAX, int, -1);
 | |
| }
 | |
| 
 | |
| TEST_F(ObExprModTest, uint_uint_test)
 | |
| {
 | |
|   ObMalloc buf;
 | |
|   R(uint64, 5, uint64, 12, int, 5);
 | |
|   R(uint64, 12, uint64, 5, int, 2);
 | |
|   R(uint64, UINT64_MAX - 1, uint64, UINT64_MAX, uint64, UINT64_MAX - 1);
 | |
|   R(uint64, UINT64_MAX, uint64, UINT64_MAX - 1, uint64, 1);
 | |
| }
 | |
| 
 | |
| TEST_F(ObExprModTest, int_uint_test)
 | |
| {
 | |
|   ObMalloc buf;
 | |
|   R(int, 5, uint64, 12, int, 5);
 | |
|   R(uint64, 12, int, 5, int, 2);
 | |
|   R(int, -5, uint64, 12, int, -5);
 | |
|   R(uint64, 12, int, -5, int, 2);
 | |
|   R(int, 12, uint64, 5, int, 2);
 | |
|   R(uint64, 5, int, 12, int, 5);
 | |
|   R(int, -12, uint64, 5, int, -2);
 | |
|   R(uint64, 5, int, -12, int, 5);
 | |
|   R(int, INT64_MAX, uint64, UINT64_MAX, int, INT64_MAX);
 | |
|   R(uint64, UINT64_MAX, int, INT64_MAX, int, 1);
 | |
|   R(int, INT64_MIN, uint64, UINT64_MAX, int, INT64_MIN);
 | |
|   R(uint64, UINT64_MAX, int, INT64_MIN, int, INT64_MAX);
 | |
| }
 | |
| 
 | |
| TEST_F(ObExprModTest, float_test)
 | |
| {
 | |
|   ObMalloc buf;
 | |
|   R(float, 1.0, int, 2, double, 1.0);
 | |
|   R(float, 2.0, float, 3.0, double, 2.0);
 | |
|   R(float, 3.0, double, 4.0, double, 3.0);
 | |
|   R(float, 4.0, double, -3.0, double, 1.0);
 | |
| }
 | |
| 
 | |
| TEST_F(ObExprModTest, float_double)
 | |
| {
 | |
|   ObMalloc buf;
 | |
|   R(float, 1.0, int, 2, double, 1.0);
 | |
|   R(float, 2.0, float, 3.0, double, 2.0);
 | |
|   R(float, 3.0, double, 4.0, double, 3.0);
 | |
|   R(float, 4.0, double, -3.0, double, 1.0);
 | |
|   R(double, 3.0, double, 4.0, double, 3.0);
 | |
|   R(double, 4.0, double, -3.0, double, 1.0);
 | |
|   R(double, -4.2, double, -3.0, double, -1.2);
 | |
| }
 | |
| 
 | |
| TEST_F(ObExprModTest, varchar)
 | |
| {
 | |
|   ObMalloc buf;
 | |
| 
 | |
|   R(varchar, "1", int, 2, double, 1.0);
 | |
|   R(varchar, "4.2", float, 3.0, double, 1.2);
 | |
|   R(varchar, "-2.12345", float, 3.0, double, -2.12345);
 | |
|   R(varchar, "30.5", double, 4.5, double, 3.5);
 | |
|   R(varchar, "9.12345", double, 4.0, double, 1.12345);
 | |
| }
 | |
| 
 | |
| TEST_F(ObExprModTest, mod_zero_test)
 | |
| {
 | |
|   ObMalloc buf;
 | |
| }
 | |
| 
 | |
| /*
 | |
| TEST_F(ObExprModTest, result_test)
 | |
| {
 | |
|   //ObNullType
 | |
|   ObExprStringBuf buf;
 | |
|   R(null, 0, null, 1, ObNullType);
 | |
|   R(null, 0, int, 2, ObNullType);
 | |
|   R(null, 0, float, 3.0, ObNullType);
 | |
|   R(null, 0, double, 4.0, ObNullType);
 | |
|   R(null, 0, datetime, 5, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(null, 0, precise_datetime, 6, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(null, 0, varchar, "7", ObNullType);
 | |
|   R(null, 0, unknown, 0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(null, 0, ctime, 9, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(null, 0, mtime, 10, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(null, 0, ext, 2, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(null, 0, bool, 1, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   //R(null, 0, , 2, ObNullType); decimal not supported
 | |
| 
 | |
|   //ObIntType
 | |
|   R(int, 0, null, 1, ObNullType);
 | |
|   R(int, 1, int, 2, 1);
 | |
|   R(int, 2, float, 3.0, 2.0);
 | |
|   R(int, 20, float, 3.0, 2.0);
 | |
|   R(int, 20, float, float(3.9), 0.5);
 | |
|   R(int, 20, float, float(-3.9), 0.5);
 | |
|   R(int, -20, float, float(-3.9), -0.5);
 | |
|   R(int, 3, double, 4.0, 3.0);
 | |
|   R(int, 4, datetime, 5, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(int, 5, precise_datetime, 6, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(int, 6, varchar, "7", 6.0);
 | |
|   R(int, 6, varchar, "a", OB_ERR_CAST_VARCHAR_TO_NUMBER);
 | |
|   R(int, 6, varchar, "07a", OB_ERR_CAST_VARCHAR_TO_NUMBER);
 | |
|   R(int, 7, unknown, 0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(int, 18, ctime, 9, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(int, 19, mtime, 10, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(int, 10, ext, 2, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(int, 11, bool, 1, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(int, 11, bool, 0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   //R(null, 0, , 2, ObNullType); decimal not supported
 | |
| 
 | |
|   //ObFloatType
 | |
|   R(float, 0.0, null, 1, ObNullType);
 | |
|   R(float, 1.0, int, 2, 1.0);
 | |
|   R(float, 2.0, float, 3.0, 2.0);
 | |
|   R(float, 3.0, double, 4.0, 3.0);
 | |
|   R(float, 4.0, double, -3.0, 1.0);
 | |
|   R(float, float(-4.2), double, -3.0, -1.2);
 | |
|   R(float, 4.0, datetime, 5, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(float, 5.0, precise_datetime, 6, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(float, float(6.1), varchar, "7", 6.1);
 | |
|   R(float, float(6.2), varchar, "a", OB_ERR_CAST_VARCHAR_TO_NUMBER);
 | |
|   R(float, float(6.3), varchar, "06a", OB_ERR_CAST_VARCHAR_TO_NUMBER);
 | |
|   R(float, 6.0, varchar, "-0.7a", OB_ERR_CAST_VARCHAR_TO_NUMBER);
 | |
|   R(float, 7.0, unknown, 0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(float, 8.0, ctime, 9, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(float, 9.0, mtime, 10, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(float, 10.0, ext, 2, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(float, 11.0, bool, 1, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(float, 11.0, bool, 0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   //R(null, 0, , 2, ObNullType); decimal not supported
 | |
| 
 | |
|   //ObDoubleType
 | |
|   R(double, 0.0, null, 1, ObNullType);
 | |
|   R(double, 1.0, int, 2, 1.0);
 | |
|   R(double, 2.0, float, 3.0, 2.0);
 | |
|   R(double, 12.4, float, float(3.6), 1.6);
 | |
|   R(double, 3.0, double, 4.0, 3.0);
 | |
|   R(double, 4.0, double, -3.0, 1.0);
 | |
|   R(double, -4.2, double, -3.0, -1.2);
 | |
|   R(double, 4.0, datetime, 5, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(double, 5.0, precise_datetime, 6, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(double, 6.1, varchar, "7", 6.1);
 | |
|   R(double, 6.2, varchar, "a", OB_ERR_CAST_VARCHAR_TO_NUMBER);
 | |
|   R(double, 6.3, varchar, "06a", OB_ERR_CAST_VARCHAR_TO_NUMBER);
 | |
|   R(double, 6.0, varchar, "-0.7a", OB_ERR_CAST_VARCHAR_TO_NUMBER);
 | |
|   R(double, 7.0, unknown, 0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(double, 8.0, ctime, 9, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(double, 9.0, mtime, 10, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(double, 10.0, ext, 2, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(double, 11.0, bool, 1, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(double, 11.0, bool, 0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   //R(null, 0, , 2, ObNullType); decimal not supported
 | |
| 
 | |
|   //ObDateTimeType
 | |
|   R(datetime, 0, null, 1, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(datetime, 1, int, 2, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(datetime, 2, float, 3.0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(datetime, 20, float, 3.0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(datetime, 3, double, 4.0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(datetime, 4, datetime, 5, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(datetime, 5, precise_datetime, 6, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(datetime, 6, varchar, "7", OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(datetime, 6, varchar, "a", OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(datetime, 6, varchar, "07a", OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(datetime, 7, unknown, 0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(datetime, 18, ctime, 9, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(datetime, 19, mtime, 10, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(datetime, 10, ext, 2, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(datetime, 11, bool, 1, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(datetime, 11, bool, 0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   //R(null, 0, , 2, ObNullType); decimal not supported
 | |
| 
 | |
|   //ObPreciseDateTimeType
 | |
|   R(precise_datetime, 0, null, 1, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(precise_datetime, 1, int, 2, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(precise_datetime, 2, float, 3.0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(precise_datetime, 20, float, 3.0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(precise_datetime, 3, double, 4.0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(precise_datetime, 4, datetime, 5, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(precise_datetime, 5, precise_datetime, 6, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(precise_datetime, 6, varchar, "7", OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(precise_datetime, 6, varchar, "a", OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(precise_datetime, 6, varchar, "07a", OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(precise_datetime, 7, unknown, 0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(precise_datetime, 18, ctime, 9, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(precise_datetime, 19, mtime, 10, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(precise_datetime, 10, ext, 2, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(precise_datetime, 11, bool, 1, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(precise_datetime, 11, bool, 0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
| 
 | |
|   //ObVarcharType
 | |
|   R(varchar, "0", null, 1, ObNullType);
 | |
|   R(varchar, "1", int, 2, 1.0);
 | |
|   R(varchar, "4.2", float, 3.0, 1.2);
 | |
|   R(varchar, "-2.12345", float, 3.0, -2.12345);
 | |
|   R(varchar, "30.5", double, 4.5, 3.5);
 | |
|   R(varchar, "9.12345", double, 4.0, 1.12345);
 | |
|   R(varchar, "hello", datetime, 5, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(varchar, "6hello", precise_datetime, 6, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(varchar, "hello6", varchar, "7", OB_ERR_CAST_VARCHAR_TO_NUMBER);
 | |
|   R(varchar, "df", varchar, "a", OB_ERR_CAST_VARCHAR_TO_NUMBER);
 | |
|   R(varchar, "6", varchar, "07a", OB_ERR_CAST_VARCHAR_TO_NUMBER);
 | |
|   R(varchar, "-7", unknown, 0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(varchar, "-8", ctime, -129, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(varchar, "-1239", mtime, -34, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(varchar, "10", ext, 2, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(varchar, "11he", bool, 1, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(varchar, "11", bool, 0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   //R(null, 0, , 2, ObNullType); decimal not supported
 | |
| 
 | |
|   //ObCreateTimeType
 | |
|   R(ctime, 0, null, 1, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(ctime, 1, int, 2, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(ctime, 2, float, 3.0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(ctime, 20, float, 3.0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(ctime, 3, double, 4.0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(ctime, 4, datetime, 5, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(ctime, 5, precise_datetime, 6, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(ctime, 6, varchar, "7", OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(ctime, 6, varchar, "a", OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(ctime, 6, varchar, "07a", OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(ctime, 7, unknown, 0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(ctime, 18, ctime, 9, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(ctime, 19, mtime, 10, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(ctime, 10, ext, 2, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(ctime, 11, bool, 1, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(ctime, 11, bool, 0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   //R(null, 0, , 2, ObNullType); decimal not supported
 | |
| 
 | |
|   //ObModifyTimeType
 | |
|   R(mtime, 0, null, 1, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(mtime, 1, int, 2, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(mtime, 2, float, 3.0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(mtime, 20, float, 3.0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(mtime, 3, double, 4.0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(mtime, 4, datetime, 5, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(mtime, 5, precise_datetime, 6, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(mtime, 6, varchar, "7", OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(mtime, 6, varchar, "a", OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(mtime, 6, varchar, "07a", OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(mtime, 7, unknown, 0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(mtime, 18, ctime, 9, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(mtime, 19, mtime, 10, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(mtime, 10, ext, 2, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(mtime, 11, bool, 1, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(mtime, 11, bool, 0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   //R(null, 0, , 2, ObNullType); decimal not supported
 | |
| 
 | |
|   //ObBoolType
 | |
|   R(bool, 0, null, 1, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(bool, 1, null, 1, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(bool, 0, int, 2, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(bool, 1, int, 2, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(bool, 0, float, float(0.3), OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(bool, 1, float, float(0.3), OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(bool, 0, double, 4.0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(bool, -2, double, 4.0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(bool, 0, datetime, 5, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(bool, 4, datetime, 5, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(bool, 0, precise_datetime, 6, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(bool, 5, precise_datetime, 6, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(bool, 0, varchar, "7", OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(bool, 6, varchar, "7", OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(bool, 0, varchar, "a", OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(bool, 6, varchar, "a", OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(bool, 0, varchar, "07a", OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(bool, 6, varchar, "07a", OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(bool, 7, unknown, 0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(bool, 0, ctime, 9, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(bool, 8, ctime, 9, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(bool, 0, mtime, 10, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(bool, 9, mtime, 10, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(bool, 10, ext, 2, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(bool, 11, bool, 1, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(bool, 11, bool, 0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   //R(null, 0, , 2, ObNullType); decimal not supported
 | |
| 
 | |
|   //ObExtendType
 | |
|   R(ext, 0, null, 1, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(ext, 0, int, 2, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(ext, 0, float, 3.0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(ext, 0, double, 4.0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(ext, 0, datetime, 5, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(ext, 0, precise_datetime, 6, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(ext, 0, varchar, "7", OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(ext, 0, varchar, "a", OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(ext, 0, varchar, "07a", OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(ext, 0, unknown, 0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(ext, 0, ctime, 9, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(ext, 0, mtime, 10, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(ext, 0, ext, 2, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(ext, 0, bool, 1, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(ext, 0, bool, 0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   //R(null, 0, , 2, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
| 
 | |
|   //ObUnknownType
 | |
|   R(unknown, 0, null, 1, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(unknown, 0, int, 2, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(unknown, 0, float, 3.0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(unknown, 0, double, 4.0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(unknown, 0, datetime, 5, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(unknown, 0, precise_datetime, 6, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(unknown, 0, varchar, "7", OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(unknown, 0, varchar, "a", OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(unknown, 0, varchar, "07a", OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(unknown, 0, unknown, 0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(unknown, 0, ctime, 9, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(unknown, 0, mtime, 10, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(unknown, 0, ext, 2, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(unknown, 0, bool, 1, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   R(unknown, 0, bool, 0, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
|   //R(null, 0, , 2, OB_ERR_INVALID_TYPE_FOR_OP);
 | |
| }
 | |
| */
 | |
| 
 | |
| int main(int argc, char** argv)
 | |
| {
 | |
|   ::testing::InitGoogleTest(&argc, argv);
 | |
|   return RUN_ALL_TESTS();
 | |
| }
 | 
