/** * 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 #define private public #include "sql/plan_cache/ob_sql_parameterization.h" #include "sql/plan_cache/ob_id_manager_allocator.h" #include "lib/allocator/page_arena.h" using namespace oceanbase; using namespace common; using namespace sql; using namespace share::schema; #define OK(value) ASSERT_EQ(OB_SUCCESS, (value)) class TestSqlParameterization: public ::testing::Test { public: TestSqlParameterization(); virtual ~TestSqlParameterization(); virtual void SetUp(); virtual void TearDown(); private: // disallow copy TestSqlParameterization(const TestSqlParameterization &other); TestSqlParameterization& operator=(const TestSqlParameterization &other); protected: // data members }; TestSqlParameterization::TestSqlParameterization() { } TestSqlParameterization::~TestSqlParameterization() { } void TestSqlParameterization::SetUp() { } void TestSqlParameterization::TearDown() { } TEST_F(TestSqlParameterization, parameterize_sql) { int ret = OB_SUCCESS; ObArenaAllocator allocator(0); ObString stmt = ObString::make_string("select * from t1 where c1 = 3 group by 2 order by 1"); ObSEArray not_params; ObFastParserResult fp_result; if (OB_FAIL(ObSqlParameterization::fast_parser(allocator, SMO_DEFAULT, ObCharset::get_system_collation(), stmt, false, fp_result))) { SQL_PC_LOG(WARN, "fail to fast_parser", K(stmt)); } ASSERT_EQ(OB_SUCCESS, ret); ASSERT_EQ(fp_result.raw_params_.count(), 3); ASSERT_EQ(3, fp_result.raw_params_.at(0)->node_->value_); ASSERT_EQ(2, fp_result.raw_params_.at(1)->node_->value_); ASSERT_EQ(1, fp_result.raw_params_.at(2)->node_->value_); /* printf("no_param_sql: %s\n", fp_result.key_.ptr());*/ //for (int64_t i = 0; i < fp_result.raw_params_.count(); i++) { //ParseNode *param = fp_result.raw_params_.at(i)->node_; //printf(" param_%ld: type:%d; value:%ld, str_value:%s, raw_text:%s, pos_:%ld\n", //i, param->type_, //param->value_, //param->str_value_, //param->raw_text_, //param->pos_); /*}*/ } int main(int argc, char **argv) { ::testing::InitGoogleTest(&argc,argv); return RUN_ALL_TESTS(); }