This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch branch-1.2-lts in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-1.2-lts by this push: new 13b055d296 [fix](scan) Avoid using incorrect cache code in ComparisonPredicate (#18341) 13b055d296 is described below commit 13b055d296cd0350f7a03c2631077c166326b6cb Author: Jerry Hu <mrh...@gmail.com> AuthorDate: Mon Apr 3 18:07:10 2023 +0800 [fix](scan) Avoid using incorrect cache code in ComparisonPredicate (#18341) --- be/src/olap/comparison_predicate.h | 8 ++++++-- be/src/olap/rowset/segment_v2/segment_iterator.cpp | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/be/src/olap/comparison_predicate.h b/be/src/olap/comparison_predicate.h index 599bbd50ab..6898eeb1c1 100644 --- a/be/src/olap/comparison_predicate.h +++ b/be/src/olap/comparison_predicate.h @@ -36,7 +36,9 @@ public: _value(value) {} void clone(ColumnPredicate** to) const override { - *to = new ComparisonPredicateBase(_column_id, _value, _opposite); + auto* cloned = new ComparisonPredicateBase(_column_id, _value, _opposite); + cloned->_cache_code_enabled = true; + *to = cloned; } bool need_to_clone() const override { return true; } @@ -628,7 +630,8 @@ private: __attribute__((flatten)) int32_t _find_code_from_dictionary_column( const vectorized::ColumnDictI32& column) const { - if (UNLIKELY(_cached_code == _InvalidateCodeValue)) { + /// if _cache_code_enabled is false, always find the code from dict. + if (UNLIKELY(!_cache_code_enabled || _cached_code == _InvalidateCodeValue)) { _cached_code = _is_range() ? column.find_code_by_bound(_value, _is_greater(), _is_eq()) : column.find_code(_value); } @@ -643,6 +646,7 @@ private: static constexpr int32_t _InvalidateCodeValue = std::numeric_limits<int32_t>::max(); mutable int32_t _cached_code; + bool _cache_code_enabled = false; T _value; }; diff --git a/be/src/olap/rowset/segment_v2/segment_iterator.cpp b/be/src/olap/rowset/segment_v2/segment_iterator.cpp index d9cac145c8..9fded3c31d 100644 --- a/be/src/olap/rowset/segment_v2/segment_iterator.cpp +++ b/be/src/olap/rowset/segment_v2/segment_iterator.cpp @@ -166,6 +166,7 @@ SegmentIterator::~SegmentIterator() { Status SegmentIterator::init(const StorageReadOptions& opts) { _opts = opts; + _col_predicates.clear(); for (auto& predicate : opts.column_predicates) { if (predicate->need_to_clone()) { ColumnPredicate* cloned; --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org