This is an automated email from the ASF dual-hosted git repository. lichaoyong pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
The following commit(s) were added to refs/heads/master by this push: new 12ebd5d Remove some outdate test (#3672) 12ebd5d is described below commit 12ebd5d82b5d229217b878c66703b98334fc4ab3 Author: Binglin Chang <decst...@gmail.com> AuthorDate: Mon May 25 09:23:56 2020 +0800 Remove some outdate test (#3672) --- be/test/olap/mock_command_executor.h | 111 -- be/test/olap/olap_reader_test.cpp | 1579 -------------------------- be/test/olap/vectorized_olap_reader_test.cpp | 894 --------------- 3 files changed, 2584 deletions(-) diff --git a/be/test/olap/mock_command_executor.h b/be/test/olap/mock_command_executor.h deleted file mode 100644 index 2632b5e..0000000 --- a/be/test/olap/mock_command_executor.h +++ /dev/null @@ -1,111 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -#ifndef DORIS_BE_SRC_OLAP_MOCK_MOCK_COMMAND_EXECUTOR_H -#define DORIS_BE_SRC_OLAP_MOCK_MOCK_COMMAND_EXECUTOR_H - -#include "gmock/gmock.h" -#include "olap/storage_engine.h" - -namespace doris { - -class MockCommandExecutor : public StorageEngine { -public: - MOCK_METHOD1(create_tablet, OLAPStatus(const TCreateTabletReq& request)); - MOCK_METHOD2(get_tablet, TabletSharedPtr(TTabletId tablet_id, TSchemaHash schema_hash)); - MOCK_METHOD1(drop_tablet, OLAPStatus(const TDropTabletReq& request)); - MOCK_METHOD2( - push, - OLAPStatus(const TPushReq& request, std::vector<TTabletInfo>* tablet_info_vec)); - MOCK_METHOD1(report_tablet_info, OLAPStatus(TTabletInfo* tablet_info)); - MOCK_METHOD1( - report_all_tablets_info, - OLAPStatus(std::map<TTabletId, TTablet>* tablets_info)); - MOCK_METHOD1(create_rollup_tablet, OLAPStatus(const TAlterTabletReq& request)); - MOCK_METHOD1(schema_change, OLAPStatus(const TAlterTabletReq& request)); - MOCK_METHOD2( - show_alter_tablet_status, - AlterTableStatus(TTabletId tablet_id, TSchemaHash schema_hash)); - MOCK_METHOD3( - make_snapshot, - OLAPStatus( - TTabletId tablet_id, - TSchemaHash schema_hash, - std::string* snapshot_path)); - MOCK_METHOD2( - make_snapshot, - OLAPStatus( - const TSnapshotRequest& request, std::string* snapshot_path)); - MOCK_METHOD2(obtain_shard_path, OLAPStatus( - TStorageMedium::type storage_medium, std::string* root_path)); - MOCK_METHOD2( - load_header, - OLAPStatus(const std::string& root_path, const TCloneReq& request)); - MOCK_METHOD3( - load_header, - OLAPStatus(const std::string& root_path, - TTabletId tablet_id, - TSchemaHash schema_hash)); - MOCK_METHOD1(release_snapshot, OLAPStatus(const std::string& snapshot_path)); - MOCK_METHOD2( - delete_data, - OLAPStatus(const TPushReq& request, std::vector<TTabletInfo>* tablet_info_vec)); - MOCK_METHOD1(cancel_delete, OLAPStatus(const TCancelDeleteDataReq& request)); - MOCK_METHOD3( - base_compaction, - OLAPStatus(TTabletId tablet_id, TSchemaHash schema_hash, TVersion version)); - MOCK_METHOD4( - update_header, - OLAPStatus( - TTabletId tablet_id, - TSchemaHash schema_hash, - const std::string& key, - const std::string& value)); - MOCK_METHOD5( - compute_checksum, - OLAPStatus( - TTabletId tablet_id, - TSchemaHash schema_hash, - TVersion version, - uint32_t* checksum)); - MOCK_METHOD1(reload_root_path, OLAPStatus(const std::string& root_paths)); - MOCK_METHOD2(check_tablet_exist, bool(TTabletId tablet_id, TSchemaHash schema_hash)); - MOCK_METHOD1( - get_all_data_dir_info, - OLAPStatus(std::vector<DataDirInfo>* data_dir_infos)); - MOCK_METHOD2( - publish_version, - OLAPStatus(const TPublishVersionRequest& request, - std::vector<TTabletId>* error_tablet_ids)); - MOCK_METHOD3( - get_info_before_incremental_clone, - std::string( - TabletSharedPtr tablet, - int64_t committed_version, - std::vector<Version>* missing_versions)); - MOCK_METHOD4( - finish_clone, - OLAPStatus( - TabletSharedPtr tablet, - const std::string& clone_dir, - int64_t committed_version, - bool is_incremental_clone)); -}; - -} // namespace doris - -#endif // DORIS_BE_SRC_OLAP_MOCK_MOCK_COMMAND_EXECUTOR_H diff --git a/be/test/olap/olap_reader_test.cpp b/be/test/olap/olap_reader_test.cpp deleted file mode 100644 index be793f4..0000000 --- a/be/test/olap/olap_reader_test.cpp +++ /dev/null @@ -1,1579 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -#include <gtest/gtest.h> - -#include "exec/olap_scan_node.h" -#include "gen_cpp/PlanNodes_types.h" -#include "olap/command_executor.h" -#include "olap/field.h" -#include "olap/olap_reader.h" -#include "olap/olap_main.cpp" -#include "runtime/descriptors.h" -#include "runtime/primitive_type.h" -#include "runtime/exec_env.h" -#include "runtime/runtime_state.h" -#include "runtime/row_batch.h" -#include "runtime/string_value.h" -#include "runtime/tuple_row.h" -#include "util/runtime_profile.h" -#include "util/debug_util.h" -#include "util/logging.h" -#include "util/file_utils.h" - -using namespace testing; -using namespace doris; -using namespace std; - -namespace doris { - -void set_up() { - config::storage_root_path = "./test_run/data_test"; - system("rm -rf ./test_run && mkdir -p ./test_run"); - FileUtils::create_dir(config::storage_root_path); - touch_all_singleton(); -} - -void tear_down() { - system("rm -rf ./test_run"); - FileUtils::remove_all(string(getenv("DORIS_HOME")) + UNUSED_PREFIX); -} - -void set_default_create_tablet_request(TCreateTabletReq* request) { - request->tablet_id = 10003; - request->__set_version(1); - request->__set_version_hash(0); - request->tablet_schema.schema_hash = 1508825676; - request->tablet_schema.short_key_column_count = 2; - request->tablet_schema.storage_type = TStorageType::COLUMN; - - TColumn k1; - k1.column_name = "k1"; - k1.column_type.type = TPrimitiveType::TINYINT; - request->tablet_schema.columns.push_back(k1); - - TColumn k2; - k2.column_name = "k2"; - k2.column_type.type = TPrimitiveType::INT; - request->tablet_schema.columns.push_back(k2); - - TColumn k3; - k3.column_name = "k3"; - k3.column_type.type = TPrimitiveType::VARCHAR; - k3.column_type.__set_len(64); - request->tablet_schema.columns.push_back(k3); - - TColumn k4; - k4.column_name = "k4"; - k4.column_type.type = TPrimitiveType::DATE; - request->tablet_schema.columns.push_back(k4); - - TColumn k5; - k5.column_name = "k5"; - k5.column_type.type = TPrimitiveType::DATETIME; - request->tablet_schema.columns.push_back(k5); - - TColumn k6; - k6.column_name = "k6"; - k6.column_type.type = TPrimitiveType::DECIMAL; - k6.column_type.__set_precision(6); - k6.column_type.__set_scale(3); - request->tablet_schema.columns.push_back(k6); - - TColumn k7; - k7.column_name = "k7"; - k7.column_type.type = TPrimitiveType::SMALLINT; - k7.default_value = "0"; - request->tablet_schema.columns.push_back(k7); - - TColumn k8; - k8.column_name = "k8"; - k8.column_type.type = TPrimitiveType::CHAR; - k8.column_type.__set_len(16); - k8.default_value = "char"; - request->tablet_schema.columns.push_back(k8); - - TColumn v; - v.column_name = "v"; - v.column_type.type = TPrimitiveType::BIGINT; - v.__set_aggregation_type(TAggregationType::SUM); - request->tablet_schema.columns.push_back(v); -} - -// SQL for generate data(./be/test/olap/test_data/all_types_1000): -// -// create tablet delete_test_row (k1 tinyint, k2 int, k3 varchar(64), -// k4 date, k5 datetime, k6 decimal(6,3), k7 smallint default "0", -// k8 char(16) default "char", v bigint sum) engine=olap distributed by -// random buckets 1 properties ("storage_type" = "row"); -// -// load label label1 (data infile -// ("hdfs://host:port/dir") -// into tablet `delete_test_row` (k1,k2,v,k3,k4,k5,k6)); -void set_default_push_request(TPushReq* request) { - request->tablet_id = 10003; - request->schema_hash = 1508825676; - request->__set_version(2); - request->__set_version_hash(0); - request->timeout = 86400; - request->push_type = TPushType::LOAD; - request->__set_http_file_path("./be/test/olap/test_data/all_types_1000"); -} - -class TestOLAPReaderRow : public testing::Test { -public: - TestOLAPReaderRow() : _runtime_stat("test") { - _profile = _obj_pool.add(new RuntimeProfile(&_obj_pool, "OlapScanner")); - OLAPReader::init_profile(_profile); - } - - void SetUp() { - init_olap(); - } - - void TearDown() { - // Remove all dir. - StorageEngine::get_instance()->drop_tablet( - _create_tablet.tablet_id, _create_tablet.tablet_schema.schema_hash); - while (0 == access(_tablet_path.c_str(), F_OK)) { - sleep(1); - } - ASSERT_TRUE(, FileUtils::remove_all(config::storage_root_path).ok()); - } - - void init_olap() { - // Create local data dir for StorageEngine. - config::storage_root_path = "./test_run/row_tablet"; - FileUtils::remove_all(config::storage_root_path); - ASSERT_TRUE(FileUtils::create_dir(config::storage_root_path).ok()); - - // 1. Prepare for query split key. - // create base tablet - OLAPStatus res = OLAP_SUCCESS; - set_default_create_tablet_request(&_create_tablet); - CommandExecutor command_executor = CommandExecutor(); - res = command_executor.create_tablet(_create_tablet); - ASSERT_EQ(OLAP_SUCCESS, res); - TabletSharedPtr tablet = command_executor.get_tablet( - _create_tablet.tablet_id, _create_tablet.tablet_schema.schema_hash); - ASSERT_TRUE(tablet.get() != NULL); - _tablet_path = tablet->tablet_path(); - - // push data - set_default_push_request(&_push_req); - std::vector<TTabletInfo> tablets_info; - res = command_executor.push(_push_req, &tablets_info); - ASSERT_EQ(OLAP_SUCCESS, res); - ASSERT_EQ(1, tablets_info.size()); - } - - void init_scan_node() { - TUniqueId fragment_id; - TQueryOptions query_options; - query_options.disable_codegen = true; - //ExecEnv* exec_env = new ExecEnv(); - //_runtime_stat.init(fragment_id, query_options, "test", exec_env); - - TDescriptorTable t_desc_tablet; - - // tablet descriptors - TTableDescriptor t_tablet_desc; - - t_tablet_desc.id = 0; - t_tablet_desc.tableType = TTableType::OLAP_TABLE; - t_tablet_desc.numCols = 0; - t_tablet_desc.numClusteringCols = 0; - t_tablet_desc.olapTable.tableName = ""; - t_tablet_desc.tableName = ""; - t_tablet_desc.dbName = ""; - t_tablet_desc.__isset.mysqlTable = true; - t_desc_tablet.tableDescriptors.push_back(t_tablet_desc); - t_desc_tablet.__isset.tableDescriptors = true; - // TSlotDescriptor - int offset = 1; - int i = 0; - // k1 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::TINYINT)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k1"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(int8_t); - } - ++i; - // k2 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::INT)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k2"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(int32_t); - } - ++i; - // k3 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::VARCHAR)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k3"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(StringValue); - } - ++i; - // k4 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::DATE)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k4"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(DateTimeValue); - } - ++i; - // k5 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::DATETIME)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k5"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(DateTimeValue); - } - ++i; - // k6 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::DECIMAL)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k6"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(decimal12_t); - } - ++i; - // k7 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::SMALLINT)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k7"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(int16_t); - } - ++i; - // k8 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::CHAR)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k8"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(StringValue); - } - ++i; - // v - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::BIGINT)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("v"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(int64_t); - } - - t_desc_tablet.__isset.slotDescriptors = true; - // TTupleDescriptor - TTupleDescriptor t_tuple_desc; - t_tuple_desc.id = 0; - t_tuple_desc.byteSize = offset; - t_tuple_desc.numNullBytes = 1; - t_tuple_desc.tableId = 0; - t_tuple_desc.__isset.tableId = true; - t_desc_tablet.tupleDescriptors.push_back(t_tuple_desc); - - DescriptorTbl::create(&_obj_pool, t_desc_tablet, &_desc_tbl); - } - - void init_scan_node_k1_v() { - TUniqueId fragment_id; - TQueryOptions query_options; - query_options.disable_codegen = true; - //ExecEnv* exec_env = new ExecEnv(); - //_runtime_stat.init(fragment_id, query_options, "test", exec_env); - - TDescriptorTable t_desc_tablet; - - // tablet descriptors - TTableDescriptor t_tablet_desc; - - t_tablet_desc.id = 0; - t_tablet_desc.tableType = TTableType::OLAP_TABLE; - t_tablet_desc.numCols = 0; - t_tablet_desc.numClusteringCols = 0; - t_tablet_desc.olapTable.tableName = ""; - t_tablet_desc.tableName = ""; - t_tablet_desc.dbName = ""; - t_tablet_desc.__isset.mysqlTable = true; - t_desc_tablet.tableDescriptors.push_back(t_tablet_desc); - t_desc_tablet.__isset.tableDescriptors = true; - // TSlotDescriptor - int offset = 1; - int i = 0; - // k1 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::TINYINT)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k1"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(int8_t); - } - ++i; - // v - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::BIGINT)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("v"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(int64_t); - } - - t_desc_tablet.__isset.slotDescriptors = true; - // TTupleDescriptor - TTupleDescriptor t_tuple_desc; - t_tuple_desc.id = 0; - t_tuple_desc.byteSize = offset; - t_tuple_desc.numNullBytes = 1; - t_tuple_desc.tableId = 0; - t_tuple_desc.__isset.tableId = true; - t_desc_tablet.tupleDescriptors.push_back(t_tuple_desc); - - DescriptorTbl::create(&_obj_pool, t_desc_tablet, &_desc_tbl); - } - -private: - TCreateTabletReq _create_tablet; - std::string _tablet_path; - TPushReq _push_req; - - TPlanNode _tnode; - ObjectPool _obj_pool; - DescriptorTbl* _desc_tbl; - RuntimeState _runtime_stat; - vector<TScanRangeParams> _scan_ranges; - RuntimeProfile* _profile; -}; - -TEST_F(TestOLAPReaderRow, next_tuple_with_key_range) { - init_scan_node(); - - TFetchRequest fetch_reques; - - fetch_reques.__set_aggregation(false); - fetch_reques.__set_schema_hash(1508825676); - fetch_reques.__set_version(_push_req.version); - fetch_reques.__set_version_hash(_push_req.version_hash); - fetch_reques.__set_tablet_id(10003); - - TFetchStartKey start_key; - start_key.__set_key(std::vector<std::string>(1, "0")); - fetch_reques.__set_start_key(std::vector<TFetchStartKey>(1, start_key)); - fetch_reques.__set_range("ge"); - - TFetchEndKey end_key; - end_key.__set_key(std::vector<std::string>(1, "100")); - fetch_reques.__set_end_key(std::vector<TFetchEndKey>(1, end_key)); - fetch_reques.__set_end_range("le"); - - std::vector<std::string> field_vec; - field_vec.push_back("k1"); - field_vec.push_back("k2"); - field_vec.push_back("k3"); - field_vec.push_back("k4"); - field_vec.push_back("k5"); - field_vec.push_back("k6"); - field_vec.push_back("k7"); - field_vec.push_back("k8"); - field_vec.push_back("v"); - fetch_reques.__set_field(field_vec); - - TupleDescriptor *tuple_desc = _desc_tbl->get_tuple_descriptor(0); - OLAPReader olap_reader(*tuple_desc); - ASSERT_TRUE(olap_reader.init(fetch_reques, NULL, _profile).ok()); - - char tuple_buf[1024]; - bzero(tuple_buf, 1024); - Tuple *tuple = reinterpret_cast<Tuple*>(tuple_buf); - bool eof; - int64_t raw_rows_read = 0; - ASSERT_TRUE(olap_reader.next_tuple(tuple, &raw_rows_read, &eof).ok()); - - ASSERT_EQ(0, *reinterpret_cast<const int8_t*> - (tuple->get_slot(tuple_desc->slots()[0]->tuple_offset()))); - ASSERT_EQ(0, *reinterpret_cast<const int32_t*> - (tuple->get_slot(tuple_desc->slots()[1]->tuple_offset()))); - { - StringValue *slot = reinterpret_cast<StringValue *>( - tuple->get_slot(tuple_desc->slots()[2]->tuple_offset())); - ASSERT_STREQ("26a91490-1851-4001-a9ad-6ef0cf2c3aa4", - std::string(slot->ptr, slot->len).c_str()); - } - { - DateTimeValue *slot = reinterpret_cast<DateTimeValue *>( - tuple->get_slot(tuple_desc->slots()[3]->tuple_offset())); - ASSERT_STREQ("2014-04-27", slot->debug_string().c_str()); - } - { - DateTimeValue *slot = reinterpret_cast<DateTimeValue *>( - tuple->get_slot(tuple_desc->slots()[4]->tuple_offset())); - ASSERT_STREQ("2014-04-27 22:23:20", slot->debug_string().c_str()); - } - { - DecimalValue *slot = reinterpret_cast<DecimalValue *>( - tuple->get_slot(tuple_desc->slots()[5]->tuple_offset())); - ASSERT_STREQ("978.371", slot->to_string().c_str()); - } - ASSERT_EQ(0, *reinterpret_cast<const int16_t*> - (tuple->get_slot(tuple_desc->slots()[6]->tuple_offset()))); - { - StringValue *slot = reinterpret_cast<StringValue *>( - tuple->get_slot(tuple_desc->slots()[7]->tuple_offset())); - ASSERT_STREQ("char", std::string(slot->ptr, slot->len).c_str()); - } - ASSERT_EQ(0, *reinterpret_cast<const int64_t*> - (tuple->get_slot(tuple_desc->slots()[8]->tuple_offset()))); -} - -TEST_F(TestOLAPReaderRow, next_tuple_with_where_condition) { - init_scan_node(); - - TFetchRequest fetch_reques; - - fetch_reques.__set_aggregation(false); - fetch_reques.__set_schema_hash(1508825676); - fetch_reques.__set_version(_push_req.version); - fetch_reques.__set_version_hash(_push_req.version_hash); - fetch_reques.__set_tablet_id(10003); - - TCondition condition; - condition.column_name = "k2"; - condition.condition_op = "<<"; - condition.condition_values.push_back("0"); - fetch_reques.where.push_back(condition); - - TFetchStartKey start_key; - start_key.__set_key(std::vector<std::string>(1, "0")); - fetch_reques.__set_start_key(std::vector<TFetchStartKey>(1, start_key)); - fetch_reques.__set_range("ge"); - - TFetchEndKey end_key; - end_key.__set_key(std::vector<std::string>(1, "0")); - fetch_reques.__set_end_key(std::vector<TFetchEndKey>(1, end_key)); - fetch_reques.__set_end_range("le"); - - std::vector<std::string> field_vec; - field_vec.push_back("k1"); - field_vec.push_back("k2"); - field_vec.push_back("k3"); - field_vec.push_back("k4"); - field_vec.push_back("k5"); - field_vec.push_back("k6"); - field_vec.push_back("k7"); - field_vec.push_back("k8"); - field_vec.push_back("v"); - fetch_reques.__set_field(field_vec); - - TupleDescriptor *tuple_desc = _desc_tbl->get_tuple_descriptor(0); - OLAPReader olap_reader(*tuple_desc); - ASSERT_TRUE(olap_reader.init(fetch_reques, NULL, _profile).ok()); - - char tuple_buf[1024]; - bzero(tuple_buf, 1024); - Tuple *tuple = reinterpret_cast<Tuple*>(tuple_buf); - bool eof; - int64_t raw_rows_read = 0; - ASSERT_TRUE(olap_reader.next_tuple(tuple, &raw_rows_read, &eof).ok()); - ASSERT_TRUE(eof); -} - - -TEST_F(TestOLAPReaderRow, next_tuple_without_aggregation) { - init_scan_node_k1_v(); - - TFetchRequest fetch_reques; - - fetch_reques.__set_aggregation(false); - fetch_reques.__set_schema_hash(1508825676); - fetch_reques.__set_version(_push_req.version); - fetch_reques.__set_version_hash(_push_req.version_hash); - fetch_reques.__set_tablet_id(10003); - - TFetchStartKey start_key; - start_key.__set_key(std::vector<std::string>(1, "0")); - fetch_reques.__set_start_key(std::vector<TFetchStartKey>(1, start_key)); - fetch_reques.__set_range("ge"); - - TFetchEndKey end_key; - end_key.__set_key(std::vector<std::string>(1, "100")); - fetch_reques.__set_end_key(std::vector<TFetchEndKey>(1, end_key)); - fetch_reques.__set_end_range("le"); - - std::vector<std::string> field_vec; - field_vec.push_back("k1"); - field_vec.push_back("v"); - fetch_reques.__set_field(field_vec); - - TupleDescriptor *tuple_desc = _desc_tbl->get_tuple_descriptor(0); - OLAPReader olap_reader(*tuple_desc); - ASSERT_TRUE(olap_reader.init(fetch_reques, NULL, _profile).ok()); - - char tuple_buf[1024]; - bzero(tuple_buf, 1024); - Tuple *tuple = reinterpret_cast<Tuple*>(tuple_buf); - bool eof; - int64_t raw_rows_read = 0; - ASSERT_TRUE(olap_reader.next_tuple(tuple, &raw_rows_read, &eof).ok()); - - ASSERT_EQ(0, *reinterpret_cast<const int8_t*> - (tuple->get_slot(tuple_desc->slots()[0]->tuple_offset()))); - ASSERT_EQ(0, *reinterpret_cast<const int64_t*> - (tuple->get_slot(tuple_desc->slots()[1]->tuple_offset()))); -} - -TEST_F(TestOLAPReaderRow, next_tuple_with_aggregation) { - init_scan_node_k1_v(); - - TFetchRequest fetch_reques; - - fetch_reques.__set_aggregation(true); - fetch_reques.__set_schema_hash(1508825676); - fetch_reques.__set_version(_push_req.version); - fetch_reques.__set_version_hash(_push_req.version_hash); - fetch_reques.__set_tablet_id(10003); - - TFetchStartKey start_key; - start_key.__set_key(std::vector<std::string>(1, "0")); - fetch_reques.__set_start_key(std::vector<TFetchStartKey>(1, start_key)); - fetch_reques.__set_range("ge"); - - TFetchEndKey end_key; - end_key.__set_key(std::vector<std::string>(1, "100")); - fetch_reques.__set_end_key(std::vector<TFetchEndKey>(1, end_key)); - fetch_reques.__set_end_range("le"); - - std::vector<std::string> field_vec; - field_vec.push_back("k1"); - field_vec.push_back("v"); - fetch_reques.__set_field(field_vec); - - TupleDescriptor *tuple_desc = _desc_tbl->get_tuple_descriptor(0); - OLAPReader olap_reader(*tuple_desc); - ASSERT_TRUE(olap_reader.init(fetch_reques, NULL, _profile).ok()); - - char tuple_buf[1024]; - bzero(tuple_buf, 1024); - Tuple *tuple = reinterpret_cast<Tuple*>(tuple_buf); - bool eof; - int64_t raw_rows_read = 0; - ASSERT_TRUE(olap_reader.next_tuple(tuple, &raw_rows_read, &eof).ok()); - - ASSERT_EQ(0, *reinterpret_cast<const int8_t*> - (tuple->get_slot(tuple_desc->slots()[0]->tuple_offset()))); - ASSERT_EQ(153600, *reinterpret_cast<const int64_t*> - (tuple->get_slot(tuple_desc->slots()[1]->tuple_offset()))); -} - -class TestOLAPReaderColumn : public testing::Test { -public: - TestOLAPReaderColumn() : _runtime_stat("test") { - _profile = _obj_pool.add(new RuntimeProfile(&_obj_pool, "OlapScanner")); - OLAPReader::init_profile(_profile); - - } - - void SetUp() { - init_olap(); - } - - void TearDown() { - // Remove all dir. - StorageEngine::get_instance()->drop_tablet( - _create_tablet.tablet_id, _create_tablet.tablet_schema.schema_hash); - while (0 == access(_tablet_path.c_str(), F_OK)) { - sleep(1); - } - ASSERT_TRUE(FileUtils::remove_all(config::storage_root_path)); - } - - void init_olap() { - // Create local data dir for StorageEngine. - config::storage_root_path = "./test_run/column_tablet"; - FileUtils::remove_all(config::storage_root_path); - ASSERT_TRUE(FileUtils::create_dir(config::storage_root_path).ok()); - - // 1. Prepare for query split key. - // create base tablet - OLAPStatus res = OLAP_SUCCESS; - set_default_create_tablet_request(&_create_tablet); - _create_tablet.tablet_schema.storage_type = TStorageType::COLUMN; - CommandExecutor command_executor = CommandExecutor(); - res = command_executor.create_tablet(_create_tablet); - ASSERT_EQ(OLAP_SUCCESS, res); - TabletSharedPtr tablet = command_executor.get_tablet( - _create_tablet.tablet_id, _create_tablet.tablet_schema.schema_hash); - ASSERT_TRUE(tablet.get() != NULL); - _tablet_path = tablet->tablet_path(); - - // push data - set_default_push_request(&_push_req); - std::vector<TTabletInfo> tablets_info; - res = command_executor.push(_push_req, &tablets_info); - ASSERT_EQ(OLAP_SUCCESS, res); - ASSERT_EQ(1, tablets_info.size()); - } - - void init_scan_node() { - TUniqueId fragment_id; - TQueryOptions query_options; - query_options.disable_codegen = true; - //ExecEnv* exec_env = new ExecEnv(); - //_runtime_stat.init(fragment_id, query_options, "test", exec_env); - - TDescriptorTable t_desc_tablet; - - // tablet descriptors - TTableDescriptor t_tablet_desc; - - t_tablet_desc.id = 0; - t_tablet_desc.tableType = TTableType::OLAP_TABLE; - t_tablet_desc.numCols = 0; - t_tablet_desc.numClusteringCols = 0; - t_tablet_desc.olapTable.tableName = ""; - t_tablet_desc.tableName = ""; - t_tablet_desc.dbName = ""; - t_tablet_desc.__isset.mysqlTable = true; - t_desc_tablet.tableDescriptors.push_back(t_tablet_desc); - t_desc_tablet.__isset.tableDescriptors = true; - // TSlotDescriptor - int offset = 1; - int i = 0; - // k1 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::TINYINT)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k1"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(int8_t); - } - ++i; - // k2 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::INT)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k2"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(int32_t); - } - ++i; - // k3 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::VARCHAR)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k3"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(StringValue); - } - ++i; - // k4 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::DATE)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k4"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(DateTimeValue); - } - ++i; - // k5 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::DATETIME)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k5"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(DateTimeValue); - } - ++i; - // k6 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::DECIMAL)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k6"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(decimal12_t); - } - ++i; - // k7 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::SMALLINT)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k7"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(int16_t); - } - ++i; - // k8 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::CHAR)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k8"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(StringValue); - } - ++i; - // v - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::BIGINT)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("v"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(int64_t); - } - - t_desc_tablet.__isset.slotDescriptors = true; - // TTupleDescriptor - TTupleDescriptor t_tuple_desc; - t_tuple_desc.id = 0; - t_tuple_desc.byteSize = offset; - t_tuple_desc.numNullBytes = 1; - t_tuple_desc.tableId = 0; - t_tuple_desc.__isset.tableId = true; - t_desc_tablet.tupleDescriptors.push_back(t_tuple_desc); - - DescriptorTbl::create(&_obj_pool, t_desc_tablet, &_desc_tbl); - } - - - void init_scan_node_k1_v() { - TUniqueId fragment_id; - TQueryOptions query_options; - query_options.disable_codegen = true; - //ExecEnv* exec_env = new ExecEnv(); - //_runtime_stat.init(fragment_id, query_options, "test", exec_env); - - TDescriptorTable t_desc_tablet; - - // tablet descriptors - TTableDescriptor t_tablet_desc; - - t_tablet_desc.id = 0; - t_tablet_desc.tableType = TTableType::OLAP_TABLE; - t_tablet_desc.numCols = 0; - t_tablet_desc.numClusteringCols = 0; - t_tablet_desc.olapTable.tableName = ""; - t_tablet_desc.tableName = ""; - t_tablet_desc.dbName = ""; - t_tablet_desc.__isset.mysqlTable = true; - t_desc_tablet.tableDescriptors.push_back(t_tablet_desc); - t_desc_tablet.__isset.tableDescriptors = true; - // TSlotDescriptor - int offset = 1; - int i = 0; - // k1 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::TINYINT)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k1"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(int8_t); - } - ++i; - // v - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::BIGINT)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("v"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(int64_t); - } - - t_desc_tablet.__isset.slotDescriptors = true; - // TTupleDescriptor - TTupleDescriptor t_tuple_desc; - t_tuple_desc.id = 0; - t_tuple_desc.byteSize = offset; - t_tuple_desc.numNullBytes = 1; - t_tuple_desc.tableId = 0; - t_tuple_desc.__isset.tableId = true; - t_desc_tablet.tupleDescriptors.push_back(t_tuple_desc); - - DescriptorTbl::create(&_obj_pool, t_desc_tablet, &_desc_tbl); - } - -private: - TCreateTabletReq _create_tablet; - std::string _tablet_path; - TPushReq _push_req; - - TPlanNode _tnode; - ObjectPool _obj_pool; - DescriptorTbl* _desc_tbl; - RuntimeState _runtime_stat; - vector<TScanRangeParams> _scan_ranges; - RuntimeProfile* _profile; -}; - - -TEST_F(TestOLAPReaderColumn, next_tuple) { - init_scan_node(); - - TFetchRequest fetch_reques; - - fetch_reques.__set_schema_hash(1508825676); - fetch_reques.__set_version(_push_req.version); - fetch_reques.__set_version_hash(_push_req.version_hash); - fetch_reques.__set_tablet_id(10003); - - TFetchStartKey start_key; - start_key.__set_key(std::vector<std::string>(1, "0")); - fetch_reques.__set_start_key(std::vector<TFetchStartKey>(1, start_key)); - fetch_reques.__set_range("ge"); - - TFetchEndKey end_key; - end_key.__set_key(std::vector<std::string>(1, "100")); - fetch_reques.__set_end_key(std::vector<TFetchEndKey>(1, end_key)); - fetch_reques.__set_end_range("le"); - - std::vector<std::string> field_vec; - field_vec.push_back("k1"); - field_vec.push_back("k2"); - field_vec.push_back("k3"); - field_vec.push_back("k4"); - field_vec.push_back("k5"); - field_vec.push_back("k6"); - field_vec.push_back("k7"); - field_vec.push_back("k8"); - field_vec.push_back("v"); - fetch_reques.__set_field(field_vec); - - TupleDescriptor *tuple_desc = _desc_tbl->get_tuple_descriptor(0); - OLAPReader olap_reader(*tuple_desc); - ASSERT_TRUE(olap_reader.init(fetch_reques, NULL, _profile).ok()); - - char tuple_buf[1024]; - bzero(tuple_buf, 1024); - Tuple *tuple = reinterpret_cast<Tuple*>(tuple_buf); - bool eof; - int64_t raw_rows_read = 0; - ASSERT_TRUE(olap_reader.next_tuple(tuple, &raw_rows_read, &eof).ok()); - - ASSERT_EQ(0, *reinterpret_cast<const int8_t*> - (tuple->get_slot(tuple_desc->slots()[0]->tuple_offset()))); - ASSERT_EQ(0, *reinterpret_cast<const int32_t*> - (tuple->get_slot(tuple_desc->slots()[1]->tuple_offset()))); - { - StringValue *slot = reinterpret_cast<StringValue *>( - tuple->get_slot(tuple_desc->slots()[2]->tuple_offset())); - ASSERT_STREQ("26a91490-1851-4001-a9ad-6ef0cf2c3aa4", - std::string(slot->ptr, slot->len).c_str()); - } - { - DateTimeValue *slot = reinterpret_cast<DateTimeValue *>( - tuple->get_slot(tuple_desc->slots()[3]->tuple_offset())); - ASSERT_STREQ("2014-04-27", slot->debug_string().c_str()); - } - { - DateTimeValue *slot = reinterpret_cast<DateTimeValue *>( - tuple->get_slot(tuple_desc->slots()[4]->tuple_offset())); - ASSERT_STREQ("2014-04-27 22:23:20", slot->debug_string().c_str()); - } - { - DecimalValue *slot = reinterpret_cast<DecimalValue *>( - tuple->get_slot(tuple_desc->slots()[5]->tuple_offset())); - ASSERT_STREQ("978.371", slot->to_string().c_str()); - } - ASSERT_EQ(0, *reinterpret_cast<const int16_t*> - (tuple->get_slot(tuple_desc->slots()[6]->tuple_offset()))); - { - StringValue *slot = reinterpret_cast<StringValue *>( - tuple->get_slot(tuple_desc->slots()[7]->tuple_offset())); - ASSERT_STREQ("char", std::string(slot->ptr, slot->len).c_str()); - } - ASSERT_EQ(0, *reinterpret_cast<const int64_t*> - (tuple->get_slot(tuple_desc->slots()[8]->tuple_offset()))); -} - -TEST_F(TestOLAPReaderColumn, next_tuple_without_aggregation) { - init_scan_node_k1_v(); - - TFetchRequest fetch_reques; - - fetch_reques.__set_aggregation(false); - fetch_reques.__set_schema_hash(1508825676); - fetch_reques.__set_version(_push_req.version); - fetch_reques.__set_version_hash(_push_req.version_hash); - fetch_reques.__set_tablet_id(10003); - - TFetchStartKey start_key; - start_key.__set_key(std::vector<std::string>(1, "0")); - fetch_reques.__set_start_key(std::vector<TFetchStartKey>(1, start_key)); - fetch_reques.__set_range("ge"); - - TFetchEndKey end_key; - end_key.__set_key(std::vector<std::string>(1, "100")); - fetch_reques.__set_end_key(std::vector<TFetchEndKey>(1, end_key)); - fetch_reques.__set_end_range("le"); - - std::vector<std::string> field_vec; - field_vec.push_back("k1"); - field_vec.push_back("v"); - fetch_reques.__set_field(field_vec); - - TupleDescriptor *tuple_desc = _desc_tbl->get_tuple_descriptor(0); - OLAPReader olap_reader(*tuple_desc); - ASSERT_TRUE(olap_reader.init(fetch_reques, NULL, _profile).ok()); - - char tuple_buf[1024]; - bzero(tuple_buf, 1024); - Tuple *tuple = reinterpret_cast<Tuple*>(tuple_buf); - bool eof; - int64_t raw_rows_read = 0; - ASSERT_TRUE(olap_reader.next_tuple(tuple, &raw_rows_read, &eof).ok()); - - ASSERT_EQ(0, *reinterpret_cast<const int8_t*> - (tuple->get_slot(tuple_desc->slots()[0]->tuple_offset()))); - ASSERT_EQ(0, *reinterpret_cast<const int64_t*> - (tuple->get_slot(tuple_desc->slots()[1]->tuple_offset()))); -} - -TEST_F(TestOLAPReaderColumn, next_tuple_with_aggregation) { - init_scan_node_k1_v(); - - TFetchRequest fetch_reques; - - fetch_reques.__set_aggregation(true); - fetch_reques.__set_schema_hash(1508825676); - fetch_reques.__set_version(_push_req.version); - fetch_reques.__set_version_hash(_push_req.version_hash); - fetch_reques.__set_tablet_id(10003); - - TFetchStartKey start_key; - start_key.__set_key(std::vector<std::string>(1, "0")); - fetch_reques.__set_start_key(std::vector<TFetchStartKey>(1, start_key)); - fetch_reques.__set_range("ge"); - - TFetchEndKey end_key; - end_key.__set_key(std::vector<std::string>(1, "100")); - fetch_reques.__set_end_key(std::vector<TFetchEndKey>(1, end_key)); - fetch_reques.__set_end_range("le"); - - std::vector<std::string> field_vec; - field_vec.push_back("k1"); - field_vec.push_back("v"); - fetch_reques.__set_field(field_vec); - - TupleDescriptor *tuple_desc = _desc_tbl->get_tuple_descriptor(0); - OLAPReader olap_reader(*tuple_desc); - ASSERT_TRUE(olap_reader.init(fetch_reques, NULL, _profile).ok()); - - char tuple_buf[1024]; - bzero(tuple_buf, 1024); - Tuple *tuple = reinterpret_cast<Tuple*>(tuple_buf); - bool eof; - int64_t raw_rows_read = 0; - ASSERT_TRUE(olap_reader.next_tuple(tuple, &raw_rows_read, &eof).ok()); - - ASSERT_EQ(0, *reinterpret_cast<const int8_t*> - (tuple->get_slot(tuple_desc->slots()[0]->tuple_offset()))); - ASSERT_EQ(153600, *reinterpret_cast<const int64_t*> - (tuple->get_slot(tuple_desc->slots()[1]->tuple_offset()))); -} - -class TestOLAPReaderColumnDeleteCondition : public testing::Test { -public: - TestOLAPReaderColumnDeleteCondition() : _runtime_stat("test") { - _profile = _obj_pool.add(new RuntimeProfile(&_obj_pool, "OlapScanner")); - OLAPReader::init_profile(_profile); - } - - void SetUp() { - init_olap(); - init_scan_node(); - } - - void TearDown() { - // Remove all dir. - StorageEngine::get_instance()->drop_tablet( - _create_tablet.tablet_id, _create_tablet.tablet_schema.schema_hash); - while (0 == access(_tablet_path.c_str(), F_OK)) { - sleep(1); - } - ASSERT_TRUE(FileUtils::remove_all(config::storage_root_path)); - } - - void init_olap() { - // Create local data dir for StorageEngine. - config::storage_root_path = "./test_run/row_tablet"; - FileUtils::remove_all(config::storage_root_path); - ASSERT_TRUE(FileUtils::create_dir(config::storage_root_path).ok()); - - // 1. Prepare for query split key. - // create base tablet - OLAPStatus res = OLAP_SUCCESS; - set_default_create_tablet_request(&_create_tablet); - CommandExecutor command_executor = CommandExecutor(); - res = command_executor.create_tablet(_create_tablet); - ASSERT_EQ(OLAP_SUCCESS, res); - TabletSharedPtr tablet = command_executor.get_tablet( - _create_tablet.tablet_id, _create_tablet.tablet_schema.schema_hash); - ASSERT_TRUE(tablet.get() != NULL); - _tablet_path = tablet->tablet_path(); - - // push data - set_default_push_request(&_push_req); - std::vector<TTabletInfo> tablets_info; - res = command_executor.push(_push_req, &tablets_info); - ASSERT_EQ(OLAP_SUCCESS, res); - ASSERT_EQ(1, tablets_info.size()); - - // delete data - set_default_push_request(&_delete_req); - _delete_req.version = 3; - _delete_req.version_hash = 2; - _delete_req.push_type = TPushType::DELETE; - _delete_req.__isset.http_file_path = false; - - TCondition condition; - condition.column_name = "k2"; - condition.condition_op = "="; - condition.condition_values.push_back("0"); - _delete_req.delete_conditions.push_back(condition); - tablets_info.clear(); - res = command_executor.delete_data(_delete_req, &tablets_info); - ASSERT_EQ(OLAP_SUCCESS, res); - ASSERT_EQ(1, tablets_info.size()); - } - - void init_scan_node() { - TUniqueId fragment_id; - TQueryOptions query_options; - query_options.disable_codegen = true; - //ExecEnv* exec_env = new ExecEnv(); - //_runtime_stat.init(fragment_id, query_options, "test", exec_env); - - TDescriptorTable t_desc_tablet; - - // tablet descriptors - TTableDescriptor t_tablet_desc; - - t_tablet_desc.id = 0; - t_tablet_desc.tableType = TTableType::OLAP_TABLE; - t_tablet_desc.numCols = 0; - t_tablet_desc.numClusteringCols = 0; - t_tablet_desc.olapTable.tableName = ""; - t_tablet_desc.tableName = ""; - t_tablet_desc.dbName = ""; - t_tablet_desc.__isset.mysqlTable = true; - t_desc_tablet.tableDescriptors.push_back(t_tablet_desc); - t_desc_tablet.__isset.tableDescriptors = true; - // TSlotDescriptor - int offset = 1; - int i = 0; - // k1 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::TINYINT)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k1"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(int8_t); - } - ++i; - // k2 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::INT)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k2"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(int32_t); - } - ++i; - // k3 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::VARCHAR)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k3"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(StringValue); - } - ++i; - // k4 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::DATE)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k4"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(DateTimeValue); - } - ++i; - // k5 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::DATETIME)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k5"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(DateTimeValue); - } - ++i; - // k6 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::DECIMAL)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k6"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(decimal12_t); - } - ++i; - // k7 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::SMALLINT)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k7"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(int16_t); - } - ++i; - // k8 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::CHAR)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k8"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(StringValue); - } - ++i; - // v - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::BIGINT)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("v"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(int64_t); - } - - t_desc_tablet.__isset.slotDescriptors = true; - // TTupleDescriptor - TTupleDescriptor t_tuple_desc; - t_tuple_desc.id = 0; - t_tuple_desc.byteSize = offset; - t_tuple_desc.numNullBytes = 1; - t_tuple_desc.tableId = 0; - t_tuple_desc.__isset.tableId = true; - t_desc_tablet.tupleDescriptors.push_back(t_tuple_desc); - - DescriptorTbl::create(&_obj_pool, t_desc_tablet, &_desc_tbl); - } - - - void init_scan_node_k1_v() { - TUniqueId fragment_id; - TQueryOptions query_options; - query_options.disable_codegen = true; - //ExecEnv* exec_env = new ExecEnv(); - //_runtime_stat.init(fragment_id, query_options, "test", exec_env); - - TDescriptorTable t_desc_tablet; - - // tablet descriptors - TTableDescriptor t_tablet_desc; - - t_tablet_desc.id = 0; - t_tablet_desc.tableType = TTableType::OLAP_TABLE; - t_tablet_desc.numCols = 0; - t_tablet_desc.numClusteringCols = 0; - t_tablet_desc.olapTable.tableName = ""; - t_tablet_desc.tableName = ""; - t_tablet_desc.dbName = ""; - t_tablet_desc.__isset.mysqlTable = true; - t_desc_tablet.tableDescriptors.push_back(t_tablet_desc); - t_desc_tablet.__isset.tableDescriptors = true; - // TSlotDescriptor - int offset = 1; - int i = 0; - // k1 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::TINYINT)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k1"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(int8_t); - } - ++i; - // v - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::BIGINT)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("v"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(int64_t); - } - - t_desc_tablet.__isset.slotDescriptors = true; - // TTupleDescriptor - TTupleDescriptor t_tuple_desc; - t_tuple_desc.id = 0; - t_tuple_desc.byteSize = offset; - t_tuple_desc.numNullBytes = 1; - t_tuple_desc.tableId = 0; - t_tuple_desc.__isset.tableId = true; - t_desc_tablet.tupleDescriptors.push_back(t_tuple_desc); - - DescriptorTbl::create(&_obj_pool, t_desc_tablet, &_desc_tbl); - } - -private: - TCreateTabletReq _create_tablet; - std::string _tablet_path; - TPushReq _push_req; - TPushReq _delete_req; - - TPlanNode _tnode; - ObjectPool _obj_pool; - DescriptorTbl* _desc_tbl; - RuntimeState _runtime_stat; - vector<TScanRangeParams> _scan_ranges; - RuntimeProfile* _profile; -}; - -TEST_F(TestOLAPReaderColumnDeleteCondition, next_tuple) { - init_scan_node(); - - TFetchRequest fetch_reques; - - fetch_reques.__set_schema_hash(1508825676); - fetch_reques.__set_version(_delete_req.version); - fetch_reques.__set_version_hash(_delete_req.version_hash); - fetch_reques.__set_tablet_id(10003); - - TFetchStartKey start_key; - start_key.__set_key(std::vector<std::string>(1, "0")); - fetch_reques.__set_start_key(std::vector<TFetchStartKey>(1, start_key)); - fetch_reques.__set_range("ge"); - - TFetchEndKey end_key; - end_key.__set_key(std::vector<std::string>(1, "100")); - fetch_reques.__set_end_key(std::vector<TFetchEndKey>(1, end_key)); - fetch_reques.__set_end_range("le"); - - std::vector<std::string> field_vec; - field_vec.push_back("k1"); - field_vec.push_back("k2"); - field_vec.push_back("k3"); - field_vec.push_back("k4"); - field_vec.push_back("k5"); - field_vec.push_back("k6"); - field_vec.push_back("k7"); - field_vec.push_back("k8"); - field_vec.push_back("v"); - fetch_reques.__set_field(field_vec); - - TupleDescriptor *tuple_desc = _desc_tbl->get_tuple_descriptor(0); - OLAPReader olap_reader(*tuple_desc); - ASSERT_TRUE(olap_reader.init(fetch_reques, NULL, _profile).ok()); - - char tuple_buf[1024]; - bzero(tuple_buf, 1024); - Tuple *tuple = reinterpret_cast<Tuple*>(tuple_buf); - bool eof; - int64_t raw_rows_read = 0; - ASSERT_TRUE(olap_reader.next_tuple(tuple, &raw_rows_read, &eof).ok()); - - ASSERT_EQ(0, *reinterpret_cast<const int8_t*> - (tuple->get_slot(tuple_desc->slots()[0]->tuple_offset()))); - ASSERT_EQ(128, *reinterpret_cast<const int32_t*> - (tuple->get_slot(tuple_desc->slots()[1]->tuple_offset()))); - { - StringValue *slot = reinterpret_cast<StringValue *>( - tuple->get_slot(tuple_desc->slots()[2]->tuple_offset())); - ASSERT_STREQ("a1d033e6-2944-4b4e-b432-ea804c89dcd7", - std::string(slot->ptr, slot->len).c_str()); - } - { - DateTimeValue *slot = reinterpret_cast<DateTimeValue *>( - tuple->get_slot(tuple_desc->slots()[3]->tuple_offset())); - ASSERT_STREQ("2014-03-23", slot->debug_string().c_str()); - } - { - DateTimeValue *slot = reinterpret_cast<DateTimeValue *>( - tuple->get_slot(tuple_desc->slots()[4]->tuple_offset())); - ASSERT_STREQ("2014-03-23 05:39:17", slot->debug_string().c_str()); - } - { - DecimalValue *slot = reinterpret_cast<DecimalValue *>( - tuple->get_slot(tuple_desc->slots()[5]->tuple_offset())); - ASSERT_STREQ("-484.89", slot->to_string().c_str()); - } - ASSERT_EQ(0, *reinterpret_cast<const int16_t*> - (tuple->get_slot(tuple_desc->slots()[6]->tuple_offset()))); - { - StringValue *slot = reinterpret_cast<StringValue *>( - tuple->get_slot(tuple_desc->slots()[7]->tuple_offset())); - ASSERT_STREQ("char", std::string(slot->ptr, slot->len).c_str()); - } - ASSERT_EQ(12800, *reinterpret_cast<const int64_t*> - (tuple->get_slot(tuple_desc->slots()[8]->tuple_offset()))); - -} - -} // namespace doris - -int main(int argc, char** argv) { - std::string conffile = std::string(getenv("DORIS_HOME")) + "/conf/be.conf"; - if (!doris::config::init(conffile.c_str(), false)) { - fprintf(stderr, "error read config file. \n"); - return -1; - } - doris::init_glog("be-test"); - ::testing::InitGoogleTest(&argc, argv); - - int ret = doris::OLAP_SUCCESS; - doris::set_up(); - ret = RUN_ALL_TESTS(); - doris::tear_down(); - - google::protobuf::ShutdownProtobufLibrary(); - return ret; -} diff --git a/be/test/olap/vectorized_olap_reader_test.cpp b/be/test/olap/vectorized_olap_reader_test.cpp deleted file mode 100644 index 650da30..0000000 --- a/be/test/olap/vectorized_olap_reader_test.cpp +++ /dev/null @@ -1,894 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -#include "gtest/gtest.h" - -#include "exprs/expr.h" -#include "exec/olap_scan_node.h" -//#include "exprs/int_literal.h" -#include "gen_cpp/Exprs_types.h" -#include "gen_cpp/PlanNodes_types.h" -#include "olap/command_executor.h" -#include "olap/field.h" -#include "olap/olap_main.cpp" -#include "olap/olap_reader.h" -#include "runtime/descriptors.h" -#include "runtime/primitive_type.h" -#include "runtime/exec_env.h" -#include "runtime/runtime_state.h" -#include "runtime/row_batch.h" -#include "runtime/string_value.h" -#include "runtime/tuple_row.h" -#include "util/runtime_profile.h" -#include "util/debug_util.h" -#include "util/logging.h" -#include "util/file_utils.h" - -using namespace testing; -using namespace doris; -using namespace std; - -namespace doris { - -void set_up() { - config::storage_root_path = "./test_run/data_test"; - system("rm -rf ./test_run && mkdir -p ./test_run"); - FileUtils::create_dir(config::storage_root_path); - touch_all_singleton(); -} - -void tear_down() { - system("rm -rf ./test_run"); - FileUtils::remove_all(string(getenv("DORIS_HOME")) + UNUSED_PREFIX); -} - -void set_default_create_tablet_request(TCreateTabletReq* request) { - request->tablet_id = 10003; - request->__set_version(1); - request->__set_version_hash(0); - request->tablet_schema.schema_hash = 1508825676; - request->tablet_schema.short_key_column_count = 2; - request->tablet_schema.storage_type = TStorageType::COLUMN; - - TColumn k1; - k1.column_name = "k1"; - k1.column_type.type = TPrimitiveType::TINYINT; - request->tablet_schema.columns.push_back(k1); - - TColumn k2; - k2.column_name = "k2"; - k2.column_type.type = TPrimitiveType::INT; - request->tablet_schema.columns.push_back(k2); - - TColumn k3; - k3.column_name = "k3"; - k3.column_type.type = TPrimitiveType::VARCHAR; - k3.column_type.__set_len(64); - request->tablet_schema.columns.push_back(k3); - - TColumn k4; - k4.column_name = "k4"; - k4.column_type.type = TPrimitiveType::DATE; - request->tablet_schema.columns.push_back(k4); - - TColumn k5; - k5.column_name = "k5"; - k5.column_type.type = TPrimitiveType::DATETIME; - request->tablet_schema.columns.push_back(k5); - - TColumn k6; - k6.column_name = "k6"; - k6.column_type.type = TPrimitiveType::DECIMAL; - k6.column_type.__set_precision(6); - k6.column_type.__set_scale(3); - request->tablet_schema.columns.push_back(k6); - - TColumn k7; - k7.column_name = "k7"; - k7.column_type.type = TPrimitiveType::SMALLINT; - k7.default_value = "0"; - request->tablet_schema.columns.push_back(k7); - - TColumn k8; - k8.column_name = "k8"; - k8.column_type.type = TPrimitiveType::CHAR; - k8.column_type.__set_len(16); - k8.default_value = "char"; - request->tablet_schema.columns.push_back(k8); - - TColumn v; - v.column_name = "v"; - v.column_type.type = TPrimitiveType::BIGINT; - v.__set_aggregation_type(TAggregationType::SUM); - request->tablet_schema.columns.push_back(v); -} - -// SQL for generate data(./be/test/olap/test_data/all_types_1000): -// -// create tablet delete_test_row (k1 tinyint, k2 int, k3 varchar(64), -// k4 date, k5 datetime, k6 decimal(6,3), k7 smallint default "0", -// k8 char(16) default "char", v bigint sum) engine=olap distributed by -// random buckets 1 properties ("storage_type" = "row"); -// -// load label label1 (data infile -// ("hdfs://host:port/dir") -// into tablet `delete_test_row` (k1,k2,v,k3,k4,k5,k6)); -void set_default_push_request(TPushReq* request) { - request->tablet_id = 10003; - request->schema_hash = 1508825676; - request->__set_version(2); - request->__set_version_hash(0); - request->timeout = 86400; - request->push_type = TPushType::LOAD; - request->__set_http_file_path("./be/test/olap/test_data/all_types_1000"); -} - -class TestVectorizedOLAPReader : public testing::Test { -public: - TestVectorizedOLAPReader() : _runtime_stat("test") { - _profile = _obj_pool.add(new RuntimeProfile(&_obj_pool, "OlapScanner")); - OLAPReader::init_profile(_profile); - } - - void SetUp() { - } - - void TearDown() { - // Remove all dir. - StorageEngine::get_instance()->drop_tablet( - _create_tablet.tablet_id, _create_tablet.tablet_schema.schema_hash); - while (0 == access(_tablet_name.c_str(), F_OK)) { - sleep(1); - } - ASSERT_TRUE(FileUtils::remove_all(config::storage_root_path).ok()); - } - - void init_olap_row() { - // Create local data dir for StorageEngine. - config::storage_root_path = "./test_run/row_tablet"; - FileUtils::remove_all(config::storage_root_path); - ASSERT_TRUE(FileUtils::create_dir(config::storage_root_path).ok()); - - // 1. Prepare for query split key. - // create base tablet - OLAPStatus res = OLAP_SUCCESS; - set_default_create_tablet_request(&_create_tablet); - CommandExecutor command_executor = CommandExecutor(); - res = command_executor.create_tablet(_create_tablet); - ASSERT_EQ(OLAP_SUCCESS, res); - TabletSharedPtr tablet = command_executor.get_tablet( - _create_tablet.tablet_id, _create_tablet.tablet_schema.schema_hash); - ASSERT_TRUE(tablet.get() != NULL); - _tablet_name = tablet->tablet_name(); - - // push data - set_default_push_request(&_push_req); - std::vector<TTabletInfo> tablets_info; - res = command_executor.push(_push_req, &tablets_info); - ASSERT_EQ(OLAP_SUCCESS, res); - ASSERT_EQ(1, tablets_info.size()); - } - - void init_olap_column() { - // Create local data dir for StorageEngine. - config::storage_root_path = "./test_run/column_tablet"; - FileUtils::remove_all(config::storage_root_path); - ASSERT_TRUE(FileUtils::create_dir(config::storage_root_path).ok()); - - // 1. Prepare for query split key. - // create base tablet - OLAPStatus res = OLAP_SUCCESS; - set_default_create_tablet_request(&_create_tablet); - _create_tablet.tablet_schema.storage_type = TStorageType::COLUMN; - CommandExecutor command_executor = CommandExecutor(); - res = command_executor.create_tablet(_create_tablet); - ASSERT_EQ(OLAP_SUCCESS, res); - TabletSharedPtr tablet = command_executor.get_tablet( - _create_tablet.tablet_id, _create_tablet.tablet_schema.schema_hash); - ASSERT_TRUE(tablet.get() != NULL); - _tablet_name = tablet->tablet_name(); - - // push data - set_default_push_request(&_push_req); - std::vector<TTabletInfo> tablets_info; - res = command_executor.push(_push_req, &tablets_info); - ASSERT_EQ(OLAP_SUCCESS, res); - ASSERT_EQ(1, tablets_info.size()); - } - - void init_scan_node() { - TUniqueId fragment_id; - TQueryOptions query_options; - query_options.disable_codegen = true; - //ExecEnv* exec_env = new ExecEnv(); - //_runtime_stat.init(fragment_id, query_options, "test", exec_env); - - TDescriptorTable t_desc_tablet; - - // tablet descriptors - TTableDescriptor t_tablet_desc; - - t_tablet_desc.id = 0; - t_tablet_desc.tableType = TTableType::OLAP_TABLE; - t_tablet_desc.numCols = 0; - t_tablet_desc.numClusteringCols = 0; - t_tablet_desc.olapTable.tableName = ""; - t_tablet_desc.tableName = ""; - t_tablet_desc.dbName = ""; - t_tablet_desc.__isset.mysqlTable = true; - t_desc_tablet.tableDescriptors.push_back(t_tablet_desc); - t_desc_tablet.__isset.tableDescriptors = true; - // TSlotDescriptor - int offset = 1; - int i = 0; - // k1 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::TINYINT)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k1"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(int8_t); - } - ++i; - // k2 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::INT)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k2"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(int32_t); - } - ++i; - // k3 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::VARCHAR)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k3"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(StringValue); - } - ++i; - // k4 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::DATE)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k4"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(DateTimeValue); - } - ++i; - // k5 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::DATETIME)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k5"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(DateTimeValue); - } - ++i; - // k6 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::DECIMAL)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k6"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(decimal12_t); - } - ++i; - // k7 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::SMALLINT)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k7"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(int16_t); - } - ++i; - // k8 - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::CHAR)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("k8"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(StringValue); - } - ++i; - // v - { - TSlotDescriptor t_slot_desc; - t_slot_desc.__set_id(i); - t_slot_desc.__set_slotType(gen_type_desc(TPrimitiveType::BIGINT)); - t_slot_desc.__set_columnPos(i); - t_slot_desc.__set_byteOffset(offset); - t_slot_desc.__set_nullIndicatorByte(0); - t_slot_desc.__set_nullIndicatorBit(-1); - t_slot_desc.__set_slotIdx(i); - t_slot_desc.__set_isMaterialized(true); - t_slot_desc.__set_colName("v"); - t_desc_tablet.slotDescriptors.push_back(t_slot_desc); - offset += sizeof(int64_t); - } - - t_desc_tablet.__isset.slotDescriptors = true; - // TTupleDescriptor - TTupleDescriptor t_tuple_desc; - t_tuple_desc.id = 0; - t_tuple_desc.byteSize = offset; - t_tuple_desc.numNullBytes = 1; - t_tuple_desc.tableId = 0; - t_tuple_desc.__isset.tableId = true; - t_desc_tablet.tupleDescriptors.push_back(t_tuple_desc); - - DescriptorTbl::create(&_obj_pool, t_desc_tablet, &_desc_tbl); - - std::vector<TTupleId> row_tuples; - row_tuples.push_back(0); - std::vector<bool> nullable_tuples; - nullable_tuples.push_back(false); - _row_desc = _obj_pool.add( - new RowDescriptor(*_desc_tbl, row_tuples, nullable_tuples)); - _runtime_stat.set_desc_tbl(_desc_tbl); - } - - ExprContent* create_in_predicate(int v1, int v2) { - TExpr exprs; - { - TExprNode expr_node; - expr_node.__set_node_type(TExprNodeType::IN_PRED); - expr_node.__isset.in_predicate = true; - TInPredicate in_predicate; - in_predicate.__set_is_not_in(false); - expr_node.__set_in_predicate(in_predicate); - // TColumnType type; - // type.__set_type(TPrimitiveType::INT); - expr_node.__set_type(gen_type_desc(TPrimitiveType::INT)); - expr_node.__set_num_children(3); - expr_node.__isset.vector_opcode = true; - //expr_node.__set_vector_opcode( - // TExprOpcode::FILTER_IN_INT); - exprs.nodes.push_back(expr_node); - } - { - TExprNode expr_node; - expr_node.__set_node_type(TExprNodeType::SLOT_REF); - //TColumnType type; - //type.__set_type(TPrimitiveType::INT); - expr_node.__set_type(gen_type_desc(TPrimitiveType::INT)); - expr_node.__set_num_children(0); - expr_node.__isset.slot_ref = true; - TSlotRef slot_ref; - slot_ref.__set_slot_id(1); - slot_ref.__set_tuple_id(0); - expr_node.__set_slot_ref(slot_ref); - expr_node.__isset.output_column = true; - expr_node.__set_output_column(1); - exprs.nodes.push_back(expr_node); - } - { - TExprNode expr_node; - expr_node.__set_node_type(TExprNodeType::INT_LITERAL); - //TColumnType type; - //type.__set_type(TPrimitiveType::INT); - expr_node.__set_type(gen_type_desc(TPrimitiveType::INT)); - expr_node.__set_num_children(0); - expr_node.__isset.int_literal = true; - TIntLiteral int_literal; - int_literal.__set_value(v1); - expr_node.__set_int_literal(int_literal); - exprs.nodes.push_back(expr_node); - } - { - TExprNode expr_node; - expr_node.__set_node_type(TExprNodeType::INT_LITERAL); - //TColumnType type; - //type.__set_type(TPrimitiveType::INT); - expr_node.__set_type(gen_type_desc(TPrimitiveType::INT)); - expr_node.__set_num_children(0); - expr_node.__isset.int_literal = true; - TIntLiteral int_literal; - int_literal.__set_value(v2); - expr_node.__set_int_literal(int_literal); - exprs.nodes.push_back(expr_node); - } - // Expr* root_expr = NULL; - ExprContent expr_content = NULL; - - if (Expr::create_expr_tree(&_obj_pool, exprs, &root_expr).ok()) { - return root_expr; - } else { - return NULL; - } - } - - Expr* create_binary_predicate() { - TExpr exprs; - { - TExprNode expr_node; - expr_node.__set_node_type(TExprNodeType::BINARY_PRED); - //TColumnType type; - //type.__set_type(TPrimitiveType::INT); - expr_node.__set_type(gen_type_desc(TPrimitiveType::INT)); - expr_node.__set_num_children(2); - expr_node.__isset.opcode = true; - //expr_node.__set_opcode(TExprOpcode::LT_INT_INT); - expr_node.__isset.vector_opcode = true; - //expr_node.__set_vector_opcode( - // TExprOpcode::FILTER_LT_INT_INT); - exprs.nodes.push_back(expr_node); - } - { - TExprNode expr_node; - expr_node.__set_node_type(TExprNodeType::SLOT_REF); - //TColumnType type; - //type.__set_type(TPrimitiveType::INT); - expr_node.__set_type(gen_type_desc(TPrimitiveType::INT)); - expr_node.__set_num_children(0); - expr_node.__isset.slot_ref = true; - TSlotRef slot_ref; - slot_ref.__set_slot_id(1); - slot_ref.__set_tuple_id(0); - expr_node.__set_slot_ref(slot_ref); - expr_node.__isset.output_column = true; - expr_node.__set_output_column(1); - exprs.nodes.push_back(expr_node); - } - { - TExprNode expr_node; - expr_node.__set_node_type(TExprNodeType::INT_LITERAL); - //TColumnType type; - //type.__set_type(TPrimitiveType::INT); - expr_node.__set_type(gen_type_desc(TPrimitiveType::INT)); - expr_node.__set_num_children(0); - expr_node.__isset.int_literal = true; - TIntLiteral int_literal; - int_literal.__set_value(10); - expr_node.__set_int_literal(int_literal); - exprs.nodes.push_back(expr_node); - } - Expr* root_expr = NULL; - - if (Expr::create_expr_tree(&_obj_pool, exprs, &root_expr).ok()) { - return root_expr; - } else { - return NULL; - } - } -private: - TCreateTabletReq _create_tablet; - std::string _tablet_name; - TPushReq _push_req; - - TPlanNode _tnode; - ObjectPool _obj_pool; - DescriptorTbl* _desc_tbl; - RuntimeState _runtime_stat; - RowDescriptor* _row_desc; - vector<TScanRangeParams> _scan_ranges; - RuntimeProfile* _profile; -}; - - -TEST_F(TestVectorizedOLAPReader, binary_predicate) { - init_olap_row(); - init_scan_node(); - - Expr* expr = create_binary_predicate(); - ASSERT_TRUE(expr != NULL); - ASSERT_TRUE(expr->prepare(&_runtime_stat, *_row_desc).ok()); - - TFetchRequest fetch_reques; - - fetch_reques.__set_aggregation(false); - fetch_reques.__set_schema_hash(1508825676); - fetch_reques.__set_version(_push_req.version); - fetch_reques.__set_version_hash(_push_req.version_hash); - fetch_reques.__set_tablet_id(10003); - - TFetchStartKey start_key; - start_key.__set_key(std::vector<std::string>(1, "1")); - fetch_reques.__set_start_key(std::vector<TFetchStartKey>(1, start_key)); - fetch_reques.__set_range("ge"); - - TFetchEndKey end_key; - end_key.__set_key(std::vector<std::string>(1, "2")); - fetch_reques.__set_end_key(std::vector<TFetchEndKey>(1, end_key)); - fetch_reques.__set_end_range("le"); - - std::vector<std::string> field_vec; - field_vec.push_back("k1"); - field_vec.push_back("k2"); - field_vec.push_back("k3"); - field_vec.push_back("k4"); - field_vec.push_back("k5"); - field_vec.push_back("k6"); - field_vec.push_back("k7"); - field_vec.push_back("k8"); - field_vec.push_back("v"); - fetch_reques.__set_field(field_vec); - - TupleDescriptor *tuple_desc = _desc_tbl->get_tuple_descriptor(0); - std::vector<Expr*> conjuncts; - conjuncts.push_back(expr); - OLAPReader olap_reader(*tuple_desc); - ASSERT_TRUE(olap_reader.init(fetch_reques, &conjuncts, _profile).ok()); - //ASSERT_TRUE(olap_reader.init(fetch_reques, NULL).ok()); - - char tuple_buf[1024]; - bzero(tuple_buf, 1024); - Tuple *tuple = reinterpret_cast<Tuple*>(tuple_buf); - bool eof; - int64_t raw_rows_read = 0; - ASSERT_TRUE(olap_reader.next_tuple(tuple, &raw_rows_read, &eof).ok()); - - ASSERT_EQ(1, *reinterpret_cast<const int8_t*> - (tuple->get_slot(tuple_desc->slots()[0]->tuple_offset()))); - ASSERT_EQ(1, *reinterpret_cast<const int32_t*> - (tuple->get_slot(tuple_desc->slots()[1]->tuple_offset()))); - { - StringValue *slot = reinterpret_cast<StringValue *>( - tuple->get_slot(tuple_desc->slots()[2]->tuple_offset())); - ASSERT_STREQ("68aea72b-8953-4aff-86ec-1d69f34bd830", - std::string(slot->ptr, slot->len).c_str()); - } - { - DateTimeValue *slot = reinterpret_cast<DateTimeValue *>( - tuple->get_slot(tuple_desc->slots()[3]->tuple_offset())); - ASSERT_STREQ("2014-04-13", slot->debug_string().c_str()); - } - { - DateTimeValue *slot = reinterpret_cast<DateTimeValue *>( - tuple->get_slot(tuple_desc->slots()[4]->tuple_offset())); - ASSERT_STREQ("2014-04-13 15:47:02", slot->debug_string().c_str()); - } - { - DecimalValue *slot = reinterpret_cast<DecimalValue *>( - tuple->get_slot(tuple_desc->slots()[5]->tuple_offset())); - ASSERT_STREQ("-159.773", slot->to_string().c_str()); - } - ASSERT_EQ(0, *reinterpret_cast<const int16_t*> - (tuple->get_slot(tuple_desc->slots()[6]->tuple_offset()))); - { - StringValue *slot = reinterpret_cast<StringValue *>( - tuple->get_slot(tuple_desc->slots()[7]->tuple_offset())); - ASSERT_STREQ("char", std::string(slot->ptr, slot->len).c_str()); - } - ASSERT_EQ(100, *reinterpret_cast<const int64_t*> - (tuple->get_slot(tuple_desc->slots()[8]->tuple_offset()))); - - for (int i = 0; i < 4; ++i) { - ASSERT_TRUE(!eof); - ASSERT_TRUE(olap_reader.next_tuple(tuple, &raw_rows_read, &eof).ok()); - } - ASSERT_TRUE(eof); -} - -TEST_F(TestVectorizedOLAPReader, in_predicate) { - init_olap_row(); - init_scan_node(); - - Expr* expr = create_in_predicate(2, 4); - ASSERT_TRUE(expr != NULL); - ASSERT_TRUE(expr->prepare(&_runtime_stat, *_row_desc).ok()); - - TFetchRequest fetch_reques; - - fetch_reques.__set_aggregation(false); - fetch_reques.__set_schema_hash(1508825676); - fetch_reques.__set_version(_push_req.version); - fetch_reques.__set_version_hash(_push_req.version_hash); - fetch_reques.__set_tablet_id(10003); - - TFetchStartKey start_key; - start_key.__set_key(std::vector<std::string>(1, "1")); - fetch_reques.__set_start_key(std::vector<TFetchStartKey>(1, start_key)); - fetch_reques.__set_range("ge"); - - TFetchEndKey end_key; - end_key.__set_key(std::vector<std::string>(1, "2")); - fetch_reques.__set_end_key(std::vector<TFetchEndKey>(1, end_key)); - fetch_reques.__set_end_range("le"); - - std::vector<std::string> field_vec; - field_vec.push_back("k1"); - field_vec.push_back("k2"); - field_vec.push_back("k3"); - field_vec.push_back("k4"); - field_vec.push_back("k5"); - field_vec.push_back("k6"); - field_vec.push_back("k7"); - field_vec.push_back("k8"); - field_vec.push_back("v"); - fetch_reques.__set_field(field_vec); - - TupleDescriptor *tuple_desc = _desc_tbl->get_tuple_descriptor(0); - std::vector<Expr*> conjuncts; - conjuncts.push_back(expr); - OLAPReader olap_reader(*tuple_desc); - ASSERT_TRUE(olap_reader.init(fetch_reques, &conjuncts, _profile).ok()); - //ASSERT_TRUE(olap_reader.init(fetch_reques, NULL).ok()); - - char tuple_buf[1024]; - bzero(tuple_buf, 1024); - Tuple *tuple = reinterpret_cast<Tuple*>(tuple_buf); - bool eof; - int64_t raw_rows_read = 0; - ASSERT_TRUE(olap_reader.next_tuple(tuple, &raw_rows_read, &eof).ok()); - - ASSERT_EQ(1, *reinterpret_cast<const int8_t*> - (tuple->get_slot(tuple_desc->slots()[0]->tuple_offset()))); - ASSERT_EQ(2, *reinterpret_cast<const int32_t*> - (tuple->get_slot(tuple_desc->slots()[1]->tuple_offset()))); - { - StringValue *slot = reinterpret_cast<StringValue *>( - tuple->get_slot(tuple_desc->slots()[2]->tuple_offset())); - ASSERT_STREQ("247bf55b-9a49-41b4-90d4-13ef34eb1f6a", - std::string(slot->ptr, slot->len).c_str()); - } - { - DateTimeValue *slot = reinterpret_cast<DateTimeValue *>( - tuple->get_slot(tuple_desc->slots()[3]->tuple_offset())); - ASSERT_STREQ("2014-01-14", slot->debug_string().c_str()); - } - { - DateTimeValue *slot = reinterpret_cast<DateTimeValue *>( - tuple->get_slot(tuple_desc->slots()[4]->tuple_offset())); - ASSERT_STREQ("2014-01-14 16:57:12", slot->debug_string().c_str()); - } - { - DecimalValue *slot = reinterpret_cast<DecimalValue *>( - tuple->get_slot(tuple_desc->slots()[5]->tuple_offset())); - ASSERT_STREQ("386.228", slot->to_string().c_str()); - } - ASSERT_EQ(0, *reinterpret_cast<const int16_t*> - (tuple->get_slot(tuple_desc->slots()[6]->tuple_offset()))); - { - StringValue *slot = reinterpret_cast<StringValue *>( - tuple->get_slot(tuple_desc->slots()[7]->tuple_offset())); - ASSERT_STREQ("char", std::string(slot->ptr, slot->len).c_str()); - } - ASSERT_EQ(100, *reinterpret_cast<const int64_t*> - (tuple->get_slot(tuple_desc->slots()[8]->tuple_offset()))); - - for (int i = 0; i < 3; ++i) { - ASSERT_TRUE(!eof); - ASSERT_TRUE(olap_reader.next_tuple(tuple, &raw_rows_read, &eof).ok()); - } - ASSERT_TRUE(eof); - -} - -TEST_F(TestVectorizedOLAPReader, empty_result) { - init_olap_row(); - init_scan_node(); - - Expr* expr = create_in_predicate(0, 3); - ASSERT_TRUE(expr != NULL); - ASSERT_TRUE(expr->prepare(&_runtime_stat, *_row_desc).ok()); - - TFetchRequest fetch_reques; - - fetch_reques.__set_aggregation(false); - fetch_reques.__set_schema_hash(1508825676); - fetch_reques.__set_version(_push_req.version); - fetch_reques.__set_version_hash(_push_req.version_hash); - fetch_reques.__set_tablet_id(10003); - - TFetchStartKey start_key; - start_key.__set_key(std::vector<std::string>(1, "1")); - fetch_reques.__set_start_key(std::vector<TFetchStartKey>(1, start_key)); - fetch_reques.__set_range("ge"); - - TFetchEndKey end_key; - end_key.__set_key(std::vector<std::string>(1, "2")); - fetch_reques.__set_end_key(std::vector<TFetchEndKey>(1, end_key)); - fetch_reques.__set_end_range("le"); - - std::vector<std::string> field_vec; - field_vec.push_back("k1"); - field_vec.push_back("k2"); - field_vec.push_back("k3"); - field_vec.push_back("k4"); - field_vec.push_back("k5"); - field_vec.push_back("k6"); - field_vec.push_back("k7"); - field_vec.push_back("k8"); - field_vec.push_back("v"); - fetch_reques.__set_field(field_vec); - - TupleDescriptor *tuple_desc = _desc_tbl->get_tuple_descriptor(0); - std::vector<Expr*> conjuncts; - conjuncts.push_back(expr); - OLAPReader olap_reader(*tuple_desc); - ASSERT_TRUE(olap_reader.init(fetch_reques, &conjuncts, _profile).ok()); - char tuple_buf[1024]; - bzero(tuple_buf, 1024); - Tuple *tuple = reinterpret_cast<Tuple*>(tuple_buf); - bool eof; - int64_t raw_rows_read = 0; - ASSERT_TRUE(olap_reader.next_tuple(tuple, &raw_rows_read, &eof).ok()); - ASSERT_TRUE(eof); -} - -TEST_F(TestVectorizedOLAPReader, column_test) { - init_olap_column(); - init_scan_node(); - - Expr* expr = create_binary_predicate(); - ASSERT_TRUE(expr != NULL); - ASSERT_TRUE(expr->prepare(&_runtime_stat, *_row_desc).ok()); - - TFetchRequest fetch_reques; - - fetch_reques.__set_aggregation(false); - fetch_reques.__set_schema_hash(1508825676); - fetch_reques.__set_version(_push_req.version); - fetch_reques.__set_version_hash(_push_req.version_hash); - fetch_reques.__set_tablet_id(10003); - - TFetchStartKey start_key; - start_key.__set_key(std::vector<std::string>(1, "1")); - fetch_reques.__set_start_key(std::vector<TFetchStartKey>(1, start_key)); - fetch_reques.__set_range("ge"); - - TFetchEndKey end_key; - end_key.__set_key(std::vector<std::string>(1, "2")); - fetch_reques.__set_end_key(std::vector<TFetchEndKey>(1, end_key)); - fetch_reques.__set_end_range("le"); - - std::vector<std::string> field_vec; - field_vec.push_back("k1"); - field_vec.push_back("k2"); - field_vec.push_back("k3"); - field_vec.push_back("k4"); - field_vec.push_back("k5"); - field_vec.push_back("k6"); - field_vec.push_back("k7"); - field_vec.push_back("k8"); - field_vec.push_back("v"); - fetch_reques.__set_field(field_vec); - - TupleDescriptor *tuple_desc = _desc_tbl->get_tuple_descriptor(0); - std::vector<Expr*> conjuncts; - conjuncts.push_back(expr); - OLAPReader olap_reader(*tuple_desc); - //ASSERT_TRUE(olap_reader.init(fetch_reques, &conjuncts).ok()); - ASSERT_TRUE(olap_reader.init(fetch_reques, NULL, _profile).ok()); - - char tuple_buf[1024]; - bzero(tuple_buf, 1024); - Tuple *tuple = reinterpret_cast<Tuple*>(tuple_buf); - bool eof; - int64_t raw_rows_read = 0; - ASSERT_TRUE(olap_reader.next_tuple(tuple, &raw_rows_read, &eof).ok()); - - ASSERT_EQ(1, *reinterpret_cast<const int8_t*> - (tuple->get_slot(tuple_desc->slots()[0]->tuple_offset()))); - ASSERT_EQ(1, *reinterpret_cast<const int32_t*> - (tuple->get_slot(tuple_desc->slots()[1]->tuple_offset()))); - { - StringValue *slot = reinterpret_cast<StringValue *>( - tuple->get_slot(tuple_desc->slots()[2]->tuple_offset())); - ASSERT_STREQ("68aea72b-8953-4aff-86ec-1d69f34bd830", - std::string(slot->ptr, slot->len).c_str()); - } - { - DateTimeValue *slot = reinterpret_cast<DateTimeValue *>( - tuple->get_slot(tuple_desc->slots()[3]->tuple_offset())); - ASSERT_STREQ("2014-04-13", slot->debug_string().c_str()); - } - { - DateTimeValue *slot = reinterpret_cast<DateTimeValue *>( - tuple->get_slot(tuple_desc->slots()[4]->tuple_offset())); - ASSERT_STREQ("2014-04-13 15:47:02", slot->debug_string().c_str()); - } - { - DecimalValue *slot = reinterpret_cast<DecimalValue *>( - tuple->get_slot(tuple_desc->slots()[5]->tuple_offset())); - ASSERT_STREQ("-159.773", slot->to_string().c_str()); - } - ASSERT_EQ(0, *reinterpret_cast<const int16_t*> - (tuple->get_slot(tuple_desc->slots()[6]->tuple_offset()))); - { - StringValue *slot = reinterpret_cast<StringValue *>( - tuple->get_slot(tuple_desc->slots()[7]->tuple_offset())); - ASSERT_STREQ("char", std::string(slot->ptr, slot->len).c_str()); - } - ASSERT_EQ(100, *reinterpret_cast<const int64_t*> - (tuple->get_slot(tuple_desc->slots()[8]->tuple_offset()))); - - for (int i = 0; i < 16; ++i) { - ASSERT_TRUE(!eof); - ASSERT_TRUE(olap_reader.next_tuple(tuple, &raw_rows_read, &eof).ok()); - } - ASSERT_TRUE(eof); -} - -} // namespace doris - -int main(int argc, char** argv) { - std::string conffile = std::string(getenv("DORIS_HOME")) + "/conf/be.conf"; - if (!doris::config::init(conffile.c_str(), false)) { - fprintf(stderr, "error read config file. \n"); - return -1; - } - doris::init_glog("be-test"); - ::testing::InitGoogleTest(&argc, argv); - - int ret = doris::OLAP_SUCCESS; - doris::set_up(); - ret = RUN_ALL_TESTS(); - doris::tear_down(); - - google::protobuf::ShutdownProtobufLibrary(); - return ret; -} --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org