Files
oceanbase/unittest/storage/test_schema_prepare.h
chaser-ch 566e920620 Merge branch 'column_store'
Co-authored-by: wangt1xiuyi <13547954130@163.com>
Co-authored-by: yangqise7en <877793735@qq.com>
Co-authored-by: Zach41 <zach_41@163.com>
2023-10-31 15:39:22 +00:00

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);
}
}
}