
Co-authored-by: wangt1xiuyi <13547954130@163.com> Co-authored-by: yangqise7en <877793735@qq.com> Co-authored-by: Zach41 <zach_41@163.com>
154 lines
5.2 KiB
C++
154 lines
5.2 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>
|
|
|
|
#define private public
|
|
#define protected public
|
|
|
|
#include "share/schema/ob_table_schema.h"
|
|
#include "share/schema/ob_column_schema.h"
|
|
#include "src/share/schema/ob_table_param.h"
|
|
|
|
namespace oceanbase
|
|
{
|
|
using namespace common;
|
|
using namespace storage;
|
|
|
|
namespace unittest
|
|
{
|
|
class TestSchemaPrepare
|
|
{
|
|
public:
|
|
static void prepare_schema(
|
|
share::schema::ObTableSchema &table_schema,
|
|
const int64_t rowkey_column_cnt = TEST_ROWKEY_COLUMN_CNT,
|
|
const int64_t column_cnt = TEST_COLUMN_CNT,
|
|
const int64_t micro_block_size = DEFAULT_MICRO_BLOCK_SIZE);
|
|
|
|
static void add_all_and_each_column_group(
|
|
ObIAllocator &allocator,
|
|
share::schema::ObTableSchema &table_schema);
|
|
static const int64_t TENANT_ID = 1;
|
|
static const int64_t TABLE_ID = 7777;
|
|
static const int64_t TEST_ROWKEY_COLUMN_CNT = 3;
|
|
static const int64_t TEST_COLUMN_CNT = 6;
|
|
static const int64_t DEFAULT_MICRO_BLOCK_SIZE = 16 * 1024;
|
|
|
|
};
|
|
|
|
void TestSchemaPrepare::prepare_schema(
|
|
share::schema::ObTableSchema &table_schema,
|
|
const int64_t rowkey_column_cnt,
|
|
const int64_t column_cnt,
|
|
const int64_t micro_block_size)
|
|
{
|
|
int ret = OB_SUCCESS;
|
|
const uint64_t tenant_id = TENANT_ID;
|
|
const uint64_t table_id = TABLE_ID;
|
|
ASSERT_TRUE(column_cnt >= rowkey_column_cnt);
|
|
share::schema::ObColumnSchemaV2 column;
|
|
|
|
//generate data table schema
|
|
table_schema.reset();
|
|
ret = table_schema.set_table_name("test_merge_multi_version");
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
table_schema.set_tenant_id(tenant_id);
|
|
table_schema.set_tablegroup_id(1);
|
|
table_schema.set_database_id(1);
|
|
table_schema.set_table_id(table_id);
|
|
table_schema.set_rowkey_column_num(rowkey_column_cnt);
|
|
table_schema.set_max_used_column_id(common::OB_APP_MIN_COLUMN_ID + column_cnt);
|
|
table_schema.set_block_size(micro_block_size);
|
|
table_schema.set_compress_func_name("none");
|
|
table_schema.set_row_store_type(FLAT_ROW_STORE);
|
|
table_schema.set_pctfree(10);
|
|
//init column
|
|
char name[OB_MAX_FILE_NAME_LENGTH];
|
|
memset(name, 0, sizeof(name));
|
|
for(int64_t i = 0; i < column_cnt; ++i){
|
|
ObObjType obj_type = ObIntType;
|
|
const int64_t column_id = common::OB_APP_MIN_COLUMN_ID + i;
|
|
|
|
if (i == 1) {
|
|
obj_type = ObVarcharType;
|
|
}
|
|
column.reset();
|
|
column.set_table_id(table_id);
|
|
column.set_column_id(column_id);
|
|
sprintf(name, "test%020ld", i);
|
|
ASSERT_EQ(OB_SUCCESS, column.set_column_name(name));
|
|
column.set_data_type(obj_type);
|
|
column.set_collation_type(CS_TYPE_UTF8MB4_GENERAL_CI);
|
|
column.set_data_length(10);
|
|
if (i < rowkey_column_cnt) {
|
|
column.set_rowkey_position(i + 1);
|
|
} else {
|
|
column.set_rowkey_position(0);
|
|
}
|
|
|
|
share::schema::ObSkipIndexColumnAttr skip_idx_attr;
|
|
if (!is_lob_storage(obj_type)) {
|
|
skip_idx_attr.set_min_max();
|
|
column.set_skip_index_attr(skip_idx_attr.get_packed_value());
|
|
}
|
|
COMMON_LOG(INFO, "add column", K(i), K(column));
|
|
ASSERT_EQ(OB_SUCCESS, table_schema.add_column(column));
|
|
}
|
|
COMMON_LOG(INFO, "dump stable schema", LITERAL_K(TEST_ROWKEY_COLUMN_CNT), K(table_schema));
|
|
}
|
|
|
|
void TestSchemaPrepare::add_all_and_each_column_group(
|
|
ObIAllocator &allocator,
|
|
share::schema::ObTableSchema &table_schema)
|
|
{
|
|
ObArray<share::schema::ObColDesc> col_ids;
|
|
int64_t store_column_count;
|
|
ASSERT_EQ(OB_SUCCESS, table_schema.get_store_column_ids(col_ids));
|
|
ASSERT_EQ(OB_SUCCESS, table_schema.get_store_column_count(store_column_count));
|
|
ASSERT_EQ(store_column_count, col_ids.count());
|
|
ObRowStoreType row_store_type = FLAT_ROW_STORE;
|
|
|
|
//add all_cg_schemas
|
|
share::schema::ObColumnGroupSchema cg_1;
|
|
cg_1.column_group_type_ = share::schema::ObColumnGroupType::ALL_COLUMN_GROUP;
|
|
cg_1.column_group_id_ = store_column_count;
|
|
cg_1.column_id_cnt_ = store_column_count;
|
|
uint64_t *cg_1_ids = static_cast<uint64_t *>(allocator.alloc(store_column_count * sizeof(uint64_t)));
|
|
for(int64_t i = 0; i < store_column_count; i++) {
|
|
cg_1_ids[i] = col_ids.at(i).col_id_;
|
|
}
|
|
cg_1.column_id_arr_ = cg_1_ids;
|
|
cg_1.column_group_name_ = "test_all";
|
|
cg_1.row_store_type_ = row_store_type;
|
|
ASSERT_EQ(OB_SUCCESS, table_schema.add_column_group(cg_1));
|
|
|
|
//add single_cg_schema
|
|
for(int64_t i = 0; i < store_column_count; i++) {
|
|
share::schema::ObColumnGroupSchema cg_2;
|
|
cg_2.column_group_type_ = share::schema::ObColumnGroupType::SINGLE_COLUMN_GROUP;
|
|
cg_2.column_group_id_ = i;
|
|
char c = i + '0';
|
|
cg_2.column_group_name_ = &c;
|
|
cg_2.column_id_cnt_ = 1;
|
|
cg_2.column_id_arr_capacity_ = 1;
|
|
uint64_t column_ids[1] = {col_ids.at(i).col_id_};
|
|
cg_2.column_id_arr_ = column_ids;
|
|
cg_2.row_store_type_ = row_store_type;
|
|
ASSERT_EQ(OB_SUCCESS, table_schema.add_column_group(cg_2));
|
|
}
|
|
|
|
allocator.free(cg_1_ids);
|
|
}
|
|
|
|
}
|
|
} |