462 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			462 lines
		
	
	
		
			19 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 <gmock/gmock.h>
 | |
| #define private public
 | |
| #include "../share/schema/ob_schema_test_utils.cpp"
 | |
| #include "observer/virtual_table/ob_show_database_status.h"
 | |
| #include "observer/virtual_table/ob_information_partitions_table.h"
 | |
| #include "observer/virtual_table/ob_information_table_constraints_table.h"
 | |
| #include "observer/virtual_table/ob_tenant_all_tables.h"
 | |
| #include "share/schema/ob_schema_getter_guard.h"
 | |
| #include "../share/schema/mock_schema_service.h"
 | |
| #include "../share/partition_table/fake_part_property_getter.h"
 | |
| #include "share/partition_table/ob_partition_table_operator.h"
 | |
| #include "sql/session/ob_sql_session_info.h"
 | |
| #include "observer/ob_server.h"
 | |
| 
 | |
| namespace oceanbase {
 | |
| using namespace share::schema;
 | |
| using ::testing::_;
 | |
| using ::testing::Invoke;
 | |
| namespace observer {
 | |
| class TestInformationSchemaService : public ::testing::Test {
 | |
|   typedef int (*schema_create_func)(share::schema::ObTableSchema& table_schema);
 | |
| 
 | |
| public:
 | |
|   TestInformationSchemaService();
 | |
|   virtual ~TestInformationSchemaService()
 | |
|   {}
 | |
|   virtual void SetUp();
 | |
|   virtual void TearDown();
 | |
|   void add_sys_tenant_info();
 | |
|   void add_output_column_ids(
 | |
|       common::ObVirtualTableScannerIterator& table_iter, schema_create_func create_func, ObTableSchema& table);
 | |
|   void fill_table_schema(
 | |
|       const uint64_t table_id, const uint64_t database_id, const ObString& table_name, ObTableSchema& table_schema);
 | |
| 
 | |
|   void fill_session();
 | |
| 
 | |
| protected:
 | |
|   // ObSchemaManager schema_manager_;
 | |
|   ObArenaAllocator allocator_;
 | |
|   sql::ObSQLSessionInfo session_info_;
 | |
|   ObVTableScanParam scan_param_;
 | |
| };
 | |
| 
 | |
| TestInformationSchemaService::TestInformationSchemaService() : allocator_(ObModIds::TEST), session_info_()
 | |
| {}
 | |
| 
 | |
| void TestInformationSchemaService::SetUp()
 | |
| {
 | |
|   uint32_t session_id = 1;
 | |
|   uint32_t version = 0;
 | |
|   uint64_t proxy_sessid = 10;
 | |
|   OBSERVER.init_schema();
 | |
|   OBSERVER.init_tz_info_mgr();
 | |
|   ASSERT_EQ(OB_SUCCESS, session_info_.test_init(version, session_id, proxy_sessid, &allocator_));
 | |
|   session_info_.set_user(OB_SYS_USER_NAME, OB_SYS_HOST_NAME, OB_SYS_USER_ID);
 | |
|   session_info_.set_user_priv_set(OB_PRIV_ALL);
 | |
|   session_info_.set_db_priv_set(OB_PRIV_ALL);
 | |
|   ASSERT_EQ(OB_SUCCESS, session_info_.init_tenant(OB_SYS_TENANT_NAME, OB_SYS_TENANT_ID));
 | |
|   session_info_.init_tenant(OB_SYS_TENANT_NAME, OB_SYS_TENANT_ID);
 | |
| }
 | |
| 
 | |
| void TestInformationSchemaService::TearDown()
 | |
| {}
 | |
| 
 | |
| void TestInformationSchemaService::add_sys_tenant_info()
 | |
| {
 | |
|   ObTenantSchema tenant_info;
 | |
|   ObArray<ObString> zone_list;
 | |
|   ASSERT_EQ(OB_SUCCESS, zone_list.push_back("zone1"));
 | |
|   FILL_TENANT_INFO(tenant_info, OB_SYS_TENANT_ID, "sys tenant", 1, zone_list, "zone", false, "this is sys tenant");
 | |
|   // ASSERT_EQ(OB_SUCCESS, schema_manager_.add_tenant_info(tenant_info));
 | |
| }
 | |
| 
 | |
| void TestInformationSchemaService::add_output_column_ids(
 | |
|     common::ObVirtualTableScannerIterator& table_iter, schema_create_func create_func, ObTableSchema& table)
 | |
| {
 | |
|   ObArray<uint64_t> column_ids;
 | |
|   (*create_func)(table);
 | |
|   for (int64_t i = 0; i < table.get_column_count(); ++i) {
 | |
|     const ObColumnSchemaV2* column = table.get_column_schema_by_idx(i);
 | |
|     ASSERT_TRUE(NULL != column);
 | |
|     ASSERT_EQ(OB_SUCCESS, column_ids.push_back(column->get_column_id()));
 | |
|   }
 | |
|   ASSERT_EQ(OB_SUCCESS, table_iter.set_output_column_ids(column_ids));
 | |
| }
 | |
| 
 | |
| void TestInformationSchemaService::fill_table_schema(
 | |
|     const uint64_t table_id, const uint64_t db_id, const ObString& table_name, ObTableSchema& table_schema)
 | |
| {
 | |
|   int ret = OB_SUCCESS;
 | |
|   share::ObInnerTableSchema::all_server_schema(table_schema);
 | |
|   table_schema.set_tenant_id(extract_tenant_id(table_id));
 | |
|   table_schema.set_table_id(table_id);
 | |
|   table_schema.set_database_id(db_id);
 | |
|   table_schema.set_table_name(table_name);
 | |
|   for (ObTableSchema::const_column_iterator iter = table_schema.column_begin();
 | |
|        OB_SUCCESS == ret && iter != table_schema.column_end();
 | |
|        ++iter) {
 | |
|     share::schema::ObColumnSchemaV2* column_schema = const_cast<share::schema::ObColumnSchemaV2*>(*iter);
 | |
|     column_schema->set_table_id(table_id);
 | |
|     column_schema->set_tenant_id(extract_tenant_id(table_id));
 | |
|   }
 | |
|   ASSERT_EQ(ret, OB_SUCCESS);
 | |
| }
 | |
| 
 | |
| class MockObSchemaGetterGuard : public ObSchemaGetterGuard {
 | |
| public:
 | |
|   int add_database_schema(ObDatabaseSchema* database_schema);
 | |
|   int add_table_schema(ObTableSchema* table_schema);
 | |
|   MOCK_METHOD2(get_database_schemas_in_tenant,
 | |
|       int(const uint64_t tenant_id, common::ObIArray<const ObDatabaseSchema*>& database_schemas));
 | |
|   MOCK_METHOD3(get_table_schemas_in_database,
 | |
|       int(const uint64_t tenant_id, const uint64_t database_id, ObIArray<const ObTableSchema*>& table_schemas));
 | |
|   int get_database_schemas_from_tenant(const uint64_t tenant_id, ObIArray<const ObDatabaseSchema*>& database_schemas);
 | |
|   int get_table_schemas_from_database(
 | |
|       const uint64_t tenant_id, const uint64_t database_id, ObIArray<const ObTableSchema*>& table_schemas);
 | |
| 
 | |
| private:
 | |
|   ObSArray<const ObDatabaseSchema*> database_schemas_;
 | |
|   ObSArray<const ObTableSchema*> table_schemas_;
 | |
| };
 | |
| 
 | |
| int MockObSchemaGetterGuard::add_database_schema(ObDatabaseSchema* database_schema)
 | |
| {
 | |
|   int ret = OB_SUCCESS;
 | |
|   if (OB_FAIL(database_schemas_.push_back(database_schema))) {}
 | |
|   return ret;
 | |
| }
 | |
| 
 | |
| int MockObSchemaGetterGuard::add_table_schema(ObTableSchema* table_schema)
 | |
| {
 | |
|   int ret = OB_SUCCESS;
 | |
|   if (OB_FAIL(table_schemas_.push_back(table_schema))) {}
 | |
|   return ret;
 | |
| }
 | |
| 
 | |
| int MockObSchemaGetterGuard::get_database_schemas_from_tenant(
 | |
|     const uint64_t tenant_id, ObIArray<const ObDatabaseSchema*>& database_schemas)
 | |
| {
 | |
|   int ret = OB_SUCCESS;
 | |
|   UNUSED(tenant_id);
 | |
|   for (int64_t i = 0; OB_SUCC(ret) && i < database_schemas_.count(); i++) {
 | |
|     if (OB_FAIL(database_schemas.push_back(database_schemas_.at(i)))) {
 | |
|       OB_LOG(WARN, "database_schemas fail");
 | |
|     }
 | |
|   }
 | |
|   return ret;
 | |
| }
 | |
| 
 | |
| int MockObSchemaGetterGuard::get_table_schemas_from_database(
 | |
|     const uint64_t tenant_id, const uint64_t database_id, ObIArray<const ObTableSchema*>& table_schemas)
 | |
| {
 | |
|   int ret = OB_SUCCESS;
 | |
|   UNUSED(tenant_id);
 | |
|   UNUSED(database_id);
 | |
|   for (int64_t i = 0; OB_SUCC(ret) && i < table_schemas_.count(); i++) {
 | |
|     if (OB_FAIL(table_schemas.push_back(table_schemas_.at(i)))) {
 | |
|       OB_LOG(WARN, "");
 | |
|     }
 | |
|   }
 | |
|   return ret;
 | |
| }
 | |
| TEST_F(TestInformationSchemaService, show_database_status)
 | |
| {
 | |
|   // schema_manager_.reset();
 | |
| 
 | |
|   uint64_t real_tenant_id = OB_SYS_TENANT_ID;
 | |
|   ObTenantSchema tenant_schema;
 | |
|   tenant_schema.set_tenant_id(real_tenant_id);
 | |
|   tenant_schema.set_tenant_name(OB_SYS_TENANT_NAME);
 | |
|   tenant_schema.set_locality("");
 | |
|   tenant_schema.add_zone("zone");
 | |
|   tenant_schema.set_schema_version(1);
 | |
|   ObSysVariableSchema sys_variable;
 | |
|   sys_variable.set_tenant_id(real_tenant_id);
 | |
|   sys_variable.set_name_case_mode(OB_ORIGIN_AND_INSENSITIVE);
 | |
|   sys_variable.set_schema_version(1);
 | |
|   MockSchemaService schema_service;
 | |
|   schema_service.init();
 | |
|   schema_service.add_tenant_schema(tenant_schema, tenant_schema.get_schema_version());
 | |
|   schema_service.add_sys_variable_schema(sys_variable, sys_variable.get_schema_version());
 | |
|   // add_sys_tenant_info();
 | |
|   // MockObSchemaGetterGuard schema_guard;
 | |
|   ObTableSchema table;
 | |
|   ObSchemaGetterGuard schema_guard;
 | |
|   schema_service.get_schema_guard(schema_guard, INT64_MAX);
 | |
|   // ON_CALL(schema_guard, get_database_schemas_in_tenant(_, _))
 | |
|   //  .WillByDefault(Invoke(&schema_guard, &MockObSchemaGetterGuard::get_database_schemas_from_tenant));
 | |
|   ObShowDatabaseStatus database_status_iter;
 | |
|   database_status_iter.set_scan_param(&scan_param_);
 | |
|   database_status_iter.set_schema_guard(&schema_guard);
 | |
|   database_status_iter.set_tenant_id(real_tenant_id);
 | |
|   database_status_iter.set_allocator(&allocator_);
 | |
|   add_output_column_ids(database_status_iter, share::ObInnerTableSchema::tenant_virtual_database_status_schema, table);
 | |
|   database_status_iter.set_table_schema(&table);
 | |
|   ObNewRow* row = NULL;
 | |
|   database_status_iter.set_reserved_column_cnt(4);
 | |
|   ASSERT_EQ(OB_SUCCESS, database_status_iter.open());
 | |
| 
 | |
|   ASSERT_EQ(OB_ITER_END, database_status_iter.get_next_row(row));
 | |
| 
 | |
|   ObDatabaseSchema database_schema;
 | |
|   uint64_t db_id = 50000;
 | |
|   FILL_DATABASE_SCHEMA(database_schema, real_tenant_id, db_id, "db1", "this is db1");
 | |
|   // ASSERT_EQ(OB_SUCCESS, schema_guard.add_database_schema(&database_schema));
 | |
|   schema_service.add_database_schema(database_schema, database_schema.get_schema_version());
 | |
| 
 | |
|   database_status_iter.reset();
 | |
|   table.reset();
 | |
|   database_status_iter.set_schema_guard(&schema_guard);
 | |
|   database_status_iter.set_tenant_id(real_tenant_id);
 | |
|   database_status_iter.set_allocator(&allocator_);
 | |
|   add_output_column_ids(database_status_iter, share::ObInnerTableSchema::tenant_virtual_database_status_schema, table);
 | |
|   database_status_iter.set_table_schema(&table);
 | |
|   database_status_iter.set_reserved_column_cnt(4);
 | |
|   ASSERT_EQ(OB_SUCCESS, database_status_iter.open());
 | |
| 
 | |
|   row = NULL;
 | |
|   ASSERT_EQ(OB_SUCCESS, database_status_iter.get_next_row(row));
 | |
|   ASSERT_TRUE(row != NULL);
 | |
| }
 | |
| 
 | |
| TEST_F(TestInformationSchemaService, partitions)
 | |
| {
 | |
|   // schema_manager_.reset();
 | |
|   uint64_t real_tenant_id = OB_SYS_TENANT_ID;
 | |
|   MockSchemaService schema_service;
 | |
|   schema_service.init();
 | |
|   ObTenantSchema tenant_schema;
 | |
|   tenant_schema.set_tenant_id(real_tenant_id);
 | |
|   tenant_schema.set_tenant_name(OB_SYS_TENANT_NAME);
 | |
|   tenant_schema.set_locality("");
 | |
|   tenant_schema.add_zone("zone");
 | |
|   tenant_schema.set_schema_version(1);
 | |
|   schema_service.add_tenant_schema(tenant_schema, tenant_schema.get_schema_version());
 | |
|   ObSysVariableSchema sys_variable;
 | |
|   sys_variable.set_tenant_id(real_tenant_id);
 | |
|   sys_variable.set_name_case_mode(OB_ORIGIN_AND_INSENSITIVE);
 | |
|   sys_variable.set_schema_version(1);
 | |
|   schema_service.add_sys_variable_schema(sys_variable, sys_variable.get_schema_version());
 | |
|   // add_sys_tenant_info();
 | |
|   // MockObSchemaGetterGuard schema_guard;
 | |
|   ObTableSchema table;
 | |
|   ObSchemaGetterGuard schema_guard;
 | |
|   schema_service.get_schema_guard(schema_guard, INT64_MAX);
 | |
|   // ON_CALL(schema_guard, get_database_schemas_in_tenant(_, _))
 | |
|   //  .WillByDefault(Invoke(&schema_guard, &MockObSchemaGetterGuard::get_database_schemas_from_tenant));
 | |
|   // ON_CALL(schema_guard, get_table_schemas_in_database(_,_, _))
 | |
|   //   .WillByDefault(Invoke(&schema_guard, &MockObSchemaGetterGuard::get_table_schemas_from_database));
 | |
|   ObInfoSchemaPartitionsTable partitions_iter;
 | |
|   partitions_iter.set_scan_param(&scan_param_);
 | |
|   partitions_iter.set_schema_guard(&schema_guard);
 | |
|   partitions_iter.set_tenant_id(real_tenant_id);
 | |
|   partitions_iter.set_allocator(&allocator_);
 | |
|   partitions_iter.set_session(&session_info_);
 | |
|   add_output_column_ids(partitions_iter, share::ObInnerTableSchema::partitions_schema, table);
 | |
|   partitions_iter.set_table_schema(&table);
 | |
|   share::FakePartPropertyGetter property_getter;
 | |
|   share::ObPartitionTableOperator partition_table_operator(property_getter);
 | |
| 
 | |
|   // no database
 | |
|   ObNewRow* row = NULL;
 | |
|   partitions_iter.set_reserved_column_cnt(25);
 | |
|   ASSERT_EQ(OB_SUCCESS, partitions_iter.open());
 | |
|   ASSERT_EQ(OB_ITER_END, partitions_iter.get_next_row(row));
 | |
| 
 | |
|   //
 | |
|   partitions_iter.reset();
 | |
|   ObDatabaseSchema database_schema_1;
 | |
|   ObTableSchema null_table_schema;
 | |
|   uint64_t db_id = 50000;
 | |
|   FILL_DATABASE_SCHEMA(database_schema_1, real_tenant_id, db_id, "db_1", "this is db1");
 | |
|   // ASSERT_EQ(OB_SUCCESS, schema_guard.add_database_schema(&database_schema_1));
 | |
|   schema_service.add_database_schema(database_schema_1, database_schema_1.get_schema_version());
 | |
|   // ASSERT_EQ(OB_SUCCESS, schema_manager_.add_new_database_schema(database_schema_1));
 | |
|   partitions_iter.set_schema_guard(&schema_guard);
 | |
|   partitions_iter.set_tenant_id(real_tenant_id);
 | |
|   partitions_iter.set_allocator(&allocator_);
 | |
|   partitions_iter.set_session(&session_info_);
 | |
|   partitions_iter.set_table_schema(&null_table_schema);
 | |
|   row = NULL;
 | |
|   partitions_iter.set_reserved_column_cnt(25);
 | |
|   ASSERT_EQ(OB_SUCCESS, partitions_iter.open());
 | |
|   ASSERT_EQ(OB_ITER_END, partitions_iter.get_next_row(row));
 | |
|   ASSERT_TRUE(row == NULL);
 | |
| 
 | |
|   //
 | |
|   partitions_iter.reset();
 | |
|   uint64_t table_id = 50000;
 | |
|   ObString table_name("table_1");
 | |
|   ObTableSchema table_schema_1;
 | |
|   fill_table_schema(
 | |
|       combine_id(real_tenant_id, table_id), combine_id(real_tenant_id, db_id), table_name, table_schema_1);
 | |
|   table_schema_1.set_part_level(PARTITION_LEVEL_ZERO);
 | |
|   // ASSERT_EQ(OB_SUCCESS, schema_guard.add_table_schema(&table_schema_1));
 | |
|   schema_service.add_table_schema(table_schema_1, table_schema_1.get_schema_version());
 | |
|   // ASSERT_EQ(OB_SUCCESS, schema_manager_.add_new_table_schema(table_schema_1));
 | |
| 
 | |
|   partitions_iter.set_schema_guard(&schema_guard);
 | |
|   partitions_iter.set_tenant_id(real_tenant_id);
 | |
|   partitions_iter.set_allocator(&allocator_);
 | |
|   partitions_iter.set_session(&session_info_);
 | |
|   partitions_iter.set_table_schema(&table_schema_1);
 | |
|   row = NULL;
 | |
|   partitions_iter.set_reserved_column_cnt(25);
 | |
|   ASSERT_EQ(OB_SUCCESS, partitions_iter.open());
 | |
|   ASSERT_EQ(OB_SUCCESS, partitions_iter.get_next_row(row));
 | |
|   ASSERT_TRUE(row != NULL);
 | |
| }
 | |
| 
 | |
| TEST_F(TestInformationSchemaService, table_constraints)
 | |
| {
 | |
|   // schema_manager_.reset();
 | |
|   ObArenaAllocator allocator(ObModIds::TEST);
 | |
|   uint64_t real_tenant_id = OB_SYS_TENANT_ID;
 | |
|   MockSchemaService schema_service;
 | |
|   schema_service.init();
 | |
|   ObTenantSchema tenant_schema;
 | |
|   tenant_schema.set_tenant_id(real_tenant_id);
 | |
|   tenant_schema.set_tenant_name(OB_SYS_TENANT_NAME);
 | |
|   tenant_schema.set_schema_version(1);
 | |
|   tenant_schema.set_locality("");
 | |
|   tenant_schema.add_zone("zone");
 | |
|   schema_service.add_tenant_schema(tenant_schema, tenant_schema.get_schema_version());
 | |
|   ObSysVariableSchema sys_variable;
 | |
|   sys_variable.set_tenant_id(real_tenant_id);
 | |
|   sys_variable.set_name_case_mode(OB_ORIGIN_AND_INSENSITIVE);
 | |
|   sys_variable.set_schema_version(1);
 | |
|   schema_service.add_sys_variable_schema(sys_variable, sys_variable.get_schema_version());
 | |
|   // add_sys_tenant_info();
 | |
|   // MockObSchemaGetterGuard schema_guard;
 | |
|   ObTableSchema table;
 | |
|   ObSchemaGetterGuard schema_guard;
 | |
|   schema_service.get_schema_guard(schema_guard, INT64_MAX);
 | |
|   // ON_CALL(schema_guard, get_database_schemas_in_tenant(_, _))
 | |
|   //  .WillByDefault(Invoke(&schema_guard, &MockObSchemaGetterGuard::get_database_schemas_from_tenant));
 | |
|   // ON_CALL(schema_guard, get_table_schemas_in_database(_,_, _))
 | |
|   //   .WillByDefault(Invoke(&schema_guard, &MockObSchemaGetterGuard::get_table_schemas_from_database));
 | |
| 
 | |
|   ObInfoSchemaTableConstraintsTable table_constrints_iter;
 | |
|   table_constrints_iter.set_scan_param(&scan_param_);
 | |
|   table_constrints_iter.set_schema_guard(&schema_guard);
 | |
|   table_constrints_iter.set_tenant_id(real_tenant_id);
 | |
|   table_constrints_iter.set_allocator(&allocator);
 | |
|   add_output_column_ids(table_constrints_iter, share::ObInnerTableSchema::table_constraints_schema, table);
 | |
|   table_constrints_iter.set_table_schema(&table);
 | |
|   // no database
 | |
|   ObNewRow* row = NULL;
 | |
|   table_constrints_iter.set_reserved_column_cnt(6);
 | |
|   ASSERT_EQ(OB_SUCCESS, table_constrints_iter.open());
 | |
|   ASSERT_EQ(OB_ITER_END, table_constrints_iter.get_next_row(row));
 | |
| 
 | |
|   //
 | |
|   table_constrints_iter.reset();
 | |
|   ObDatabaseSchema database_schema_1;
 | |
|   ObTableSchema null_table_schema;
 | |
|   uint64_t db_id = 50000;
 | |
|   FILL_DATABASE_SCHEMA(database_schema_1, real_tenant_id, db_id, "db_1", "this is db1");
 | |
|   schema_service.add_database_schema(database_schema_1, database_schema_1.get_schema_version());
 | |
|   // ASSERT_EQ(OB_SUCCESS, schema_guard.add_database_schema(&database_schema_1));
 | |
|   // ASSERT_EQ(OB_SUCCESS, schema_manager_.add_new_database_schema(database_schema_1));
 | |
|   table_constrints_iter.set_schema_guard(&schema_guard);
 | |
|   table_constrints_iter.set_tenant_id(real_tenant_id);
 | |
|   table_constrints_iter.set_allocator(&allocator);
 | |
|   table_constrints_iter.set_table_schema(&null_table_schema);
 | |
|   row = NULL;
 | |
|   table_constrints_iter.set_reserved_column_cnt(6);
 | |
|   ASSERT_EQ(OB_SUCCESS, table_constrints_iter.open());
 | |
|   ASSERT_EQ(OB_ITER_END, table_constrints_iter.get_next_row(row));
 | |
|   ASSERT_TRUE(row == NULL);
 | |
| 
 | |
|   //
 | |
|   table_constrints_iter.reset();
 | |
|   uint64_t table_id = 50000;
 | |
|   ObString table_name("table_1");
 | |
|   // table has at least one constraint primary key
 | |
|   ObTableSchema table_schema_1;
 | |
|   fill_table_schema(
 | |
|       combine_id(real_tenant_id, table_id), combine_id(real_tenant_id, db_id), table_name, table_schema_1);
 | |
|   // ASSERT_EQ(OB_SUCCESS, schema_guard.add_table_schema(&table_schema_1));
 | |
|   schema_service.add_table_schema(table_schema_1, table_schema_1.get_schema_version());
 | |
|   // ASSERT_EQ(OB_SUCCESS, schema_manager_.add_new_table_schema(table_schema_1));
 | |
|   table_constrints_iter.set_schema_guard(&schema_guard);
 | |
|   table_constrints_iter.set_tenant_id(real_tenant_id);
 | |
|   table_constrints_iter.set_allocator(&allocator_);
 | |
|   table_constrints_iter.set_table_schema(&table_schema_1);
 | |
|   // add
 | |
|   row = NULL;
 | |
|   table_constrints_iter.set_reserved_column_cnt(6);
 | |
|   ASSERT_EQ(OB_SUCCESS, table_constrints_iter.open());
 | |
|   ASSERT_EQ(OB_SUCCESS, table_constrints_iter.get_next_row(row));
 | |
|   ASSERT_TRUE(row != NULL);
 | |
| }
 | |
| 
 | |
| TEST_F(TestInformationSchemaService, tenant_all_tables)
 | |
| {
 | |
|   // schema_manager_.reset();
 | |
|   //  uint64_t real_tenant_id = OB_SYS_TENANT_ID;
 | |
|   //  add_sys_tenant_info();
 | |
|   //
 | |
|   //  ObTenantAllTables tenant_all_table_iter;
 | |
|   //  tenant_all_table_iter.set_schema_guard(&schema_manager_);
 | |
|   //  tenant_all_table_iter.set_tenant_id(real_tenant_id);
 | |
|   //  tenant_all_table_iter.set_allocator(&allocator_);
 | |
|   //  tenant_all_table_iter.set_session(&session_info_);
 | |
|   //  add_output_column_ids(tenant_all_table_iter, share::ObInnerTableSchema::tenant_virtual_all_table_schema);
 | |
|   //
 | |
|   //  //no database
 | |
|   //  ObNewRow *row = NULL;
 | |
|   //  ASSERT_EQ(OB_ITER_END, tenant_all_table_iter.get_next_row(row));
 | |
|   //
 | |
|   //  ObDatabaseSchema database_schema_1;
 | |
|   //  uint64_t db_id = 50000;
 | |
|   //  FILL_DATABASE_SCHEMA(database_schema_1, real_tenant_id, db_id, "db_1", "this is db1");
 | |
|   //  ASSERT_EQ(OB_SUCCESS, schema_manager_.add_new_database_schema(database_schema_1));
 | |
|   //
 | |
|   //  //
 | |
|   //  row = NULL;
 | |
|   //  ASSERT_EQ(OB_ITER_END, tenant_all_table_iter.get_next_row(row));
 | |
|   //  ASSERT_TRUE(row == NULL);
 | |
|   //
 | |
|   //  uint64_t table_id = 50000;
 | |
|   //  ObString table_name("table_1");
 | |
|   //  //table has at least one constraint primary key
 | |
|   //  ObTableSchema table_schema_1;
 | |
|   //  fill_table_schema(combine_id(real_tenant_id, table_id),
 | |
|   //                    combine_id(real_tenant_id, db_id),
 | |
|   //                    table_name,
 | |
|   //                    table_schema_1);
 | |
|   //  ASSERT_EQ(OB_SUCCESS, schema_manager_.add_new_table_schema(table_schema_1));
 | |
|   //
 | |
|   //  //add
 | |
|   //  row = NULL;
 | |
|   //  ASSERT_EQ(OB_SUCCESS, tenant_all_table_iter.get_next_row(row));
 | |
|   //  ASSERT_TRUE(row != NULL);
 | |
| }
 | |
| 
 | |
| }  // namespace observer
 | |
| }  // namespace oceanbase
 | |
| 
 | |
| int main(int argc, char** argv)
 | |
| {
 | |
|   oceanbase::common::ObLogger::get_logger().set_log_level("INFO");
 | |
|   OB_LOGGER.set_log_level("INFO");
 | |
|   OB_LOGGER.set_file_name("test_observer.log", true);
 | |
|   ::testing::InitGoogleTest(&argc, argv);
 | |
|   return RUN_ALL_TESTS();
 | |
| }
 | 
