This is an automated email from the ASF dual-hosted git repository. morningman 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 b1c1ffd [Refactor] Refactor olap scan node code (#4823) b1c1ffd is described below commit b1c1ffda4a0d5ff2f0be4f9d2f25997a31537ea8 Author: HappenLee <happen...@hotmail.com> AuthorDate: Sun Nov 1 09:12:23 2020 +0800 [Refactor] Refactor olap scan node code (#4823) 1. Remove meaningless code in Doris 2. Replace string copy by string reference 3. Simplified the implementation of some functions --- be/src/exec/olap_common.h | 30 ++++++++---------------------- be/src/exec/olap_scan_node.cpp | 17 +++++++---------- be/src/exec/olap_scan_node.h | 8 ++++---- be/src/exec/olap_scanner.cpp | 5 ----- 4 files changed, 19 insertions(+), 41 deletions(-) diff --git a/be/src/exec/olap_common.h b/be/src/exec/olap_common.h index 8eda626..9d4c7cf 100644 --- a/be/src/exec/olap_common.h +++ b/be/src/exec/olap_common.h @@ -115,13 +115,13 @@ public: return _fixed_values.size(); } - std::string to_olap_filter(std::list<TCondition> &filters) { + void to_olap_filter(std::list<TCondition> &filters) { if (is_fixed_value_range()) { TCondition condition; condition.__set_column_name(_column_name); condition.__set_condition_op("*="); - for (auto value : _fixed_values) { + for (const auto& value : _fixed_values) { condition.condition_values.push_back(cast_to_string(value)); } @@ -151,8 +151,6 @@ public: filters.push_back(high); } } - - return ""; } void clear() { @@ -635,9 +633,9 @@ Status OlapScanKeys::extend_scan_key(ColumnValueRange<T>& range, int32_t max_sca //for this case, we need to add null value to fixed values bool has_converted = false; + auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size(); if (range.is_fixed_value_range()) { - if ((_begin_scan_keys.empty() && range.get_fixed_value_size() > max_scan_key_num) - || range.get_fixed_value_size() * _begin_scan_keys.size() > max_scan_key_num) { + if (range.get_fixed_value_size() * scan_keys_size > max_scan_key_num) { if (range.is_range_value_convertible()) { range.convert_to_range_value(); } else { @@ -646,23 +644,11 @@ Status OlapScanKeys::extend_scan_key(ColumnValueRange<T>& range, int32_t max_sca } } else { if (range.is_fixed_value_convertible() && _is_convertible) { - if (_begin_scan_keys.empty()) { - if (range.get_convertible_fixed_value_size() < max_scan_key_num) { - if (range.is_low_value_mininum() && range.is_high_value_maximum()) { - has_converted = true; - } - - range.convert_to_fixed_value(); - } - } else { - if (range.get_convertible_fixed_value_size() * _begin_scan_keys.size() - < max_scan_key_num) { - if (range.is_low_value_mininum() && range.is_high_value_maximum()) { - has_converted = true; - } - - range.convert_to_fixed_value(); + if (range.get_convertible_fixed_value_size() * scan_keys_size < max_scan_key_num) { + if (range.is_low_value_mininum() && range.is_high_value_maximum()) { + has_converted = true; } + range.convert_to_fixed_value(); } } } diff --git a/be/src/exec/olap_scan_node.cpp b/be/src/exec/olap_scan_node.cpp index 831304f..bcd6e0e 100644 --- a/be/src/exec/olap_scan_node.cpp +++ b/be/src/exec/olap_scan_node.cpp @@ -368,11 +368,11 @@ Status OlapScanNode::start_scan(RuntimeState* state) { RETURN_IF_ERROR(build_olap_filters()); VLOG(1) << "BuildScanKey"; - // 4. Using `Key Column`'s ColumnValueRange to split ScanRange to several `Sub ScanRange` + // 3. Using `Key Column`'s ColumnValueRange to split ScanRange to several `Sub ScanRange` RETURN_IF_ERROR(build_scan_key()); VLOG(1) << "StartScanThread"; - // 6. Start multi thread to read several `Sub Sub ScanRange` + // 4. Start multi thread to read several `Sub Sub ScanRange` RETURN_IF_ERROR(start_scan_thread(state)); return Status::OK(); @@ -502,7 +502,7 @@ Status OlapScanNode::normalize_conjuncts() { Status OlapScanNode::build_olap_filters() { _olap_filter.clear(); - for (auto iter : _column_value_ranges) { + for (auto& iter : _column_value_ranges) { ToOlapFilterVisitor visitor; boost::variant<std::list<TCondition>> filters; boost::apply_visitor(visitor, iter.second, filters); @@ -512,7 +512,7 @@ Status OlapScanNode::build_olap_filters() { continue; } - for (auto filter : new_filters) { + for (const auto& filter : new_filters) { _olap_filter.push_back(filter); } } @@ -526,13 +526,10 @@ Status OlapScanNode::build_scan_key() { DCHECK(column_types.size() == column_names.size()); // 1. construct scan key except last olap engine short key - int column_index = 0; _scan_keys.set_is_convertible(limit() == -1); - for (; column_index < column_names.size() && !_scan_keys.has_range_value(); ++column_index) { - std::map<std::string, ColumnValueRangeType>::iterator column_range_iter - = _column_value_ranges.find(column_names[column_index]); - + for (int column_index = 0; column_index < column_names.size() && !_scan_keys.has_range_value(); ++column_index) { + auto column_range_iter = _column_value_ranges.find(column_names[column_index]); if (_column_value_ranges.end() == column_range_iter) { break; } @@ -956,7 +953,7 @@ Status OlapScanNode::normalize_in_and_eq_predicate(SlotDescriptor* slot, ColumnV return Status::OK(); } -void OlapScanNode::construct_is_null_pred_in_where_pred(Expr* expr, SlotDescriptor* slot, std::string is_null_str) { +void OlapScanNode::construct_is_null_pred_in_where_pred(Expr* expr, SlotDescriptor* slot, const std::string& is_null_str) { if (expr->node_type() != TExprNodeType::SLOT_REF) { return; } diff --git a/be/src/exec/olap_scan_node.h b/be/src/exec/olap_scan_node.h index f15217d..fd5f904 100644 --- a/be/src/exec/olap_scan_node.h +++ b/be/src/exec/olap_scan_node.h @@ -95,11 +95,11 @@ protected: typedef boost::variant<std::list<std::string>> string_list; - class ToOlapFilterVisitor : public boost::static_visitor<std::string> { + class ToOlapFilterVisitor : public boost::static_visitor<void> { public: template<class T, class P> - std::string operator()(T& v, P& v2) const { - return v.to_olap_filter(v2); + void operator()(T& v, P& v2) const { + v.to_olap_filter(v2); } }; @@ -159,7 +159,7 @@ protected: private: void _init_counter(RuntimeState* state); - void construct_is_null_pred_in_where_pred(Expr* expr, SlotDescriptor* slot, std::string is_null_str); + void construct_is_null_pred_in_where_pred(Expr* expr, SlotDescriptor* slot, const std::string& is_null_str); friend class OlapScanner; diff --git a/be/src/exec/olap_scanner.cpp b/be/src/exec/olap_scanner.cpp index 6044c92..68062e6 100644 --- a/be/src/exec/olap_scanner.cpp +++ b/be/src/exec/olap_scanner.cpp @@ -34,11 +34,6 @@ namespace doris { -static const std::string SCANNER_THREAD_TOTAL_WALLCLOCK_TIME = - "ScannerThreadsTotalWallClockTime"; -static const std::string MATERIALIZE_TUPLE_TIMER = - "MaterializeTupleTime(*)"; - OlapScanner::OlapScanner( RuntimeState* runtime_state, OlapScanNode* parent, --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org