oceanbase/unittest/storage/blocksstable/row_generate_test.cpp
wangzelin.wzl 93a1074b0c patch 4.0
2022-10-24 17:57:12 +08:00

157 lines
4.6 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 "ob_row_generate.h"
namespace oceanbase
{
using namespace storage;
using namespace common;
using namespace share::schema;
namespace blocksstable
{
class TestRowGenerate : public ::testing::Test
{
public:
TestRowGenerate() {}
virtual ~TestRowGenerate() {}
virtual void SetUp();
virtual void TearDown();
};
void TestRowGenerate::SetUp()
{
}
void TestRowGenerate::TearDown()
{
}
TEST_F(TestRowGenerate, generate_and_check_row)
{
int64_t table_id = 3001;
const int64_t rowkey_column_num = 2;
static const int64_t column_num = common::ObUnknownType;
ObTableSchema table_schema;
ObColumnSchemaV2 column;
table_schema.reset();
ASSERT_EQ(OB_SUCCESS, table_schema.set_table_name("test_row_generate"));
table_schema.set_tenant_id(1);
table_schema.set_tablegroup_id(1);
table_schema.set_database_id(1);
table_schema.set_table_id(table_id);
char name[OB_MAX_FILE_NAME_LENGTH];
for(int64_t i = 0; i < column_num; ++i){
ObObjType obj_type = static_cast<ObObjType>(i);
column.reset();
column.set_table_id(table_id);
column.set_column_id(i + OB_APP_MIN_COLUMN_ID);
sprintf(name, "test%ld", 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);
if(obj_type == common::ObIntType || obj_type == common::ObNumberType){
column.set_rowkey_position(1);
} else {
column.set_rowkey_position(0);
}
ASSERT_EQ(OB_SUCCESS, table_schema.add_column(column));
}
table_schema.set_rowkey_column_num(rowkey_column_num);
table_schema.set_max_used_column_id(column_num);
oceanbase::blocksstable::ObRowGenerate row_gene;
oceanbase::common::ObObj objs[table_schema.get_column_count()];
oceanbase::storage::ObStoreRow row;
row.row_val_.cells_ = objs;
row.row_val_.count_ = table_schema.get_column_count();
ASSERT_EQ(OB_SUCCESS, row_gene.init(table_schema));
for(int64_t i = 0; i < 100; ++i){
bool exist = false;
ASSERT_EQ(OB_SUCCESS, row_gene.get_next_row(row));
ASSERT_EQ(OB_SUCCESS, row_gene.check_one_row(row, exist));
ASSERT_TRUE(exist);
}
}
TEST_F(TestRowGenerate, generate_and_check_row_own_allocator)
{
int64_t table_id = 3001;
const int64_t rowkey_column_num = 2;
static const int64_t column_num = common::ObUnknownType;
ObTableSchema table_schema;
ObColumnSchemaV2 column;
table_schema.reset();
ASSERT_EQ(OB_SUCCESS, table_schema.set_table_name("test_row_generate"));
table_schema.set_tenant_id(1);
table_schema.set_tablegroup_id(1);
table_schema.set_database_id(1);
table_schema.set_table_id(table_id);
char name[OB_MAX_FILE_NAME_LENGTH];
for(int64_t i = 0; i < column_num; ++i){
ObObjType obj_type = static_cast<ObObjType>(i);
column.reset();
column.set_table_id(table_id);
column.set_column_id(i + OB_APP_MIN_COLUMN_ID);
sprintf(name, "test%ld", 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);
if(obj_type == common::ObIntType || obj_type == common::ObNumberType){
column.set_rowkey_position(1);
} else {
column.set_rowkey_position(0);
}
ASSERT_EQ(OB_SUCCESS, table_schema.add_column(column));
}
table_schema.set_rowkey_column_num(rowkey_column_num);
table_schema.set_max_used_column_id(column_num);
oceanbase::blocksstable::ObRowGenerate row_gene;
oceanbase::common::ObObj objs[table_schema.get_column_count()];
oceanbase::storage::ObStoreRow row;
row.row_val_.cells_ = objs;
row.row_val_.count_ = table_schema.get_column_count();
ObArenaAllocator allocator(ObModIds::TEST);
ASSERT_EQ(OB_SUCCESS, row_gene.init(table_schema, &allocator));
for(int64_t i = 0; i < 100; ++i){
bool exist = false;
ASSERT_EQ(OB_SUCCESS, row_gene.get_next_row(row));
ASSERT_EQ(OB_SUCCESS, row_gene.check_one_row(row, exist));
ASSERT_TRUE(exist);
}
}
}//blocksstable
}//oceanbase
int main(int argc, char* argv[])
{
OB_LOGGER.set_log_level("WARN");
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}