2787 lines
106 KiB
C++
2787 lines
106 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_in.h"
|
|
#include "sql/engine/expr/ob_expr_result_type_util.h"
|
|
|
|
using namespace oceanbase::sql;
|
|
using namespace oceanbase::common;
|
|
|
|
class ObExprInTest : public ::testing::Test {
|
|
public:
|
|
ObExprInTest();
|
|
virtual ~ObExprInTest();
|
|
virtual void SetUp();
|
|
virtual void TearDown();
|
|
|
|
private:
|
|
// disallow copy
|
|
ObExprInTest(const ObExprInTest& other);
|
|
ObExprInTest& operator=(const ObExprInTest& other);
|
|
|
|
protected:
|
|
// data members
|
|
};
|
|
|
|
ObExprInTest::ObExprInTest()
|
|
{}
|
|
|
|
ObExprInTest::~ObExprInTest()
|
|
{}
|
|
|
|
void ObExprInTest::SetUp()
|
|
{}
|
|
|
|
void ObExprInTest::TearDown()
|
|
{}
|
|
|
|
#define IN_GENPARAM2(params, type1, v1, type2, v2) \
|
|
params[0].set_##type1(v1); \
|
|
params[1].set_##type2(v2); \
|
|
if (CS_LEVEL_INVALID == params[0].get_collation_level()) { \
|
|
params[0].set_collation_level(CS_LEVEL_SYSCONST); \
|
|
} \
|
|
if (CS_LEVEL_INVALID == params[1].get_collation_level()) { \
|
|
params[1].set_collation_level(CS_LEVEL_SYSCONST); \
|
|
} \
|
|
if (CS_TYPE_INVALID == params[0].get_collation_type()) { \
|
|
params[0].set_collation_type(CS_TYPE_BINARY); \
|
|
} \
|
|
if (CS_TYPE_INVALID == params[1].get_collation_type()) { \
|
|
params[1].set_collation_type(CS_TYPE_BINARY); \
|
|
}
|
|
|
|
#define IN_GENPARAM3(params, type1, v1, type2, v2, type3, v3) \
|
|
IN_GENPARAM2(params, type1, v1, type2, v2); \
|
|
params[2].set_##type3(v3); \
|
|
if (CS_LEVEL_INVALID == params[2].get_collation_level()) { \
|
|
params[2].set_collation_level(CS_LEVEL_SYSCONST); \
|
|
} \
|
|
if (CS_TYPE_INVALID == params[2].get_collation_type()) { \
|
|
params[2].set_collation_type(CS_TYPE_BINARY); \
|
|
}
|
|
|
|
#define IN_GENPARAM4(params, type1, v1, type2, v2, type3, v3, type4, v4) \
|
|
IN_GENPARAM3(params, type1, v1, type2, v2, type3, v3); \
|
|
params[3].set_##type4(v4); \
|
|
if (CS_LEVEL_INVALID == params[3].get_collation_level()) { \
|
|
params[3].set_collation_level(CS_LEVEL_SYSCONST); \
|
|
} \
|
|
if (CS_TYPE_INVALID == params[3].get_collation_type()) { \
|
|
params[3].set_collation_type(CS_TYPE_BINARY); \
|
|
}
|
|
|
|
#define IN_GENPARAM5(params, type1, v1, type2, v2, type3, v3, type4, v4, type5, v5) \
|
|
IN_GENPARAM4(params, type1, v1, type2, v2, type3, v3, type4, v4); \
|
|
params[4].set_##type5(v5); \
|
|
if (CS_LEVEL_INVALID == params[4].get_collation_level()) { \
|
|
params[4].set_collation_level(CS_LEVEL_SYSCONST); \
|
|
} \
|
|
if (CS_TYPE_INVALID == params[4].get_collation_type()) { \
|
|
params[4].set_collation_type(CS_TYPE_BINARY); \
|
|
}
|
|
|
|
#define IN_GENPARAM6(params, type1, v1, type2, v2, type3, v3, type4, v4, type5, v5, type6, v6) \
|
|
IN_GENPARAM5(params, type1, v1, type2, v2, type3, v3, type4, v4, type5, v5); \
|
|
params[5].set_##type6(v6); \
|
|
if (CS_LEVEL_INVALID == params[5].get_collation_level()) { \
|
|
params[5].set_collation_level(CS_LEVEL_SYSCONST); \
|
|
} \
|
|
if (CS_TYPE_INVALID == params[5].get_collation_type()) { \
|
|
params[5].set_collation_type(CS_TYPE_BINARY); \
|
|
}
|
|
|
|
#define IN_GENPARAM7(params, type1, v1, type2, v2, type3, v3, type4, v4, type5, v5, type6, v6, type7, v7) \
|
|
IN_GENPARAM6(params, type1, v1, type2, v2, type3, v3, type4, v4, type5, v5, type6, v6); \
|
|
params[6].set_##type7(v7); \
|
|
if (CS_LEVEL_INVALID == params[6].get_collation_level()) { \
|
|
params[6].set_collation_level(CS_LEVEL_SYSCONST); \
|
|
} \
|
|
if (CS_TYPE_INVALID == params[6].get_collation_type()) { \
|
|
params[6].set_collation_type(CS_TYPE_BINARY); \
|
|
}
|
|
|
|
#define IN_GENPARAM8(params, type1, v1, type2, v2, type3, v3, type4, v4, type5, v5, type6, v6, type7, v7, type8, v8) \
|
|
IN_GENPARAM7(params, type1, v1, type2, v2, type3, v3, type4, v4, type5, v5, type6, v6, type7, v7); \
|
|
params[7].set_##type8(v8); \
|
|
if (CS_LEVEL_INVALID == params[7].get_collation_level()) { \
|
|
params[7].set_collation_level(CS_LEVEL_SYSCONST); \
|
|
} \
|
|
if (CS_TYPE_INVALID == params[7].get_collation_type()) { \
|
|
params[7].set_collation_type(CS_TYPE_BINARY); \
|
|
}
|
|
|
|
#define IN_GENPARAM9( \
|
|
params, type1, v1, type2, v2, type3, v3, type4, v4, type5, v5, type6, v6, type7, v7, type8, v8, type9, v9) \
|
|
IN_GENPARAM8(params, type1, v1, type2, v2, type3, v3, type4, v4, type5, v5, type6, v6, type7, v7, type8, v8); \
|
|
params[8].set_##type9(v9); \
|
|
if (CS_LEVEL_INVALID == params[8].get_collation_level()) { \
|
|
params[8].set_collation_level(CS_LEVEL_SYSCONST); \
|
|
} \
|
|
if (CS_TYPE_INVALID == params[8].get_collation_type()) { \
|
|
params[8].set_collation_type(CS_TYPE_BINARY); \
|
|
}
|
|
|
|
#define IN_GENPARAM10(params, \
|
|
type1, \
|
|
v1, \
|
|
type2, \
|
|
v2, \
|
|
type3, \
|
|
v3, \
|
|
type4, \
|
|
v4, \
|
|
type5, \
|
|
v5, \
|
|
type6, \
|
|
v6, \
|
|
type7, \
|
|
v7, \
|
|
type8, \
|
|
v8, \
|
|
type9, \
|
|
v9, \
|
|
type10, \
|
|
v10) \
|
|
IN_GENPARAM9( \
|
|
params, type1, v1, type2, v2, type3, v3, type4, v4, type5, v5, type6, v6, type7, v7, type8, v8, type9, v9); \
|
|
params[9].set_##type10(v10); \
|
|
if (CS_LEVEL_INVALID == params[9].get_collation_level()) { \
|
|
params[9].set_collation_level(CS_LEVEL_SYSCONST); \
|
|
} \
|
|
if (CS_TYPE_INVALID == params[9].get_collation_type()) { \
|
|
params[9].set_collation_type(CS_TYPE_BINARY); \
|
|
}
|
|
|
|
#define IN_GENPARAM11(params, \
|
|
type1, \
|
|
v1, \
|
|
type2, \
|
|
v2, \
|
|
type3, \
|
|
v3, \
|
|
type4, \
|
|
v4, \
|
|
type5, \
|
|
v5, \
|
|
type6, \
|
|
v6, \
|
|
type7, \
|
|
v7, \
|
|
type8, \
|
|
v8, \
|
|
type9, \
|
|
v9, \
|
|
type10, \
|
|
v10, \
|
|
type11, \
|
|
v11) \
|
|
IN_GENPARAM10(params, \
|
|
type1, \
|
|
v1, \
|
|
type2, \
|
|
v2, \
|
|
type3, \
|
|
v3, \
|
|
type4, \
|
|
v4, \
|
|
type5, \
|
|
v5, \
|
|
type6, \
|
|
v6, \
|
|
type7, \
|
|
v7, \
|
|
type8, \
|
|
v8, \
|
|
type9, \
|
|
v9, \
|
|
type10, \
|
|
v10); \
|
|
params[10].set_##type11(v11); \
|
|
if (CS_LEVEL_INVALID == params[10].get_collation_level()) { \
|
|
params[10].set_collation_level(CS_LEVEL_SYSCONST); \
|
|
} \
|
|
if (CS_TYPE_INVALID == params[10].get_collation_type()) { \
|
|
params[10].set_collation_type(CS_TYPE_BINARY); \
|
|
}
|
|
|
|
#define IN_GENPARAM12(params, \
|
|
type1, \
|
|
v1, \
|
|
type2, \
|
|
v2, \
|
|
type3, \
|
|
v3, \
|
|
type4, \
|
|
v4, \
|
|
type5, \
|
|
v5, \
|
|
type6, \
|
|
v6, \
|
|
type7, \
|
|
v7, \
|
|
type8, \
|
|
v8, \
|
|
type9, \
|
|
v9, \
|
|
type10, \
|
|
v10, \
|
|
type11, \
|
|
v11, \
|
|
type12, \
|
|
v12) \
|
|
IN_GENPARAM11(params, \
|
|
type1, \
|
|
v1, \
|
|
type2, \
|
|
v2, \
|
|
type3, \
|
|
v3, \
|
|
type4, \
|
|
v4, \
|
|
type5, \
|
|
v5, \
|
|
type6, \
|
|
v6, \
|
|
type7, \
|
|
v7, \
|
|
type8, \
|
|
v8, \
|
|
type9, \
|
|
v9, \
|
|
type10, \
|
|
v10, \
|
|
type11, \
|
|
v11); \
|
|
params[11].set_##type12(v12); \
|
|
if (CS_LEVEL_INVALID == params[11].get_collation_level()) { \
|
|
params[11].set_collation_level(CS_LEVEL_SYSCONST); \
|
|
} \
|
|
if (CS_TYPE_INVALID == params[11].get_collation_type()) { \
|
|
params[11].set_collation_type(CS_TYPE_BINARY); \
|
|
}
|
|
|
|
#define IN_GENPARAM13(params, \
|
|
type1, \
|
|
v1, \
|
|
type2, \
|
|
v2, \
|
|
type3, \
|
|
v3, \
|
|
type4, \
|
|
v4, \
|
|
type5, \
|
|
v5, \
|
|
type6, \
|
|
v6, \
|
|
type7, \
|
|
v7, \
|
|
type8, \
|
|
v8, \
|
|
type9, \
|
|
v9, \
|
|
type10, \
|
|
v10, \
|
|
type11, \
|
|
v11, \
|
|
type12, \
|
|
v12, \
|
|
type13, \
|
|
v13) \
|
|
IN_GENPARAM12(params, \
|
|
type1, \
|
|
v1, \
|
|
type2, \
|
|
v2, \
|
|
type3, \
|
|
v3, \
|
|
type4, \
|
|
v4, \
|
|
type5, \
|
|
v5, \
|
|
type6, \
|
|
v6, \
|
|
type7, \
|
|
v7, \
|
|
type8, \
|
|
v8, \
|
|
type9, \
|
|
v9, \
|
|
type10, \
|
|
v10, \
|
|
type11, \
|
|
v11, \
|
|
type12, \
|
|
v12); \
|
|
params[12].set_##type13(v13); \
|
|
if (CS_LEVEL_INVALID == params[12].get_collation_level()) { \
|
|
params[12].set_collation_level(CS_LEVEL_SYSCONST); \
|
|
} \
|
|
if (CS_TYPE_INVALID == params[12].get_collation_type()) { \
|
|
params[12].set_collation_type(CS_TYPE_BINARY); \
|
|
}
|
|
|
|
#define IN_GENPARAM14(params, \
|
|
type1, \
|
|
v1, \
|
|
type2, \
|
|
v2, \
|
|
type3, \
|
|
v3, \
|
|
type4, \
|
|
v4, \
|
|
type5, \
|
|
v5, \
|
|
type6, \
|
|
v6, \
|
|
type7, \
|
|
v7, \
|
|
type8, \
|
|
v8, \
|
|
type9, \
|
|
v9, \
|
|
type10, \
|
|
v10, \
|
|
type11, \
|
|
v11, \
|
|
type12, \
|
|
v12, \
|
|
type13, \
|
|
v13, \
|
|
type14, \
|
|
v14) \
|
|
IN_GENPARAM13(params, \
|
|
type1, \
|
|
v1, \
|
|
type2, \
|
|
v2, \
|
|
type3, \
|
|
v3, \
|
|
type4, \
|
|
v4, \
|
|
type5, \
|
|
v5, \
|
|
type6, \
|
|
v6, \
|
|
type7, \
|
|
v7, \
|
|
type8, \
|
|
v8, \
|
|
type9, \
|
|
v9, \
|
|
type10, \
|
|
v10, \
|
|
type11, \
|
|
v11, \
|
|
type12, \
|
|
v12, \
|
|
type13, \
|
|
v13); \
|
|
params[13].set_##type14(v14); \
|
|
if (CS_LEVEL_INVALID == params[13].get_collation_level()) { \
|
|
params[13].set_collation_level(CS_LEVEL_SYSCONST); \
|
|
} \
|
|
if (CS_TYPE_INVALID == params[13].get_collation_type()) { \
|
|
params[13].set_collation_type(CS_TYPE_BINARY); \
|
|
}
|
|
|
|
#define IN_GENPARAM15(params, \
|
|
type1, \
|
|
v1, \
|
|
type2, \
|
|
v2, \
|
|
type3, \
|
|
v3, \
|
|
type4, \
|
|
v4, \
|
|
type5, \
|
|
v5, \
|
|
type6, \
|
|
v6, \
|
|
type7, \
|
|
v7, \
|
|
type8, \
|
|
v8, \
|
|
type9, \
|
|
v9, \
|
|
type10, \
|
|
v10, \
|
|
type11, \
|
|
v11, \
|
|
type12, \
|
|
v12, \
|
|
type13, \
|
|
v13, \
|
|
type14, \
|
|
v14, \
|
|
type15, \
|
|
v15) \
|
|
IN_GENPARAM14(params, \
|
|
type1, \
|
|
v1, \
|
|
type2, \
|
|
v2, \
|
|
type3, \
|
|
v3, \
|
|
type4, \
|
|
v4, \
|
|
type5, \
|
|
v5, \
|
|
type6, \
|
|
v6, \
|
|
type7, \
|
|
v7, \
|
|
type8, \
|
|
v8, \
|
|
type9, \
|
|
v9, \
|
|
type10, \
|
|
v10, \
|
|
type11, \
|
|
v11, \
|
|
type12, \
|
|
v12, \
|
|
type13, \
|
|
v13, \
|
|
type14, \
|
|
v14); \
|
|
params[14].set_##type15(v15); \
|
|
if (CS_LEVEL_INVALID == params[14].get_collation_level()) { \
|
|
params[14].set_collation_level(CS_LEVEL_SYSCONST); \
|
|
} \
|
|
if (CS_TYPE_INVALID == params[14].get_collation_type()) { \
|
|
params[14].set_collation_type(CS_TYPE_BINARY); \
|
|
}
|
|
|
|
#define IN_GENPARAM16(params, \
|
|
type1, \
|
|
v1, \
|
|
type2, \
|
|
v2, \
|
|
type3, \
|
|
v3, \
|
|
type4, \
|
|
v4, \
|
|
type5, \
|
|
v5, \
|
|
type6, \
|
|
v6, \
|
|
type7, \
|
|
v7, \
|
|
type8, \
|
|
v8, \
|
|
type9, \
|
|
v9, \
|
|
type10, \
|
|
v10, \
|
|
type11, \
|
|
v11, \
|
|
type12, \
|
|
v12, \
|
|
type13, \
|
|
v13, \
|
|
type14, \
|
|
v14, \
|
|
type15, \
|
|
v15, \
|
|
type16, \
|
|
v16) \
|
|
IN_GENPARAM15(params, \
|
|
type1, \
|
|
v1, \
|
|
type2, \
|
|
v2, \
|
|
type3, \
|
|
v3, \
|
|
type4, \
|
|
v4, \
|
|
type5, \
|
|
v5, \
|
|
type6, \
|
|
v6, \
|
|
type7, \
|
|
v7, \
|
|
type8, \
|
|
v8, \
|
|
type9, \
|
|
v9, \
|
|
type10, \
|
|
v10, \
|
|
type11, \
|
|
v11, \
|
|
type12, \
|
|
v12, \
|
|
type13, \
|
|
v13, \
|
|
type14, \
|
|
v14, \
|
|
type15, \
|
|
v15); \
|
|
params[15].set_##type16(v16); \
|
|
if (CS_LEVEL_INVALID == params[15].get_collation_level()) { \
|
|
params[15].set_collation_level(CS_LEVEL_SYSCONST); \
|
|
} \
|
|
if (CS_TYPE_INVALID == params[15].get_collation_type()) { \
|
|
params[15].set_collation_type(CS_TYPE_BINARY); \
|
|
}
|
|
|
|
#define IN_GENPARAM17(params, \
|
|
type1, \
|
|
v1, \
|
|
type2, \
|
|
v2, \
|
|
type3, \
|
|
v3, \
|
|
type4, \
|
|
v4, \
|
|
type5, \
|
|
v5, \
|
|
type6, \
|
|
v6, \
|
|
type7, \
|
|
v7, \
|
|
type8, \
|
|
v8, \
|
|
type9, \
|
|
v9, \
|
|
type10, \
|
|
v10, \
|
|
type11, \
|
|
v11, \
|
|
type12, \
|
|
v12, \
|
|
type13, \
|
|
v13, \
|
|
type14, \
|
|
v14, \
|
|
type15, \
|
|
v15, \
|
|
type16, \
|
|
v16, \
|
|
type17, \
|
|
v17) \
|
|
IN_GENPARAM16(params, \
|
|
type1, \
|
|
v1, \
|
|
type2, \
|
|
v2, \
|
|
type3, \
|
|
v3, \
|
|
type4, \
|
|
v4, \
|
|
type5, \
|
|
v5, \
|
|
type6, \
|
|
v6, \
|
|
type7, \
|
|
v7, \
|
|
type8, \
|
|
v8, \
|
|
type9, \
|
|
v9, \
|
|
type10, \
|
|
v10, \
|
|
type11, \
|
|
v11, \
|
|
type12, \
|
|
v12, \
|
|
type13, \
|
|
v13, \
|
|
type14, \
|
|
v14, \
|
|
type15, \
|
|
v15, \
|
|
type16, \
|
|
v16); \
|
|
params[16].set_##type17(v17); \
|
|
if (CS_LEVEL_INVALID == params[16].get_collation_level()) { \
|
|
params[16].set_collation_level(CS_LEVEL_SYSCONST); \
|
|
} \
|
|
if (CS_TYPE_INVALID == params[16].get_collation_type()) { \
|
|
params[16].set_collation_type(CS_TYPE_BINARY); \
|
|
}
|
|
|
|
#define IN_GENPARAM18(params, \
|
|
type1, \
|
|
v1, \
|
|
type2, \
|
|
v2, \
|
|
type3, \
|
|
v3, \
|
|
type4, \
|
|
v4, \
|
|
type5, \
|
|
v5, \
|
|
type6, \
|
|
v6, \
|
|
type7, \
|
|
v7, \
|
|
type8, \
|
|
v8, \
|
|
type9, \
|
|
v9, \
|
|
type10, \
|
|
v10, \
|
|
type11, \
|
|
v11, \
|
|
type12, \
|
|
v12, \
|
|
type13, \
|
|
v13, \
|
|
type14, \
|
|
v14, \
|
|
type15, \
|
|
v15, \
|
|
type16, \
|
|
v16, \
|
|
type17, \
|
|
v17, \
|
|
type18, \
|
|
v18) \
|
|
IN_GENPARAM17(params, \
|
|
type1, \
|
|
v1, \
|
|
type2, \
|
|
v2, \
|
|
type3, \
|
|
v3, \
|
|
type4, \
|
|
v4, \
|
|
type5, \
|
|
v5, \
|
|
type6, \
|
|
v6, \
|
|
type7, \
|
|
v7, \
|
|
type8, \
|
|
v8, \
|
|
type9, \
|
|
v9, \
|
|
type10, \
|
|
v10, \
|
|
type11, \
|
|
v11, \
|
|
type12, \
|
|
v12, \
|
|
type13, \
|
|
v13, \
|
|
type14, \
|
|
v14, \
|
|
type15, \
|
|
v15, \
|
|
type16, \
|
|
v16, \
|
|
type17, \
|
|
v17); \
|
|
params[17].set_##type18(v18); \
|
|
if (CS_LEVEL_INVALID == params[17].get_collation_level()) { \
|
|
params[17].set_collation_level(CS_LEVEL_SYSCONST); \
|
|
} \
|
|
if (CS_TYPE_INVALID == params[17].get_collation_type()) { \
|
|
params[17].set_collation_type(CS_TYPE_BINARY); \
|
|
}
|
|
|
|
#define IN_GENPARAM19(params, \
|
|
type1, \
|
|
v1, \
|
|
type2, \
|
|
v2, \
|
|
type3, \
|
|
v3, \
|
|
type4, \
|
|
v4, \
|
|
type5, \
|
|
v5, \
|
|
type6, \
|
|
v6, \
|
|
type7, \
|
|
v7, \
|
|
type8, \
|
|
v8, \
|
|
type9, \
|
|
v9, \
|
|
type10, \
|
|
v10, \
|
|
type11, \
|
|
v11, \
|
|
type12, \
|
|
v12, \
|
|
type13, \
|
|
v13, \
|
|
type14, \
|
|
v14, \
|
|
type15, \
|
|
v15, \
|
|
type16, \
|
|
v16, \
|
|
type17, \
|
|
v17, \
|
|
type18, \
|
|
v18, \
|
|
type19, \
|
|
v19) \
|
|
IN_GENPARAM18(params, \
|
|
type1, \
|
|
v1, \
|
|
type2, \
|
|
v2, \
|
|
type3, \
|
|
v3, \
|
|
type4, \
|
|
v4, \
|
|
type5, \
|
|
v5, \
|
|
type6, \
|
|
v6, \
|
|
type7, \
|
|
v7, \
|
|
type8, \
|
|
v8, \
|
|
type9, \
|
|
v9, \
|
|
type10, \
|
|
v10, \
|
|
type11, \
|
|
v11, \
|
|
type12, \
|
|
v12, \
|
|
type13, \
|
|
v13, \
|
|
type14, \
|
|
v14, \
|
|
type15, \
|
|
v15, \
|
|
type16, \
|
|
v16, \
|
|
type17, \
|
|
v17, \
|
|
type18, \
|
|
v18); \
|
|
params[18].set_##type19(v19); \
|
|
if (CS_LEVEL_INVALID == params[18].get_collation_level()) { \
|
|
params[18].set_collation_level(CS_LEVEL_SYSCONST); \
|
|
} \
|
|
if (CS_TYPE_INVALID == params[18].get_collation_type()) { \
|
|
params[18].set_collation_type(CS_TYPE_BINARY); \
|
|
}
|
|
|
|
#define IN_GENPARAM20(params, \
|
|
type1, \
|
|
v1, \
|
|
type2, \
|
|
v2, \
|
|
type3, \
|
|
v3, \
|
|
type4, \
|
|
v4, \
|
|
type5, \
|
|
v5, \
|
|
type6, \
|
|
v6, \
|
|
type7, \
|
|
v7, \
|
|
type8, \
|
|
v8, \
|
|
type9, \
|
|
v9, \
|
|
type10, \
|
|
v10, \
|
|
type11, \
|
|
v11, \
|
|
type12, \
|
|
v12, \
|
|
type13, \
|
|
v13, \
|
|
type14, \
|
|
v14, \
|
|
type15, \
|
|
v15, \
|
|
type16, \
|
|
v16, \
|
|
type17, \
|
|
v17, \
|
|
type18, \
|
|
v18, \
|
|
type19, \
|
|
v19, \
|
|
type20, \
|
|
v20) \
|
|
IN_GENPARAM19(params, \
|
|
type1, \
|
|
v1, \
|
|
type2, \
|
|
v2, \
|
|
type3, \
|
|
v3, \
|
|
type4, \
|
|
v4, \
|
|
type5, \
|
|
v5, \
|
|
type6, \
|
|
v6, \
|
|
type7, \
|
|
v7, \
|
|
type8, \
|
|
v8, \
|
|
type9, \
|
|
v9, \
|
|
type10, \
|
|
v10, \
|
|
type11, \
|
|
v11, \
|
|
type12, \
|
|
v12, \
|
|
type13, \
|
|
v13, \
|
|
type14, \
|
|
v14, \
|
|
type15, \
|
|
v15, \
|
|
type16, \
|
|
v16, \
|
|
type17, \
|
|
v17, \
|
|
type18, \
|
|
v18, \
|
|
type19, \
|
|
v19); \
|
|
params[19].set_##type20(v20); \
|
|
if (CS_LEVEL_INVALID == params[19].get_collation_level()) { \
|
|
params[19].set_collation_level(CS_LEVEL_SYSCONST); \
|
|
} \
|
|
if (CS_TYPE_INVALID == params[19].get_collation_type()) { \
|
|
params[19].set_collation_type(CS_TYPE_BINARY); \
|
|
}
|
|
|
|
#define IN_GENPARAM21(params, \
|
|
type1, \
|
|
v1, \
|
|
type2, \
|
|
v2, \
|
|
type3, \
|
|
v3, \
|
|
type4, \
|
|
v4, \
|
|
type5, \
|
|
v5, \
|
|
type6, \
|
|
v6, \
|
|
type7, \
|
|
v7, \
|
|
type8, \
|
|
v8, \
|
|
type9, \
|
|
v9, \
|
|
type10, \
|
|
v10, \
|
|
type11, \
|
|
v11, \
|
|
type12, \
|
|
v12, \
|
|
type13, \
|
|
v13, \
|
|
type14, \
|
|
v14, \
|
|
type15, \
|
|
v15, \
|
|
type16, \
|
|
v16, \
|
|
type17, \
|
|
v17, \
|
|
type18, \
|
|
v18, \
|
|
type19, \
|
|
v19, \
|
|
type20, \
|
|
v20, \
|
|
type21, \
|
|
v21) \
|
|
IN_GENPARAM20(params, \
|
|
type1, \
|
|
v1, \
|
|
type2, \
|
|
v2, \
|
|
type3, \
|
|
v3, \
|
|
type4, \
|
|
v4, \
|
|
type5, \
|
|
v5, \
|
|
type6, \
|
|
v6, \
|
|
type7, \
|
|
v7, \
|
|
type8, \
|
|
v8, \
|
|
type9, \
|
|
v9, \
|
|
type10, \
|
|
v10, \
|
|
type11, \
|
|
v11, \
|
|
type12, \
|
|
v12, \
|
|
type13, \
|
|
v13, \
|
|
type14, \
|
|
v14, \
|
|
type15, \
|
|
v15, \
|
|
type16, \
|
|
v16, \
|
|
type17, \
|
|
v17, \
|
|
type18, \
|
|
v18, \
|
|
type19, \
|
|
v19, \
|
|
type20, \
|
|
v20); \
|
|
params[20].set_##type21(v21); \
|
|
if (CS_LEVEL_INVALID == params[20].get_collation_level()) { \
|
|
params[20].set_collation_level(CS_LEVEL_SYSCONST); \
|
|
} \
|
|
if (CS_TYPE_INVALID == params[20].get_collation_type()) { \
|
|
params[20].set_collation_type(CS_TYPE_BINARY); \
|
|
}
|
|
|
|
#define IN_GENPARAM22(params, \
|
|
type1, \
|
|
v1, \
|
|
type2, \
|
|
v2, \
|
|
type3, \
|
|
v3, \
|
|
type4, \
|
|
v4, \
|
|
type5, \
|
|
v5, \
|
|
type6, \
|
|
v6, \
|
|
type7, \
|
|
v7, \
|
|
type8, \
|
|
v8, \
|
|
type9, \
|
|
v9, \
|
|
type10, \
|
|
v10, \
|
|
type11, \
|
|
v11, \
|
|
type12, \
|
|
v12, \
|
|
type13, \
|
|
v13, \
|
|
type14, \
|
|
v14, \
|
|
type15, \
|
|
v15, \
|
|
type16, \
|
|
v16, \
|
|
type17, \
|
|
v17, \
|
|
type18, \
|
|
v18, \
|
|
type19, \
|
|
v19, \
|
|
type20, \
|
|
v20, \
|
|
type21, \
|
|
v21, \
|
|
type22, \
|
|
v22) \
|
|
IN_GENPARAM21(params, \
|
|
type1, \
|
|
v1, \
|
|
type2, \
|
|
v2, \
|
|
type3, \
|
|
v3, \
|
|
type4, \
|
|
v4, \
|
|
type5, \
|
|
v5, \
|
|
type6, \
|
|
v6, \
|
|
type7, \
|
|
v7, \
|
|
type8, \
|
|
v8, \
|
|
type9, \
|
|
v9, \
|
|
type10, \
|
|
v10, \
|
|
type11, \
|
|
v11, \
|
|
type12, \
|
|
v12, \
|
|
type13, \
|
|
v13, \
|
|
type14, \
|
|
v14, \
|
|
type15, \
|
|
v15, \
|
|
type16, \
|
|
v16, \
|
|
type17, \
|
|
v17, \
|
|
type18, \
|
|
v18, \
|
|
type19, \
|
|
v19, \
|
|
type20, \
|
|
v20, \
|
|
type21, \
|
|
v21); \
|
|
params[21].set_##type22(v22); \
|
|
if (CS_LEVEL_INVALID == params[21].get_collation_level()) { \
|
|
params[21].set_collation_level(CS_LEVEL_SYSCONST); \
|
|
} \
|
|
if (CS_TYPE_INVALID == params[21].get_collation_type()) { \
|
|
params[21].set_collation_type(CS_TYPE_BINARY); \
|
|
}
|
|
|
|
#define IN_GENPARAM23(params, \
|
|
type1, \
|
|
v1, \
|
|
type2, \
|
|
v2, \
|
|
type3, \
|
|
v3, \
|
|
type4, \
|
|
v4, \
|
|
type5, \
|
|
v5, \
|
|
type6, \
|
|
v6, \
|
|
type7, \
|
|
v7, \
|
|
type8, \
|
|
v8, \
|
|
type9, \
|
|
v9, \
|
|
type10, \
|
|
v10, \
|
|
type11, \
|
|
v11, \
|
|
type12, \
|
|
v12, \
|
|
type13, \
|
|
v13, \
|
|
type14, \
|
|
v14, \
|
|
type15, \
|
|
v15, \
|
|
type16, \
|
|
v16, \
|
|
type17, \
|
|
v17, \
|
|
type18, \
|
|
v18, \
|
|
type19, \
|
|
v19, \
|
|
type20, \
|
|
v20, \
|
|
type21, \
|
|
v21, \
|
|
type22, \
|
|
v22, \
|
|
type23, \
|
|
v23) \
|
|
IN_GENPARAM22(params, \
|
|
type1, \
|
|
v1, \
|
|
type2, \
|
|
v2, \
|
|
type3, \
|
|
v3, \
|
|
type4, \
|
|
v4, \
|
|
type5, \
|
|
v5, \
|
|
type6, \
|
|
v6, \
|
|
type7, \
|
|
v7, \
|
|
type8, \
|
|
v8, \
|
|
type9, \
|
|
v9, \
|
|
type10, \
|
|
v10, \
|
|
type11, \
|
|
v11, \
|
|
type12, \
|
|
v12, \
|
|
type13, \
|
|
v13, \
|
|
type14, \
|
|
v14, \
|
|
type15, \
|
|
v15, \
|
|
type16, \
|
|
v16, \
|
|
type17, \
|
|
v17, \
|
|
type18, \
|
|
v18, \
|
|
type19, \
|
|
v19, \
|
|
type20, \
|
|
v20, \
|
|
type21, \
|
|
v21, \
|
|
type22, \
|
|
v22); \
|
|
params[22].set_##type23(v23); \
|
|
if (CS_LEVEL_INVALID == params[22].get_collation_level()) { \
|
|
params[22].set_collation_level(CS_LEVEL_SYSCONST); \
|
|
} \
|
|
if (CS_TYPE_INVALID == params[22].get_collation_type()) { \
|
|
params[22].set_collation_type(CS_TYPE_BINARY); \
|
|
}
|
|
|
|
#define IN_GENPARAM24(params, \
|
|
type1, \
|
|
v1, \
|
|
type2, \
|
|
v2, \
|
|
type3, \
|
|
v3, \
|
|
type4, \
|
|
v4, \
|
|
type5, \
|
|
v5, \
|
|
type6, \
|
|
v6, \
|
|
type7, \
|
|
v7, \
|
|
type8, \
|
|
v8, \
|
|
type9, \
|
|
v9, \
|
|
type10, \
|
|
v10, \
|
|
type11, \
|
|
v11, \
|
|
type12, \
|
|
v12, \
|
|
type13, \
|
|
v13, \
|
|
type14, \
|
|
v14, \
|
|
type15, \
|
|
v15, \
|
|
type16, \
|
|
v16, \
|
|
type17, \
|
|
v17, \
|
|
type18, \
|
|
v18, \
|
|
type19, \
|
|
v19, \
|
|
type20, \
|
|
v20, \
|
|
type21, \
|
|
v21, \
|
|
type22, \
|
|
v22, \
|
|
type23, \
|
|
v23, \
|
|
type24, \
|
|
v24) \
|
|
IN_GENPARAM23(params, \
|
|
type1, \
|
|
v1, \
|
|
type2, \
|
|
v2, \
|
|
type3, \
|
|
v3, \
|
|
type4, \
|
|
v4, \
|
|
type5, \
|
|
v5, \
|
|
type6, \
|
|
v6, \
|
|
type7, \
|
|
v7, \
|
|
type8, \
|
|
v8, \
|
|
type9, \
|
|
v9, \
|
|
type10, \
|
|
v10, \
|
|
type11, \
|
|
v11, \
|
|
type12, \
|
|
v12, \
|
|
type13, \
|
|
v13, \
|
|
type14, \
|
|
v14, \
|
|
type15, \
|
|
v15, \
|
|
type16, \
|
|
v16, \
|
|
type17, \
|
|
v17, \
|
|
type18, \
|
|
v18, \
|
|
type19, \
|
|
v19, \
|
|
type20, \
|
|
v20, \
|
|
type21, \
|
|
v21, \
|
|
type22, \
|
|
v22, \
|
|
type23, \
|
|
v23); \
|
|
params[23].set_##type24(v24); \
|
|
if (CS_LEVEL_INVALID == params[23].get_collation_level()) { \
|
|
params[23].set_collation_level(CS_LEVEL_SYSCONST); \
|
|
} \
|
|
if (CS_TYPE_INVALID == params[23].get_collation_type()) { \
|
|
params[23].set_collation_type(CS_TYPE_BINARY); \
|
|
}
|
|
|
|
int calc_cmp_type2(ObExprResType& type, const ObObj& type1, const ObObj& type2)
|
|
{
|
|
int ret = OB_SUCCESS;
|
|
ObObjType cmp_type;
|
|
if (OB_SUCC(ObExprResultTypeUtil::get_relational_cmp_type(cmp_type, type1.get_type(), type2.get_type()))) {
|
|
if (ObMaxType == cmp_type) {
|
|
ret = OB_INVALID_ARGUMENT;
|
|
SQL_ENG_LOG(WARN, "failed to get relational cmp types", K(cmp_type), K(type1), K(type1), K(ret));
|
|
}
|
|
}
|
|
if (OB_SUCC(ret)) {
|
|
type.set_calc_type(cmp_type);
|
|
if (ob_is_string_type(cmp_type)) {
|
|
ObObjMeta coll_types[2];
|
|
coll_types[0] = type1.get_meta();
|
|
coll_types[1] = type2.get_meta();
|
|
ObArenaAllocator alloc;
|
|
ObExprIn dummy_op(alloc);
|
|
ret = dummy_op.aggregate_charsets_for_comparison(type.get_calc_meta(), coll_types, 2);
|
|
}
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
int calc_result_type2(ObExprResType& type, const ObObj& type1, const ObObj& type2)
|
|
{
|
|
int ret = OB_SUCCESS;
|
|
ObExprResType cmp_type;
|
|
if (OB_FAIL(calc_cmp_type2(cmp_type, type1, type2))) {
|
|
SQL_ENG_LOG(WARN, "failed to calc cmp types", K(ret));
|
|
} else {
|
|
type.set_int();
|
|
type.set_calc_collation(cmp_type);
|
|
type.set_calc_type(cmp_type.get_calc_type());
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
int calc_result_typeN(ObExprResType& type, const ObObj* types, const int64_t row_dimension, const int64_t param_num)
|
|
{
|
|
int ret = OB_SUCCESS;
|
|
int64_t left_start_idx = 0;
|
|
int64_t right_start_idx = row_dimension;
|
|
int64_t right_element_count = param_num / row_dimension - 1;
|
|
for (int64_t i = 0; OB_SUCC(ret) && i < right_element_count; ++i, right_start_idx += row_dimension) {
|
|
ObExprResType tmp_res_type;
|
|
for (int64_t j = 0; OB_SUCC(ret) && j < row_dimension; ++j) {
|
|
if (OB_FAIL(calc_result_type2(tmp_res_type, types[left_start_idx + j], types[right_start_idx + j]))) {
|
|
SQL_ENG_LOG(WARN, "failed to calc result types", K(ret));
|
|
} else if (OB_FAIL(type.get_row_calc_cmp_types().push_back(tmp_res_type.get_calc_meta()))) {
|
|
SQL_ENG_LOG(WARN, "failed to push back cmp type", K(ret));
|
|
}
|
|
}
|
|
}
|
|
if (OB_SUCC(ret)) {
|
|
type.set_int();
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
#define R(rtype, stype, cslevel, cstype, res, num, di, pn, ...) \
|
|
{ \
|
|
int ret = OB_SUCCESS; \
|
|
ObObj vres; \
|
|
ObArenaAllocator alloc; \
|
|
ObExprIn op(alloc); \
|
|
op.set_row_dimension(di); \
|
|
op.set_real_param_num(pn); \
|
|
int64_t bv; \
|
|
ObObj params[num]; \
|
|
IN_GENPARAM##num(params, __VA_ARGS__); \
|
|
ObExprCtx expr_ctx(NULL, NULL, NULL, &buf); \
|
|
ObExprResType tmp_ex_type; \
|
|
ObCollationLevel tmp_level = cslevel; \
|
|
ObCollationType tmp_type = cstype; \
|
|
if (OB_FAIL(calc_result_typeN(tmp_ex_type, params, di, num))) { \
|
|
SQL_ENG_LOG(WARN, "failed to calc result typeN", K(ret)); \
|
|
} else { \
|
|
tmp_ex_type.set_collation_level(tmp_level); \
|
|
tmp_ex_type.set_collation_type(tmp_type); \
|
|
op.set_result_type(tmp_ex_type); \
|
|
ret = op.calc_resultN(vres, params, num, expr_ctx); \
|
|
if (OB_SUCC(ret)) { \
|
|
ASSERT_EQ(rtype, vres.get_type()); \
|
|
if (ObIntType == rtype) { \
|
|
ASSERT_EQ(OB_SUCCESS, vres.get_int(bv)); \
|
|
ASSERT_EQ(res, bv); \
|
|
} \
|
|
} else { \
|
|
ASSERT_EQ(res, ret); \
|
|
} \
|
|
} \
|
|
} \
|
|
while (0)
|
|
|
|
TEST_F(ObExprInTest, basic_test)
|
|
{
|
|
ObMalloc buf;
|
|
/*
|
|
* same type
|
|
*/
|
|
// int
|
|
R(ObIntType,
|
|
int,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
8,
|
|
1,
|
|
8,
|
|
int,
|
|
1,
|
|
int,
|
|
2,
|
|
int,
|
|
2,
|
|
int,
|
|
1,
|
|
int,
|
|
1,
|
|
int,
|
|
2,
|
|
int,
|
|
2,
|
|
int,
|
|
3);
|
|
R(ObIntType,
|
|
tinyint,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
8,
|
|
1,
|
|
8,
|
|
tinyint,
|
|
1,
|
|
tinyint,
|
|
2,
|
|
tinyint,
|
|
2,
|
|
tinyint,
|
|
1,
|
|
tinyint,
|
|
1,
|
|
tinyint,
|
|
2,
|
|
tinyint,
|
|
2,
|
|
tinyint,
|
|
3);
|
|
R(ObIntType,
|
|
smallint,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
8,
|
|
1,
|
|
8,
|
|
smallint,
|
|
1,
|
|
smallint,
|
|
2,
|
|
smallint,
|
|
2,
|
|
smallint,
|
|
1,
|
|
smallint,
|
|
1,
|
|
smallint,
|
|
2,
|
|
smallint,
|
|
2,
|
|
smallint,
|
|
3);
|
|
R(ObIntType,
|
|
mediumint,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
8,
|
|
1,
|
|
8,
|
|
mediumint,
|
|
1,
|
|
mediumint,
|
|
2,
|
|
mediumint,
|
|
2,
|
|
mediumint,
|
|
1,
|
|
mediumint,
|
|
1,
|
|
mediumint,
|
|
2,
|
|
mediumint,
|
|
2,
|
|
mediumint,
|
|
3);
|
|
R(ObIntType,
|
|
int32,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
8,
|
|
1,
|
|
8,
|
|
int32,
|
|
1,
|
|
int32,
|
|
2,
|
|
int32,
|
|
2,
|
|
int32,
|
|
1,
|
|
int32,
|
|
1,
|
|
int32,
|
|
2,
|
|
int32,
|
|
2,
|
|
int32,
|
|
3);
|
|
R(ObIntType,
|
|
uint64,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
8,
|
|
1,
|
|
8,
|
|
uint64,
|
|
1,
|
|
uint64,
|
|
2,
|
|
uint64,
|
|
2,
|
|
uint64,
|
|
1,
|
|
uint64,
|
|
1,
|
|
uint64,
|
|
2,
|
|
uint64,
|
|
2,
|
|
uint64,
|
|
3);
|
|
R(ObIntType,
|
|
utinyint,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
8,
|
|
1,
|
|
8,
|
|
utinyint,
|
|
1,
|
|
utinyint,
|
|
2,
|
|
utinyint,
|
|
2,
|
|
utinyint,
|
|
1,
|
|
utinyint,
|
|
1,
|
|
utinyint,
|
|
2,
|
|
utinyint,
|
|
2,
|
|
utinyint,
|
|
3);
|
|
R(ObIntType,
|
|
usmallint,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
8,
|
|
1,
|
|
8,
|
|
usmallint,
|
|
1,
|
|
usmallint,
|
|
2,
|
|
usmallint,
|
|
2,
|
|
usmallint,
|
|
1,
|
|
usmallint,
|
|
1,
|
|
usmallint,
|
|
2,
|
|
usmallint,
|
|
2,
|
|
usmallint,
|
|
3);
|
|
R(ObIntType,
|
|
umediumint,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
8,
|
|
1,
|
|
8,
|
|
umediumint,
|
|
1,
|
|
umediumint,
|
|
2,
|
|
umediumint,
|
|
2,
|
|
umediumint,
|
|
1,
|
|
umediumint,
|
|
1,
|
|
umediumint,
|
|
2,
|
|
umediumint,
|
|
2,
|
|
umediumint,
|
|
3);
|
|
R(ObIntType,
|
|
uint32,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
8,
|
|
1,
|
|
8,
|
|
uint32,
|
|
1,
|
|
uint32,
|
|
2,
|
|
uint32,
|
|
2,
|
|
uint32,
|
|
1,
|
|
uint32,
|
|
1,
|
|
uint32,
|
|
2,
|
|
uint32,
|
|
2,
|
|
uint32,
|
|
3);
|
|
|
|
// float/double
|
|
R(ObIntType,
|
|
float,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
8,
|
|
1,
|
|
8,
|
|
float,
|
|
12345.0f,
|
|
float,
|
|
-12345.0f,
|
|
float,
|
|
12345.0f,
|
|
float,
|
|
-12345.0f,
|
|
float,
|
|
12345.01f,
|
|
float,
|
|
23451.0f,
|
|
float,
|
|
-23451.0f,
|
|
float,
|
|
12345.00f);
|
|
R(ObIntType,
|
|
ufloat,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
8,
|
|
1,
|
|
8,
|
|
ufloat,
|
|
12345.0f,
|
|
ufloat,
|
|
12345.0f,
|
|
ufloat,
|
|
12345.0f,
|
|
ufloat,
|
|
12345.0f,
|
|
ufloat,
|
|
12345.01f,
|
|
ufloat,
|
|
23451.0f,
|
|
ufloat,
|
|
23451.0f,
|
|
ufloat,
|
|
12345.00f);
|
|
R(ObIntType,
|
|
double,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
8,
|
|
1,
|
|
8,
|
|
double,
|
|
12345.0f,
|
|
double,
|
|
-12345.0f,
|
|
double,
|
|
12345.0f,
|
|
double,
|
|
-12345.0f,
|
|
double,
|
|
12345.01f,
|
|
double,
|
|
23451.0f,
|
|
double,
|
|
-23451.0f,
|
|
double,
|
|
12345.00f);
|
|
R(ObIntType,
|
|
udouble,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
8,
|
|
1,
|
|
8,
|
|
udouble,
|
|
12345.0f,
|
|
udouble,
|
|
12345.0f,
|
|
udouble,
|
|
12345.0f,
|
|
udouble,
|
|
12345.0f,
|
|
udouble,
|
|
12345.01f,
|
|
udouble,
|
|
23451.0f,
|
|
udouble,
|
|
23451.0f,
|
|
udouble,
|
|
12345.00f);
|
|
|
|
// number
|
|
number::ObNumber nmb1, nmb2, nmb3, nmb4, nmb5, nmb6, nmb7, nmb8;
|
|
ASSERT_EQ(OB_SUCCESS, nmb1.from("789.012", buf));
|
|
ASSERT_EQ(OB_SUCCESS, nmb2.from("89.012", buf));
|
|
ASSERT_EQ(OB_SUCCESS, nmb3.from("789.012", buf));
|
|
ASSERT_EQ(OB_SUCCESS, nmb4.from("89.012", buf));
|
|
ASSERT_EQ(OB_SUCCESS, nmb5.from("789", buf));
|
|
ASSERT_EQ(OB_SUCCESS, nmb6.from("789.011", buf));
|
|
ASSERT_EQ(OB_SUCCESS, nmb7.from("789.0", buf));
|
|
ASSERT_EQ(OB_SUCCESS, nmb8.from("789.0120", buf));
|
|
|
|
R(ObIntType,
|
|
number,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
8,
|
|
1,
|
|
8,
|
|
number,
|
|
nmb1,
|
|
number,
|
|
nmb2,
|
|
number,
|
|
nmb3,
|
|
number,
|
|
nmb4,
|
|
number,
|
|
nmb5,
|
|
number,
|
|
nmb6,
|
|
number,
|
|
nmb7,
|
|
number,
|
|
nmb8);
|
|
R(ObIntType,
|
|
unumber,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
8,
|
|
1,
|
|
8,
|
|
unumber,
|
|
nmb1,
|
|
unumber,
|
|
nmb2,
|
|
unumber,
|
|
nmb3,
|
|
unumber,
|
|
nmb4,
|
|
unumber,
|
|
nmb5,
|
|
unumber,
|
|
nmb6,
|
|
unumber,
|
|
nmb7,
|
|
unumber,
|
|
nmb8);
|
|
|
|
// //time
|
|
// R(ObIntType, 1, 8, 2, 4, datetime, 1, datetime, 2, datetime, 2, datetime, 1, datetime, 1, datetime, 2, datetime,
|
|
// 2, datetime, 3); R(ObIntType, 1, 8, 2, 4, timestamp, 1, timestamp, 2, timestamp, 2, timestamp, 1, timestamp, 1,
|
|
// timestamp, 2, timestamp, 2, timestamp, 3); R(ObIntType, 1, 8, 2, 4, date, 1, date, 2, date, 2, date, 1, date, 1,
|
|
// date, 2, date, 2, date, 3); R(ObIntType, 1, 8, 2, 4, time, 1, time, 2, time, 2, time, 1, time, 1, time, 2, time,
|
|
// 2, time, 3); R(ObIntType, 1, 8, 2, 4, year, 1, year, 2, year, 2, year, 1, year, 1, year, 2, year, 2, year, 3);
|
|
|
|
// string
|
|
R(ObIntType,
|
|
vchar,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
8,
|
|
1,
|
|
8,
|
|
varchar,
|
|
"1",
|
|
varchar,
|
|
"2",
|
|
varchar,
|
|
"2",
|
|
varchar,
|
|
"1",
|
|
varchar,
|
|
"1",
|
|
varchar,
|
|
"2",
|
|
varchar,
|
|
"2",
|
|
varchar,
|
|
"3");
|
|
R(ObIntType,
|
|
char,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
8,
|
|
1,
|
|
8,
|
|
char,
|
|
"1",
|
|
char,
|
|
"2",
|
|
char,
|
|
"2",
|
|
char,
|
|
"1",
|
|
char,
|
|
"1",
|
|
char,
|
|
"2",
|
|
char,
|
|
"2",
|
|
char,
|
|
"3");
|
|
R(ObIntType,
|
|
varbinary,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
8,
|
|
1,
|
|
8,
|
|
varbinary,
|
|
"1",
|
|
varbinary,
|
|
"2",
|
|
varbinary,
|
|
"2",
|
|
varbinary,
|
|
"1",
|
|
varbinary,
|
|
"1",
|
|
varbinary,
|
|
"2",
|
|
varbinary,
|
|
"2",
|
|
varbinary,
|
|
"3");
|
|
R(ObIntType,
|
|
binary,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
8,
|
|
1,
|
|
8,
|
|
binary,
|
|
"1",
|
|
binary,
|
|
"2",
|
|
binary,
|
|
"2",
|
|
binary,
|
|
"1",
|
|
binary,
|
|
"1",
|
|
binary,
|
|
"2",
|
|
binary,
|
|
"2",
|
|
binary,
|
|
"3");
|
|
|
|
// bool/ext/unknown/null
|
|
R(ObIntType,
|
|
bool,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
8,
|
|
1,
|
|
8,
|
|
bool,
|
|
1,
|
|
bool,
|
|
1,
|
|
bool,
|
|
1,
|
|
bool,
|
|
1,
|
|
bool,
|
|
0,
|
|
bool,
|
|
0,
|
|
bool,
|
|
0,
|
|
bool,
|
|
0);
|
|
// R(ObIntType, 1, 8, 2, 4, unknown, 1, unknown, 2, unknown, 2, unknown, 1, unknown, 22, unknown, 2, unknown, 2,
|
|
// unknown, 3);
|
|
R(ObNullType,
|
|
null,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
8,
|
|
1,
|
|
8,
|
|
null,
|
|
,
|
|
null,
|
|
,
|
|
null,
|
|
,
|
|
null,
|
|
,
|
|
null,
|
|
,
|
|
null,
|
|
,
|
|
null,
|
|
,
|
|
null, );
|
|
|
|
/*
|
|
* mixed type
|
|
*/
|
|
// int
|
|
R(ObIntType,
|
|
varbinary,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
23,
|
|
1,
|
|
23,
|
|
int,
|
|
1,
|
|
int,
|
|
2,
|
|
tinyint,
|
|
3,
|
|
smallint,
|
|
4,
|
|
mediumint,
|
|
5,
|
|
int32,
|
|
6,
|
|
uint64,
|
|
7,
|
|
utinyint,
|
|
8,
|
|
usmallint,
|
|
9,
|
|
umediumint,
|
|
10,
|
|
uint32,
|
|
11,
|
|
float,
|
|
-12345.0f,
|
|
ufloat,
|
|
12345.0f,
|
|
double,
|
|
-12345.0f,
|
|
udouble,
|
|
23451.0f,
|
|
number,
|
|
nmb1,
|
|
unumber,
|
|
nmb2,
|
|
varchar,
|
|
"1",
|
|
char,
|
|
"2",
|
|
varbinary,
|
|
"3",
|
|
binary,
|
|
"4",
|
|
bool,
|
|
0,
|
|
null, );
|
|
R(ObIntType,
|
|
varbinary,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
23,
|
|
1,
|
|
23,
|
|
tinyint,
|
|
1,
|
|
int,
|
|
2,
|
|
tinyint,
|
|
3,
|
|
smallint,
|
|
4,
|
|
mediumint,
|
|
5,
|
|
int32,
|
|
6,
|
|
uint64,
|
|
7,
|
|
utinyint,
|
|
8,
|
|
usmallint,
|
|
9,
|
|
umediumint,
|
|
10,
|
|
uint32,
|
|
11,
|
|
float,
|
|
-12345.0f,
|
|
ufloat,
|
|
12345.0f,
|
|
double,
|
|
-12345.0f,
|
|
udouble,
|
|
23451.0f,
|
|
number,
|
|
nmb1,
|
|
unumber,
|
|
nmb2,
|
|
varchar,
|
|
"1",
|
|
char,
|
|
"2",
|
|
varbinary,
|
|
"3",
|
|
binary,
|
|
"4",
|
|
bool,
|
|
0,
|
|
null, );
|
|
R(ObIntType,
|
|
varbinary,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
23,
|
|
1,
|
|
23,
|
|
smallint,
|
|
1,
|
|
int,
|
|
2,
|
|
tinyint,
|
|
3,
|
|
smallint,
|
|
4,
|
|
mediumint,
|
|
5,
|
|
int32,
|
|
6,
|
|
uint64,
|
|
7,
|
|
utinyint,
|
|
8,
|
|
usmallint,
|
|
9,
|
|
umediumint,
|
|
10,
|
|
uint32,
|
|
11,
|
|
float,
|
|
-12345.0f,
|
|
ufloat,
|
|
12345.0f,
|
|
double,
|
|
-12345.0f,
|
|
udouble,
|
|
23451.0f,
|
|
number,
|
|
nmb1,
|
|
unumber,
|
|
nmb2,
|
|
varchar,
|
|
"1",
|
|
char,
|
|
"2",
|
|
varbinary,
|
|
"3",
|
|
binary,
|
|
"4",
|
|
bool,
|
|
0,
|
|
null, );
|
|
R(ObIntType,
|
|
varbinary,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
23,
|
|
1,
|
|
23,
|
|
mediumint,
|
|
1,
|
|
int,
|
|
2,
|
|
tinyint,
|
|
3,
|
|
smallint,
|
|
4,
|
|
mediumint,
|
|
5,
|
|
int32,
|
|
6,
|
|
uint64,
|
|
7,
|
|
utinyint,
|
|
8,
|
|
usmallint,
|
|
9,
|
|
umediumint,
|
|
10,
|
|
uint32,
|
|
11,
|
|
float,
|
|
-12345.0f,
|
|
ufloat,
|
|
12345.0f,
|
|
double,
|
|
-12345.0f,
|
|
udouble,
|
|
23451.0f,
|
|
number,
|
|
nmb1,
|
|
unumber,
|
|
nmb2,
|
|
varchar,
|
|
"1",
|
|
char,
|
|
"2",
|
|
varbinary,
|
|
"3",
|
|
binary,
|
|
"4",
|
|
bool,
|
|
0,
|
|
null, );
|
|
R(ObIntType,
|
|
varbinary,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
23,
|
|
1,
|
|
23,
|
|
int32,
|
|
1,
|
|
int,
|
|
2,
|
|
tinyint,
|
|
3,
|
|
smallint,
|
|
4,
|
|
mediumint,
|
|
5,
|
|
int32,
|
|
6,
|
|
uint64,
|
|
7,
|
|
utinyint,
|
|
8,
|
|
usmallint,
|
|
9,
|
|
umediumint,
|
|
10,
|
|
uint32,
|
|
11,
|
|
float,
|
|
-12345.0f,
|
|
ufloat,
|
|
12345.0f,
|
|
double,
|
|
-12345.0f,
|
|
udouble,
|
|
23451.0f,
|
|
number,
|
|
nmb1,
|
|
unumber,
|
|
nmb2,
|
|
varchar,
|
|
"1",
|
|
char,
|
|
"2",
|
|
varbinary,
|
|
"3",
|
|
binary,
|
|
"4",
|
|
bool,
|
|
0,
|
|
null, );
|
|
// R(ObIntType, varbinary, CS_LEVEL_INVALID, CS_TYPE_BINARY, 1, 24, 1, 24, uint64, 1, int, 2, tinyint, 3, smallint, 4,
|
|
// mediumint, 5, int32, 6, uint64, 7, utinyint, 8, usmallint, 9, umediumint, 10, uint32, 11, float, -12345.0f, ufloat,
|
|
// 12345.0f, double, -12345.0f, udouble, 23451.0f, number, nmb1, unumber, nmb2, varchar, "1", char, "2", varbinary,
|
|
// "3", binary, "4", bool, 0, null, ); R(ObIntType, varbinary, CS_LEVEL_INVALID, CS_TYPE_BINARY, 1, 24, 1, 24,
|
|
// utinyint, 1, int, 2, tinyint, 3, smallint, 4, mediumint, 5, int32, 6, uint64, 7, utinyint, 8, usmallint, 9,
|
|
// umediumint, 10, uint32, 11, float, -12345.0f, ufloat, 12345.0f, double, -12345.0f, udouble, 23451.0f, number, nmb1,
|
|
// unumber, nmb2, varchar, "1", char, "2", varbinary, "3", binary, "4", bool, 0, null, ); R(ObIntType, varbinary,
|
|
// CS_LEVEL_INVALID, CS_TYPE_BINARY, 1, 24, 1, 24, usmallint, 1, int, 2, tinyint, 3, smallint, 4, mediumint, 5, int32,
|
|
// 6, uint64, 7, utinyint, 8, usmallint, 9, umediumint, 10, uint32, 11, float, -12345.0f, ufloat, 12345.0f, double,
|
|
// -12345.0f, udouble, 23451.0f, number, nmb1, unumber, nmb2, varchar, "1", char, "2", varbinary, "3", binary, "4",
|
|
// bool, 0, null, ); R(ObIntType, varbinary, CS_LEVEL_INVALID, CS_TYPE_BINARY, 1, 24, 1, 24, umediumint, 1, int, 2,
|
|
// tinyint, 3, smallint, 4, mediumint, 5, int32, 6, uint64, 7, utinyint, 8, usmallint, 9, umediumint, 10, uint32, 11,
|
|
// float, -12345.0f, ufloat, 12345.0f, double, -12345.0f, udouble, 23451.0f, number, nmb1, unumber, nmb2, varchar,
|
|
// "1", char, "2", varbinary, "3", binary, "4", bool, 0, null, ); R(ObIntType, varbinary, CS_LEVEL_INVALID,
|
|
// CS_TYPE_BINARY, 1, 24, 1, 24, uint32, 1, int, 2, tinyint, 3, smallint, 4, mediumint, 5, int32, 6, uint64, 7,
|
|
// utinyint, 8, usmallint, 9, umediumint, 10, uint32, 11, float, -12345.0f, ufloat, 12345.0f, double, -12345.0f,
|
|
// udouble, 23451.0f, number, nmb1, unumber, nmb2, varchar, "1", char, "2", varbinary, "3", binary, "4", bool, 0,
|
|
// null, );
|
|
|
|
// float/double
|
|
R(ObIntType,
|
|
varbinary,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
23,
|
|
1,
|
|
23,
|
|
float,
|
|
-12345.0f,
|
|
int,
|
|
2,
|
|
tinyint,
|
|
3,
|
|
smallint,
|
|
4,
|
|
mediumint,
|
|
5,
|
|
int32,
|
|
6,
|
|
uint64,
|
|
7,
|
|
utinyint,
|
|
8,
|
|
usmallint,
|
|
9,
|
|
umediumint,
|
|
10,
|
|
uint32,
|
|
11,
|
|
float,
|
|
-12345.0f,
|
|
ufloat,
|
|
12345.0f,
|
|
double,
|
|
-12345.0f,
|
|
udouble,
|
|
23451.0f,
|
|
number,
|
|
nmb1,
|
|
unumber,
|
|
nmb2,
|
|
varchar,
|
|
"1",
|
|
char,
|
|
"2",
|
|
varbinary,
|
|
"3",
|
|
binary,
|
|
"4",
|
|
bool,
|
|
0,
|
|
null, );
|
|
// R(ObIntType, varbinary, CS_LEVEL_INVALID, CS_TYPE_BINARY, 1, 24, 1, 24, ufloat, 12345.0f, int, 2, tinyint, 3,
|
|
// smallint, 4, mediumint, 5, int32, 6, uint64, 7, utinyint, 8, usmallint, 9, umediumint, 10, uint32, 11, float,
|
|
// -12345.0f, ufloat, 12345.0f, double, -12345.0f, udouble, 23451.0f, number, nmb1, unumber, nmb2, varchar, "1", char,
|
|
// "2", varbinary, "3", binary, "4", bool, 0, null, ); R(ObIntType, varbinary, CS_LEVEL_INVALID, CS_TYPE_BINARY, 1,
|
|
// 24, 1, 24, float, -12345.0f, int, 2, tinyint, 3, smallint, 4, mediumint, 5, int32, 6, uint64, 7, utinyint, 8,
|
|
// usmallint, 9, umediumint, 10, uint32, 11, float, -12345.0f, ufloat, 12345.0f, double, -12345.0f, udouble, 23451.0f,
|
|
// number, nmb1, unumber, nmb2, varchar, "1", char, "2", varbinary, "3", binary, "4", bool, 0, null, ); R(ObIntType,
|
|
// varbinary, CS_LEVEL_INVALID, CS_TYPE_BINARY, 1, 24, 1, 24, udouble, 23451.0f, int, 2, tinyint, 3, smallint, 4,
|
|
// mediumint, 5, int32, 6, uint64, 7, utinyint, 8, usmallint, 9, umediumint, 10, uint32, 11, float, -12345.0f, ufloat,
|
|
// 12345.0f, double, -12345.0f, udouble, 23451.0f, number, nmb1, unumber, nmb2, varchar, "1", char, "2", varbinary,
|
|
// "3", binary, "4", bool, 0, null, );
|
|
|
|
// number
|
|
R(ObIntType,
|
|
varbinary,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
23,
|
|
1,
|
|
23,
|
|
number,
|
|
nmb1,
|
|
int,
|
|
2,
|
|
tinyint,
|
|
3,
|
|
smallint,
|
|
4,
|
|
mediumint,
|
|
5,
|
|
int32,
|
|
6,
|
|
uint64,
|
|
7,
|
|
utinyint,
|
|
8,
|
|
usmallint,
|
|
9,
|
|
umediumint,
|
|
10,
|
|
uint32,
|
|
11,
|
|
float,
|
|
-12345.0f,
|
|
ufloat,
|
|
12345.0f,
|
|
double,
|
|
-12345.0f,
|
|
udouble,
|
|
23451.0f,
|
|
number,
|
|
nmb1,
|
|
unumber,
|
|
nmb2,
|
|
varchar,
|
|
"1",
|
|
char,
|
|
"2",
|
|
varbinary,
|
|
"3",
|
|
binary,
|
|
"4",
|
|
bool,
|
|
0,
|
|
null, );
|
|
// R(ObIntType, varbinary, CS_LEVEL_INVALID, CS_TYPE_BINARY, 1, 24, 1, 24, unumber, nmb1, int, 2, tinyint, 3,
|
|
// smallint, 4, mediumint, 5, int32, 6, uint64, 7, utinyint, 8, usmallint, 9, umediumint, 10, uint32, 11, float,
|
|
// -12345.0f, ufloat, 12345.0f, double, -12345.0f, udouble, 23451.0f, number, nmb1, unumber, nmb2, varchar, "1", char,
|
|
// "2", varbinary, "3", binary, "4", bool, 0, null, );
|
|
|
|
//// //time
|
|
//// R(ObIntType, 1, 8, 2, 4, datetime, 1, datetime, 2, datetime, 2, datetime, 1, datetime, 1, datetime, 2, datetime,
|
|
/// 2, datetime, 3); / R(ObIntType, 1, 8, 2, 4, timestamp, 1, timestamp, 2, timestamp, 2, timestamp, 1, timestamp, 1,
|
|
/// timestamp, 2, timestamp, 2, timestamp, 3); / R(ObIntType, 1, 8, 2, 4, date, 1, date, 2, date, 2, date, 1, date,
|
|
/// 1, date, 2, date, 2, date, 3); / R(ObIntType, 1, 8, 2, 4, time, 1, time, 2, time, 2, time, 1, time, 1, time, 2,
|
|
/// time, 2, time, 3); / R(ObIntType, 1, 8, 2, 4, year, 1, year, 2, year, 2, year, 1, year, 1, year, 2, year, 2,
|
|
/// year, 3);
|
|
|
|
// string
|
|
R(ObIntType,
|
|
varbinary,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
23,
|
|
1,
|
|
23,
|
|
varchar,
|
|
"1",
|
|
int,
|
|
2,
|
|
tinyint,
|
|
3,
|
|
smallint,
|
|
4,
|
|
mediumint,
|
|
5,
|
|
int32,
|
|
6,
|
|
uint64,
|
|
7,
|
|
utinyint,
|
|
8,
|
|
usmallint,
|
|
9,
|
|
umediumint,
|
|
10,
|
|
uint32,
|
|
11,
|
|
float,
|
|
-12345.0f,
|
|
ufloat,
|
|
12345.0f,
|
|
double,
|
|
-12345.0f,
|
|
udouble,
|
|
23451.0f,
|
|
number,
|
|
nmb1,
|
|
unumber,
|
|
nmb2,
|
|
varchar,
|
|
"1",
|
|
char,
|
|
"2",
|
|
varbinary,
|
|
"3",
|
|
binary,
|
|
"4",
|
|
bool,
|
|
0,
|
|
null, );
|
|
R(ObIntType,
|
|
varbinary,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
23,
|
|
1,
|
|
23,
|
|
char,
|
|
"1",
|
|
int,
|
|
2,
|
|
tinyint,
|
|
3,
|
|
smallint,
|
|
4,
|
|
mediumint,
|
|
5,
|
|
int32,
|
|
6,
|
|
uint64,
|
|
7,
|
|
utinyint,
|
|
8,
|
|
usmallint,
|
|
9,
|
|
umediumint,
|
|
10,
|
|
uint32,
|
|
11,
|
|
float,
|
|
-12345.0f,
|
|
ufloat,
|
|
12345.0f,
|
|
double,
|
|
-12345.0f,
|
|
udouble,
|
|
23451.0f,
|
|
number,
|
|
nmb1,
|
|
unumber,
|
|
nmb2,
|
|
varchar,
|
|
"1",
|
|
char,
|
|
"2",
|
|
varbinary,
|
|
"3",
|
|
binary,
|
|
"4",
|
|
bool,
|
|
0,
|
|
null, );
|
|
R(ObIntType,
|
|
varbinary,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
23,
|
|
1,
|
|
23,
|
|
varbinary,
|
|
"1",
|
|
int,
|
|
2,
|
|
tinyint,
|
|
3,
|
|
smallint,
|
|
4,
|
|
mediumint,
|
|
5,
|
|
int32,
|
|
6,
|
|
uint64,
|
|
7,
|
|
utinyint,
|
|
8,
|
|
usmallint,
|
|
9,
|
|
umediumint,
|
|
10,
|
|
uint32,
|
|
11,
|
|
float,
|
|
-12345.0f,
|
|
ufloat,
|
|
12345.0f,
|
|
double,
|
|
-12345.0f,
|
|
udouble,
|
|
23451.0f,
|
|
number,
|
|
nmb1,
|
|
unumber,
|
|
nmb2,
|
|
varchar,
|
|
"1",
|
|
char,
|
|
"2",
|
|
varbinary,
|
|
"3",
|
|
binary,
|
|
"4",
|
|
bool,
|
|
0,
|
|
null, );
|
|
R(ObIntType,
|
|
varbinary,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
23,
|
|
1,
|
|
23,
|
|
binary,
|
|
"1",
|
|
int,
|
|
2,
|
|
tinyint,
|
|
3,
|
|
smallint,
|
|
4,
|
|
mediumint,
|
|
5,
|
|
int32,
|
|
6,
|
|
uint64,
|
|
7,
|
|
utinyint,
|
|
8,
|
|
usmallint,
|
|
9,
|
|
umediumint,
|
|
10,
|
|
uint32,
|
|
11,
|
|
float,
|
|
-12345.0f,
|
|
ufloat,
|
|
12345.0f,
|
|
double,
|
|
-12345.0f,
|
|
udouble,
|
|
23451.0f,
|
|
number,
|
|
nmb1,
|
|
unumber,
|
|
nmb2,
|
|
varchar,
|
|
"1",
|
|
char,
|
|
"2",
|
|
varbinary,
|
|
"3",
|
|
binary,
|
|
"4",
|
|
bool,
|
|
0,
|
|
null, );
|
|
|
|
// bool/ext/unknown/null
|
|
R(ObIntType,
|
|
varbinary,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
23,
|
|
1,
|
|
23,
|
|
bool,
|
|
0,
|
|
int,
|
|
2,
|
|
tinyint,
|
|
3,
|
|
smallint,
|
|
4,
|
|
mediumint,
|
|
5,
|
|
int32,
|
|
6,
|
|
uint64,
|
|
7,
|
|
utinyint,
|
|
8,
|
|
usmallint,
|
|
9,
|
|
umediumint,
|
|
10,
|
|
uint32,
|
|
11,
|
|
float,
|
|
-12345.0f,
|
|
ufloat,
|
|
12345.0f,
|
|
double,
|
|
-12345.0f,
|
|
udouble,
|
|
23451.0f,
|
|
number,
|
|
nmb1,
|
|
unumber,
|
|
nmb2,
|
|
varchar,
|
|
"1",
|
|
char,
|
|
"2",
|
|
varbinary,
|
|
"3",
|
|
binary,
|
|
"4",
|
|
bool,
|
|
0,
|
|
null, );
|
|
R(ObIntType,
|
|
varbinary,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
22,
|
|
1,
|
|
22,
|
|
int,
|
|
2,
|
|
tinyint,
|
|
3,
|
|
smallint,
|
|
4,
|
|
mediumint,
|
|
5,
|
|
int32,
|
|
6,
|
|
uint64,
|
|
7,
|
|
utinyint,
|
|
8,
|
|
usmallint,
|
|
9,
|
|
umediumint,
|
|
10,
|
|
uint32,
|
|
11,
|
|
float,
|
|
-12345.0f,
|
|
ufloat,
|
|
12345.0f,
|
|
double,
|
|
-12345.0f,
|
|
udouble,
|
|
23451.0f,
|
|
number,
|
|
nmb1,
|
|
unumber,
|
|
nmb2,
|
|
varchar,
|
|
"1",
|
|
char,
|
|
"2",
|
|
varbinary,
|
|
"3",
|
|
binary,
|
|
"4",
|
|
bool,
|
|
0,
|
|
null, );
|
|
// R(ObIntType, 1, 23, 1, 23, unknown, 1, int, 2, tinyint, 3, smallint, 4, mediumint, 5, int32, 6, uint64, 7,
|
|
// utinyint, 8, usmallint, 9, umediumint, 10, uint32, 11, float, -12345.0f, ufloat, 12345.0f, double, -12345.0f,
|
|
// udouble, 23451.0f, number, nmb1, unumber, nmb2, varchar, "1", char, "2", varbinary, "3", binary, "4", bool, 0,
|
|
// null, );
|
|
R(ObNullType,
|
|
varbinary,
|
|
CS_LEVEL_INVALID,
|
|
CS_TYPE_BINARY,
|
|
1,
|
|
23,
|
|
1,
|
|
23,
|
|
null,
|
|
,
|
|
int,
|
|
2,
|
|
tinyint,
|
|
3,
|
|
smallint,
|
|
4,
|
|
mediumint,
|
|
5,
|
|
int32,
|
|
6,
|
|
uint64,
|
|
7,
|
|
utinyint,
|
|
8,
|
|
usmallint,
|
|
9,
|
|
umediumint,
|
|
10,
|
|
uint32,
|
|
11,
|
|
float,
|
|
-12345.0f,
|
|
ufloat,
|
|
12345.0f,
|
|
double,
|
|
-12345.0f,
|
|
udouble,
|
|
23451.0f,
|
|
number,
|
|
nmb1,
|
|
unumber,
|
|
nmb2,
|
|
varchar,
|
|
"1",
|
|
char,
|
|
"2",
|
|
varbinary,
|
|
"3",
|
|
binary,
|
|
"4",
|
|
bool,
|
|
0,
|
|
null, );
|
|
}
|
|
|
|
TEST_F(ObExprInTest, test_bugfix_6134133)
|
|
{
|
|
ObMalloc buf;
|
|
R(ObIntType, varbinary, CS_LEVEL_INVALID, CS_TYPE_BINARY, 1, 4, 1, 4, int32, 3, int32, 3, varchar, "3", int32, 3);
|
|
}
|
|
|
|
TEST_F(ObExprInTest, tmp_ob_charset)
|
|
{
|
|
ObString y1 = "你说你爱了";
|
|
ObCollationType cs_type = CS_TYPE_UTF8MB4_GENERAL_CI;
|
|
int64_t block_len_limit = 6;
|
|
int64_t byte_num = 0;
|
|
int64_t char_num = 0;
|
|
int ret = ObCharset::fit_string(cs_type, y1.ptr(), y1.length(), block_len_limit, byte_num, char_num);
|
|
ASSERT_TRUE(OB_SUCC(ret));
|
|
ASSERT_TRUE(byte_num == 6);
|
|
ASSERT_TRUE(char_num == 2);
|
|
|
|
block_len_limit = 7;
|
|
byte_num = 0;
|
|
char_num = 0;
|
|
ret = ObCharset::fit_string(cs_type, y1.ptr(), y1.length(), block_len_limit, byte_num, char_num);
|
|
ASSERT_TRUE(OB_SUCC(ret));
|
|
ASSERT_TRUE(byte_num == 6);
|
|
ASSERT_TRUE(char_num == 2);
|
|
|
|
block_len_limit = 8;
|
|
byte_num = 0;
|
|
char_num = 0;
|
|
ret = ObCharset::fit_string(cs_type, y1.ptr(), y1.length(), block_len_limit, byte_num, char_num);
|
|
ASSERT_TRUE(OB_SUCC(ret));
|
|
ASSERT_TRUE(byte_num == 6);
|
|
ASSERT_TRUE(char_num == 2);
|
|
|
|
block_len_limit = 1;
|
|
byte_num = 0;
|
|
char_num = 0;
|
|
ret = ObCharset::fit_string(cs_type, y1.ptr(), y1.length(), block_len_limit, byte_num, char_num);
|
|
ASSERT_TRUE(OB_SUCC(ret));
|
|
ASSERT_TRUE(byte_num == 0);
|
|
ASSERT_TRUE(char_num == 0);
|
|
|
|
block_len_limit = 9;
|
|
byte_num = 0;
|
|
char_num = 0;
|
|
ret = ObCharset::fit_string(cs_type, y1.ptr(), y1.length(), block_len_limit, byte_num, char_num);
|
|
ASSERT_TRUE(OB_SUCC(ret));
|
|
ASSERT_TRUE(byte_num == 9);
|
|
ASSERT_TRUE(char_num == 3);
|
|
|
|
block_len_limit = 15;
|
|
byte_num = 0;
|
|
char_num = 0;
|
|
ret = ObCharset::fit_string(cs_type, y1.ptr(), y1.length(), block_len_limit, byte_num, char_num);
|
|
ASSERT_TRUE(OB_SUCC(ret));
|
|
ASSERT_TRUE(byte_num == 15);
|
|
ASSERT_TRUE(char_num == 5);
|
|
|
|
block_len_limit = 999;
|
|
byte_num = 0;
|
|
char_num = 0;
|
|
ret = ObCharset::fit_string(cs_type, y1.ptr(), y1.length(), block_len_limit, byte_num, char_num);
|
|
ASSERT_TRUE(OB_SUCC(ret));
|
|
ASSERT_TRUE(byte_num == 15);
|
|
ASSERT_TRUE(char_num == 5);
|
|
}
|
|
|
|
int main(int argc, char** argv)
|
|
{
|
|
oceanbase::common::ObLogger::get_logger().set_log_level("WARN");
|
|
::testing::InitGoogleTest(&argc, argv);
|
|
return RUN_ALL_TESTS();
|
|
}
|