[CP] checkAndInsert/auto_increment/aggregation and fix local index bug
This commit is contained in:
@ -2,6 +2,7 @@
|
||||
storage_unittest(test_hfilter_parser table/test_hfilter_parser.cpp)
|
||||
storage_unittest(test_query_response_time mysql/test_query_response_time.cpp)
|
||||
storage_unittest(test_create_executor table/test_create_executor.cpp)
|
||||
storage_unittest(test_table_aggregation table/test_table_aggregation.cpp)
|
||||
storage_unittest(test_table_sess_pool table/test_table_sess_pool.cpp)
|
||||
storage_unittest(test_ingress_bw_alloc_manager net/test_ingress_bw_alloc_manager.cpp)
|
||||
ob_unittest(test_uniq_task_queue)
|
||||
|
@ -109,20 +109,6 @@ void create_table_schema(ObTableSchema *table_schema, ObColumnSchemaV2 *columns)
|
||||
ASSERT_EQ(1, table_schema->get_partition_key_column_num());
|
||||
}
|
||||
|
||||
ObTableApiSessNodeVal g_sess_node_val(1, NULL);
|
||||
void fake_ctx_init_common(ObTableCtx &fake_ctx, ObTableSchema *table_schema)
|
||||
{
|
||||
fake_ctx.table_schema_ = table_schema;
|
||||
fake_ctx.tenant_id_ = table_schema->get_tenant_id();
|
||||
fake_ctx.database_id_ = table_schema->get_database_id();
|
||||
fake_ctx.table_name_ = table_schema->get_table_name();
|
||||
fake_ctx.ref_table_id_ = table_schema->get_table_id();
|
||||
fake_ctx.index_tablet_id_ = table_schema->get_table_id();
|
||||
fake_ctx.sess_guard_.sess_node_val_ = &g_sess_node_val;
|
||||
g_sess_node_val.is_inited_ = true;
|
||||
g_sess_node_val.sess_info_.test_init(0, 0, 0, NULL);
|
||||
}
|
||||
|
||||
class TestCreateExecutor: public ::testing::Test
|
||||
{
|
||||
public:
|
||||
@ -130,6 +116,7 @@ public:
|
||||
virtual ~TestCreateExecutor() {}
|
||||
virtual void SetUp();
|
||||
virtual void TearDown();
|
||||
void fake_ctx_init_common(ObTableCtx &fake_ctx, ObTableSchema *table_schema);
|
||||
public:
|
||||
ObArenaAllocator allocator_;
|
||||
MockSchemaService schema_service_;
|
||||
@ -152,6 +139,7 @@ void TestCreateExecutor::SetUp()
|
||||
schema_service_.init();
|
||||
create_table_schema(&table_schema_, columns_);
|
||||
schema_service_.add_table_schema(table_schema_, 1);
|
||||
schema_service_.get_schema_guard(schema_guard_, 1);
|
||||
// init MTL
|
||||
ObTenantBase tbase(1);
|
||||
static ObDataAccessService instance;
|
||||
@ -164,6 +152,22 @@ void TestCreateExecutor::TearDown()
|
||||
{
|
||||
}
|
||||
|
||||
ObTableApiSessNodeVal g_sess_node_val(1, NULL);
|
||||
void TestCreateExecutor::fake_ctx_init_common(ObTableCtx &fake_ctx, ObTableSchema *table_schema)
|
||||
{
|
||||
fake_ctx.table_schema_ = table_schema;
|
||||
fake_ctx.tenant_id_ = table_schema->get_tenant_id();
|
||||
fake_ctx.database_id_ = table_schema->get_database_id();
|
||||
fake_ctx.table_name_ = table_schema->get_table_name();
|
||||
fake_ctx.ref_table_id_ = table_schema->get_table_id();
|
||||
fake_ctx.index_table_id_ = fake_ctx.ref_table_id_;
|
||||
fake_ctx.index_tablet_id_ = table_schema->get_table_id();
|
||||
fake_ctx.sess_guard_.sess_node_val_ = &g_sess_node_val;
|
||||
g_sess_node_val.is_inited_ = true;
|
||||
g_sess_node_val.sess_info_.test_init(0, 0, 0, NULL);
|
||||
g_sess_node_val.sess_info_.load_all_sys_vars(schema_guard_);
|
||||
}
|
||||
|
||||
TEST_F(TestCreateExecutor, scan)
|
||||
{
|
||||
ObTableCtx fake_ctx(allocator_);
|
||||
|
530
unittest/observer/table/test_table_aggregation.cpp
Normal file
530
unittest/observer/table/test_table_aggregation.cpp
Normal file
@ -0,0 +1,530 @@
|
||||
#include <gtest/gtest.h>
|
||||
#define private public // 获取private成员
|
||||
#define protected public // 获取protect成员
|
||||
#include "common/row/ob_row.h"
|
||||
#include "observer/table/ob_table_aggregation.h"
|
||||
|
||||
using namespace oceanbase::common;
|
||||
using namespace oceanbase::table;
|
||||
using namespace oceanbase::sql;
|
||||
using namespace oceanbase::share;
|
||||
using namespace oceanbase::share::schema;
|
||||
using namespace oceanbase::observer;
|
||||
|
||||
class TestTableAggregation: public ::testing::Test
|
||||
{
|
||||
public:
|
||||
TestTableAggregation() {}
|
||||
virtual void SetUp() {}
|
||||
virtual void TearDown() {}
|
||||
private:
|
||||
// disallow copy
|
||||
DISALLOW_COPY_AND_ASSIGN(TestTableAggregation);
|
||||
};
|
||||
|
||||
TEST_F(TestTableAggregation, agg_min_int)
|
||||
{
|
||||
ObTableAggregation min;
|
||||
min.type_ = ObTableAggregationType::MIN;
|
||||
min.column_ = ObString("c1");
|
||||
|
||||
ObTableQuery query;
|
||||
ASSERT_EQ(OB_SUCCESS, query.aggregations_.push_back(min));
|
||||
ASSERT_EQ(OB_SUCCESS, query.select_columns_.push_back("c1"));
|
||||
|
||||
const uint64_t PROJECT_IDX = 0;
|
||||
ObSEArray<uint64_t, 4> projs;
|
||||
ASSERT_EQ(OB_SUCCESS, projs.push_back(PROJECT_IDX));
|
||||
|
||||
ObTableAggCalculator agg(query);
|
||||
agg.allocator_.set_tenant_id(OB_SERVER_TENANT_ID);
|
||||
agg.set_projs(projs);
|
||||
ASSERT_EQ(OB_SUCCESS, agg.init());
|
||||
|
||||
oceanbase::common::ObNewRow row;
|
||||
const int COL_NUM = 3;
|
||||
ObObj objs[COL_NUM];
|
||||
row.cells_ = objs;
|
||||
row.count_ = COL_NUM;
|
||||
for (int i = 0; i< COL_NUM; ++i) {
|
||||
row.cells_[i].set_int(1);
|
||||
}
|
||||
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
ASSERT_EQ(1, agg.results_.at(PROJECT_IDX).get_int());
|
||||
|
||||
for (int i = 0; i< COL_NUM; ++i) {
|
||||
row.cells_[i].set_int(0);
|
||||
}
|
||||
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
ASSERT_EQ(0, agg.results_.at(PROJECT_IDX).get_int());
|
||||
}
|
||||
|
||||
TEST_F(TestTableAggregation, agg_min_double)
|
||||
{
|
||||
ObTableAggregation min;
|
||||
min.type_ = ObTableAggregationType::MIN;
|
||||
min.column_ = ObString("c1");
|
||||
|
||||
ObTableQuery query;
|
||||
ASSERT_EQ(OB_SUCCESS, query.aggregations_.push_back(min));
|
||||
ASSERT_EQ(OB_SUCCESS, query.select_columns_.push_back("c1"));
|
||||
|
||||
const uint64_t PROJECT_IDX = 0;
|
||||
ObSEArray<uint64_t, 4> projs;
|
||||
ASSERT_EQ(OB_SUCCESS, projs.push_back(PROJECT_IDX));
|
||||
|
||||
ObTableAggCalculator agg(query);
|
||||
agg.allocator_.set_tenant_id(OB_SERVER_TENANT_ID);
|
||||
agg.set_projs(projs);
|
||||
ASSERT_EQ(OB_SUCCESS, agg.init());
|
||||
|
||||
oceanbase::common::ObNewRow row;
|
||||
const int COL_NUM = 3;
|
||||
ObObj objs[COL_NUM];
|
||||
row.cells_ = objs;
|
||||
row.count_ = COL_NUM;
|
||||
for (int i = 0; i< COL_NUM; ++i) {
|
||||
row.cells_[i].set_double(1.11);
|
||||
}
|
||||
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
ASSERT_EQ(1.11, agg.results_.at(PROJECT_IDX).get_double());
|
||||
|
||||
for (int i = 0; i< COL_NUM; ++i) {
|
||||
row.cells_[i].set_double(1.10009);
|
||||
}
|
||||
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
ASSERT_EQ(1.10009, agg.results_.at(PROJECT_IDX).get_double());
|
||||
}
|
||||
|
||||
TEST_F(TestTableAggregation, agg_min_varchar)
|
||||
{
|
||||
ObTableAggregation min;
|
||||
min.type_ = ObTableAggregationType::MIN;
|
||||
min.column_ = ObString("c1");
|
||||
|
||||
ObTableQuery query;
|
||||
ASSERT_EQ(OB_SUCCESS, query.aggregations_.push_back(min));
|
||||
ASSERT_EQ(OB_SUCCESS, query.select_columns_.push_back("c1"));
|
||||
|
||||
const uint64_t PROJECT_IDX = 0;
|
||||
ObSEArray<uint64_t, 4> projs;
|
||||
ASSERT_EQ(OB_SUCCESS, projs.push_back(PROJECT_IDX));
|
||||
|
||||
ObTableAggCalculator agg(query);
|
||||
agg.allocator_.set_tenant_id(OB_SERVER_TENANT_ID);
|
||||
agg.set_projs(projs);
|
||||
ASSERT_EQ(OB_SUCCESS, agg.init());
|
||||
|
||||
oceanbase::common::ObNewRow row;
|
||||
const int COL_NUM = 3;
|
||||
ObObj objs[COL_NUM];
|
||||
row.cells_ = objs;
|
||||
row.count_ = COL_NUM;
|
||||
char val1[] = "abcde";
|
||||
for (int i = 0; i< COL_NUM; ++i) {
|
||||
row.cells_[i].set_collation_type(CS_TYPE_UTF8MB4_GENERAL_CI);
|
||||
row.cells_[i].set_varchar(val1);
|
||||
}
|
||||
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
ASSERT_EQ(0, memcmp(val1, agg.results_.at(PROJECT_IDX).get_varchar().ptr(), strlen(val1)));
|
||||
|
||||
char val2[] = "abcd";
|
||||
for (int i = 0; i< COL_NUM; ++i) {
|
||||
row.cells_[i].set_collation_type(CS_TYPE_UTF8MB4_GENERAL_CI);
|
||||
row.cells_[i].set_varchar(val2);
|
||||
}
|
||||
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
ASSERT_EQ(0, memcmp(val2, agg.results_.at(PROJECT_IDX).get_varchar().ptr(), strlen(val2)));
|
||||
|
||||
char val3[] = "abcdefg";
|
||||
for (int i = 0; i< COL_NUM; ++i) {
|
||||
row.cells_[i].set_collation_type(CS_TYPE_UTF8MB4_GENERAL_CI);
|
||||
row.cells_[i].set_varchar(val3);
|
||||
}
|
||||
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
ASSERT_EQ(0, memcmp(val2, agg.results_.at(PROJECT_IDX).get_varchar().ptr(), strlen(val2)));
|
||||
}
|
||||
|
||||
TEST_F(TestTableAggregation, agg_max_int)
|
||||
{
|
||||
ObTableAggregation min;
|
||||
min.type_ = ObTableAggregationType::MAX;
|
||||
min.column_ = ObString("c1");
|
||||
|
||||
ObTableQuery query;
|
||||
ASSERT_EQ(OB_SUCCESS, query.aggregations_.push_back(min));
|
||||
ASSERT_EQ(OB_SUCCESS, query.select_columns_.push_back("c1"));
|
||||
|
||||
const uint64_t PROJECT_IDX = 0;
|
||||
ObSEArray<uint64_t, 4> projs;
|
||||
ASSERT_EQ(OB_SUCCESS, projs.push_back(PROJECT_IDX));
|
||||
|
||||
ObTableAggCalculator agg(query);
|
||||
agg.allocator_.set_tenant_id(OB_SERVER_TENANT_ID);
|
||||
agg.set_projs(projs);
|
||||
ASSERT_EQ(OB_SUCCESS, agg.init());
|
||||
|
||||
oceanbase::common::ObNewRow row;
|
||||
const int COL_NUM = 3;
|
||||
ObObj objs[COL_NUM];
|
||||
row.cells_ = objs;
|
||||
row.count_ = COL_NUM;
|
||||
for (int i = 0; i< COL_NUM; ++i) {
|
||||
row.cells_[i].set_int(0);
|
||||
}
|
||||
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
ASSERT_EQ(0, agg.results_.at(PROJECT_IDX).get_int());
|
||||
|
||||
for (int i = 0; i< COL_NUM; ++i) {
|
||||
row.cells_[i].set_int(1);
|
||||
}
|
||||
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
ASSERT_EQ(1, agg.results_.at(PROJECT_IDX).get_int());
|
||||
}
|
||||
|
||||
TEST_F(TestTableAggregation, agg_max_double)
|
||||
{
|
||||
ObTableAggregation min;
|
||||
min.type_ = ObTableAggregationType::MAX;
|
||||
min.column_ = ObString("c1");
|
||||
|
||||
ObTableQuery query;
|
||||
ASSERT_EQ(OB_SUCCESS, query.aggregations_.push_back(min));
|
||||
ASSERT_EQ(OB_SUCCESS, query.select_columns_.push_back("c1"));
|
||||
|
||||
const uint64_t PROJECT_IDX = 0;
|
||||
ObSEArray<uint64_t, 4> projs;
|
||||
ASSERT_EQ(OB_SUCCESS, projs.push_back(PROJECT_IDX));
|
||||
|
||||
ObTableAggCalculator agg(query);
|
||||
agg.allocator_.set_tenant_id(OB_SERVER_TENANT_ID);
|
||||
agg.set_projs(projs);
|
||||
ASSERT_EQ(OB_SUCCESS, agg.init());
|
||||
|
||||
oceanbase::common::ObNewRow row;
|
||||
const int COL_NUM = 3;
|
||||
ObObj objs[COL_NUM];
|
||||
row.cells_ = objs;
|
||||
row.count_ = COL_NUM;
|
||||
for (int i = 0; i< COL_NUM; ++i) {
|
||||
row.cells_[i].set_double(0.001);
|
||||
}
|
||||
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
ASSERT_EQ(0.001, agg.results_.at(PROJECT_IDX).get_double());
|
||||
|
||||
for (int i = 0; i< COL_NUM; ++i) {
|
||||
row.cells_[i].set_double(0.01);
|
||||
}
|
||||
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
ASSERT_EQ(0.01, agg.results_.at(PROJECT_IDX).get_double());
|
||||
}
|
||||
|
||||
TEST_F(TestTableAggregation, agg_max_varchar)
|
||||
{
|
||||
ObTableAggregation min;
|
||||
min.type_ = ObTableAggregationType::MAX;
|
||||
min.column_ = ObString("c1");
|
||||
|
||||
ObTableQuery query;
|
||||
ASSERT_EQ(OB_SUCCESS, query.aggregations_.push_back(min));
|
||||
ASSERT_EQ(OB_SUCCESS, query.select_columns_.push_back("c1"));
|
||||
|
||||
const uint64_t PROJECT_IDX = 0;
|
||||
ObSEArray<uint64_t, 4> projs;
|
||||
ASSERT_EQ(OB_SUCCESS, projs.push_back(PROJECT_IDX));
|
||||
|
||||
ObTableAggCalculator agg(query);
|
||||
agg.allocator_.set_tenant_id(OB_SERVER_TENANT_ID);
|
||||
agg.set_projs(projs);
|
||||
ASSERT_EQ(OB_SUCCESS, agg.init());
|
||||
|
||||
oceanbase::common::ObNewRow row;
|
||||
const int COL_NUM = 3;
|
||||
ObObj objs[COL_NUM];
|
||||
row.cells_ = objs;
|
||||
row.count_ = COL_NUM;
|
||||
char val1[] = "abcde";
|
||||
for (int i = 0; i< COL_NUM; ++i) {
|
||||
row.cells_[i].set_collation_type(CS_TYPE_UTF8MB4_GENERAL_CI);
|
||||
row.cells_[i].set_varchar(val1);
|
||||
}
|
||||
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
ASSERT_EQ(0, memcmp(val1, agg.results_.at(PROJECT_IDX).get_varchar().ptr(), strlen(val1)));
|
||||
|
||||
char val2[] = "abcd";
|
||||
for (int i = 0; i< COL_NUM; ++i) {
|
||||
row.cells_[i].set_collation_type(CS_TYPE_UTF8MB4_GENERAL_CI);
|
||||
row.cells_[i].set_varchar(val2);
|
||||
}
|
||||
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
ASSERT_EQ(0, memcmp(val1, agg.results_.at(PROJECT_IDX).get_varchar().ptr(), strlen(val1)));
|
||||
|
||||
char val3[] = "abcdefg";
|
||||
for (int i = 0; i< COL_NUM; ++i) {
|
||||
row.cells_[i].set_collation_type(CS_TYPE_UTF8MB4_GENERAL_CI);
|
||||
row.cells_[i].set_varchar(val3);
|
||||
}
|
||||
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
ASSERT_EQ(0, memcmp(val3, agg.results_.at(PROJECT_IDX).get_varchar().ptr(), strlen(val3)));
|
||||
}
|
||||
|
||||
TEST_F(TestTableAggregation, agg_count_column)
|
||||
{
|
||||
ObTableAggregation min;
|
||||
min.type_ = ObTableAggregationType::COUNT;
|
||||
min.column_ = ObString("c1");
|
||||
|
||||
ObTableQuery query;
|
||||
ASSERT_EQ(OB_SUCCESS, query.aggregations_.push_back(min));
|
||||
ASSERT_EQ(OB_SUCCESS, query.select_columns_.push_back("c1"));
|
||||
|
||||
const uint64_t PROJECT_IDX = 0;
|
||||
ObSEArray<uint64_t, 4> projs;
|
||||
ASSERT_EQ(OB_SUCCESS, projs.push_back(PROJECT_IDX));
|
||||
|
||||
ObTableAggCalculator agg(query);
|
||||
agg.allocator_.set_tenant_id(OB_SERVER_TENANT_ID);
|
||||
agg.set_projs(projs);
|
||||
ASSERT_EQ(OB_SUCCESS, agg.init());
|
||||
|
||||
oceanbase::common::ObNewRow row;
|
||||
const int COL_NUM = 3;
|
||||
ObObj objs[COL_NUM];
|
||||
row.cells_ = objs;
|
||||
row.count_ = COL_NUM;
|
||||
for (int i = 0; i< COL_NUM; ++i) {
|
||||
row.cells_[i].set_int(0);
|
||||
}
|
||||
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
ASSERT_EQ(1, agg.results_.at(PROJECT_IDX).get_int());
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
ASSERT_EQ(2, agg.results_.at(PROJECT_IDX).get_int());
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
ASSERT_EQ(4, agg.results_.at(PROJECT_IDX).get_int());
|
||||
}
|
||||
|
||||
TEST_F(TestTableAggregation, agg_count_all)
|
||||
{
|
||||
ObTableAggregation min;
|
||||
min.type_ = ObTableAggregationType::COUNT;
|
||||
min.column_ = ObString("*");
|
||||
|
||||
ObTableQuery query;
|
||||
ASSERT_EQ(OB_SUCCESS, query.aggregations_.push_back(min));
|
||||
ASSERT_EQ(OB_SUCCESS, query.select_columns_.push_back("c1"));
|
||||
|
||||
const uint64_t PROJECT_IDX = 0;
|
||||
ObSEArray<uint64_t, 4> projs;
|
||||
ASSERT_EQ(OB_SUCCESS, projs.push_back(PROJECT_IDX));
|
||||
|
||||
ObTableAggCalculator agg(query);
|
||||
agg.allocator_.set_tenant_id(OB_SERVER_TENANT_ID);
|
||||
agg.set_projs(projs);
|
||||
ASSERT_EQ(OB_SUCCESS, agg.init());
|
||||
|
||||
oceanbase::common::ObNewRow row;
|
||||
const int COL_NUM = 3;
|
||||
ObObj objs[COL_NUM];
|
||||
row.cells_ = objs;
|
||||
row.count_ = COL_NUM;
|
||||
for (int i = 0; i< COL_NUM; ++i) {
|
||||
row.cells_[i].set_int(0);
|
||||
}
|
||||
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
ASSERT_EQ(1, agg.results_.at(PROJECT_IDX).get_int());
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
ASSERT_EQ(2, agg.results_.at(PROJECT_IDX).get_int());
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
ASSERT_EQ(4, agg.results_.at(PROJECT_IDX).get_int());
|
||||
}
|
||||
|
||||
TEST_F(TestTableAggregation, agg_sum_int)
|
||||
{
|
||||
ObTableAggregation min;
|
||||
min.type_ = ObTableAggregationType::SUM;
|
||||
min.column_ = ObString("c1");
|
||||
|
||||
ObTableQuery query;
|
||||
ASSERT_EQ(OB_SUCCESS, query.aggregations_.push_back(min));
|
||||
ASSERT_EQ(OB_SUCCESS, query.select_columns_.push_back("c1"));
|
||||
|
||||
const uint64_t PROJECT_IDX = 0;
|
||||
ObSEArray<uint64_t, 4> projs;
|
||||
ASSERT_EQ(OB_SUCCESS, projs.push_back(PROJECT_IDX));
|
||||
|
||||
ObTableAggCalculator agg(query);
|
||||
agg.allocator_.set_tenant_id(OB_SERVER_TENANT_ID);
|
||||
agg.set_projs(projs);
|
||||
ASSERT_EQ(OB_SUCCESS, agg.init());
|
||||
|
||||
oceanbase::common::ObNewRow row;
|
||||
const int COL_NUM = 3;
|
||||
ObObj objs[COL_NUM];
|
||||
row.cells_ = objs;
|
||||
row.count_ = COL_NUM;
|
||||
for (int i = 0; i< COL_NUM; ++i) {
|
||||
row.cells_[i].set_int(1);
|
||||
}
|
||||
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
agg.final_aggregate();
|
||||
ASSERT_EQ(1, agg.results_.at(PROJECT_IDX).get_int());
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
agg.final_aggregate();
|
||||
ASSERT_EQ(2, agg.results_.at(PROJECT_IDX).get_int());
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
agg.final_aggregate();
|
||||
ASSERT_EQ(4, agg.results_.at(PROJECT_IDX).get_int());
|
||||
}
|
||||
|
||||
TEST_F(TestTableAggregation, agg_sum_double)
|
||||
{
|
||||
ObTableAggregation min;
|
||||
min.type_ = ObTableAggregationType::SUM;
|
||||
min.column_ = ObString("c1");
|
||||
|
||||
ObTableQuery query;
|
||||
ASSERT_EQ(OB_SUCCESS, query.aggregations_.push_back(min));
|
||||
ASSERT_EQ(OB_SUCCESS, query.select_columns_.push_back("c1"));
|
||||
|
||||
const uint64_t PROJECT_IDX = 0;
|
||||
ObSEArray<uint64_t, 4> projs;
|
||||
ASSERT_EQ(OB_SUCCESS, projs.push_back(PROJECT_IDX));
|
||||
|
||||
ObTableAggCalculator agg(query);
|
||||
agg.allocator_.set_tenant_id(OB_SERVER_TENANT_ID);
|
||||
agg.set_projs(projs);
|
||||
ASSERT_EQ(OB_SUCCESS, agg.init());
|
||||
|
||||
oceanbase::common::ObNewRow row;
|
||||
const int COL_NUM = 3;
|
||||
ObObj objs[COL_NUM];
|
||||
row.cells_ = objs;
|
||||
row.count_ = COL_NUM;
|
||||
for (int i = 0; i< COL_NUM; ++i) {
|
||||
row.cells_[i].set_double(0.1);
|
||||
}
|
||||
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
agg.final_aggregate();
|
||||
ASSERT_EQ(0.1, agg.results_.at(PROJECT_IDX).get_double());
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
agg.final_aggregate();
|
||||
ASSERT_EQ(0.2, agg.results_.at(PROJECT_IDX).get_double());
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
agg.final_aggregate();
|
||||
ASSERT_EQ(0.4, agg.results_.at(PROJECT_IDX).get_double());
|
||||
}
|
||||
|
||||
TEST_F(TestTableAggregation, agg_avg_int)
|
||||
{
|
||||
ObTableAggregation min;
|
||||
min.type_ = ObTableAggregationType::AVG;
|
||||
min.column_ = ObString("c1");
|
||||
|
||||
ObTableQuery query;
|
||||
ASSERT_EQ(OB_SUCCESS, query.aggregations_.push_back(min));
|
||||
ASSERT_EQ(OB_SUCCESS, query.select_columns_.push_back("c1"));
|
||||
|
||||
const uint64_t PROJECT_IDX = 0;
|
||||
ObSEArray<uint64_t, 4> projs;
|
||||
ASSERT_EQ(OB_SUCCESS, projs.push_back(PROJECT_IDX));
|
||||
|
||||
ObTableAggCalculator agg(query);
|
||||
agg.allocator_.set_tenant_id(OB_SERVER_TENANT_ID);
|
||||
agg.set_projs(projs);
|
||||
ASSERT_EQ(OB_SUCCESS, agg.init());
|
||||
|
||||
oceanbase::common::ObNewRow row;
|
||||
const int COL_NUM = 3;
|
||||
ObObj objs[COL_NUM];
|
||||
row.cells_ = objs;
|
||||
row.count_ = COL_NUM;
|
||||
for (int i = 0; i< COL_NUM; ++i) {
|
||||
row.cells_[i].set_int(1);
|
||||
}
|
||||
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
agg.final_aggregate();
|
||||
ASSERT_EQ(1, agg.results_.at(PROJECT_IDX).get_double());
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
agg.final_aggregate();
|
||||
ASSERT_EQ(1, agg.results_.at(PROJECT_IDX).get_double());
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
agg.final_aggregate();
|
||||
ASSERT_EQ(1, agg.results_.at(PROJECT_IDX).get_double());
|
||||
}
|
||||
|
||||
TEST_F(TestTableAggregation, agg_avg_double)
|
||||
{
|
||||
ObTableAggregation min;
|
||||
min.type_ = ObTableAggregationType::AVG;
|
||||
min.column_ = ObString("c1");
|
||||
|
||||
ObTableQuery query;
|
||||
ASSERT_EQ(OB_SUCCESS, query.aggregations_.push_back(min));
|
||||
ASSERT_EQ(OB_SUCCESS, query.select_columns_.push_back("c1"));
|
||||
|
||||
const uint64_t PROJECT_IDX = 0;
|
||||
ObSEArray<uint64_t, 4> projs;
|
||||
ASSERT_EQ(OB_SUCCESS, projs.push_back(PROJECT_IDX));
|
||||
|
||||
ObTableAggCalculator agg(query);
|
||||
agg.allocator_.set_tenant_id(OB_SERVER_TENANT_ID);
|
||||
agg.set_projs(projs);
|
||||
ASSERT_EQ(OB_SUCCESS, agg.init());
|
||||
|
||||
oceanbase::common::ObNewRow row;
|
||||
const int COL_NUM = 3;
|
||||
ObObj objs[COL_NUM];
|
||||
row.cells_ = objs;
|
||||
row.count_ = COL_NUM;
|
||||
for (int i = 0; i< COL_NUM; ++i) {
|
||||
row.cells_[i].set_double(0.1);
|
||||
}
|
||||
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
agg.final_aggregate();
|
||||
ASSERT_EQ(0.1, agg.results_.at(PROJECT_IDX).get_double());
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
agg.final_aggregate();
|
||||
ASSERT_EQ(0.1, agg.results_.at(PROJECT_IDX).get_double());
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
for (int i = 0; i< COL_NUM; ++i) {
|
||||
row.cells_[i].set_double(0.4);
|
||||
}
|
||||
ASSERT_EQ(OB_SUCCESS, agg.aggregate(row));
|
||||
agg.final_aggregate();
|
||||
ASSERT_EQ(0.16, agg.results_.at(PROJECT_IDX).get_double());
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
OB_LOGGER.set_log_level("INFO");
|
||||
OB_LOGGER.set_file_name("test_table_aggregation.log", true);
|
||||
::testing::InitGoogleTest(&argc,argv);
|
||||
return RUN_ALL_TESTS();
|
||||
}
|
@ -248,6 +248,9 @@ TEST_F(TestTableSessPool, retire_session_then_get_session)
|
||||
|
||||
// 连接隔了很长时间,突然又访问db
|
||||
ASSERT_EQ(OB_HASH_NOT_EXIST, pool->get_sess_node(user_id, node));
|
||||
|
||||
// 新的访问会创建新的池子
|
||||
ASSERT_EQ(OB_SUCCESS, mgr.get_or_create_sess_pool(credential, pool_guard));
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
|
Reference in New Issue
Block a user