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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]