Coverage Report

Created: 2026-04-09 04:54

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
be/src/storage/olap_scan_common.h
Line
Count
Source
1
// Licensed to the Apache Software Foundation (ASF) under one
2
// or more contributor license agreements.  See the NOTICE file
3
// distributed with this work for additional information
4
// regarding copyright ownership.  The ASF licenses this file
5
// to you under the Apache License, Version 2.0 (the
6
// "License"); you may not use this file except in compliance
7
// with the License.  You may obtain a copy of the License at
8
//
9
//   http://www.apache.org/licenses/LICENSE-2.0
10
//
11
// Unless required by applicable law or agreed to in writing,
12
// software distributed under the License is distributed on an
13
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
// KIND, either express or implied.  See the License for the
15
// specific language governing permissions and limitations
16
// under the License.
17
18
#pragma once
19
20
#include <gen_cpp/Metrics_types.h>
21
#include <gen_cpp/PaloInternalService_types.h>
22
#include <glog/logging.h>
23
#include <stddef.h>
24
25
#include <boost/container/detail/std_fwd.hpp>
26
#include <boost/lexical_cast.hpp>
27
#include <cstdint>
28
#include <iterator>
29
#include <limits>
30
#include <memory>
31
#include <set>
32
#include <sstream>
33
#include <string>
34
#include <utility>
35
#include <variant>
36
#include <vector>
37
38
#include "common/compare.h"
39
#include "common/status.h"
40
#include "core/data_type/define_primitive_type.h"
41
#include "core/data_type/primitive_type.h"
42
#include "core/type_limit.h"
43
#include "core/types.h"
44
#include "core/value/ipv4_value.h"
45
#include "core/value/ipv6_value.h"
46
#include "core/value/time_value.h"
47
#include "core/value/vdatetime_value.h"
48
#include "exprs/function/cast/cast_to_string.h"
49
#include "runtime/runtime_profile.h"
50
#include "storage/olap_common.h"
51
#include "storage/olap_tuple.h"
52
#include "storage/olap_utils.h"
53
#include "storage/predicate/filter_olap_param.h"
54
#include "util/io_helper.h"
55
56
namespace doris {
57
#include "common/compile_check_begin.h"
58
59
/**
60
 * @brief Column's value range
61
 **/
62
template <PrimitiveType primitive_type>
63
class ColumnValueRange {
64
public:
65
    using CppType = typename PrimitiveTypeTraits<primitive_type>::CppType;
66
    using SetType = std::set<CppType, doris::Less<CppType>>;
67
    using IteratorType = typename SetType::iterator;
68
69
    ColumnValueRange();
70
71
    ColumnValueRange(std::string col_name, bool is_nullable_col, int precision, int scale);
72
73
    // should add fixed value before add range
74
    Status add_fixed_value(const CppType& value);
75
76
    // should remove fixed value after add fixed value
77
    void remove_fixed_value(const CppType& value);
78
79
    Status add_range(SQLFilterOp op, CppType value);
80
81
    bool is_fixed_value_range() const;
82
83
    bool is_scope_value_range() const;
84
85
    bool is_empty_value_range() const;
86
87
    bool is_fixed_value_convertible() const;
88
89
    bool is_range_value_convertible() const;
90
91
    void convert_to_range_value();
92
93
    bool convert_to_avg_range_value(std::vector<OlapTuple>& begin_scan_keys,
94
                                    std::vector<OlapTuple>& end_scan_keys, bool& begin_include,
95
                                    bool& end_include, int32_t max_scan_key_num);
96
97
    bool convert_to_close_range(std::vector<OlapTuple>& begin_scan_keys,
98
                                std::vector<OlapTuple>& end_scan_keys, bool& begin_include,
99
                                bool& end_include);
100
101
115k
    constexpr bool is_reject_split_type() const { return _is_reject_split_type; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE20is_reject_split_typeEv
Line
Count
Source
101
2.10k
    constexpr bool is_reject_split_type() const { return _is_reject_split_type; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE20is_reject_split_typeEv
Line
Count
Source
101
231
    constexpr bool is_reject_split_type() const { return _is_reject_split_type; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE20is_reject_split_typeEv
Line
Count
Source
101
63.0k
    constexpr bool is_reject_split_type() const { return _is_reject_split_type; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE20is_reject_split_typeEv
Line
Count
Source
101
43.6k
    constexpr bool is_reject_split_type() const { return _is_reject_split_type; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE20is_reject_split_typeEv
Line
Count
Source
101
4.24k
    constexpr bool is_reject_split_type() const { return _is_reject_split_type; }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE20is_reject_split_typeEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE20is_reject_split_typeEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE20is_reject_split_typeEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE20is_reject_split_typeEv
Line
Count
Source
101
1
    constexpr bool is_reject_split_type() const { return _is_reject_split_type; }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE20is_reject_split_typeEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE20is_reject_split_typeEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE20is_reject_split_typeEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE20is_reject_split_typeEv
Line
Count
Source
101
34
    constexpr bool is_reject_split_type() const { return _is_reject_split_type; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE20is_reject_split_typeEv
Line
Count
Source
101
2.18k
    constexpr bool is_reject_split_type() const { return _is_reject_split_type; }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE20is_reject_split_typeEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE20is_reject_split_typeEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE20is_reject_split_typeEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE20is_reject_split_typeEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE20is_reject_split_typeEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE20is_reject_split_typeEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE20is_reject_split_typeEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE20is_reject_split_typeEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE20is_reject_split_typeEv
102
103
    void intersection(ColumnValueRange<primitive_type>& range);
104
105
11.6k
    void set_empty_value_range() {
106
11.6k
        _fixed_values.clear();
107
11.6k
        _low_value = TYPE_MAX;
108
11.6k
        _high_value = TYPE_MIN;
109
11.6k
        _contain_null = false;
110
11.6k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE21set_empty_value_rangeEv
Line
Count
Source
105
66
    void set_empty_value_range() {
106
66
        _fixed_values.clear();
107
66
        _low_value = TYPE_MAX;
108
66
        _high_value = TYPE_MIN;
109
66
        _contain_null = false;
110
66
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE21set_empty_value_rangeEv
Line
Count
Source
105
34
    void set_empty_value_range() {
106
34
        _fixed_values.clear();
107
34
        _low_value = TYPE_MAX;
108
34
        _high_value = TYPE_MIN;
109
34
        _contain_null = false;
110
34
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE21set_empty_value_rangeEv
Line
Count
Source
105
431
    void set_empty_value_range() {
106
431
        _fixed_values.clear();
107
431
        _low_value = TYPE_MAX;
108
431
        _high_value = TYPE_MIN;
109
431
        _contain_null = false;
110
431
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE21set_empty_value_rangeEv
Line
Count
Source
105
10.1k
    void set_empty_value_range() {
106
10.1k
        _fixed_values.clear();
107
10.1k
        _low_value = TYPE_MAX;
108
10.1k
        _high_value = TYPE_MIN;
109
10.1k
        _contain_null = false;
110
10.1k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE21set_empty_value_rangeEv
Line
Count
Source
105
18
    void set_empty_value_range() {
106
18
        _fixed_values.clear();
107
18
        _low_value = TYPE_MAX;
108
18
        _high_value = TYPE_MIN;
109
18
        _contain_null = false;
110
18
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE21set_empty_value_rangeEv
Line
Count
Source
105
50
    void set_empty_value_range() {
106
50
        _fixed_values.clear();
107
50
        _low_value = TYPE_MAX;
108
50
        _high_value = TYPE_MIN;
109
50
        _contain_null = false;
110
50
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE21set_empty_value_rangeEv
Line
Count
Source
105
74
    void set_empty_value_range() {
106
74
        _fixed_values.clear();
107
74
        _low_value = TYPE_MAX;
108
74
        _high_value = TYPE_MIN;
109
74
        _contain_null = false;
110
74
    }
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE21set_empty_value_rangeEv
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE21set_empty_value_rangeEv
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE21set_empty_value_rangeEv
Line
Count
Source
105
36
    void set_empty_value_range() {
106
36
        _fixed_values.clear();
107
36
        _low_value = TYPE_MAX;
108
36
        _high_value = TYPE_MIN;
109
36
        _contain_null = false;
110
36
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE21set_empty_value_rangeEv
Line
Count
Source
105
323
    void set_empty_value_range() {
106
323
        _fixed_values.clear();
107
323
        _low_value = TYPE_MAX;
108
323
        _high_value = TYPE_MIN;
109
323
        _contain_null = false;
110
323
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE21set_empty_value_rangeEv
Line
Count
Source
105
193
    void set_empty_value_range() {
106
193
        _fixed_values.clear();
107
193
        _low_value = TYPE_MAX;
108
193
        _high_value = TYPE_MIN;
109
193
        _contain_null = false;
110
193
    }
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE21set_empty_value_rangeEv
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE21set_empty_value_rangeEv
Line
Count
Source
105
76
    void set_empty_value_range() {
106
76
        _fixed_values.clear();
107
76
        _low_value = TYPE_MAX;
108
76
        _high_value = TYPE_MIN;
109
76
        _contain_null = false;
110
76
    }
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE21set_empty_value_rangeEv
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE21set_empty_value_rangeEv
Line
Count
Source
105
38
    void set_empty_value_range() {
106
38
        _fixed_values.clear();
107
38
        _low_value = TYPE_MAX;
108
38
        _high_value = TYPE_MIN;
109
38
        _contain_null = false;
110
38
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE21set_empty_value_rangeEv
Line
Count
Source
105
18
    void set_empty_value_range() {
106
18
        _fixed_values.clear();
107
18
        _low_value = TYPE_MAX;
108
18
        _high_value = TYPE_MIN;
109
18
        _contain_null = false;
110
18
    }
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE21set_empty_value_rangeEv
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE21set_empty_value_rangeEv
Line
Count
Source
105
45
    void set_empty_value_range() {
106
45
        _fixed_values.clear();
107
45
        _low_value = TYPE_MAX;
108
45
        _high_value = TYPE_MIN;
109
45
        _contain_null = false;
110
45
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE21set_empty_value_rangeEv
Line
Count
Source
105
18
    void set_empty_value_range() {
106
18
        _fixed_values.clear();
107
18
        _low_value = TYPE_MAX;
108
18
        _high_value = TYPE_MIN;
109
18
        _contain_null = false;
110
18
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE21set_empty_value_rangeEv
Line
Count
Source
105
40
    void set_empty_value_range() {
106
40
        _fixed_values.clear();
107
40
        _low_value = TYPE_MAX;
108
40
        _high_value = TYPE_MIN;
109
40
        _contain_null = false;
110
40
    }
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE21set_empty_value_rangeEv
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE21set_empty_value_rangeEv
Line
Count
Source
105
2
    void set_empty_value_range() {
106
2
        _fixed_values.clear();
107
2
        _low_value = TYPE_MAX;
108
2
        _high_value = TYPE_MIN;
109
2
        _contain_null = false;
110
2
    }
111
112
287k
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE19get_fixed_value_setEv
Line
Count
Source
112
9
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE19get_fixed_value_setEv
Line
Count
Source
112
3
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE19get_fixed_value_setEv
Line
Count
Source
112
2.09k
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE19get_fixed_value_setEv
Line
Count
Source
112
549
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE19get_fixed_value_setEv
Line
Count
Source
112
137
    const SetType& get_fixed_value_set() const { return _fixed_values; }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE19get_fixed_value_setEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE19get_fixed_value_setEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE19get_fixed_value_setEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE19get_fixed_value_setEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE19get_fixed_value_setB5cxx11Ev
Line
Count
Source
112
12
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE19get_fixed_value_setB5cxx11Ev
Line
Count
Source
112
284k
    const SetType& get_fixed_value_set() const { return _fixed_values; }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE19get_fixed_value_setB5cxx11Ev
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE19get_fixed_value_setEv
Line
Count
Source
112
3
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE19get_fixed_value_setEv
Line
Count
Source
112
177
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE19get_fixed_value_setEv
Line
Count
Source
112
3
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE19get_fixed_value_setEv
Line
Count
Source
112
77
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE19get_fixed_value_setEv
Line
Count
Source
112
180
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE19get_fixed_value_setEv
Line
Count
Source
112
1
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE19get_fixed_value_setEv
Line
Count
Source
112
4
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE19get_fixed_value_setEv
Line
Count
Source
112
21
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE19get_fixed_value_setEv
Line
Count
Source
112
20
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE19get_fixed_value_setEv
Line
Count
Source
112
6
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE19get_fixed_value_setEv
Line
Count
Source
112
16
    const SetType& get_fixed_value_set() const { return _fixed_values; }
113
114
466k
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE19get_range_max_valueEv
Line
Count
Source
114
2.14k
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE19get_range_max_valueEv
Line
Count
Source
114
508
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE19get_range_max_valueEv
Line
Count
Source
114
133k
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE19get_range_max_valueEv
Line
Count
Source
114
88.2k
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE19get_range_max_valueEv
Line
Count
Source
114
8.62k
    CppType get_range_max_value() const { return _high_value; }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE19get_range_max_valueEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE19get_range_max_valueEv
Line
Count
Source
114
18
    CppType get_range_max_value() const { return _high_value; }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE19get_range_max_valueEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE19get_range_max_valueEv
Line
Count
Source
114
4
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE19get_range_max_valueB5cxx11Ev
Line
Count
Source
114
817
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE19get_range_max_valueB5cxx11Ev
Line
Count
Source
114
207k
    CppType get_range_max_value() const { return _high_value; }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE19get_range_max_valueB5cxx11Ev
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE19get_range_max_valueEv
Line
Count
Source
114
34
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE19get_range_max_valueEv
Line
Count
Source
114
2.37k
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE19get_range_max_valueEv
Line
Count
Source
114
60
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE19get_range_max_valueEv
Line
Count
Source
114
4.60k
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE19get_range_max_valueEv
Line
Count
Source
114
6.86k
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE19get_range_max_valueEv
Line
Count
Source
114
175
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE19get_range_max_valueEv
Line
Count
Source
114
3.37k
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE19get_range_max_valueEv
Line
Count
Source
114
980
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE19get_range_max_valueEv
Line
Count
Source
114
1.55k
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE19get_range_max_valueEv
Line
Count
Source
114
2.82k
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE19get_range_max_valueEv
Line
Count
Source
114
1.19k
    CppType get_range_max_value() const { return _high_value; }
115
116
367k
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE19get_range_min_valueEv
Line
Count
Source
116
2.11k
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE19get_range_min_valueEv
Line
Count
Source
116
386
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE19get_range_min_valueEv
Line
Count
Source
116
83.2k
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE19get_range_min_valueEv
Line
Count
Source
116
53.8k
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE19get_range_min_valueEv
Line
Count
Source
116
8.37k
    CppType get_range_min_value() const { return _low_value; }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE19get_range_min_valueEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE19get_range_min_valueEv
Line
Count
Source
116
18
    CppType get_range_min_value() const { return _low_value; }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE19get_range_min_valueEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE19get_range_min_valueEv
Line
Count
Source
116
2
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE19get_range_min_valueB5cxx11Ev
Line
Count
Source
116
643
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE19get_range_min_valueB5cxx11Ev
Line
Count
Source
116
202k
    CppType get_range_min_value() const { return _low_value; }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE19get_range_min_valueB5cxx11Ev
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE19get_range_min_valueEv
Line
Count
Source
116
34
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE19get_range_min_valueEv
Line
Count
Source
116
2.34k
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE19get_range_min_valueEv
Line
Count
Source
116
33
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE19get_range_min_valueEv
Line
Count
Source
116
3.54k
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE19get_range_min_valueEv
Line
Count
Source
116
4.15k
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE19get_range_min_valueEv
Line
Count
Source
116
87
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE19get_range_min_valueEv
Line
Count
Source
116
1.82k
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE19get_range_min_valueEv
Line
Count
Source
116
513
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE19get_range_min_valueEv
Line
Count
Source
116
799
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE19get_range_min_valueEv
Line
Count
Source
116
1.47k
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE19get_range_min_valueEv
Line
Count
Source
116
619
    CppType get_range_min_value() const { return _low_value; }
117
118
    const CppType* get_range_max_value_ptr() const { return &_high_value; }
119
120
    const CppType* get_range_min_value_ptr() const { return &_low_value; }
121
122
    SQLFilterOp get_range_high_op() const { return _high_op; }
123
124
    SQLFilterOp get_range_low_op() const { return _low_op; }
125
126
    bool is_low_value_minimum() const { return Compare::equal(_low_value, TYPE_MIN); }
127
128
    bool is_high_value_maximum() const { return Compare::equal(_high_value, TYPE_MAX); }
129
130
231k
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE16is_begin_includeEv
Line
Count
Source
130
2.12k
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE16is_begin_includeEv
Line
Count
Source
130
283
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE16is_begin_includeEv
Line
Count
Source
130
63.9k
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE16is_begin_includeEv
Line
Count
Source
130
44.1k
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE16is_begin_includeEv
Line
Count
Source
130
4.34k
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE16is_begin_includeEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE16is_begin_includeEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE16is_begin_includeEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE16is_begin_includeEv
Line
Count
Source
130
2
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE16is_begin_includeEv
Line
Count
Source
130
340
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE16is_begin_includeEv
Line
Count
Source
130
103k
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE16is_begin_includeEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE16is_begin_includeEv
Line
Count
Source
130
34
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE16is_begin_includeEv
Line
Count
Source
130
2.26k
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE16is_begin_includeEv
Line
Count
Source
130
30
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE16is_begin_includeEv
Line
Count
Source
130
2.30k
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE16is_begin_includeEv
Line
Count
Source
130
3.44k
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE16is_begin_includeEv
Line
Count
Source
130
87
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE16is_begin_includeEv
Line
Count
Source
130
1.67k
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE16is_begin_includeEv
Line
Count
Source
130
490
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE16is_begin_includeEv
Line
Count
Source
130
771
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE16is_begin_includeEv
Line
Count
Source
130
1.39k
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE16is_begin_includeEv
Line
Count
Source
130
595
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
131
132
232k
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE14is_end_includeEv
Line
Count
Source
132
2.12k
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE14is_end_includeEv
Line
Count
Source
132
283
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE14is_end_includeEv
Line
Count
Source
132
64.0k
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE14is_end_includeEv
Line
Count
Source
132
44.1k
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE14is_end_includeEv
Line
Count
Source
132
4.34k
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE14is_end_includeEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE14is_end_includeEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE14is_end_includeEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE14is_end_includeEv
Line
Count
Source
132
2
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE14is_end_includeEv
Line
Count
Source
132
340
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE14is_end_includeEv
Line
Count
Source
132
103k
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE14is_end_includeEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE14is_end_includeEv
Line
Count
Source
132
34
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE14is_end_includeEv
Line
Count
Source
132
2.26k
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE14is_end_includeEv
Line
Count
Source
132
30
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE14is_end_includeEv
Line
Count
Source
132
2.29k
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE14is_end_includeEv
Line
Count
Source
132
3.44k
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE14is_end_includeEv
Line
Count
Source
132
87
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE14is_end_includeEv
Line
Count
Source
132
1.67k
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE14is_end_includeEv
Line
Count
Source
132
489
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE14is_end_includeEv
Line
Count
Source
132
771
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE14is_end_includeEv
Line
Count
Source
132
1.39k
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE14is_end_includeEv
Line
Count
Source
132
595
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
133
134
    PrimitiveType type() const { return _column_type; }
135
136
    const std::string& column_name() const { return _column_name; }
137
138
570k
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE12contain_nullEv
Line
Count
Source
138
2.83k
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE12contain_nullEv
Line
Count
Source
138
611
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE12contain_nullEv
Line
Count
Source
138
76.1k
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE12contain_nullEv
Line
Count
Source
138
78.4k
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE12contain_nullEv
Line
Count
Source
138
4.52k
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE12contain_nullEv
Line
Count
Source
138
147
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE12contain_nullEv
Line
Count
Source
138
305
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE12contain_nullEv
Line
Count
Source
138
6
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE12contain_nullEv
Line
Count
Source
138
4
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE12contain_nullEv
Line
Count
Source
138
609
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE12contain_nullEv
Line
Count
Source
138
389k
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE12contain_nullEv
Line
Count
Source
138
2.47k
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE12contain_nullEv
Line
Count
Source
138
37
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE12contain_nullEv
Line
Count
Source
138
2.69k
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE12contain_nullEv
Line
Count
Source
138
33
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE12contain_nullEv
Line
Count
Source
138
2.54k
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE12contain_nullEv
Line
Count
Source
138
3.81k
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE12contain_nullEv
Line
Count
Source
138
89
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE12contain_nullEv
Line
Count
Source
138
1.84k
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE12contain_nullEv
Line
Count
Source
138
581
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE12contain_nullEv
Line
Count
Source
138
1.11k
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE12contain_nullEv
Line
Count
Source
138
1.42k
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE12contain_nullEv
Line
Count
Source
138
654
    bool contain_null() const { return _contain_null; }
139
140
808k
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE20get_fixed_value_sizeEv
Line
Count
Source
140
2.15k
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE20get_fixed_value_sizeEv
Line
Count
Source
140
289
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE20get_fixed_value_sizeEv
Line
Count
Source
140
68.8k
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE20get_fixed_value_sizeEv
Line
Count
Source
140
45.3k
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE20get_fixed_value_sizeEv
Line
Count
Source
140
4.60k
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE20get_fixed_value_sizeEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE20get_fixed_value_sizeEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE20get_fixed_value_sizeEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE20get_fixed_value_sizeEv
Line
Count
Source
140
2
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE20get_fixed_value_sizeEv
Line
Count
Source
140
363
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE20get_fixed_value_sizeEv
Line
Count
Source
140
672k
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE20get_fixed_value_sizeEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE20get_fixed_value_sizeEv
Line
Count
Source
140
40
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE20get_fixed_value_sizeEv
Line
Count
Source
140
2.62k
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE20get_fixed_value_sizeEv
Line
Count
Source
140
36
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE20get_fixed_value_sizeEv
Line
Count
Source
140
2.45k
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE20get_fixed_value_sizeEv
Line
Count
Source
140
3.80k
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE20get_fixed_value_sizeEv
Line
Count
Source
140
88
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE20get_fixed_value_sizeEv
Line
Count
Source
140
1.68k
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE20get_fixed_value_sizeEv
Line
Count
Source
140
533
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE20get_fixed_value_sizeEv
Line
Count
Source
140
819
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE20get_fixed_value_sizeEv
Line
Count
Source
140
1.42k
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE20get_fixed_value_sizeEv
Line
Count
Source
140
628
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
141
142
2.23k
    void set_whole_value_range() {
143
2.23k
        _fixed_values.clear();
144
2.23k
        _low_value = TYPE_MIN;
145
2.23k
        _high_value = TYPE_MAX;
146
2.23k
        _low_op = FILTER_LARGER_OR_EQUAL;
147
2.23k
        _high_op = FILTER_LESS_OR_EQUAL;
148
2.23k
        _contain_null = _is_nullable_col;
149
2.23k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE21set_whole_value_rangeEv
Line
Count
Source
142
190
    void set_whole_value_range() {
143
190
        _fixed_values.clear();
144
190
        _low_value = TYPE_MIN;
145
190
        _high_value = TYPE_MAX;
146
190
        _low_op = FILTER_LARGER_OR_EQUAL;
147
190
        _high_op = FILTER_LESS_OR_EQUAL;
148
190
        _contain_null = _is_nullable_col;
149
190
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE21set_whole_value_rangeEv
Line
Count
Source
142
29
    void set_whole_value_range() {
143
29
        _fixed_values.clear();
144
29
        _low_value = TYPE_MIN;
145
29
        _high_value = TYPE_MAX;
146
29
        _low_op = FILTER_LARGER_OR_EQUAL;
147
29
        _high_op = FILTER_LESS_OR_EQUAL;
148
29
        _contain_null = _is_nullable_col;
149
29
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE21set_whole_value_rangeEv
Line
Count
Source
142
540
    void set_whole_value_range() {
143
540
        _fixed_values.clear();
144
540
        _low_value = TYPE_MIN;
145
540
        _high_value = TYPE_MAX;
146
540
        _low_op = FILTER_LARGER_OR_EQUAL;
147
540
        _high_op = FILTER_LESS_OR_EQUAL;
148
540
        _contain_null = _is_nullable_col;
149
540
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE21set_whole_value_rangeEv
Line
Count
Source
142
27
    void set_whole_value_range() {
143
27
        _fixed_values.clear();
144
27
        _low_value = TYPE_MIN;
145
27
        _high_value = TYPE_MAX;
146
27
        _low_op = FILTER_LARGER_OR_EQUAL;
147
27
        _high_op = FILTER_LESS_OR_EQUAL;
148
27
        _contain_null = _is_nullable_col;
149
27
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE21set_whole_value_rangeEv
Line
Count
Source
142
3
    void set_whole_value_range() {
143
3
        _fixed_values.clear();
144
3
        _low_value = TYPE_MIN;
145
3
        _high_value = TYPE_MAX;
146
3
        _low_op = FILTER_LARGER_OR_EQUAL;
147
3
        _high_op = FILTER_LESS_OR_EQUAL;
148
3
        _contain_null = _is_nullable_col;
149
3
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE21set_whole_value_rangeEv
Line
Count
Source
142
12
    void set_whole_value_range() {
143
12
        _fixed_values.clear();
144
12
        _low_value = TYPE_MIN;
145
12
        _high_value = TYPE_MAX;
146
12
        _low_op = FILTER_LARGER_OR_EQUAL;
147
12
        _high_op = FILTER_LESS_OR_EQUAL;
148
12
        _contain_null = _is_nullable_col;
149
12
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE21set_whole_value_rangeEv
Line
Count
Source
142
53
    void set_whole_value_range() {
143
53
        _fixed_values.clear();
144
53
        _low_value = TYPE_MIN;
145
53
        _high_value = TYPE_MAX;
146
53
        _low_op = FILTER_LARGER_OR_EQUAL;
147
53
        _high_op = FILTER_LESS_OR_EQUAL;
148
53
        _contain_null = _is_nullable_col;
149
53
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE21set_whole_value_rangeEv
Line
Count
Source
142
3
    void set_whole_value_range() {
143
3
        _fixed_values.clear();
144
3
        _low_value = TYPE_MIN;
145
3
        _high_value = TYPE_MAX;
146
3
        _low_op = FILTER_LARGER_OR_EQUAL;
147
3
        _high_op = FILTER_LESS_OR_EQUAL;
148
3
        _contain_null = _is_nullable_col;
149
3
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE21set_whole_value_rangeEv
Line
Count
Source
142
1
    void set_whole_value_range() {
143
1
        _fixed_values.clear();
144
1
        _low_value = TYPE_MIN;
145
1
        _high_value = TYPE_MAX;
146
1
        _low_op = FILTER_LARGER_OR_EQUAL;
147
1
        _high_op = FILTER_LESS_OR_EQUAL;
148
1
        _contain_null = _is_nullable_col;
149
1
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE21set_whole_value_rangeEv
Line
Count
Source
142
10
    void set_whole_value_range() {
143
10
        _fixed_values.clear();
144
10
        _low_value = TYPE_MIN;
145
10
        _high_value = TYPE_MAX;
146
10
        _low_op = FILTER_LARGER_OR_EQUAL;
147
10
        _high_op = FILTER_LESS_OR_EQUAL;
148
10
        _contain_null = _is_nullable_col;
149
10
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE21set_whole_value_rangeEv
Line
Count
Source
142
57
    void set_whole_value_range() {
143
57
        _fixed_values.clear();
144
57
        _low_value = TYPE_MIN;
145
57
        _high_value = TYPE_MAX;
146
57
        _low_op = FILTER_LARGER_OR_EQUAL;
147
57
        _high_op = FILTER_LESS_OR_EQUAL;
148
57
        _contain_null = _is_nullable_col;
149
57
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE21set_whole_value_rangeEv
Line
Count
Source
142
1.04k
    void set_whole_value_range() {
143
1.04k
        _fixed_values.clear();
144
1.04k
        _low_value = TYPE_MIN;
145
1.04k
        _high_value = TYPE_MAX;
146
1.04k
        _low_op = FILTER_LARGER_OR_EQUAL;
147
1.04k
        _high_op = FILTER_LESS_OR_EQUAL;
148
1.04k
        _contain_null = _is_nullable_col;
149
1.04k
    }
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE21set_whole_value_rangeEv
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE21set_whole_value_rangeEv
Line
Count
Source
142
16
    void set_whole_value_range() {
143
16
        _fixed_values.clear();
144
16
        _low_value = TYPE_MIN;
145
16
        _high_value = TYPE_MAX;
146
16
        _low_op = FILTER_LARGER_OR_EQUAL;
147
16
        _high_op = FILTER_LESS_OR_EQUAL;
148
16
        _contain_null = _is_nullable_col;
149
16
    }
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE21set_whole_value_rangeEv
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE21set_whole_value_rangeEv
Line
Count
Source
142
38
    void set_whole_value_range() {
143
38
        _fixed_values.clear();
144
38
        _low_value = TYPE_MIN;
145
38
        _high_value = TYPE_MAX;
146
38
        _low_op = FILTER_LARGER_OR_EQUAL;
147
38
        _high_op = FILTER_LESS_OR_EQUAL;
148
38
        _contain_null = _is_nullable_col;
149
38
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE21set_whole_value_rangeEv
Line
Count
Source
142
58
    void set_whole_value_range() {
143
58
        _fixed_values.clear();
144
58
        _low_value = TYPE_MIN;
145
58
        _high_value = TYPE_MAX;
146
58
        _low_op = FILTER_LARGER_OR_EQUAL;
147
58
        _high_op = FILTER_LESS_OR_EQUAL;
148
58
        _contain_null = _is_nullable_col;
149
58
    }
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE21set_whole_value_rangeEv
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE21set_whole_value_rangeEv
Line
Count
Source
142
6
    void set_whole_value_range() {
143
6
        _fixed_values.clear();
144
6
        _low_value = TYPE_MIN;
145
6
        _high_value = TYPE_MAX;
146
6
        _low_op = FILTER_LARGER_OR_EQUAL;
147
6
        _high_op = FILTER_LESS_OR_EQUAL;
148
6
        _contain_null = _is_nullable_col;
149
6
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE21set_whole_value_rangeEv
Line
Count
Source
142
10
    void set_whole_value_range() {
143
10
        _fixed_values.clear();
144
10
        _low_value = TYPE_MIN;
145
10
        _high_value = TYPE_MAX;
146
10
        _low_op = FILTER_LARGER_OR_EQUAL;
147
10
        _high_op = FILTER_LESS_OR_EQUAL;
148
10
        _contain_null = _is_nullable_col;
149
10
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE21set_whole_value_rangeEv
Line
Count
Source
142
114
    void set_whole_value_range() {
143
114
        _fixed_values.clear();
144
114
        _low_value = TYPE_MIN;
145
114
        _high_value = TYPE_MAX;
146
114
        _low_op = FILTER_LARGER_OR_EQUAL;
147
114
        _high_op = FILTER_LESS_OR_EQUAL;
148
114
        _contain_null = _is_nullable_col;
149
114
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE21set_whole_value_rangeEv
Line
Count
Source
142
4
    void set_whole_value_range() {
143
4
        _fixed_values.clear();
144
4
        _low_value = TYPE_MIN;
145
4
        _high_value = TYPE_MAX;
146
4
        _low_op = FILTER_LARGER_OR_EQUAL;
147
4
        _high_op = FILTER_LESS_OR_EQUAL;
148
4
        _contain_null = _is_nullable_col;
149
4
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE21set_whole_value_rangeEv
Line
Count
Source
142
17
    void set_whole_value_range() {
143
17
        _fixed_values.clear();
144
17
        _low_value = TYPE_MIN;
145
17
        _high_value = TYPE_MAX;
146
17
        _low_op = FILTER_LARGER_OR_EQUAL;
147
17
        _high_op = FILTER_LESS_OR_EQUAL;
148
17
        _contain_null = _is_nullable_col;
149
17
    }
150
151
1.30k
    bool is_whole_value_range() const {
152
18.4E
        DCHECK(_is_nullable_col || !contain_null())
153
18.4E
                << "Non-nullable column cannot contains null value";
154
155
1.30k
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
156
1.30k
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
157
1.30k
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
158
1.30k
    }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE20is_whole_value_rangeEv
Line
Count
Source
151
32
    bool is_whole_value_range() const {
152
32
        DCHECK(_is_nullable_col || !contain_null())
153
0
                << "Non-nullable column cannot contains null value";
154
155
32
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
156
32
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
157
32
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
158
32
    }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE20is_whole_value_rangeEv
Line
Count
Source
151
34
    bool is_whole_value_range() const {
152
34
        DCHECK(_is_nullable_col || !contain_null())
153
0
                << "Non-nullable column cannot contains null value";
154
155
34
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
156
34
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
157
34
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
158
34
    }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE20is_whole_value_rangeEv
Line
Count
Source
151
308
    bool is_whole_value_range() const {
152
308
        DCHECK(_is_nullable_col || !contain_null())
153
0
                << "Non-nullable column cannot contains null value";
154
155
308
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
156
308
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
157
308
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
158
308
    }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE20is_whole_value_rangeEv
Line
Count
Source
151
36
    bool is_whole_value_range() const {
152
36
        DCHECK(_is_nullable_col || !contain_null())
153
0
                << "Non-nullable column cannot contains null value";
154
155
36
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
156
36
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
157
36
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
158
36
    }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE20is_whole_value_rangeEv
Line
Count
Source
151
18
    bool is_whole_value_range() const {
152
18
        DCHECK(_is_nullable_col || !contain_null())
153
0
                << "Non-nullable column cannot contains null value";
154
155
18
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
156
18
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
157
18
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
158
18
    }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE20is_whole_value_rangeEv
Line
Count
Source
151
48
    bool is_whole_value_range() const {
152
48
        DCHECK(_is_nullable_col || !contain_null())
153
0
                << "Non-nullable column cannot contains null value";
154
155
48
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
156
48
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
157
48
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
158
48
    }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE20is_whole_value_rangeEv
Line
Count
Source
151
74
    bool is_whole_value_range() const {
152
74
        DCHECK(_is_nullable_col || !contain_null())
153
0
                << "Non-nullable column cannot contains null value";
154
155
74
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
156
74
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
157
74
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
158
74
    }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE20is_whole_value_rangeEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE20is_whole_value_rangeEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE20is_whole_value_rangeEv
Line
Count
Source
151
36
    bool is_whole_value_range() const {
152
36
        DCHECK(_is_nullable_col || !contain_null())
153
0
                << "Non-nullable column cannot contains null value";
154
155
36
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
156
36
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
157
36
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
158
36
    }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE20is_whole_value_rangeEv
Line
Count
Source
151
312
    bool is_whole_value_range() const {
152
312
        DCHECK(_is_nullable_col || !contain_null())
153
0
                << "Non-nullable column cannot contains null value";
154
155
312
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
156
312
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
157
312
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
158
312
    }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE20is_whole_value_rangeEv
Line
Count
Source
151
193
    bool is_whole_value_range() const {
152
18.4E
        DCHECK(_is_nullable_col || !contain_null())
153
18.4E
                << "Non-nullable column cannot contains null value";
154
155
193
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
156
193
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
157
193
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
158
193
    }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE20is_whole_value_rangeEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE20is_whole_value_rangeEv
Line
Count
Source
151
65
    bool is_whole_value_range() const {
152
65
        DCHECK(_is_nullable_col || !contain_null())
153
0
                << "Non-nullable column cannot contains null value";
154
155
65
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
156
65
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
157
65
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
158
65
    }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE20is_whole_value_rangeEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE20is_whole_value_rangeEv
Line
Count
Source
151
36
    bool is_whole_value_range() const {
152
18.4E
        DCHECK(_is_nullable_col || !contain_null())
153
18.4E
                << "Non-nullable column cannot contains null value";
154
155
38
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
156
36
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
157
36
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
158
36
    }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE20is_whole_value_rangeEv
Line
Count
Source
151
18
    bool is_whole_value_range() const {
152
18
        DCHECK(_is_nullable_col || !contain_null())
153
0
                << "Non-nullable column cannot contains null value";
154
155
18
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
156
18
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
157
18
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
158
18
    }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE20is_whole_value_rangeEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE20is_whole_value_rangeEv
Line
Count
Source
151
45
    bool is_whole_value_range() const {
152
18.4E
        DCHECK(_is_nullable_col || !contain_null())
153
18.4E
                << "Non-nullable column cannot contains null value";
154
155
45
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
156
45
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
157
45
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
158
45
    }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE20is_whole_value_rangeEv
Line
Count
Source
151
8
    bool is_whole_value_range() const {
152
8
        DCHECK(_is_nullable_col || !contain_null())
153
0
                << "Non-nullable column cannot contains null value";
154
155
8
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
156
8
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
157
8
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
158
8
    }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE20is_whole_value_rangeEv
Line
Count
Source
151
40
    bool is_whole_value_range() const {
152
40
        DCHECK(_is_nullable_col || !contain_null())
153
0
                << "Non-nullable column cannot contains null value";
154
155
40
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
156
40
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
157
40
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
158
40
    }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE20is_whole_value_rangeEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE20is_whole_value_rangeEv
Line
Count
Source
151
2
    bool is_whole_value_range() const {
152
2
        DCHECK(_is_nullable_col || !contain_null())
153
0
                << "Non-nullable column cannot contains null value";
154
155
2
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
156
2
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
157
2
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
158
2
    }
159
160
    // only two case will set range contain null, call by temp_range in olap scan node
161
    // 'is null' and 'is not null'
162
    // 1. if the pred is 'is null' means the range should be
163
    // empty in fixed_range and _high_value < _low_value
164
    // 2. if the pred is 'is not null' means the range should be whole range and
165
    // 'is not null' be effective
166
3.52k
    void set_contain_null(bool contain_null) {
167
3.52k
        if (contain_null) {
168
1.31k
            set_empty_value_range();
169
2.21k
        } else {
170
2.21k
            set_whole_value_range();
171
2.21k
        }
172
3.52k
        _contain_null = _is_nullable_col && contain_null;
173
3.52k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE16set_contain_nullEb
Line
Count
Source
166
222
    void set_contain_null(bool contain_null) {
167
222
        if (contain_null) {
168
32
            set_empty_value_range();
169
190
        } else {
170
190
            set_whole_value_range();
171
190
        }
172
223
        _contain_null = _is_nullable_col && contain_null;
173
222
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE16set_contain_nullEb
Line
Count
Source
166
63
    void set_contain_null(bool contain_null) {
167
63
        if (contain_null) {
168
34
            set_empty_value_range();
169
34
        } else {
170
29
            set_whole_value_range();
171
29
        }
172
64
        _contain_null = _is_nullable_col && contain_null;
173
63
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE16set_contain_nullEb
Line
Count
Source
166
851
    void set_contain_null(bool contain_null) {
167
851
        if (contain_null) {
168
312
            set_empty_value_range();
169
539
        } else {
170
539
            set_whole_value_range();
171
539
        }
172
851
        _contain_null = _is_nullable_col && contain_null;
173
851
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE16set_contain_nullEb
Line
Count
Source
166
64
    void set_contain_null(bool contain_null) {
167
64
        if (contain_null) {
168
37
            set_empty_value_range();
169
37
        } else {
170
27
            set_whole_value_range();
171
27
        }
172
64
        _contain_null = _is_nullable_col && contain_null;
173
64
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE16set_contain_nullEb
Line
Count
Source
166
21
    void set_contain_null(bool contain_null) {
167
21
        if (contain_null) {
168
18
            set_empty_value_range();
169
18
        } else {
170
3
            set_whole_value_range();
171
3
        }
172
21
        _contain_null = _is_nullable_col && contain_null;
173
21
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE16set_contain_nullEb
Line
Count
Source
166
60
    void set_contain_null(bool contain_null) {
167
60
        if (contain_null) {
168
48
            set_empty_value_range();
169
48
        } else {
170
12
            set_whole_value_range();
171
12
        }
172
62
        _contain_null = _is_nullable_col && contain_null;
173
60
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE16set_contain_nullEb
Line
Count
Source
166
126
    void set_contain_null(bool contain_null) {
167
126
        if (contain_null) {
168
74
            set_empty_value_range();
169
74
        } else {
170
52
            set_whole_value_range();
171
52
        }
172
126
        _contain_null = _is_nullable_col && contain_null;
173
126
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE16set_contain_nullEb
Line
Count
Source
166
3
    void set_contain_null(bool contain_null) {
167
3
        if (contain_null) {
168
0
            set_empty_value_range();
169
3
        } else {
170
3
            set_whole_value_range();
171
3
        }
172
3
        _contain_null = _is_nullable_col && contain_null;
173
3
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE16set_contain_nullEb
Line
Count
Source
166
1
    void set_contain_null(bool contain_null) {
167
1
        if (contain_null) {
168
0
            set_empty_value_range();
169
1
        } else {
170
1
            set_whole_value_range();
171
1
        }
172
1
        _contain_null = _is_nullable_col && contain_null;
173
1
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE16set_contain_nullEb
Line
Count
Source
166
46
    void set_contain_null(bool contain_null) {
167
46
        if (contain_null) {
168
36
            set_empty_value_range();
169
36
        } else {
170
10
            set_whole_value_range();
171
10
        }
172
46
        _contain_null = _is_nullable_col && contain_null;
173
46
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE16set_contain_nullEb
Line
Count
Source
166
371
    void set_contain_null(bool contain_null) {
167
371
        if (contain_null) {
168
314
            set_empty_value_range();
169
314
        } else {
170
57
            set_whole_value_range();
171
57
        }
172
371
        _contain_null = _is_nullable_col && contain_null;
173
371
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE16set_contain_nullEb
Line
Count
Source
166
1.22k
    void set_contain_null(bool contain_null) {
167
1.22k
        if (contain_null) {
168
194
            set_empty_value_range();
169
1.02k
        } else {
170
1.02k
            set_whole_value_range();
171
1.02k
        }
172
1.22k
        _contain_null = _is_nullable_col && contain_null;
173
1.22k
    }
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE16set_contain_nullEb
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE16set_contain_nullEb
Line
Count
Source
166
82
    void set_contain_null(bool contain_null) {
167
82
        if (contain_null) {
168
66
            set_empty_value_range();
169
66
        } else {
170
16
            set_whole_value_range();
171
16
        }
172
82
        _contain_null = _is_nullable_col && contain_null;
173
82
    }
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE16set_contain_nullEb
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE16set_contain_nullEb
Line
Count
Source
166
76
    void set_contain_null(bool contain_null) {
167
76
        if (contain_null) {
168
38
            set_empty_value_range();
169
38
        } else {
170
38
            set_whole_value_range();
171
38
        }
172
76
        _contain_null = _is_nullable_col && contain_null;
173
76
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE16set_contain_nullEb
Line
Count
Source
166
76
    void set_contain_null(bool contain_null) {
167
76
        if (contain_null) {
168
18
            set_empty_value_range();
169
58
        } else {
170
58
            set_whole_value_range();
171
58
        }
172
76
        _contain_null = _is_nullable_col && contain_null;
173
76
    }
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE16set_contain_nullEb
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE16set_contain_nullEb
Line
Count
Source
166
52
    void set_contain_null(bool contain_null) {
167
52
        if (contain_null) {
168
46
            set_empty_value_range();
169
46
        } else {
170
6
            set_whole_value_range();
171
6
        }
172
52
        _contain_null = _is_nullable_col && contain_null;
173
52
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE16set_contain_nullEb
Line
Count
Source
166
18
    void set_contain_null(bool contain_null) {
167
18
        if (contain_null) {
168
8
            set_empty_value_range();
169
10
        } else {
170
10
            set_whole_value_range();
171
10
        }
172
18
        _contain_null = _is_nullable_col && contain_null;
173
18
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE16set_contain_nullEb
Line
Count
Source
166
152
    void set_contain_null(bool contain_null) {
167
152
        if (contain_null) {
168
40
            set_empty_value_range();
169
112
        } else {
170
112
            set_whole_value_range();
171
112
        }
172
152
        _contain_null = _is_nullable_col && contain_null;
173
152
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE16set_contain_nullEb
Line
Count
Source
166
4
    void set_contain_null(bool contain_null) {
167
4
        if (contain_null) {
168
0
            set_empty_value_range();
169
4
        } else {
170
4
            set_whole_value_range();
171
4
        }
172
4
        _contain_null = _is_nullable_col && contain_null;
173
4
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE16set_contain_nullEb
Line
Count
Source
166
19
    void set_contain_null(bool contain_null) {
167
19
        if (contain_null) {
168
2
            set_empty_value_range();
169
17
        } else {
170
17
            set_whole_value_range();
171
17
        }
172
19
        _contain_null = _is_nullable_col && contain_null;
173
19
    }
174
175
505k
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE9precisionEv
Line
Count
Source
175
122k
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE9precisionEv
Line
Count
Source
175
1.59k
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE9precisionEv
Line
Count
Source
175
17.7k
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE9precisionEv
Line
Count
Source
175
37.6k
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE9precisionEv
Line
Count
Source
175
282
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE9precisionEv
Line
Count
Source
175
242
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE9precisionEv
Line
Count
Source
175
578
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE9precisionEv
Line
Count
Source
175
42
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE9precisionEv
Line
Count
Source
175
40
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE9precisionEv
Line
Count
Source
175
1.12k
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE9precisionEv
Line
Count
Source
175
294k
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE9precisionEv
Line
Count
Source
175
3.01k
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE9precisionEv
Line
Count
Source
175
38
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE9precisionEv
Line
Count
Source
175
17.7k
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE9precisionEv
Line
Count
Source
175
83
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE9precisionEv
Line
Count
Source
175
4.70k
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE9precisionEv
Line
Count
Source
175
1.34k
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE9precisionEv
Line
Count
Source
175
9
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE9precisionEv
Line
Count
Source
175
424
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE9precisionEv
Line
Count
Source
175
183
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE9precisionEv
Line
Count
Source
175
998
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE9precisionEv
Line
Count
Source
175
323
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE9precisionEv
Line
Count
Source
175
294
    int precision() const { return _precision; }
176
177
505k
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE5scaleEv
Line
Count
Source
177
122k
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE5scaleEv
Line
Count
Source
177
1.60k
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE5scaleEv
Line
Count
Source
177
17.7k
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE5scaleEv
Line
Count
Source
177
37.6k
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE5scaleEv
Line
Count
Source
177
282
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE5scaleEv
Line
Count
Source
177
242
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE5scaleEv
Line
Count
Source
177
578
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE5scaleEv
Line
Count
Source
177
42
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE5scaleEv
Line
Count
Source
177
40
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE5scaleEv
Line
Count
Source
177
1.12k
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE5scaleEv
Line
Count
Source
177
294k
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE5scaleEv
Line
Count
Source
177
3.01k
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE5scaleEv
Line
Count
Source
177
38
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE5scaleEv
Line
Count
Source
177
17.7k
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE5scaleEv
Line
Count
Source
177
83
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE5scaleEv
Line
Count
Source
177
4.71k
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE5scaleEv
Line
Count
Source
177
1.34k
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE5scaleEv
Line
Count
Source
177
9
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE5scaleEv
Line
Count
Source
177
424
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE5scaleEv
Line
Count
Source
177
183
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE5scaleEv
Line
Count
Source
177
1.00k
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE5scaleEv
Line
Count
Source
177
324
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE5scaleEv
Line
Count
Source
177
294
    int scale() const { return _scale; }
178
179
    static void add_fixed_value_range(ColumnValueRange<primitive_type>& range, SQLFilterOp op,
180
521k
                                      const CppType& value) {
181
521k
        static_cast<void>(range.add_fixed_value(value));
182
521k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKa
Line
Count
Source
180
120k
                                      const CppType& value) {
181
120k
        static_cast<void>(range.add_fixed_value(value));
182
120k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKs
Line
Count
Source
180
178
                                      const CppType& value) {
181
178
        static_cast<void>(range.add_fixed_value(value));
182
178
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKi
Line
Count
Source
180
99.1k
                                      const CppType& value) {
181
99.1k
        static_cast<void>(range.add_fixed_value(value));
182
99.1k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKl
Line
Count
Source
180
2.81k
                                      const CppType& value) {
181
2.81k
        static_cast<void>(range.add_fixed_value(value));
182
2.81k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKn
Line
Count
Source
180
202
                                      const CppType& value) {
181
202
        static_cast<void>(range.add_fixed_value(value));
182
202
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKf
Line
Count
Source
180
60
                                      const CppType& value) {
181
60
        static_cast<void>(range.add_fixed_value(value));
182
60
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKd
Line
Count
Source
180
172
                                      const CppType& value) {
181
172
        static_cast<void>(range.add_fixed_value(value));
182
172
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKj
Line
Count
Source
180
35
                                      const CppType& value) {
181
35
        static_cast<void>(range.add_fixed_value(value));
182
35
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKo
Line
Count
Source
180
36
                                      const CppType& value) {
181
36
        static_cast<void>(range.add_fixed_value(value));
182
36
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
180
484
                                      const CppType& value) {
181
484
        static_cast<void>(range.add_fixed_value(value));
182
484
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
180
292k
                                      const CppType& value) {
181
292k
        static_cast<void>(range.add_fixed_value(value));
182
292k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
180
1.51k
                                      const CppType& value) {
181
1.51k
        static_cast<void>(range.add_fixed_value(value));
182
1.51k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_16VecDateTimeValueE
Line
Count
Source
180
43
                                      const CppType& value) {
181
43
        static_cast<void>(range.add_fixed_value(value));
182
43
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_11DateV2ValueINS_15DateV2ValueTypeEEE
Line
Count
Source
180
1.25k
                                      const CppType& value) {
181
1.25k
        static_cast<void>(range.add_fixed_value(value));
182
1.25k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_16VecDateTimeValueE
Line
Count
Source
180
101
                                      const CppType& value) {
181
101
        static_cast<void>(range.add_fixed_value(value));
182
101
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_11DateV2ValueINS_19DateTimeV2ValueTypeEEE
Line
Count
Source
180
656
                                      const CppType& value) {
181
656
        static_cast<void>(range.add_fixed_value(value));
182
656
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_16TimestampTzValueE
Line
Count
Source
180
170
                                      const CppType& value) {
181
170
        static_cast<void>(range.add_fixed_value(value));
182
170
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_14DecimalV2ValueE
Line
Count
Source
180
13
                                      const CppType& value) {
181
13
        static_cast<void>(range.add_fixed_value(value));
182
13
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKh
Line
Count
Source
180
359
                                      const CppType& value) {
181
359
        static_cast<void>(range.add_fixed_value(value));
182
359
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_7DecimalIiEE
Line
Count
Source
180
53
                                      const CppType& value) {
181
53
        static_cast<void>(range.add_fixed_value(value));
182
53
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_7DecimalIlEE
Line
Count
Source
180
279
                                      const CppType& value) {
181
279
        static_cast<void>(range.add_fixed_value(value));
182
279
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_12Decimal128V3E
Line
Count
Source
180
192
                                      const CppType& value) {
181
192
        static_cast<void>(range.add_fixed_value(value));
182
192
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_7DecimalIN4wide7integerILm256EiEEEE
Line
Count
Source
180
82
                                      const CppType& value) {
181
82
        static_cast<void>(range.add_fixed_value(value));
182
82
    }
183
184
    static void remove_fixed_value_range(ColumnValueRange<primitive_type>& range, SQLFilterOp op,
185
3
                                         const CppType& value) {
186
3
        range.remove_fixed_value(value);
187
3
    }
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE24remove_fixed_value_rangeERS2_NS_11SQLFilterOpERKa
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE24remove_fixed_value_rangeERS2_NS_11SQLFilterOpERKs
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE24remove_fixed_value_rangeERS2_NS_11SQLFilterOpERKi
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE24remove_fixed_value_rangeERS2_NS_11SQLFilterOpERKl
Line
Count
Source
185
3
                                         const CppType& value) {
186
3
        range.remove_fixed_value(value);
187
3
    }
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE24remove_fixed_value_rangeERS2_NS_11SQLFilterOpERKn
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE24remove_fixed_value_rangeERS2_NS_11SQLFilterOpERKf
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE24remove_fixed_value_rangeERS2_NS_11SQLFilterOpERKd
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE24remove_fixed_value_rangeERS2_NS_11SQLFilterOpERKj
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE24remove_fixed_value_rangeERS2_NS_11SQLFilterOpERKo
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE24remove_fixed_value_rangeERS2_NS_11SQLFilterOpERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE24remove_fixed_value_rangeERS2_NS_11SQLFilterOpERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE24remove_fixed_value_rangeERS2_NS_11SQLFilterOpERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE24remove_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_16VecDateTimeValueE
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE24remove_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_11DateV2ValueINS_15DateV2ValueTypeEEE
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE24remove_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_16VecDateTimeValueE
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE24remove_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_11DateV2ValueINS_19DateTimeV2ValueTypeEEE
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE24remove_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_16TimestampTzValueE
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE24remove_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_14DecimalV2ValueE
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE24remove_fixed_value_rangeERS2_NS_11SQLFilterOpERKh
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE24remove_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_7DecimalIiEE
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE24remove_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_7DecimalIlEE
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE24remove_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_12Decimal128V3E
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE24remove_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_7DecimalIN4wide7integerILm256EiEEEE
188
189
    static void empty_function(ColumnValueRange<primitive_type>& range, SQLFilterOp op,
190
2.48k
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE14empty_functionERS2_NS_11SQLFilterOpERKa
Line
Count
Source
190
21
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE14empty_functionERS2_NS_11SQLFilterOpERKs
Line
Count
Source
190
14
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE14empty_functionERS2_NS_11SQLFilterOpERKi
Line
Count
Source
190
947
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE14empty_functionERS2_NS_11SQLFilterOpERKl
Line
Count
Source
190
30
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE14empty_functionERS2_NS_11SQLFilterOpERKn
Line
Count
Source
190
2
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE14empty_functionERS2_NS_11SQLFilterOpERKf
Line
Count
Source
190
34
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE14empty_functionERS2_NS_11SQLFilterOpERKd
Line
Count
Source
190
118
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE14empty_functionERS2_NS_11SQLFilterOpERKj
Line
Count
Source
190
10
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE14empty_functionERS2_NS_11SQLFilterOpERKo
Line
Count
Source
190
10
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE14empty_functionERS2_NS_11SQLFilterOpERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
190
71
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE14empty_functionERS2_NS_11SQLFilterOpERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
190
264
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE14empty_functionERS2_NS_11SQLFilterOpERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
190
172
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE14empty_functionERS2_NS_11SQLFilterOpERKNS_16VecDateTimeValueE
Line
Count
Source
190
16
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE14empty_functionERS2_NS_11SQLFilterOpERKNS_11DateV2ValueINS_15DateV2ValueTypeEEE
Line
Count
Source
190
14
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE14empty_functionERS2_NS_11SQLFilterOpERKNS_16VecDateTimeValueE
Line
Count
Source
190
44
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE14empty_functionERS2_NS_11SQLFilterOpERKNS_11DateV2ValueINS_19DateTimeV2ValueTypeEEE
Line
Count
Source
190
93
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE14empty_functionERS2_NS_11SQLFilterOpERKNS_16TimestampTzValueE
Line
Count
Source
190
529
                               const CppType& value) {}
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE14empty_functionERS2_NS_11SQLFilterOpERKNS_14DecimalV2ValueE
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE14empty_functionERS2_NS_11SQLFilterOpERKh
Line
Count
Source
190
2
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE14empty_functionERS2_NS_11SQLFilterOpERKNS_7DecimalIiEE
Line
Count
Source
190
14
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE14empty_functionERS2_NS_11SQLFilterOpERKNS_7DecimalIlEE
Line
Count
Source
190
4
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE14empty_functionERS2_NS_11SQLFilterOpERKNS_12Decimal128V3E
Line
Count
Source
190
11
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE14empty_functionERS2_NS_11SQLFilterOpERKNS_7DecimalIN4wide7integerILm256EiEEEE
Line
Count
Source
190
62
                               const CppType& value) {}
191
192
    static void add_value_range(ColumnValueRange<primitive_type>& range, SQLFilterOp op,
193
63.8k
                                const CppType& value) {
194
63.8k
        static_cast<void>(range.add_range(op, value));
195
63.8k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE15add_value_rangeERS2_NS_11SQLFilterOpERKa
Line
Count
Source
193
1.24k
                                const CppType& value) {
194
1.24k
        static_cast<void>(range.add_range(op, value));
195
1.24k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE15add_value_rangeERS2_NS_11SQLFilterOpERKs
Line
Count
Source
193
1.42k
                                const CppType& value) {
194
1.42k
        static_cast<void>(range.add_range(op, value));
195
1.42k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE15add_value_rangeERS2_NS_11SQLFilterOpERKi
Line
Count
Source
193
9.98k
                                const CppType& value) {
194
9.98k
        static_cast<void>(range.add_range(op, value));
195
9.98k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE15add_value_rangeERS2_NS_11SQLFilterOpERKl
Line
Count
Source
193
25.5k
                                const CppType& value) {
194
25.5k
        static_cast<void>(range.add_range(op, value));
195
25.5k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE15add_value_rangeERS2_NS_11SQLFilterOpERKn
Line
Count
Source
193
73
                                const CppType& value) {
194
73
        static_cast<void>(range.add_range(op, value));
195
73
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE15add_value_rangeERS2_NS_11SQLFilterOpERKf
Line
Count
Source
193
129
                                const CppType& value) {
194
129
        static_cast<void>(range.add_range(op, value));
195
129
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE15add_value_rangeERS2_NS_11SQLFilterOpERKd
Line
Count
Source
193
303
                                const CppType& value) {
194
303
        static_cast<void>(range.add_range(op, value));
195
303
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE15add_value_rangeERS2_NS_11SQLFilterOpERKj
Line
Count
Source
193
8
                                const CppType& value) {
194
8
        static_cast<void>(range.add_range(op, value));
195
8
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE15add_value_rangeERS2_NS_11SQLFilterOpERKo
Line
Count
Source
193
8
                                const CppType& value) {
194
8
        static_cast<void>(range.add_range(op, value));
195
8
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE15add_value_rangeERS2_NS_11SQLFilterOpERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
193
668
                                const CppType& value) {
194
668
        static_cast<void>(range.add_range(op, value));
195
668
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE15add_value_rangeERS2_NS_11SQLFilterOpERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
193
1.63k
                                const CppType& value) {
194
1.63k
        static_cast<void>(range.add_range(op, value));
195
1.63k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE15add_value_rangeERS2_NS_11SQLFilterOpERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
193
378
                                const CppType& value) {
194
378
        static_cast<void>(range.add_range(op, value));
195
378
    }
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE15add_value_rangeERS2_NS_11SQLFilterOpERKNS_16VecDateTimeValueE
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE15add_value_rangeERS2_NS_11SQLFilterOpERKNS_11DateV2ValueINS_15DateV2ValueTypeEEE
Line
Count
Source
193
16.6k
                                const CppType& value) {
194
16.6k
        static_cast<void>(range.add_range(op, value));
195
16.6k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE15add_value_rangeERS2_NS_11SQLFilterOpERKNS_16VecDateTimeValueE
Line
Count
Source
193
18
                                const CppType& value) {
194
18
        static_cast<void>(range.add_range(op, value));
195
18
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE15add_value_rangeERS2_NS_11SQLFilterOpERKNS_11DateV2ValueINS_19DateTimeV2ValueTypeEEE
Line
Count
Source
193
3.96k
                                const CppType& value) {
194
3.96k
        static_cast<void>(range.add_range(op, value));
195
3.96k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE15add_value_rangeERS2_NS_11SQLFilterOpERKNS_16TimestampTzValueE
Line
Count
Source
193
804
                                const CppType& value) {
194
804
        static_cast<void>(range.add_range(op, value));
195
804
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE15add_value_rangeERS2_NS_11SQLFilterOpERKNS_14DecimalV2ValueE
Line
Count
Source
193
4
                                const CppType& value) {
194
4
        static_cast<void>(range.add_range(op, value));
195
4
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE15add_value_rangeERS2_NS_11SQLFilterOpERKh
Line
Count
Source
193
48
                                const CppType& value) {
194
48
        static_cast<void>(range.add_range(op, value));
195
48
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE15add_value_rangeERS2_NS_11SQLFilterOpERKNS_7DecimalIiEE
Line
Count
Source
193
99
                                const CppType& value) {
194
99
        static_cast<void>(range.add_range(op, value));
195
99
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE15add_value_rangeERS2_NS_11SQLFilterOpERKNS_7DecimalIlEE
Line
Count
Source
193
645
                                const CppType& value) {
194
645
        static_cast<void>(range.add_range(op, value));
195
645
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE15add_value_rangeERS2_NS_11SQLFilterOpERKNS_12Decimal128V3E
Line
Count
Source
193
123
                                const CppType& value) {
194
123
        static_cast<void>(range.add_range(op, value));
195
123
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE15add_value_rangeERS2_NS_11SQLFilterOpERKNS_7DecimalIN4wide7integerILm256EiEEEE
Line
Count
Source
193
146
                                const CppType& value) {
194
146
        static_cast<void>(range.add_range(op, value));
195
146
    }
196
197
    static ColumnValueRange<primitive_type> create_empty_column_value_range(bool is_nullable_col,
198
                                                                            int precision,
199
504k
                                                                            int scale) {
200
504k
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
201
504k
                                                precision, scale);
202
504k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE31create_empty_column_value_rangeEbii
Line
Count
Source
199
122k
                                                                            int scale) {
200
122k
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
201
122k
                                                precision, scale);
202
122k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE31create_empty_column_value_rangeEbii
Line
Count
Source
199
1.59k
                                                                            int scale) {
200
1.59k
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
201
1.59k
                                                precision, scale);
202
1.59k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE31create_empty_column_value_rangeEbii
Line
Count
Source
199
17.7k
                                                                            int scale) {
200
17.7k
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
201
17.7k
                                                precision, scale);
202
17.7k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE31create_empty_column_value_rangeEbii
Line
Count
Source
199
37.5k
                                                                            int scale) {
200
37.5k
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
201
37.5k
                                                precision, scale);
202
37.5k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE31create_empty_column_value_rangeEbii
Line
Count
Source
199
278
                                                                            int scale) {
200
278
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
201
278
                                                precision, scale);
202
278
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE31create_empty_column_value_rangeEbii
Line
Count
Source
199
240
                                                                            int scale) {
200
240
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
201
240
                                                precision, scale);
202
240
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE31create_empty_column_value_rangeEbii
Line
Count
Source
199
573
                                                                            int scale) {
200
573
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
201
573
                                                precision, scale);
202
573
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE31create_empty_column_value_rangeEbii
Line
Count
Source
199
41
                                                                            int scale) {
200
41
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
201
41
                                                precision, scale);
202
41
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE31create_empty_column_value_rangeEbii
Line
Count
Source
199
38
                                                                            int scale) {
200
38
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
201
38
                                                precision, scale);
202
38
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE31create_empty_column_value_rangeEbii
Line
Count
Source
199
1.12k
                                                                            int scale) {
200
1.12k
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
201
1.12k
                                                precision, scale);
202
1.12k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE31create_empty_column_value_rangeEbii
Line
Count
Source
199
293k
                                                                            int scale) {
200
293k
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
201
293k
                                                precision, scale);
202
293k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE31create_empty_column_value_rangeEbii
Line
Count
Source
199
2.96k
                                                                            int scale) {
200
2.96k
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
201
2.96k
                                                precision, scale);
202
2.96k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE31create_empty_column_value_rangeEbii
Line
Count
Source
199
38
                                                                            int scale) {
200
38
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
201
38
                                                precision, scale);
202
38
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE31create_empty_column_value_rangeEbii
Line
Count
Source
199
17.7k
                                                                            int scale) {
200
17.7k
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
201
17.7k
                                                precision, scale);
202
17.7k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE31create_empty_column_value_rangeEbii
Line
Count
Source
199
81
                                                                            int scale) {
200
81
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
201
81
                                                precision, scale);
202
81
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE31create_empty_column_value_rangeEbii
Line
Count
Source
199
4.69k
                                                                            int scale) {
200
4.69k
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
201
4.69k
                                                precision, scale);
202
4.69k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE31create_empty_column_value_rangeEbii
Line
Count
Source
199
1.33k
                                                                            int scale) {
200
1.33k
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
201
1.33k
                                                precision, scale);
202
1.33k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE31create_empty_column_value_rangeEbii
Line
Count
Source
199
9
                                                                            int scale) {
200
9
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
201
9
                                                precision, scale);
202
9
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE31create_empty_column_value_rangeEbii
Line
Count
Source
199
424
                                                                            int scale) {
200
424
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
201
424
                                                precision, scale);
202
424
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE31create_empty_column_value_rangeEbii
Line
Count
Source
199
180
                                                                            int scale) {
200
180
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
201
180
                                                precision, scale);
202
180
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE31create_empty_column_value_rangeEbii
Line
Count
Source
199
992
                                                                            int scale) {
200
992
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
201
992
                                                precision, scale);
202
992
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE31create_empty_column_value_rangeEbii
Line
Count
Source
199
320
                                                                            int scale) {
200
320
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
201
320
                                                precision, scale);
202
320
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE31create_empty_column_value_rangeEbii
Line
Count
Source
199
294
                                                                            int scale) {
200
294
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
201
294
                                                precision, scale);
202
294
    }
203
204
protected:
205
    bool is_in_range(const CppType& value);
206
207
private:
208
    ColumnValueRange(std::string col_name, const CppType& min, const CppType& max,
209
                     bool is_nullable_col, bool contain_null, int precision, int scale);
210
211
    const static CppType TYPE_MIN; // Column type's min value
212
    const static CppType TYPE_MAX; // Column type's max value
213
214
    std::string _column_name;
215
    PrimitiveType _column_type; // Column type (eg: TINYINT,SMALLINT,INT,BIGINT)
216
    CppType _low_value;         // Column's low value, closed interval at left
217
    CppType _high_value;        // Column's high value, open interval at right
218
    SQLFilterOp _low_op;
219
    SQLFilterOp _high_op;
220
    SetType _fixed_values; // Column's fixed int value
221
222
    bool _is_nullable_col;
223
    bool _contain_null;
224
    int _precision;
225
    int _scale;
226
227
    static constexpr bool _is_reject_split_type =
228
            primitive_type == PrimitiveType::TYPE_FLOAT ||
229
            primitive_type == PrimitiveType::TYPE_DOUBLE ||
230
            primitive_type == PrimitiveType::TYPE_LARGEINT ||
231
            primitive_type == PrimitiveType::TYPE_DECIMALV2 ||
232
            primitive_type == PrimitiveType::TYPE_VARCHAR ||
233
            primitive_type == PrimitiveType::TYPE_CHAR ||
234
            primitive_type == PrimitiveType::TYPE_STRING ||
235
            primitive_type == PrimitiveType::TYPE_BOOLEAN ||
236
            primitive_type == PrimitiveType::TYPE_DATETIME ||
237
            primitive_type == PrimitiveType::TYPE_DATETIMEV2 ||
238
            primitive_type == PrimitiveType::TYPE_TIMESTAMPTZ ||
239
            primitive_type == PrimitiveType::TYPE_DECIMAL256;
240
};
241
template <>
242
const typename ColumnValueRange<TYPE_FLOAT>::CppType ColumnValueRange<TYPE_FLOAT>::TYPE_MIN;
243
template <>
244
const typename ColumnValueRange<TYPE_FLOAT>::CppType ColumnValueRange<TYPE_FLOAT>::TYPE_MAX;
245
template <>
246
const typename ColumnValueRange<TYPE_DOUBLE>::CppType ColumnValueRange<TYPE_DOUBLE>::TYPE_MIN;
247
template <>
248
const typename ColumnValueRange<TYPE_DOUBLE>::CppType ColumnValueRange<TYPE_DOUBLE>::TYPE_MAX;
249
250
/// OlapScanKeys accumulates multi-column prefix scan keys from per-column ColumnValueRange
251
/// constraints, and converts them into OlapScanRange objects for the storage layer.
252
///
253
/// Overall pipeline (with examples for table t(k1 INT, k2 INT, v INT)):
254
///
255
///  1. _normalize_conjuncts()  (scan_operator.cpp)
256
///     Parses SQL WHERE conjuncts into per-column ColumnValueRange objects.
257
///       e.g. "WHERE k1 IN (1,2) AND k2 = 10"
258
///         => ColumnValueRange<k1>: fixed_values = {1, 2}
259
///         => ColumnValueRange<k2>: fixed_values = {10}
260
///
261
///  2. _build_key_ranges_and_filters()  (olap_scan_operator.cpp)
262
///     Iterates key columns in schema order, calling extend_scan_key() for each column
263
///     to expand internal _begin_scan_keys / _end_scan_keys.
264
///
265
///  3. extend_scan_key()  (this class)
266
///     Appends one more column dimension to existing scan keys (Cartesian product for
267
///     fixed values, or min/max for range values).
268
///       After k1: _begin_scan_keys = [(1), (2)]     _end_scan_keys = [(1), (2)]
269
///       After k2: _begin_scan_keys = [(1,10), (2,10)] _end_scan_keys = [(1,10), (2,10)]
270
///
271
///  4. get_key_range()  (olap_scan_common.cpp)
272
///     Converts each (_begin_scan_keys[i], _end_scan_keys[i]) pair into an OlapScanRange.
273
///       => OlapScanRange{ begin=(1,10), end=(1,10), has_lower_bound=true, ... }
274
///       => OlapScanRange{ begin=(2,10), end=(2,10), has_lower_bound=true, ... }
275
///
276
///  5. If no key predicates exist, get_key_range returns empty; the caller creates a single
277
///     default OlapScanRange with has_lower_bound=false (represents full table scan).
278
///
279
class OlapScanKeys {
280
public:
281
    /// Extend internal scan key pairs with the next key column's ColumnValueRange.
282
    ///
283
    /// - If the range has fixed values, produces a Cartesian product of existing keys
284
    ///   and the fixed values (subject to max_scan_key_num limit).
285
    /// - If the range is a scope (min..max), appends min to begin keys and max to end keys,
286
    ///   and sets _has_range_value=true (no further columns can be appended).
287
    ///
288
    /// @param exact_value [out]: true if the range covers the column's values exactly
289
    ///                           (can be erased from residual predicates).
290
    /// @param eos         [out]: true if the range is provably empty (no rows to scan).
291
    /// @param should_break[out]: true if the range cannot be encoded and we should stop.
292
    template <PrimitiveType primitive_type>
293
    Status extend_scan_key(ColumnValueRange<primitive_type>& range, int32_t max_scan_key_num,
294
                           bool* exact_value, bool* eos, bool* should_break);
295
296
    /// Convert accumulated scan key pairs into OlapScanRange objects for the storage layer.
297
    Status get_key_range(std::vector<std::unique_ptr<OlapScanRange>>* key_range);
298
299
740k
    bool has_range_value() const { return _has_range_value; }
300
301
0
    void clear() {
302
0
        _has_range_value = false;
303
0
        _begin_scan_keys.clear();
304
0
        _end_scan_keys.clear();
305
0
    }
306
307
1.29k
    std::string debug_string() {
308
1.29k
        std::stringstream ss;
309
1.29k
        DCHECK(_begin_scan_keys.size() == _end_scan_keys.size());
310
1.29k
        ss << "ScanKeys:";
311
312
5.85k
        for (int i = 0; i < _begin_scan_keys.size(); ++i) {
313
4.55k
            ss << "ScanKey=" << (_begin_include ? "[" : "(") << _begin_scan_keys[i].debug_string()
314
18.4E
               << " : " << _end_scan_keys[i].debug_string() << (_end_include ? "]" : ")");
315
4.55k
        }
316
1.29k
        return ss.str();
317
1.29k
    }
318
319
0
    size_t size() {
320
0
        DCHECK(_begin_scan_keys.size() == _end_scan_keys.size());
321
0
        return _begin_scan_keys.size();
322
0
    }
323
324
278k
    void set_is_convertible(bool is_convertible) { _is_convertible = is_convertible; }
325
326
private:
327
    std::vector<OlapTuple> _begin_scan_keys;
328
    std::vector<OlapTuple> _end_scan_keys;
329
    bool _has_range_value = false;
330
    bool _begin_include = false;
331
    bool _end_include = false;
332
    bool _is_convertible = false;
333
};
334
335
using ColumnValueRangeType = std::variant<
336
        ColumnValueRange<TYPE_TINYINT>, ColumnValueRange<TYPE_SMALLINT>, ColumnValueRange<TYPE_INT>,
337
        ColumnValueRange<TYPE_BIGINT>, ColumnValueRange<TYPE_LARGEINT>,
338
        ColumnValueRange<TYPE_FLOAT>, ColumnValueRange<TYPE_DOUBLE>, ColumnValueRange<TYPE_IPV4>,
339
        ColumnValueRange<TYPE_IPV6>, ColumnValueRange<TYPE_CHAR>, ColumnValueRange<TYPE_VARCHAR>,
340
        ColumnValueRange<TYPE_STRING>, ColumnValueRange<TYPE_DATE>, ColumnValueRange<TYPE_DATEV2>,
341
        ColumnValueRange<TYPE_DATETIME>, ColumnValueRange<TYPE_DATETIMEV2>,
342
        ColumnValueRange<TYPE_TIMESTAMPTZ>, ColumnValueRange<TYPE_DECIMALV2>,
343
        ColumnValueRange<TYPE_BOOLEAN>, ColumnValueRange<TYPE_DECIMAL32>,
344
        ColumnValueRange<TYPE_DECIMAL64>, ColumnValueRange<TYPE_DECIMAL128I>,
345
        ColumnValueRange<TYPE_DECIMAL256>>;
346
347
template <PrimitiveType primitive_type>
348
const typename ColumnValueRange<primitive_type>::CppType
349
        ColumnValueRange<primitive_type>::TYPE_MIN =
350
                type_limit<typename ColumnValueRange<primitive_type>::CppType>::min();
351
template <PrimitiveType primitive_type>
352
const typename ColumnValueRange<primitive_type>::CppType
353
        ColumnValueRange<primitive_type>::TYPE_MAX =
354
                type_limit<typename ColumnValueRange<primitive_type>::CppType>::max();
355
356
template <PrimitiveType primitive_type>
357
ColumnValueRange<primitive_type>::ColumnValueRange()
358
2.19M
        : _column_type(INVALID_TYPE), _precision(-1), _scale(-1) {}
359
360
template <PrimitiveType primitive_type>
361
ColumnValueRange<primitive_type>::ColumnValueRange(std::string col_name, const CppType& min,
362
                                                   const CppType& max, bool is_nullable_col,
363
                                                   bool contain_null, int precision, int scale)
364
2.70M
        : _column_name(std::move(col_name)),
365
2.70M
          _column_type(primitive_type),
366
1.65M
          _low_value(min),
367
1.65M
          _high_value(max),
368
2.70M
          _low_op(FILTER_LARGER_OR_EQUAL),
369
2.70M
          _high_op(FILTER_LESS_OR_EQUAL),
370
2.70M
          _is_nullable_col(is_nullable_col),
371
2.70M
          _contain_null(is_nullable_col && contain_null),
372
2.70M
          _precision(precision),
373
2.70M
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKaSA_bbii
Line
Count
Source
364
263k
        : _column_name(std::move(col_name)),
365
263k
          _column_type(primitive_type),
366
263k
          _low_value(min),
367
263k
          _high_value(max),
368
263k
          _low_op(FILTER_LARGER_OR_EQUAL),
369
263k
          _high_op(FILTER_LESS_OR_EQUAL),
370
263k
          _is_nullable_col(is_nullable_col),
371
263k
          _contain_null(is_nullable_col && contain_null),
372
263k
          _precision(precision),
373
263k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKsSA_bbii
Line
Count
Source
364
19.3k
        : _column_name(std::move(col_name)),
365
19.3k
          _column_type(primitive_type),
366
19.3k
          _low_value(min),
367
19.3k
          _high_value(max),
368
19.3k
          _low_op(FILTER_LARGER_OR_EQUAL),
369
19.3k
          _high_op(FILTER_LESS_OR_EQUAL),
370
19.3k
          _is_nullable_col(is_nullable_col),
371
19.3k
          _contain_null(is_nullable_col && contain_null),
372
19.3k
          _precision(precision),
373
19.3k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKiSA_bbii
Line
Count
Source
364
199k
        : _column_name(std::move(col_name)),
365
199k
          _column_type(primitive_type),
366
199k
          _low_value(min),
367
199k
          _high_value(max),
368
199k
          _low_op(FILTER_LARGER_OR_EQUAL),
369
199k
          _high_op(FILTER_LESS_OR_EQUAL),
370
199k
          _is_nullable_col(is_nullable_col),
371
199k
          _contain_null(is_nullable_col && contain_null),
372
199k
          _precision(precision),
373
199k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKlSA_bbii
Line
Count
Source
364
513k
        : _column_name(std::move(col_name)),
365
513k
          _column_type(primitive_type),
366
513k
          _low_value(min),
367
513k
          _high_value(max),
368
513k
          _low_op(FILTER_LARGER_OR_EQUAL),
369
513k
          _high_op(FILTER_LESS_OR_EQUAL),
370
513k
          _is_nullable_col(is_nullable_col),
371
513k
          _contain_null(is_nullable_col && contain_null),
372
513k
          _precision(precision),
373
513k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKnSA_bbii
Line
Count
Source
364
11.5k
        : _column_name(std::move(col_name)),
365
11.5k
          _column_type(primitive_type),
366
11.5k
          _low_value(min),
367
11.5k
          _high_value(max),
368
11.5k
          _low_op(FILTER_LARGER_OR_EQUAL),
369
11.5k
          _high_op(FILTER_LESS_OR_EQUAL),
370
11.5k
          _is_nullable_col(is_nullable_col),
371
11.5k
          _contain_null(is_nullable_col && contain_null),
372
11.5k
          _precision(precision),
373
11.5k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKfSA_bbii
Line
Count
Source
364
11.4k
        : _column_name(std::move(col_name)),
365
11.4k
          _column_type(primitive_type),
366
11.4k
          _low_value(min),
367
11.4k
          _high_value(max),
368
11.4k
          _low_op(FILTER_LARGER_OR_EQUAL),
369
11.4k
          _high_op(FILTER_LESS_OR_EQUAL),
370
11.4k
          _is_nullable_col(is_nullable_col),
371
11.4k
          _contain_null(is_nullable_col && contain_null),
372
11.4k
          _precision(precision),
373
11.4k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKdSA_bbii
Line
Count
Source
364
16.5k
        : _column_name(std::move(col_name)),
365
16.5k
          _column_type(primitive_type),
366
16.5k
          _low_value(min),
367
16.5k
          _high_value(max),
368
16.5k
          _low_op(FILTER_LARGER_OR_EQUAL),
369
16.5k
          _high_op(FILTER_LESS_OR_EQUAL),
370
16.5k
          _is_nullable_col(is_nullable_col),
371
16.5k
          _contain_null(is_nullable_col && contain_null),
372
16.5k
          _precision(precision),
373
16.5k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKjSA_bbii
Line
Count
Source
364
418
        : _column_name(std::move(col_name)),
365
418
          _column_type(primitive_type),
366
418
          _low_value(min),
367
418
          _high_value(max),
368
418
          _low_op(FILTER_LARGER_OR_EQUAL),
369
418
          _high_op(FILTER_LESS_OR_EQUAL),
370
418
          _is_nullable_col(is_nullable_col),
371
418
          _contain_null(is_nullable_col && contain_null),
372
418
          _precision(precision),
373
418
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKoSA_bbii
Line
Count
Source
364
429
        : _column_name(std::move(col_name)),
365
429
          _column_type(primitive_type),
366
429
          _low_value(min),
367
429
          _high_value(max),
368
429
          _low_op(FILTER_LARGER_OR_EQUAL),
369
429
          _high_op(FILTER_LESS_OR_EQUAL),
370
429
          _is_nullable_col(is_nullable_col),
371
429
          _contain_null(is_nullable_col && contain_null),
372
429
          _precision(precision),
373
429
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS8_SA_bbii
Line
Count
Source
364
17.4k
        : _column_name(std::move(col_name)),
365
17.4k
          _column_type(primitive_type),
366
17.4k
          _low_value(min),
367
17.4k
          _high_value(max),
368
17.4k
          _low_op(FILTER_LARGER_OR_EQUAL),
369
17.4k
          _high_op(FILTER_LESS_OR_EQUAL),
370
17.4k
          _is_nullable_col(is_nullable_col),
371
17.4k
          _contain_null(is_nullable_col && contain_null),
372
17.4k
          _precision(precision),
373
17.4k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS8_SA_bbii
Line
Count
Source
364
1.21M
        : _column_name(std::move(col_name)),
365
1.21M
          _column_type(primitive_type),
366
1.21M
          _low_value(min),
367
1.21M
          _high_value(max),
368
1.21M
          _low_op(FILTER_LARGER_OR_EQUAL),
369
1.21M
          _high_op(FILTER_LESS_OR_EQUAL),
370
1.21M
          _is_nullable_col(is_nullable_col),
371
1.21M
          _contain_null(is_nullable_col && contain_null),
372
1.21M
          _precision(precision),
373
1.21M
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS8_SA_bbii
Line
Count
Source
364
155k
        : _column_name(std::move(col_name)),
365
155k
          _column_type(primitive_type),
366
155k
          _low_value(min),
367
155k
          _high_value(max),
368
155k
          _low_op(FILTER_LARGER_OR_EQUAL),
369
155k
          _high_op(FILTER_LESS_OR_EQUAL),
370
155k
          _is_nullable_col(is_nullable_col),
371
155k
          _contain_null(is_nullable_col && contain_null),
372
155k
          _precision(precision),
373
155k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_16VecDateTimeValueESB_bbii
Line
Count
Source
364
582
        : _column_name(std::move(col_name)),
365
582
          _column_type(primitive_type),
366
582
          _low_value(min),
367
582
          _high_value(max),
368
582
          _low_op(FILTER_LARGER_OR_EQUAL),
369
582
          _high_op(FILTER_LESS_OR_EQUAL),
370
582
          _is_nullable_col(is_nullable_col),
371
582
          _contain_null(is_nullable_col && contain_null),
372
582
          _precision(precision),
373
582
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_11DateV2ValueINS_15DateV2ValueTypeEEESD_bbii
Line
Count
Source
364
72.7k
        : _column_name(std::move(col_name)),
365
72.7k
          _column_type(primitive_type),
366
72.7k
          _low_value(min),
367
72.7k
          _high_value(max),
368
72.7k
          _low_op(FILTER_LARGER_OR_EQUAL),
369
72.7k
          _high_op(FILTER_LESS_OR_EQUAL),
370
72.7k
          _is_nullable_col(is_nullable_col),
371
72.7k
          _contain_null(is_nullable_col && contain_null),
372
72.7k
          _precision(precision),
373
72.7k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_16VecDateTimeValueESB_bbii
Line
Count
Source
364
639
        : _column_name(std::move(col_name)),
365
639
          _column_type(primitive_type),
366
639
          _low_value(min),
367
639
          _high_value(max),
368
639
          _low_op(FILTER_LARGER_OR_EQUAL),
369
639
          _high_op(FILTER_LESS_OR_EQUAL),
370
639
          _is_nullable_col(is_nullable_col),
371
639
          _contain_null(is_nullable_col && contain_null),
372
639
          _precision(precision),
373
639
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_11DateV2ValueINS_19DateTimeV2ValueTypeEEESD_bbii
Line
Count
Source
364
132k
        : _column_name(std::move(col_name)),
365
132k
          _column_type(primitive_type),
366
132k
          _low_value(min),
367
132k
          _high_value(max),
368
132k
          _low_op(FILTER_LARGER_OR_EQUAL),
369
132k
          _high_op(FILTER_LESS_OR_EQUAL),
370
132k
          _is_nullable_col(is_nullable_col),
371
132k
          _contain_null(is_nullable_col && contain_null),
372
132k
          _precision(precision),
373
132k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_16TimestampTzValueESB_bbii
Line
Count
Source
364
8.38k
        : _column_name(std::move(col_name)),
365
8.38k
          _column_type(primitive_type),
366
8.38k
          _low_value(min),
367
8.38k
          _high_value(max),
368
8.38k
          _low_op(FILTER_LARGER_OR_EQUAL),
369
8.38k
          _high_op(FILTER_LESS_OR_EQUAL),
370
8.38k
          _is_nullable_col(is_nullable_col),
371
8.38k
          _contain_null(is_nullable_col && contain_null),
372
8.38k
          _precision(precision),
373
8.38k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_14DecimalV2ValueESB_bbii
Line
Count
Source
364
482
        : _column_name(std::move(col_name)),
365
482
          _column_type(primitive_type),
366
482
          _low_value(min),
367
482
          _high_value(max),
368
482
          _low_op(FILTER_LARGER_OR_EQUAL),
369
482
          _high_op(FILTER_LESS_OR_EQUAL),
370
482
          _is_nullable_col(is_nullable_col),
371
482
          _contain_null(is_nullable_col && contain_null),
372
482
          _precision(precision),
373
482
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKhSA_bbii
Line
Count
Source
364
11.4k
        : _column_name(std::move(col_name)),
365
11.4k
          _column_type(primitive_type),
366
11.4k
          _low_value(min),
367
11.4k
          _high_value(max),
368
11.4k
          _low_op(FILTER_LARGER_OR_EQUAL),
369
11.4k
          _high_op(FILTER_LESS_OR_EQUAL),
370
11.4k
          _is_nullable_col(is_nullable_col),
371
11.4k
          _contain_null(is_nullable_col && contain_null),
372
11.4k
          _precision(precision),
373
11.4k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_7DecimalIiEESC_bbii
Line
Count
Source
364
11.6k
        : _column_name(std::move(col_name)),
365
11.6k
          _column_type(primitive_type),
366
11.6k
          _low_value(min),
367
11.6k
          _high_value(max),
368
11.6k
          _low_op(FILTER_LARGER_OR_EQUAL),
369
11.6k
          _high_op(FILTER_LESS_OR_EQUAL),
370
11.6k
          _is_nullable_col(is_nullable_col),
371
11.6k
          _contain_null(is_nullable_col && contain_null),
372
11.6k
          _precision(precision),
373
11.6k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_7DecimalIlEESC_bbii
Line
Count
Source
364
19.7k
        : _column_name(std::move(col_name)),
365
19.7k
          _column_type(primitive_type),
366
19.7k
          _low_value(min),
367
19.7k
          _high_value(max),
368
19.7k
          _low_op(FILTER_LARGER_OR_EQUAL),
369
19.7k
          _high_op(FILTER_LESS_OR_EQUAL),
370
19.7k
          _is_nullable_col(is_nullable_col),
371
19.7k
          _contain_null(is_nullable_col && contain_null),
372
19.7k
          _precision(precision),
373
19.7k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_12Decimal128V3ESB_bbii
Line
Count
Source
364
13.8k
        : _column_name(std::move(col_name)),
365
13.8k
          _column_type(primitive_type),
366
13.8k
          _low_value(min),
367
13.8k
          _high_value(max),
368
13.8k
          _low_op(FILTER_LARGER_OR_EQUAL),
369
13.8k
          _high_op(FILTER_LESS_OR_EQUAL),
370
13.8k
          _is_nullable_col(is_nullable_col),
371
13.8k
          _contain_null(is_nullable_col && contain_null),
372
13.8k
          _precision(precision),
373
13.8k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_7DecimalIN4wide7integerILm256EiEEEESF_bbii
Line
Count
Source
364
2.16k
        : _column_name(std::move(col_name)),
365
2.16k
          _column_type(primitive_type),
366
2.16k
          _low_value(min),
367
2.16k
          _high_value(max),
368
2.16k
          _low_op(FILTER_LARGER_OR_EQUAL),
369
2.16k
          _high_op(FILTER_LESS_OR_EQUAL),
370
2.16k
          _is_nullable_col(is_nullable_col),
371
2.16k
          _contain_null(is_nullable_col && contain_null),
372
2.16k
          _precision(precision),
373
2.16k
          _scale(scale) {}
374
375
template <PrimitiveType primitive_type>
376
ColumnValueRange<primitive_type>::ColumnValueRange(std::string col_name, bool is_nullable_col,
377
                                                   int precision, int scale)
378
2.19M
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
379
2.19M
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
378
140k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
379
140k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
378
17.6k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
379
17.6k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
378
181k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
379
181k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
378
475k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
379
475k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
378
11.1k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
379
11.1k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
378
11.2k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
379
11.2k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
378
15.9k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
379
15.9k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
378
16.2k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
379
16.2k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
378
543
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
379
543
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
378
556
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
379
556
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
378
54.9k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
379
54.9k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
378
127k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
379
127k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
378
7.03k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
379
7.03k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
378
923k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
379
923k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
378
152k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
379
152k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
378
11.4k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
379
11.4k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
378
18.6k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
379
18.6k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
378
13.4k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
379
13.4k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
378
1.86k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
379
1.86k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
378
473
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
379
473
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
378
11.0k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
379
11.0k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
378
375
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
379
375
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
378
388
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
379
388
                           is_nullable_col, precision, scale) {}
380
381
template <PrimitiveType primitive_type>
382
527k
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
383
527k
    if (INVALID_TYPE == _column_type) {
384
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
385
0
    }
386
387
527k
    _fixed_values.insert(value);
388
527k
    _contain_null = false;
389
390
527k
    _high_value = TYPE_MIN;
391
527k
    _low_value = TYPE_MAX;
392
393
527k
    return Status::OK();
394
527k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE15add_fixed_valueERKa
Line
Count
Source
382
120k
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
383
120k
    if (INVALID_TYPE == _column_type) {
384
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
385
0
    }
386
387
120k
    _fixed_values.insert(value);
388
120k
    _contain_null = false;
389
390
120k
    _high_value = TYPE_MIN;
391
120k
    _low_value = TYPE_MAX;
392
393
120k
    return Status::OK();
394
120k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE15add_fixed_valueERKs
Line
Count
Source
382
188
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
383
188
    if (INVALID_TYPE == _column_type) {
384
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
385
0
    }
386
387
188
    _fixed_values.insert(value);
388
188
    _contain_null = false;
389
390
188
    _high_value = TYPE_MIN;
391
188
    _low_value = TYPE_MAX;
392
393
188
    return Status::OK();
394
188
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE15add_fixed_valueERKi
Line
Count
Source
382
99.2k
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
383
99.2k
    if (INVALID_TYPE == _column_type) {
384
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
385
0
    }
386
387
99.2k
    _fixed_values.insert(value);
388
99.2k
    _contain_null = false;
389
390
99.2k
    _high_value = TYPE_MIN;
391
99.2k
    _low_value = TYPE_MAX;
392
393
99.2k
    return Status::OK();
394
99.2k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE15add_fixed_valueERKl
Line
Count
Source
382
7.85k
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
383
7.85k
    if (INVALID_TYPE == _column_type) {
384
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
385
0
    }
386
387
7.85k
    _fixed_values.insert(value);
388
7.85k
    _contain_null = false;
389
390
7.85k
    _high_value = TYPE_MIN;
391
7.85k
    _low_value = TYPE_MAX;
392
393
7.85k
    return Status::OK();
394
7.85k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE15add_fixed_valueERKn
Line
Count
Source
382
210
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
383
210
    if (INVALID_TYPE == _column_type) {
384
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
385
0
    }
386
387
210
    _fixed_values.insert(value);
388
210
    _contain_null = false;
389
390
210
    _high_value = TYPE_MIN;
391
210
    _low_value = TYPE_MAX;
392
393
210
    return Status::OK();
394
210
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE15add_fixed_valueERKf
Line
Count
Source
382
75
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
383
75
    if (INVALID_TYPE == _column_type) {
384
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
385
0
    }
386
387
75
    _fixed_values.insert(value);
388
75
    _contain_null = false;
389
390
75
    _high_value = TYPE_MIN;
391
75
    _low_value = TYPE_MAX;
392
393
75
    return Status::OK();
394
75
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE15add_fixed_valueERKd
Line
Count
Source
382
185
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
383
185
    if (INVALID_TYPE == _column_type) {
384
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
385
0
    }
386
387
185
    _fixed_values.insert(value);
388
185
    _contain_null = false;
389
390
185
    _high_value = TYPE_MIN;
391
185
    _low_value = TYPE_MAX;
392
393
185
    return Status::OK();
394
185
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE15add_fixed_valueERKj
Line
Count
Source
382
35
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
383
35
    if (INVALID_TYPE == _column_type) {
384
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
385
0
    }
386
387
35
    _fixed_values.insert(value);
388
35
    _contain_null = false;
389
390
35
    _high_value = TYPE_MIN;
391
35
    _low_value = TYPE_MAX;
392
393
35
    return Status::OK();
394
35
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE15add_fixed_valueERKo
Line
Count
Source
382
36
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
383
36
    if (INVALID_TYPE == _column_type) {
384
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
385
0
    }
386
387
36
    _fixed_values.insert(value);
388
36
    _contain_null = false;
389
390
36
    _high_value = TYPE_MIN;
391
36
    _low_value = TYPE_MAX;
392
393
36
    return Status::OK();
394
36
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE15add_fixed_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
382
486
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
383
486
    if (INVALID_TYPE == _column_type) {
384
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
385
0
    }
386
387
486
    _fixed_values.insert(value);
388
486
    _contain_null = false;
389
390
486
    _high_value = TYPE_MIN;
391
486
    _low_value = TYPE_MAX;
392
393
486
    return Status::OK();
394
486
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE15add_fixed_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
382
292k
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
383
292k
    if (INVALID_TYPE == _column_type) {
384
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
385
0
    }
386
387
292k
    _fixed_values.insert(value);
388
292k
    _contain_null = false;
389
390
292k
    _high_value = TYPE_MIN;
391
292k
    _low_value = TYPE_MAX;
392
393
292k
    return Status::OK();
394
292k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE15add_fixed_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
382
1.55k
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
383
1.55k
    if (INVALID_TYPE == _column_type) {
384
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
385
0
    }
386
387
1.55k
    _fixed_values.insert(value);
388
1.55k
    _contain_null = false;
389
390
1.55k
    _high_value = TYPE_MIN;
391
1.55k
    _low_value = TYPE_MAX;
392
393
1.55k
    return Status::OK();
394
1.55k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE15add_fixed_valueERKNS_16VecDateTimeValueE
Line
Count
Source
382
43
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
383
43
    if (INVALID_TYPE == _column_type) {
384
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
385
0
    }
386
387
43
    _fixed_values.insert(value);
388
43
    _contain_null = false;
389
390
43
    _high_value = TYPE_MIN;
391
43
    _low_value = TYPE_MAX;
392
393
43
    return Status::OK();
394
43
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE15add_fixed_valueERKNS_11DateV2ValueINS_15DateV2ValueTypeEEE
Line
Count
Source
382
1.31k
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
383
1.31k
    if (INVALID_TYPE == _column_type) {
384
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
385
0
    }
386
387
1.31k
    _fixed_values.insert(value);
388
1.31k
    _contain_null = false;
389
390
1.31k
    _high_value = TYPE_MIN;
391
1.31k
    _low_value = TYPE_MAX;
392
393
1.31k
    return Status::OK();
394
1.31k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE15add_fixed_valueERKNS_16VecDateTimeValueE
Line
Count
Source
382
101
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
383
101
    if (INVALID_TYPE == _column_type) {
384
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
385
0
    }
386
387
101
    _fixed_values.insert(value);
388
101
    _contain_null = false;
389
390
101
    _high_value = TYPE_MIN;
391
101
    _low_value = TYPE_MAX;
392
393
101
    return Status::OK();
394
101
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE15add_fixed_valueERKNS_11DateV2ValueINS_19DateTimeV2ValueTypeEEE
Line
Count
Source
382
733
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
383
733
    if (INVALID_TYPE == _column_type) {
384
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
385
0
    }
386
387
733
    _fixed_values.insert(value);
388
733
    _contain_null = false;
389
390
733
    _high_value = TYPE_MIN;
391
733
    _low_value = TYPE_MAX;
392
393
733
    return Status::OK();
394
733
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE15add_fixed_valueERKNS_16TimestampTzValueE
Line
Count
Source
382
254
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
383
254
    if (INVALID_TYPE == _column_type) {
384
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
385
0
    }
386
387
254
    _fixed_values.insert(value);
388
254
    _contain_null = false;
389
390
254
    _high_value = TYPE_MIN;
391
254
    _low_value = TYPE_MAX;
392
393
254
    return Status::OK();
394
254
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE15add_fixed_valueERKNS_14DecimalV2ValueE
Line
Count
Source
382
13
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
383
13
    if (INVALID_TYPE == _column_type) {
384
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
385
0
    }
386
387
13
    _fixed_values.insert(value);
388
13
    _contain_null = false;
389
390
13
    _high_value = TYPE_MIN;
391
13
    _low_value = TYPE_MAX;
392
393
13
    return Status::OK();
394
13
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE15add_fixed_valueERKh
Line
Count
Source
382
375
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
383
375
    if (INVALID_TYPE == _column_type) {
384
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
385
0
    }
386
387
375
    _fixed_values.insert(value);
388
375
    _contain_null = false;
389
390
375
    _high_value = TYPE_MIN;
391
375
    _low_value = TYPE_MAX;
392
393
375
    return Status::OK();
394
375
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE15add_fixed_valueERKNS_7DecimalIiEE
Line
Count
Source
382
53
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
383
53
    if (INVALID_TYPE == _column_type) {
384
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
385
0
    }
386
387
53
    _fixed_values.insert(value);
388
53
    _contain_null = false;
389
390
53
    _high_value = TYPE_MIN;
391
53
    _low_value = TYPE_MAX;
392
393
53
    return Status::OK();
394
53
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE15add_fixed_valueERKNS_7DecimalIlEE
Line
Count
Source
382
475
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
383
475
    if (INVALID_TYPE == _column_type) {
384
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
385
0
    }
386
387
475
    _fixed_values.insert(value);
388
475
    _contain_null = false;
389
390
475
    _high_value = TYPE_MIN;
391
475
    _low_value = TYPE_MAX;
392
393
475
    return Status::OK();
394
475
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE15add_fixed_valueERKNS_12Decimal128V3E
Line
Count
Source
382
192
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
383
192
    if (INVALID_TYPE == _column_type) {
384
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
385
0
    }
386
387
192
    _fixed_values.insert(value);
388
192
    _contain_null = false;
389
390
192
    _high_value = TYPE_MIN;
391
192
    _low_value = TYPE_MAX;
392
393
192
    return Status::OK();
394
192
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE15add_fixed_valueERKNS_7DecimalIN4wide7integerILm256EiEEEE
Line
Count
Source
382
82
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
383
82
    if (INVALID_TYPE == _column_type) {
384
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
385
0
    }
386
387
82
    _fixed_values.insert(value);
388
82
    _contain_null = false;
389
390
82
    _high_value = TYPE_MIN;
391
82
    _low_value = TYPE_MAX;
392
393
82
    return Status::OK();
394
82
}
395
396
template <PrimitiveType primitive_type>
397
3
void ColumnValueRange<primitive_type>::remove_fixed_value(const CppType& value) {
398
3
    _fixed_values.erase(value);
399
3
}
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE18remove_fixed_valueERKa
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE18remove_fixed_valueERKs
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE18remove_fixed_valueERKi
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE18remove_fixed_valueERKl
Line
Count
Source
397
3
void ColumnValueRange<primitive_type>::remove_fixed_value(const CppType& value) {
398
3
    _fixed_values.erase(value);
399
3
}
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE18remove_fixed_valueERKn
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE18remove_fixed_valueERKf
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE18remove_fixed_valueERKd
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE18remove_fixed_valueERKj
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE18remove_fixed_valueERKo
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE18remove_fixed_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE18remove_fixed_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE18remove_fixed_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE18remove_fixed_valueERKNS_16VecDateTimeValueE
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE18remove_fixed_valueERKNS_11DateV2ValueINS_15DateV2ValueTypeEEE
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE18remove_fixed_valueERKNS_16VecDateTimeValueE
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE18remove_fixed_valueERKNS_11DateV2ValueINS_19DateTimeV2ValueTypeEEE
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE18remove_fixed_valueERKNS_16TimestampTzValueE
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE18remove_fixed_valueERKNS_14DecimalV2ValueE
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE18remove_fixed_valueERKh
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE18remove_fixed_valueERKNS_7DecimalIiEE
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE18remove_fixed_valueERKNS_7DecimalIlEE
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE18remove_fixed_valueERKNS_12Decimal128V3E
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE18remove_fixed_valueERKNS_7DecimalIN4wide7integerILm256EiEEEE
400
401
template <PrimitiveType primitive_type>
402
7.81M
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
403
7.81M
    return _fixed_values.size() != 0;
404
7.81M
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE20is_fixed_value_rangeEv
Line
Count
Source
402
1.11M
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
403
1.11M
    return _fixed_values.size() != 0;
404
1.11M
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE20is_fixed_value_rangeEv
Line
Count
Source
402
21.2k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
403
21.2k
    return _fixed_values.size() != 0;
404
21.2k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE20is_fixed_value_rangeEv
Line
Count
Source
402
508k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
403
508k
    return _fixed_values.size() != 0;
404
508k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE20is_fixed_value_rangeEv
Line
Count
Source
402
751k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
403
751k
    return _fixed_values.size() != 0;
404
751k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE20is_fixed_value_rangeEv
Line
Count
Source
402
34.6k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
403
34.6k
    return _fixed_values.size() != 0;
404
34.6k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE20is_fixed_value_rangeEv
Line
Count
Source
402
11.7k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
403
11.7k
    return _fixed_values.size() != 0;
404
11.7k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE20is_fixed_value_rangeEv
Line
Count
Source
402
17.6k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
403
17.6k
    return _fixed_values.size() != 0;
404
17.6k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE20is_fixed_value_rangeEv
Line
Count
Source
402
600
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
403
600
    return _fixed_values.size() != 0;
404
600
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE20is_fixed_value_rangeEv
Line
Count
Source
402
617
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
403
617
    return _fixed_values.size() != 0;
404
617
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE20is_fixed_value_rangeEv
Line
Count
Source
402
21.5k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
403
21.5k
    return _fixed_values.size() != 0;
404
21.5k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE20is_fixed_value_rangeEv
Line
Count
Source
402
4.81M
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
403
4.81M
    return _fixed_values.size() != 0;
404
4.81M
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE20is_fixed_value_rangeEv
Line
Count
Source
402
168k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
403
168k
    return _fixed_values.size() != 0;
404
168k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE20is_fixed_value_rangeEv
Line
Count
Source
402
946
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
403
946
    return _fixed_values.size() != 0;
404
946
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE20is_fixed_value_rangeEv
Line
Count
Source
402
89.7k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
403
89.7k
    return _fixed_values.size() != 0;
404
89.7k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE20is_fixed_value_rangeEv
Line
Count
Source
402
1.12k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
403
1.12k
    return _fixed_values.size() != 0;
404
1.12k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE20is_fixed_value_rangeEv
Line
Count
Source
402
147k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
403
147k
    return _fixed_values.size() != 0;
404
147k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE20is_fixed_value_rangeEv
Line
Count
Source
402
27.0k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
403
27.0k
    return _fixed_values.size() != 0;
404
27.0k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE20is_fixed_value_rangeEv
Line
Count
Source
402
951
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
403
951
    return _fixed_values.size() != 0;
404
951
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE20is_fixed_value_rangeEv
Line
Count
Source
402
22.2k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
403
22.2k
    return _fixed_values.size() != 0;
404
22.2k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE20is_fixed_value_rangeEv
Line
Count
Source
402
14.4k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
403
14.4k
    return _fixed_values.size() != 0;
404
14.4k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE20is_fixed_value_rangeEv
Line
Count
Source
402
25.3k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
403
25.3k
    return _fixed_values.size() != 0;
404
25.3k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE20is_fixed_value_rangeEv
Line
Count
Source
402
21.8k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
403
21.8k
    return _fixed_values.size() != 0;
404
21.8k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE20is_fixed_value_rangeEv
Line
Count
Source
402
5.70k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
403
5.70k
    return _fixed_values.size() != 0;
404
5.70k
}
405
406
template <PrimitiveType primitive_type>
407
2.44M
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
408
2.44M
    return Compare::greater(_high_value, _low_value);
409
2.44M
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE20is_scope_value_rangeEv
Line
Count
Source
407
143k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
408
143k
    return Compare::greater(_high_value, _low_value);
409
143k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE20is_scope_value_rangeEv
Line
Count
Source
407
17.9k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
408
17.9k
    return Compare::greater(_high_value, _low_value);
409
17.9k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE20is_scope_value_rangeEv
Line
Count
Source
407
246k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
408
246k
    return Compare::greater(_high_value, _low_value);
409
246k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE20is_scope_value_rangeEv
Line
Count
Source
407
536k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
408
536k
    return Compare::greater(_high_value, _low_value);
409
536k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE20is_scope_value_rangeEv
Line
Count
Source
407
15.4k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
408
15.4k
    return Compare::greater(_high_value, _low_value);
409
15.4k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE20is_scope_value_rangeEv
Line
Count
Source
407
11.1k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
408
11.1k
    return Compare::greater(_high_value, _low_value);
409
11.1k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE20is_scope_value_rangeEv
Line
Count
Source
407
16.0k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
408
16.0k
    return Compare::greater(_high_value, _low_value);
409
16.0k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE20is_scope_value_rangeEv
Line
Count
Source
407
377
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
408
377
    return Compare::greater(_high_value, _low_value);
409
377
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE20is_scope_value_rangeEv
Line
Count
Source
407
386
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
408
386
    return Compare::greater(_high_value, _low_value);
409
386
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE20is_scope_value_rangeEv
Line
Count
Source
407
16.5k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
408
16.5k
    return Compare::greater(_high_value, _low_value);
409
16.5k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE20is_scope_value_rangeEv
Line
Count
Source
407
1.02M
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
408
1.02M
    return Compare::greater(_high_value, _low_value);
409
1.02M
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE20is_scope_value_rangeEv
Line
Count
Source
407
153k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
408
153k
    return Compare::greater(_high_value, _low_value);
409
153k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE20is_scope_value_rangeEv
Line
Count
Source
407
577
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
408
577
    return Compare::greater(_high_value, _low_value);
409
577
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE20is_scope_value_rangeEv
Line
Count
Source
407
57.0k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
408
57.0k
    return Compare::greater(_high_value, _low_value);
409
57.0k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE20is_scope_value_rangeEv
Line
Count
Source
407
586
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
408
586
    return Compare::greater(_high_value, _low_value);
409
586
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE20is_scope_value_rangeEv
Line
Count
Source
407
129k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
408
129k
    return Compare::greater(_high_value, _low_value);
409
129k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE20is_scope_value_rangeEv
Line
Count
Source
407
10.4k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
408
10.4k
    return Compare::greater(_high_value, _low_value);
409
10.4k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE20is_scope_value_rangeEv
Line
Count
Source
407
559
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
408
559
    return Compare::greater(_high_value, _low_value);
409
559
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE20is_scope_value_rangeEv
Line
Count
Source
407
12.6k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
408
12.6k
    return Compare::greater(_high_value, _low_value);
409
12.6k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE20is_scope_value_rangeEv
Line
Count
Source
407
11.9k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
408
11.9k
    return Compare::greater(_high_value, _low_value);
409
11.9k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE20is_scope_value_rangeEv
Line
Count
Source
407
19.3k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
408
19.3k
    return Compare::greater(_high_value, _low_value);
409
19.3k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE20is_scope_value_rangeEv
Line
Count
Source
407
14.7k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
408
14.7k
    return Compare::greater(_high_value, _low_value);
409
14.7k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE20is_scope_value_rangeEv
Line
Count
Source
407
2.48k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
408
2.48k
    return Compare::greater(_high_value, _low_value);
409
2.48k
}
410
411
template <PrimitiveType primitive_type>
412
3.57M
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
413
3.57M
    if (INVALID_TYPE == _column_type) {
414
0
        return true;
415
0
    }
416
417
3.57M
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
418
3.57M
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE20is_empty_value_rangeEv
Line
Count
Source
412
384k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
413
384k
    if (INVALID_TYPE == _column_type) {
414
0
        return true;
415
0
    }
416
417
384k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
418
384k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE20is_empty_value_rangeEv
Line
Count
Source
412
18.1k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
413
18.1k
    if (INVALID_TYPE == _column_type) {
414
0
        return true;
415
0
    }
416
417
18.1k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
418
18.1k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE20is_empty_value_rangeEv
Line
Count
Source
412
259k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
413
259k
    if (INVALID_TYPE == _column_type) {
414
0
        return true;
415
0
    }
416
417
259k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
418
259k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE20is_empty_value_rangeEv
Line
Count
Source
412
540k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
413
540k
    if (INVALID_TYPE == _column_type) {
414
0
        return true;
415
0
    }
416
417
540k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
418
540k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE20is_empty_value_rangeEv
Line
Count
Source
412
15.9k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
413
15.9k
    if (INVALID_TYPE == _column_type) {
414
0
        return true;
415
0
    }
416
417
15.9k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
418
15.9k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE20is_empty_value_rangeEv
Line
Count
Source
412
11.3k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
413
11.3k
    if (INVALID_TYPE == _column_type) {
414
0
        return true;
415
0
    }
416
417
11.3k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
418
11.3k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE20is_empty_value_rangeEv
Line
Count
Source
412
16.2k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
413
16.2k
    if (INVALID_TYPE == _column_type) {
414
0
        return true;
415
0
    }
416
417
16.2k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
418
16.2k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE20is_empty_value_rangeEv
Line
Count
Source
412
425
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
413
425
    if (INVALID_TYPE == _column_type) {
414
0
        return true;
415
0
    }
416
417
425
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
418
425
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE20is_empty_value_rangeEv
Line
Count
Source
412
441
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
413
441
    if (INVALID_TYPE == _column_type) {
414
0
        return true;
415
0
    }
416
417
441
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
418
441
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE20is_empty_value_rangeEv
Line
Count
Source
412
17.2k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
413
17.2k
    if (INVALID_TYPE == _column_type) {
414
0
        return true;
415
0
    }
416
417
17.2k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
418
17.2k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE20is_empty_value_rangeEv
Line
Count
Source
412
1.89M
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
413
1.89M
    if (INVALID_TYPE == _column_type) {
414
0
        return true;
415
0
    }
416
417
1.89M
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
418
1.89M
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE20is_empty_value_rangeEv
Line
Count
Source
412
156k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
413
156k
    if (INVALID_TYPE == _column_type) {
414
0
        return true;
415
0
    }
416
417
156k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
418
156k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE20is_empty_value_rangeEv
Line
Count
Source
412
643
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
413
643
    if (INVALID_TYPE == _column_type) {
414
0
        return true;
415
0
    }
416
417
643
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
418
643
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE20is_empty_value_rangeEv
Line
Count
Source
412
59.4k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
413
59.4k
    if (INVALID_TYPE == _column_type) {
414
0
        return true;
415
0
    }
416
417
59.4k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
418
59.4k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE20is_empty_value_rangeEv
Line
Count
Source
412
681
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
413
681
    if (INVALID_TYPE == _column_type) {
414
0
        return true;
415
0
    }
416
417
681
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
418
681
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE20is_empty_value_rangeEv
Line
Count
Source
412
130k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
413
130k
    if (INVALID_TYPE == _column_type) {
414
0
        return true;
415
0
    }
416
417
130k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
418
130k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE20is_empty_value_rangeEv
Line
Count
Source
412
10.8k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
413
10.8k
    if (INVALID_TYPE == _column_type) {
414
0
        return true;
415
0
    }
416
417
10.8k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
418
10.8k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE20is_empty_value_rangeEv
Line
Count
Source
412
569
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
413
569
    if (INVALID_TYPE == _column_type) {
414
0
        return true;
415
0
    }
416
417
569
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
418
569
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE20is_empty_value_rangeEv
Line
Count
Source
412
13.3k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
413
13.3k
    if (INVALID_TYPE == _column_type) {
414
0
        return true;
415
0
    }
416
417
13.3k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
418
13.3k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE20is_empty_value_rangeEv
Line
Count
Source
412
12.0k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
413
12.0k
    if (INVALID_TYPE == _column_type) {
414
0
        return true;
415
0
    }
416
417
12.0k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
418
12.0k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE20is_empty_value_rangeEv
Line
Count
Source
412
19.9k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
413
19.9k
    if (INVALID_TYPE == _column_type) {
414
0
        return true;
415
0
    }
416
417
19.9k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
418
19.9k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE20is_empty_value_rangeEv
Line
Count
Source
412
15.1k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
413
15.1k
    if (INVALID_TYPE == _column_type) {
414
0
        return true;
415
0
    }
416
417
15.1k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
418
15.1k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE20is_empty_value_rangeEv
Line
Count
Source
412
2.64k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
413
2.64k
    if (INVALID_TYPE == _column_type) {
414
0
        return true;
415
0
    }
416
417
2.64k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
418
2.64k
}
419
420
template <PrimitiveType primitive_type>
421
135k
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
422
135k
    if (is_fixed_value_range()) {
423
0
        return false;
424
0
    }
425
426
135k
    if (!is_enumeration_type(_column_type)) {
427
19.6k
        return false;
428
19.6k
    }
429
430
115k
    return true;
431
135k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE26is_fixed_value_convertibleEv
Line
Count
Source
421
2.09k
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
422
2.09k
    if (is_fixed_value_range()) {
423
0
        return false;
424
0
    }
425
426
2.09k
    if (!is_enumeration_type(_column_type)) {
427
0
        return false;
428
0
    }
429
430
2.09k
    return true;
431
2.09k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE26is_fixed_value_convertibleEv
Line
Count
Source
421
231
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
422
231
    if (is_fixed_value_range()) {
423
0
        return false;
424
0
    }
425
426
231
    if (!is_enumeration_type(_column_type)) {
427
0
        return false;
428
0
    }
429
430
231
    return true;
431
231
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE26is_fixed_value_convertibleEv
Line
Count
Source
421
63.2k
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
422
63.2k
    if (is_fixed_value_range()) {
423
0
        return false;
424
0
    }
425
426
63.2k
    if (!is_enumeration_type(_column_type)) {
427
0
        return false;
428
0
    }
429
430
63.2k
    return true;
431
63.2k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE26is_fixed_value_convertibleEv
Line
Count
Source
421
43.7k
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
422
43.7k
    if (is_fixed_value_range()) {
423
0
        return false;
424
0
    }
425
426
43.7k
    if (!is_enumeration_type(_column_type)) {
427
0
        return false;
428
0
    }
429
430
43.7k
    return true;
431
43.7k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE26is_fixed_value_convertibleEv
Line
Count
Source
421
4.26k
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
422
4.26k
    if (is_fixed_value_range()) {
423
0
        return false;
424
0
    }
425
426
4.26k
    if (!is_enumeration_type(_column_type)) {
427
0
        return false;
428
0
    }
429
430
4.26k
    return true;
431
4.26k
}
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE26is_fixed_value_convertibleEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE26is_fixed_value_convertibleEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE26is_fixed_value_convertibleEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE26is_fixed_value_convertibleEv
Line
Count
Source
421
1
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
422
1
    if (is_fixed_value_range()) {
423
0
        return false;
424
0
    }
425
426
1
    if (!is_enumeration_type(_column_type)) {
427
0
        return false;
428
0
    }
429
430
1
    return true;
431
1
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE26is_fixed_value_convertibleEv
Line
Count
Source
421
333
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
422
333
    if (is_fixed_value_range()) {
423
0
        return false;
424
0
    }
425
426
333
    if (!is_enumeration_type(_column_type)) {
427
332
        return false;
428
332
    }
429
430
1
    return true;
431
333
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE26is_fixed_value_convertibleEv
Line
Count
Source
421
8.73k
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
422
8.73k
    if (is_fixed_value_range()) {
423
0
        return false;
424
0
    }
425
426
8.73k
    if (!is_enumeration_type(_column_type)) {
427
8.72k
        return false;
428
8.72k
    }
429
430
13
    return true;
431
8.73k
}
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE26is_fixed_value_convertibleEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE26is_fixed_value_convertibleEv
Line
Count
Source
421
34
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
422
34
    if (is_fixed_value_range()) {
423
0
        return false;
424
0
    }
425
426
34
    if (!is_enumeration_type(_column_type)) {
427
0
        return false;
428
0
    }
429
430
34
    return true;
431
34
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE26is_fixed_value_convertibleEv
Line
Count
Source
421
2.18k
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
422
2.18k
    if (is_fixed_value_range()) {
423
0
        return false;
424
0
    }
425
426
2.18k
    if (!is_enumeration_type(_column_type)) {
427
0
        return false;
428
0
    }
429
430
2.18k
    return true;
431
2.18k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE26is_fixed_value_convertibleEv
Line
Count
Source
421
30
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
422
30
    if (is_fixed_value_range()) {
423
0
        return false;
424
0
    }
425
426
30
    if (!is_enumeration_type(_column_type)) {
427
30
        return false;
428
30
    }
429
430
0
    return true;
431
30
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE26is_fixed_value_convertibleEv
Line
Count
Source
421
2.29k
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
422
2.29k
    if (is_fixed_value_range()) {
423
0
        return false;
424
0
    }
425
426
2.29k
    if (!is_enumeration_type(_column_type)) {
427
2.29k
        return false;
428
2.29k
    }
429
430
1
    return true;
431
2.29k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE26is_fixed_value_convertibleEv
Line
Count
Source
421
3.41k
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
422
3.41k
    if (is_fixed_value_range()) {
423
0
        return false;
424
0
    }
425
426
3.42k
    if (!is_enumeration_type(_column_type)) {
427
3.42k
        return false;
428
3.42k
    }
429
430
18.4E
    return true;
431
3.41k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE26is_fixed_value_convertibleEv
Line
Count
Source
421
86
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
422
86
    if (is_fixed_value_range()) {
423
0
        return false;
424
0
    }
425
426
86
    if (!is_enumeration_type(_column_type)) {
427
84
        return false;
428
84
    }
429
430
2
    return true;
431
86
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE26is_fixed_value_convertibleEv
Line
Count
Source
421
1.67k
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
422
1.67k
    if (is_fixed_value_range()) {
423
0
        return false;
424
0
    }
425
426
1.67k
    if (!is_enumeration_type(_column_type)) {
427
1.66k
        return false;
428
1.66k
    }
429
430
2
    return true;
431
1.67k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE26is_fixed_value_convertibleEv
Line
Count
Source
421
490
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
422
490
    if (is_fixed_value_range()) {
423
0
        return false;
424
0
    }
425
426
490
    if (!is_enumeration_type(_column_type)) {
427
489
        return false;
428
489
    }
429
430
1
    return true;
431
490
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE26is_fixed_value_convertibleEv
Line
Count
Source
421
748
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
422
748
    if (is_fixed_value_range()) {
423
0
        return false;
424
0
    }
425
426
748
    if (!is_enumeration_type(_column_type)) {
427
741
        return false;
428
741
    }
429
430
7
    return true;
431
748
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE26is_fixed_value_convertibleEv
Line
Count
Source
421
1.30k
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
422
1.30k
    if (is_fixed_value_range()) {
423
0
        return false;
424
0
    }
425
426
1.30k
    if (!is_enumeration_type(_column_type)) {
427
1.29k
        return false;
428
1.29k
    }
429
430
1
    return true;
431
1.30k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE26is_fixed_value_convertibleEv
Line
Count
Source
421
532
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
422
532
    if (is_fixed_value_range()) {
423
0
        return false;
424
0
    }
425
426
532
    if (!is_enumeration_type(_column_type)) {
427
529
        return false;
428
529
    }
429
430
3
    return true;
431
532
}
432
433
template <PrimitiveType primitive_type>
434
117
bool ColumnValueRange<primitive_type>::is_range_value_convertible() const {
435
117
    if (!is_fixed_value_range()) {
436
0
        return false;
437
0
    }
438
439
117
    if (TYPE_NULL == _column_type || TYPE_BOOLEAN == _column_type) {
440
1
        return false;
441
1
    }
442
443
116
    return true;
444
117
}
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE26is_range_value_convertibleEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE26is_range_value_convertibleEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE26is_range_value_convertibleEv
Line
Count
Source
434
114
bool ColumnValueRange<primitive_type>::is_range_value_convertible() const {
435
114
    if (!is_fixed_value_range()) {
436
0
        return false;
437
0
    }
438
439
114
    if (TYPE_NULL == _column_type || TYPE_BOOLEAN == _column_type) {
440
0
        return false;
441
0
    }
442
443
114
    return true;
444
114
}
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE26is_range_value_convertibleEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE26is_range_value_convertibleEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE26is_range_value_convertibleEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE26is_range_value_convertibleEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE26is_range_value_convertibleEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE26is_range_value_convertibleEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE26is_range_value_convertibleEv
Line
Count
Source
434
2
bool ColumnValueRange<primitive_type>::is_range_value_convertible() const {
435
2
    if (!is_fixed_value_range()) {
436
0
        return false;
437
0
    }
438
439
2
    if (TYPE_NULL == _column_type || TYPE_BOOLEAN == _column_type) {
440
0
        return false;
441
0
    }
442
443
2
    return true;
444
2
}
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE26is_range_value_convertibleEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE26is_range_value_convertibleEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE26is_range_value_convertibleEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE26is_range_value_convertibleEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE26is_range_value_convertibleEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE26is_range_value_convertibleEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE26is_range_value_convertibleEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE26is_range_value_convertibleEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE26is_range_value_convertibleEv
Line
Count
Source
434
1
bool ColumnValueRange<primitive_type>::is_range_value_convertible() const {
435
1
    if (!is_fixed_value_range()) {
436
0
        return false;
437
0
    }
438
439
1
    if (TYPE_NULL == _column_type || TYPE_BOOLEAN == _column_type) {
440
1
        return false;
441
1
    }
442
443
0
    return true;
444
1
}
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE26is_range_value_convertibleEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE26is_range_value_convertibleEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE26is_range_value_convertibleEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE26is_range_value_convertibleEv
445
446
// The return value indicates whether eos.
447
template <PrimitiveType primitive_type>
448
bool ColumnValueRange<primitive_type>::convert_to_close_range(
449
        std::vector<OlapTuple>& begin_scan_keys, std::vector<OlapTuple>& end_scan_keys,
450
111k
        bool& begin_include, bool& end_include) {
451
111k
    if constexpr (!_is_reject_split_type) {
452
111k
        begin_include = true;
453
111k
        end_include = true;
454
455
111k
        bool is_empty = false;
456
457
111k
        if (!is_begin_include()) {
458
2.79k
            if (Compare::equal(_low_value, TYPE_MAX)) {
459
0
                is_empty = true;
460
2.79k
            } else {
461
2.79k
                ++_low_value;
462
2.79k
            }
463
2.79k
        }
464
465
111k
        if (!is_end_include()) {
466
490
            if (Compare::equal(_high_value, TYPE_MIN)) {
467
0
                is_empty = true;
468
490
            } else {
469
490
                --_high_value;
470
490
            }
471
490
        }
472
473
111k
        if (Compare::less(_high_value, _low_value)) {
474
27
            is_empty = true;
475
27
        }
476
477
111k
        if (is_empty && !contain_null()) {
478
0
            begin_scan_keys.clear();
479
0
            end_scan_keys.clear();
480
0
            return true;
481
0
        }
482
111k
    }
483
111k
    return false;
484
111k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE22convert_to_close_rangeERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_
Line
Count
Source
450
2.10k
        bool& begin_include, bool& end_include) {
451
2.10k
    if constexpr (!_is_reject_split_type) {
452
2.10k
        begin_include = true;
453
2.10k
        end_include = true;
454
455
2.10k
        bool is_empty = false;
456
457
2.10k
        if (!is_begin_include()) {
458
44
            if (Compare::equal(_low_value, TYPE_MAX)) {
459
0
                is_empty = true;
460
44
            } else {
461
44
                ++_low_value;
462
44
            }
463
44
        }
464
465
2.10k
        if (!is_end_include()) {
466
10
            if (Compare::equal(_high_value, TYPE_MIN)) {
467
0
                is_empty = true;
468
10
            } else {
469
10
                --_high_value;
470
10
            }
471
10
        }
472
473
2.10k
        if (Compare::less(_high_value, _low_value)) {
474
0
            is_empty = true;
475
0
        }
476
477
2.10k
        if (is_empty && !contain_null()) {
478
0
            begin_scan_keys.clear();
479
0
            end_scan_keys.clear();
480
0
            return true;
481
0
        }
482
2.10k
    }
483
2.10k
    return false;
484
2.10k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE22convert_to_close_rangeERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_
Line
Count
Source
450
231
        bool& begin_include, bool& end_include) {
451
231
    if constexpr (!_is_reject_split_type) {
452
231
        begin_include = true;
453
231
        end_include = true;
454
455
231
        bool is_empty = false;
456
457
231
        if (!is_begin_include()) {
458
0
            if (Compare::equal(_low_value, TYPE_MAX)) {
459
0
                is_empty = true;
460
0
            } else {
461
0
                ++_low_value;
462
0
            }
463
0
        }
464
465
231
        if (!is_end_include()) {
466
0
            if (Compare::equal(_high_value, TYPE_MIN)) {
467
0
                is_empty = true;
468
0
            } else {
469
0
                --_high_value;
470
0
            }
471
0
        }
472
473
231
        if (Compare::less(_high_value, _low_value)) {
474
0
            is_empty = true;
475
0
        }
476
477
231
        if (is_empty && !contain_null()) {
478
0
            begin_scan_keys.clear();
479
0
            end_scan_keys.clear();
480
0
            return true;
481
0
        }
482
231
    }
483
231
    return false;
484
231
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE22convert_to_close_rangeERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_
Line
Count
Source
450
62.9k
        bool& begin_include, bool& end_include) {
451
62.9k
    if constexpr (!_is_reject_split_type) {
452
62.9k
        begin_include = true;
453
62.9k
        end_include = true;
454
455
62.9k
        bool is_empty = false;
456
457
62.9k
        if (!is_begin_include()) {
458
492
            if (Compare::equal(_low_value, TYPE_MAX)) {
459
0
                is_empty = true;
460
492
            } else {
461
492
                ++_low_value;
462
492
            }
463
492
        }
464
465
62.9k
        if (!is_end_include()) {
466
360
            if (Compare::equal(_high_value, TYPE_MIN)) {
467
0
                is_empty = true;
468
360
            } else {
469
360
                --_high_value;
470
360
            }
471
360
        }
472
473
62.9k
        if (Compare::less(_high_value, _low_value)) {
474
27
            is_empty = true;
475
27
        }
476
477
62.9k
        if (is_empty && !contain_null()) {
478
0
            begin_scan_keys.clear();
479
0
            end_scan_keys.clear();
480
0
            return true;
481
0
        }
482
62.9k
    }
483
62.9k
    return false;
484
62.9k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE22convert_to_close_rangeERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_
Line
Count
Source
450
43.6k
        bool& begin_include, bool& end_include) {
451
43.6k
    if constexpr (!_is_reject_split_type) {
452
43.6k
        begin_include = true;
453
43.6k
        end_include = true;
454
455
43.6k
        bool is_empty = false;
456
457
43.6k
        if (!is_begin_include()) {
458
2.24k
            if (Compare::equal(_low_value, TYPE_MAX)) {
459
0
                is_empty = true;
460
2.24k
            } else {
461
2.24k
                ++_low_value;
462
2.24k
            }
463
2.24k
        }
464
465
43.6k
        if (!is_end_include()) {
466
10
            if (Compare::equal(_high_value, TYPE_MIN)) {
467
0
                is_empty = true;
468
10
            } else {
469
10
                --_high_value;
470
10
            }
471
10
        }
472
473
43.6k
        if (Compare::less(_high_value, _low_value)) {
474
0
            is_empty = true;
475
0
        }
476
477
43.6k
        if (is_empty && !contain_null()) {
478
0
            begin_scan_keys.clear();
479
0
            end_scan_keys.clear();
480
0
            return true;
481
0
        }
482
43.6k
    }
483
43.6k
    return false;
484
43.6k
}
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE22convert_to_close_rangeERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE22convert_to_close_rangeERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE22convert_to_close_rangeERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE22convert_to_close_rangeERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE22convert_to_close_rangeERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_
Line
Count
Source
450
1
        bool& begin_include, bool& end_include) {
451
1
    if constexpr (!_is_reject_split_type) {
452
1
        begin_include = true;
453
1
        end_include = true;
454
455
1
        bool is_empty = false;
456
457
1
        if (!is_begin_include()) {
458
0
            if (Compare::equal(_low_value, TYPE_MAX)) {
459
0
                is_empty = true;
460
0
            } else {
461
0
                ++_low_value;
462
0
            }
463
0
        }
464
465
1
        if (!is_end_include()) {
466
0
            if (Compare::equal(_high_value, TYPE_MIN)) {
467
0
                is_empty = true;
468
0
            } else {
469
0
                --_high_value;
470
0
            }
471
0
        }
472
473
1
        if (Compare::less(_high_value, _low_value)) {
474
0
            is_empty = true;
475
0
        }
476
477
1
        if (is_empty && !contain_null()) {
478
0
            begin_scan_keys.clear();
479
0
            end_scan_keys.clear();
480
0
            return true;
481
0
        }
482
1
    }
483
1
    return false;
484
1
}
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE22convert_to_close_rangeERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE22convert_to_close_rangeERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE22convert_to_close_rangeERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE22convert_to_close_rangeERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_
Line
Count
Source
450
34
        bool& begin_include, bool& end_include) {
451
34
    if constexpr (!_is_reject_split_type) {
452
34
        begin_include = true;
453
34
        end_include = true;
454
455
34
        bool is_empty = false;
456
457
34
        if (!is_begin_include()) {
458
0
            if (Compare::equal(_low_value, TYPE_MAX)) {
459
0
                is_empty = true;
460
0
            } else {
461
0
                ++_low_value;
462
0
            }
463
0
        }
464
465
34
        if (!is_end_include()) {
466
0
            if (Compare::equal(_high_value, TYPE_MIN)) {
467
0
                is_empty = true;
468
0
            } else {
469
0
                --_high_value;
470
0
            }
471
0
        }
472
473
34
        if (Compare::less(_high_value, _low_value)) {
474
0
            is_empty = true;
475
0
        }
476
477
34
        if (is_empty && !contain_null()) {
478
0
            begin_scan_keys.clear();
479
0
            end_scan_keys.clear();
480
0
            return true;
481
0
        }
482
34
    }
483
34
    return false;
484
34
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE22convert_to_close_rangeERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_
Line
Count
Source
450
2.18k
        bool& begin_include, bool& end_include) {
451
2.18k
    if constexpr (!_is_reject_split_type) {
452
2.18k
        begin_include = true;
453
2.18k
        end_include = true;
454
455
2.18k
        bool is_empty = false;
456
457
2.18k
        if (!is_begin_include()) {
458
15
            if (Compare::equal(_low_value, TYPE_MAX)) {
459
0
                is_empty = true;
460
15
            } else {
461
15
                ++_low_value;
462
15
            }
463
15
        }
464
465
2.18k
        if (!is_end_include()) {
466
110
            if (Compare::equal(_high_value, TYPE_MIN)) {
467
0
                is_empty = true;
468
110
            } else {
469
110
                --_high_value;
470
110
            }
471
110
        }
472
473
2.18k
        if (Compare::less(_high_value, _low_value)) {
474
0
            is_empty = true;
475
0
        }
476
477
2.18k
        if (is_empty && !contain_null()) {
478
0
            begin_scan_keys.clear();
479
0
            end_scan_keys.clear();
480
0
            return true;
481
0
        }
482
2.18k
    }
483
2.18k
    return false;
484
2.18k
}
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE22convert_to_close_rangeERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE22convert_to_close_rangeERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE22convert_to_close_rangeERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE22convert_to_close_rangeERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE22convert_to_close_rangeERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE22convert_to_close_rangeERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE22convert_to_close_rangeERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE22convert_to_close_rangeERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE22convert_to_close_rangeERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_
485
486
// The return value indicates whether the split result is range or fixed value.
487
template <PrimitiveType primitive_type>
488
bool ColumnValueRange<primitive_type>::convert_to_avg_range_value(
489
        std::vector<OlapTuple>& begin_scan_keys, std::vector<OlapTuple>& end_scan_keys,
490
110k
        bool& begin_include, bool& end_include, int32_t max_scan_key_num) {
491
110k
    if constexpr (!_is_reject_split_type) {
492
110k
        CppType min_value = get_range_min_value();
493
110k
        CppType max_value = get_range_max_value();
494
110k
        if constexpr (primitive_type == PrimitiveType::TYPE_DATE) {
495
34
            min_value.set_type(TimeType::TIME_DATE);
496
34
            max_value.set_type(TimeType::TIME_DATE);
497
34
        }
498
110k
        auto empty_range_only_null = Compare::greater(min_value, max_value);
499
110k
        if (empty_range_only_null) {
500
            // Not contain null will be disposed in `convert_to_close_range`, return eos.
501
28
            DCHECK(contain_null());
502
28
        }
503
504
110k
        auto no_split = [&]() -> bool {
505
104k
            begin_scan_keys.emplace_back();
506
104k
            if (contain_null()) {
507
77.7k
                begin_scan_keys.back().add_null();
508
77.7k
            } else {
509
26.7k
                begin_scan_keys.back().add_field(
510
26.7k
                        Field::create_field<primitive_type>(get_range_min_value()));
511
26.7k
            }
512
104k
            end_scan_keys.emplace_back();
513
104k
            if (empty_range_only_null) {
514
28
                end_scan_keys.back().add_null();
515
104k
            } else {
516
104k
                end_scan_keys.back().add_field(
517
104k
                        Field::create_field<primitive_type>(get_range_max_value()));
518
104k
            }
519
104k
            return true;
520
104k
        };
Unexecuted instantiation: _ZZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_iENKUlvE_clEv
Unexecuted instantiation: _ZZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_iENKUlvE_clEv
_ZZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_iENKUlvE_clEv
Line
Count
Source
504
61.3k
        auto no_split = [&]() -> bool {
505
61.3k
            begin_scan_keys.emplace_back();
506
61.3k
            if (contain_null()) {
507
44.1k
                begin_scan_keys.back().add_null();
508
44.1k
            } else {
509
17.1k
                begin_scan_keys.back().add_field(
510
17.1k
                        Field::create_field<primitive_type>(get_range_min_value()));
511
17.1k
            }
512
61.3k
            end_scan_keys.emplace_back();
513
61.3k
            if (empty_range_only_null) {
514
28
                end_scan_keys.back().add_null();
515
61.3k
            } else {
516
61.3k
                end_scan_keys.back().add_field(
517
61.3k
                        Field::create_field<primitive_type>(get_range_max_value()));
518
61.3k
            }
519
61.3k
            return true;
520
61.3k
        };
_ZZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_iENKUlvE_clEv
Line
Count
Source
504
43.1k
        auto no_split = [&]() -> bool {
505
43.1k
            begin_scan_keys.emplace_back();
506
43.1k
            if (contain_null()) {
507
33.6k
                begin_scan_keys.back().add_null();
508
33.6k
            } else {
509
9.57k
                begin_scan_keys.back().add_field(
510
9.57k
                        Field::create_field<primitive_type>(get_range_min_value()));
511
9.57k
            }
512
43.1k
            end_scan_keys.emplace_back();
513
43.1k
            if (empty_range_only_null) {
514
0
                end_scan_keys.back().add_null();
515
43.1k
            } else {
516
43.1k
                end_scan_keys.back().add_field(
517
43.1k
                        Field::create_field<primitive_type>(get_range_max_value()));
518
43.1k
            }
519
43.1k
            return true;
520
43.1k
        };
Unexecuted instantiation: _ZZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_iENKUlvE_clEv
_ZZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_iENKUlvE_clEv
Line
Count
Source
504
1
        auto no_split = [&]() -> bool {
505
1
            begin_scan_keys.emplace_back();
506
1
            if (contain_null()) {
507
1
                begin_scan_keys.back().add_null();
508
1
            } else {
509
0
                begin_scan_keys.back().add_field(
510
0
                        Field::create_field<primitive_type>(get_range_min_value()));
511
0
            }
512
1
            end_scan_keys.emplace_back();
513
1
            if (empty_range_only_null) {
514
0
                end_scan_keys.back().add_null();
515
1
            } else {
516
1
                end_scan_keys.back().add_field(
517
1
                        Field::create_field<primitive_type>(get_range_max_value()));
518
1
            }
519
1
            return true;
520
1
        };
Unexecuted instantiation: _ZZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_iENKUlvE_clEv
Unexecuted instantiation: _ZZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_iENKUlvE_clEv
Unexecuted instantiation: _ZZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_iENKUlvE_clEv
Unexecuted instantiation: _ZZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_iENKUlvE_clEv
Unexecuted instantiation: _ZZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_iENKUlvE_clEv
521
110k
        if (empty_range_only_null || max_scan_key_num == 1) {
522
28
            return no_split();
523
28
        }
524
525
333k
        auto cast = [](const CppType& value) {
526
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
527
105k
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
528
105k
                return value;
529
227k
            } else {
530
227k
                return (int128_t)value;
531
227k
            }
532
333k
        };
_ZZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_iENKUlRKaE_clESA_
Line
Count
Source
525
92.2k
        auto cast = [](const CppType& value) {
526
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
527
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
528
                return value;
529
92.2k
            } else {
530
92.2k
                return (int128_t)value;
531
92.2k
            }
532
92.2k
        };
_ZZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_iENKUlRKsE_clESA_
Line
Count
Source
525
11.2k
        auto cast = [](const CppType& value) {
526
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
527
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
528
                return value;
529
11.2k
            } else {
530
11.2k
                return (int128_t)value;
531
11.2k
            }
532
11.2k
        };
_ZZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_iENKUlRKiE_clESA_
Line
Count
Source
525
78.5k
        auto cast = [](const CppType& value) {
526
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
527
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
528
                return value;
529
78.5k
            } else {
530
78.5k
                return (int128_t)value;
531
78.5k
            }
532
78.5k
        };
_ZZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_iENKUlRKlE_clESA_
Line
Count
Source
525
45.8k
        auto cast = [](const CppType& value) {
526
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
527
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
528
                return value;
529
45.8k
            } else {
530
45.8k
                return (int128_t)value;
531
45.8k
            }
532
45.8k
        };
Unexecuted instantiation: _ZZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_iENKUlRKjE_clESA_
_ZZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_iENKUlRKoE_clESA_
Line
Count
Source
525
1
        auto cast = [](const CppType& value) {
526
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
527
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
528
                return value;
529
1
            } else {
530
1
                return (int128_t)value;
531
1
            }
532
1
        };
_ZZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_iENKUlRKNS_16VecDateTimeValueEE_clESB_
Line
Count
Source
525
1.66k
        auto cast = [](const CppType& value) {
526
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
527
1.66k
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
528
1.66k
                return value;
529
            } else {
530
                return (int128_t)value;
531
            }
532
1.66k
        };
_ZZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_iENKUlRKNS_11DateV2ValueINS_15DateV2ValueTypeEEEE_clESD_
Line
Count
Source
525
103k
        auto cast = [](const CppType& value) {
526
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
527
103k
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
528
103k
                return value;
529
            } else {
530
                return (int128_t)value;
531
            }
532
103k
        };
Unexecuted instantiation: _ZZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_iENKUlRKNS_7DecimalIiEEE_clESC_
Unexecuted instantiation: _ZZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_iENKUlRKNS_7DecimalIlEEE_clESC_
Unexecuted instantiation: _ZZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_iENKUlRKNS_12Decimal128V3EE_clESB_
533
534
        // When CppType is date, we can not convert it to integer number and calculate distance.
535
        // In other case, we convert element to int128 to avoit overflow.
536
110k
        int128_t step_size_may_overflow = (cast(max_value) - min_value) / max_scan_key_num;
537
538
110k
        constexpr size_t MAX_STEP_SIZE = 1 << 20;
539
        // When the step size is too large, the range is easy to not really contain data.
540
110k
        if (step_size_may_overflow > MAX_STEP_SIZE) {
541
105k
            return no_split();
542
105k
        }
543
5.77k
        int step_size = cast_set<int>(step_size_may_overflow);
544
5.77k
        int real_step_size = 0;
545
546
        // Add null key if contain null, must do after no_split check
547
5.77k
        if (contain_null()) {
548
2.93k
            begin_scan_keys.emplace_back();
549
2.93k
            begin_scan_keys.back().add_null();
550
2.93k
            end_scan_keys.emplace_back();
551
2.93k
            end_scan_keys.back().add_null();
552
2.93k
        }
553
221k
        while (true) {
554
221k
            begin_scan_keys.emplace_back();
555
221k
            begin_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
556
557
221k
            if (cast(max_value) - min_value < step_size) {
558
4.60k
                min_value = max_value;
559
217k
            } else {
560
217k
                min_value += step_size;
561
217k
            }
562
563
221k
            end_scan_keys.emplace_back();
564
221k
            end_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
565
566
221k
            if (Compare::equal(min_value, max_value)) {
567
6.39k
                break;
568
6.39k
            }
569
215k
            ++min_value;
570
215k
            ++real_step_size;
571
215k
            if (real_step_size > MAX_STEP_SIZE) {
572
0
                throw Exception(Status::InternalError(
573
0
                        "convert_to_avg_range_value meet error. type={}, step_size={}",
574
0
                        int(primitive_type), step_size));
575
0
            }
576
215k
        }
577
578
5.77k
        return step_size != 0;
579
5.77k
    }
580
0
    return false;
581
110k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_i
Line
Count
Source
490
2.07k
        bool& begin_include, bool& end_include, int32_t max_scan_key_num) {
491
2.07k
    if constexpr (!_is_reject_split_type) {
492
2.07k
        CppType min_value = get_range_min_value();
493
2.07k
        CppType max_value = get_range_max_value();
494
        if constexpr (primitive_type == PrimitiveType::TYPE_DATE) {
495
            min_value.set_type(TimeType::TIME_DATE);
496
            max_value.set_type(TimeType::TIME_DATE);
497
        }
498
2.07k
        auto empty_range_only_null = Compare::greater(min_value, max_value);
499
2.07k
        if (empty_range_only_null) {
500
            // Not contain null will be disposed in `convert_to_close_range`, return eos.
501
0
            DCHECK(contain_null());
502
0
        }
503
504
2.07k
        auto no_split = [&]() -> bool {
505
2.07k
            begin_scan_keys.emplace_back();
506
2.07k
            if (contain_null()) {
507
2.07k
                begin_scan_keys.back().add_null();
508
2.07k
            } else {
509
2.07k
                begin_scan_keys.back().add_field(
510
2.07k
                        Field::create_field<primitive_type>(get_range_min_value()));
511
2.07k
            }
512
2.07k
            end_scan_keys.emplace_back();
513
2.07k
            if (empty_range_only_null) {
514
2.07k
                end_scan_keys.back().add_null();
515
2.07k
            } else {
516
2.07k
                end_scan_keys.back().add_field(
517
2.07k
                        Field::create_field<primitive_type>(get_range_max_value()));
518
2.07k
            }
519
2.07k
            return true;
520
2.07k
        };
521
2.08k
        if (empty_range_only_null || max_scan_key_num == 1) {
522
0
            return no_split();
523
0
        }
524
525
2.07k
        auto cast = [](const CppType& value) {
526
2.07k
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
527
2.07k
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
528
2.07k
                return value;
529
2.07k
            } else {
530
2.07k
                return (int128_t)value;
531
2.07k
            }
532
2.07k
        };
533
534
        // When CppType is date, we can not convert it to integer number and calculate distance.
535
        // In other case, we convert element to int128 to avoit overflow.
536
2.07k
        int128_t step_size_may_overflow = (cast(max_value) - min_value) / max_scan_key_num;
537
538
2.07k
        constexpr size_t MAX_STEP_SIZE = 1 << 20;
539
        // When the step size is too large, the range is easy to not really contain data.
540
2.07k
        if (step_size_may_overflow > MAX_STEP_SIZE) {
541
0
            return no_split();
542
0
        }
543
2.07k
        int step_size = cast_set<int>(step_size_may_overflow);
544
2.07k
        int real_step_size = 0;
545
546
        // Add null key if contain null, must do after no_split check
547
2.07k
        if (contain_null()) {
548
1.82k
            begin_scan_keys.emplace_back();
549
1.82k
            begin_scan_keys.back().add_null();
550
1.82k
            end_scan_keys.emplace_back();
551
1.82k
            end_scan_keys.back().add_null();
552
1.82k
        }
553
89.7k
        while (true) {
554
89.7k
            begin_scan_keys.emplace_back();
555
89.7k
            begin_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
556
557
89.7k
            if (cast(max_value) - min_value < step_size) {
558
2.11k
                min_value = max_value;
559
87.6k
            } else {
560
87.6k
                min_value += step_size;
561
87.6k
            }
562
563
89.7k
            end_scan_keys.emplace_back();
564
89.7k
            end_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
565
566
89.7k
            if (Compare::equal(min_value, max_value)) {
567
2.13k
                break;
568
2.13k
            }
569
87.6k
            ++min_value;
570
87.6k
            ++real_step_size;
571
87.6k
            if (real_step_size > MAX_STEP_SIZE) {
572
0
                throw Exception(Status::InternalError(
573
0
                        "convert_to_avg_range_value meet error. type={}, step_size={}",
574
0
                        int(primitive_type), step_size));
575
0
            }
576
87.6k
        }
577
578
2.07k
        return step_size != 0;
579
2.07k
    }
580
0
    return false;
581
2.07k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_i
Line
Count
Source
490
231
        bool& begin_include, bool& end_include, int32_t max_scan_key_num) {
491
231
    if constexpr (!_is_reject_split_type) {
492
231
        CppType min_value = get_range_min_value();
493
231
        CppType max_value = get_range_max_value();
494
        if constexpr (primitive_type == PrimitiveType::TYPE_DATE) {
495
            min_value.set_type(TimeType::TIME_DATE);
496
            max_value.set_type(TimeType::TIME_DATE);
497
        }
498
231
        auto empty_range_only_null = Compare::greater(min_value, max_value);
499
231
        if (empty_range_only_null) {
500
            // Not contain null will be disposed in `convert_to_close_range`, return eos.
501
0
            DCHECK(contain_null());
502
0
        }
503
504
231
        auto no_split = [&]() -> bool {
505
231
            begin_scan_keys.emplace_back();
506
231
            if (contain_null()) {
507
231
                begin_scan_keys.back().add_null();
508
231
            } else {
509
231
                begin_scan_keys.back().add_field(
510
231
                        Field::create_field<primitive_type>(get_range_min_value()));
511
231
            }
512
231
            end_scan_keys.emplace_back();
513
231
            if (empty_range_only_null) {
514
231
                end_scan_keys.back().add_null();
515
231
            } else {
516
231
                end_scan_keys.back().add_field(
517
231
                        Field::create_field<primitive_type>(get_range_max_value()));
518
231
            }
519
231
            return true;
520
231
        };
521
231
        if (empty_range_only_null || max_scan_key_num == 1) {
522
0
            return no_split();
523
0
        }
524
525
231
        auto cast = [](const CppType& value) {
526
231
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
527
231
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
528
231
                return value;
529
231
            } else {
530
231
                return (int128_t)value;
531
231
            }
532
231
        };
533
534
        // When CppType is date, we can not convert it to integer number and calculate distance.
535
        // In other case, we convert element to int128 to avoit overflow.
536
231
        int128_t step_size_may_overflow = (cast(max_value) - min_value) / max_scan_key_num;
537
538
231
        constexpr size_t MAX_STEP_SIZE = 1 << 20;
539
        // When the step size is too large, the range is easy to not really contain data.
540
231
        if (step_size_may_overflow > MAX_STEP_SIZE) {
541
0
            return no_split();
542
0
        }
543
231
        int step_size = cast_set<int>(step_size_may_overflow);
544
231
        int real_step_size = 0;
545
546
        // Add null key if contain null, must do after no_split check
547
231
        if (contain_null()) {
548
155
            begin_scan_keys.emplace_back();
549
155
            begin_scan_keys.back().add_null();
550
155
            end_scan_keys.emplace_back();
551
155
            end_scan_keys.back().add_null();
552
155
        }
553
11.0k
        while (true) {
554
11.0k
            begin_scan_keys.emplace_back();
555
11.0k
            begin_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
556
557
11.0k
            if (cast(max_value) - min_value < step_size) {
558
233
                min_value = max_value;
559
10.8k
            } else {
560
10.8k
                min_value += step_size;
561
10.8k
            }
562
563
11.0k
            end_scan_keys.emplace_back();
564
11.0k
            end_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
565
566
11.0k
            if (Compare::equal(min_value, max_value)) {
567
233
                break;
568
233
            }
569
10.8k
            ++min_value;
570
10.8k
            ++real_step_size;
571
10.8k
            if (real_step_size > MAX_STEP_SIZE) {
572
0
                throw Exception(Status::InternalError(
573
0
                        "convert_to_avg_range_value meet error. type={}, step_size={}",
574
0
                        int(primitive_type), step_size));
575
0
            }
576
10.8k
        }
577
578
231
        return step_size != 0;
579
231
    }
580
0
    return false;
581
231
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_i
Line
Count
Source
490
62.6k
        bool& begin_include, bool& end_include, int32_t max_scan_key_num) {
491
62.6k
    if constexpr (!_is_reject_split_type) {
492
62.6k
        CppType min_value = get_range_min_value();
493
62.6k
        CppType max_value = get_range_max_value();
494
        if constexpr (primitive_type == PrimitiveType::TYPE_DATE) {
495
            min_value.set_type(TimeType::TIME_DATE);
496
            max_value.set_type(TimeType::TIME_DATE);
497
        }
498
62.6k
        auto empty_range_only_null = Compare::greater(min_value, max_value);
499
62.6k
        if (empty_range_only_null) {
500
            // Not contain null will be disposed in `convert_to_close_range`, return eos.
501
28
            DCHECK(contain_null());
502
28
        }
503
504
62.6k
        auto no_split = [&]() -> bool {
505
62.6k
            begin_scan_keys.emplace_back();
506
62.6k
            if (contain_null()) {
507
62.6k
                begin_scan_keys.back().add_null();
508
62.6k
            } else {
509
62.6k
                begin_scan_keys.back().add_field(
510
62.6k
                        Field::create_field<primitive_type>(get_range_min_value()));
511
62.6k
            }
512
62.6k
            end_scan_keys.emplace_back();
513
62.6k
            if (empty_range_only_null) {
514
62.6k
                end_scan_keys.back().add_null();
515
62.6k
            } else {
516
62.6k
                end_scan_keys.back().add_field(
517
62.6k
                        Field::create_field<primitive_type>(get_range_max_value()));
518
62.6k
            }
519
62.6k
            return true;
520
62.6k
        };
521
62.6k
        if (empty_range_only_null || max_scan_key_num == 1) {
522
28
            return no_split();
523
28
        }
524
525
62.6k
        auto cast = [](const CppType& value) {
526
62.6k
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
527
62.6k
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
528
62.6k
                return value;
529
62.6k
            } else {
530
62.6k
                return (int128_t)value;
531
62.6k
            }
532
62.6k
        };
533
534
        // When CppType is date, we can not convert it to integer number and calculate distance.
535
        // In other case, we convert element to int128 to avoit overflow.
536
62.6k
        int128_t step_size_may_overflow = (cast(max_value) - min_value) / max_scan_key_num;
537
538
62.6k
        constexpr size_t MAX_STEP_SIZE = 1 << 20;
539
        // When the step size is too large, the range is easy to not really contain data.
540
62.6k
        if (step_size_may_overflow > MAX_STEP_SIZE) {
541
61.7k
            return no_split();
542
61.7k
        }
543
881
        int step_size = cast_set<int>(step_size_may_overflow);
544
881
        int real_step_size = 0;
545
546
        // Add null key if contain null, must do after no_split check
547
881
        if (contain_null()) {
548
0
            begin_scan_keys.emplace_back();
549
0
            begin_scan_keys.back().add_null();
550
0
            end_scan_keys.emplace_back();
551
0
            end_scan_keys.back().add_null();
552
0
        }
553
15.8k
        while (true) {
554
15.8k
            begin_scan_keys.emplace_back();
555
15.8k
            begin_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
556
557
15.8k
            if (cast(max_value) - min_value < step_size) {
558
136
                min_value = max_value;
559
15.6k
            } else {
560
15.6k
                min_value += step_size;
561
15.6k
            }
562
563
15.8k
            end_scan_keys.emplace_back();
564
15.8k
            end_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
565
566
15.8k
            if (Compare::equal(min_value, max_value)) {
567
1.36k
                break;
568
1.36k
            }
569
14.4k
            ++min_value;
570
14.4k
            ++real_step_size;
571
14.4k
            if (real_step_size > MAX_STEP_SIZE) {
572
0
                throw Exception(Status::InternalError(
573
0
                        "convert_to_avg_range_value meet error. type={}, step_size={}",
574
0
                        int(primitive_type), step_size));
575
0
            }
576
14.4k
        }
577
578
881
        return step_size != 0;
579
881
    }
580
0
    return false;
581
62.6k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_i
Line
Count
Source
490
43.6k
        bool& begin_include, bool& end_include, int32_t max_scan_key_num) {
491
43.6k
    if constexpr (!_is_reject_split_type) {
492
43.6k
        CppType min_value = get_range_min_value();
493
43.6k
        CppType max_value = get_range_max_value();
494
        if constexpr (primitive_type == PrimitiveType::TYPE_DATE) {
495
            min_value.set_type(TimeType::TIME_DATE);
496
            max_value.set_type(TimeType::TIME_DATE);
497
        }
498
43.6k
        auto empty_range_only_null = Compare::greater(min_value, max_value);
499
43.6k
        if (empty_range_only_null) {
500
            // Not contain null will be disposed in `convert_to_close_range`, return eos.
501
0
            DCHECK(contain_null());
502
0
        }
503
504
43.6k
        auto no_split = [&]() -> bool {
505
43.6k
            begin_scan_keys.emplace_back();
506
43.6k
            if (contain_null()) {
507
43.6k
                begin_scan_keys.back().add_null();
508
43.6k
            } else {
509
43.6k
                begin_scan_keys.back().add_field(
510
43.6k
                        Field::create_field<primitive_type>(get_range_min_value()));
511
43.6k
            }
512
43.6k
            end_scan_keys.emplace_back();
513
43.6k
            if (empty_range_only_null) {
514
43.6k
                end_scan_keys.back().add_null();
515
43.6k
            } else {
516
43.6k
                end_scan_keys.back().add_field(
517
43.6k
                        Field::create_field<primitive_type>(get_range_max_value()));
518
43.6k
            }
519
43.6k
            return true;
520
43.6k
        };
521
43.6k
        if (empty_range_only_null || max_scan_key_num == 1) {
522
0
            return no_split();
523
0
        }
524
525
43.6k
        auto cast = [](const CppType& value) {
526
43.6k
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
527
43.6k
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
528
43.6k
                return value;
529
43.6k
            } else {
530
43.6k
                return (int128_t)value;
531
43.6k
            }
532
43.6k
        };
533
534
        // When CppType is date, we can not convert it to integer number and calculate distance.
535
        // In other case, we convert element to int128 to avoit overflow.
536
43.6k
        int128_t step_size_may_overflow = (cast(max_value) - min_value) / max_scan_key_num;
537
538
43.6k
        constexpr size_t MAX_STEP_SIZE = 1 << 20;
539
        // When the step size is too large, the range is easy to not really contain data.
540
43.6k
        if (step_size_may_overflow > MAX_STEP_SIZE) {
541
43.2k
            return no_split();
542
43.2k
        }
543
365
        int step_size = cast_set<int>(step_size_may_overflow);
544
365
        int real_step_size = 0;
545
546
        // Add null key if contain null, must do after no_split check
547
365
        if (contain_null()) {
548
0
            begin_scan_keys.emplace_back();
549
0
            begin_scan_keys.back().add_null();
550
0
            end_scan_keys.emplace_back();
551
0
            end_scan_keys.back().add_null();
552
0
        }
553
2.16k
        while (true) {
554
2.16k
            begin_scan_keys.emplace_back();
555
2.16k
            begin_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
556
557
2.16k
            if (cast(max_value) - min_value < step_size) {
558
7
                min_value = max_value;
559
2.15k
            } else {
560
2.15k
                min_value += step_size;
561
2.15k
            }
562
563
2.16k
            end_scan_keys.emplace_back();
564
2.16k
            end_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
565
566
2.16k
            if (Compare::equal(min_value, max_value)) {
567
438
                break;
568
438
            }
569
1.72k
            ++min_value;
570
1.72k
            ++real_step_size;
571
1.72k
            if (real_step_size > MAX_STEP_SIZE) {
572
0
                throw Exception(Status::InternalError(
573
0
                        "convert_to_avg_range_value meet error. type={}, step_size={}",
574
0
                        int(primitive_type), step_size));
575
0
            }
576
1.72k
        }
577
578
365
        return step_size != 0;
579
365
    }
580
0
    return false;
581
43.6k
}
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_i
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_i
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_i
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_i
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_i
Line
Count
Source
490
1
        bool& begin_include, bool& end_include, int32_t max_scan_key_num) {
491
1
    if constexpr (!_is_reject_split_type) {
492
1
        CppType min_value = get_range_min_value();
493
1
        CppType max_value = get_range_max_value();
494
        if constexpr (primitive_type == PrimitiveType::TYPE_DATE) {
495
            min_value.set_type(TimeType::TIME_DATE);
496
            max_value.set_type(TimeType::TIME_DATE);
497
        }
498
1
        auto empty_range_only_null = Compare::greater(min_value, max_value);
499
1
        if (empty_range_only_null) {
500
            // Not contain null will be disposed in `convert_to_close_range`, return eos.
501
0
            DCHECK(contain_null());
502
0
        }
503
504
1
        auto no_split = [&]() -> bool {
505
1
            begin_scan_keys.emplace_back();
506
1
            if (contain_null()) {
507
1
                begin_scan_keys.back().add_null();
508
1
            } else {
509
1
                begin_scan_keys.back().add_field(
510
1
                        Field::create_field<primitive_type>(get_range_min_value()));
511
1
            }
512
1
            end_scan_keys.emplace_back();
513
1
            if (empty_range_only_null) {
514
1
                end_scan_keys.back().add_null();
515
1
            } else {
516
1
                end_scan_keys.back().add_field(
517
1
                        Field::create_field<primitive_type>(get_range_max_value()));
518
1
            }
519
1
            return true;
520
1
        };
521
1
        if (empty_range_only_null || max_scan_key_num == 1) {
522
0
            return no_split();
523
0
        }
524
525
1
        auto cast = [](const CppType& value) {
526
1
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
527
1
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
528
1
                return value;
529
1
            } else {
530
1
                return (int128_t)value;
531
1
            }
532
1
        };
533
534
        // When CppType is date, we can not convert it to integer number and calculate distance.
535
        // In other case, we convert element to int128 to avoit overflow.
536
1
        int128_t step_size_may_overflow = (cast(max_value) - min_value) / max_scan_key_num;
537
538
1
        constexpr size_t MAX_STEP_SIZE = 1 << 20;
539
        // When the step size is too large, the range is easy to not really contain data.
540
1
        if (step_size_may_overflow > MAX_STEP_SIZE) {
541
1
            return no_split();
542
1
        }
543
0
        int step_size = cast_set<int>(step_size_may_overflow);
544
0
        int real_step_size = 0;
545
546
        // Add null key if contain null, must do after no_split check
547
0
        if (contain_null()) {
548
0
            begin_scan_keys.emplace_back();
549
0
            begin_scan_keys.back().add_null();
550
0
            end_scan_keys.emplace_back();
551
0
            end_scan_keys.back().add_null();
552
0
        }
553
0
        while (true) {
554
0
            begin_scan_keys.emplace_back();
555
0
            begin_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
556
557
0
            if (cast(max_value) - min_value < step_size) {
558
0
                min_value = max_value;
559
0
            } else {
560
0
                min_value += step_size;
561
0
            }
562
563
0
            end_scan_keys.emplace_back();
564
0
            end_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
565
566
0
            if (Compare::equal(min_value, max_value)) {
567
0
                break;
568
0
            }
569
0
            ++min_value;
570
0
            ++real_step_size;
571
0
            if (real_step_size > MAX_STEP_SIZE) {
572
0
                throw Exception(Status::InternalError(
573
0
                        "convert_to_avg_range_value meet error. type={}, step_size={}",
574
0
                        int(primitive_type), step_size));
575
0
            }
576
0
        }
577
578
0
        return step_size != 0;
579
0
    }
580
0
    return false;
581
1
}
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_i
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_i
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_i
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_i
Line
Count
Source
490
34
        bool& begin_include, bool& end_include, int32_t max_scan_key_num) {
491
34
    if constexpr (!_is_reject_split_type) {
492
34
        CppType min_value = get_range_min_value();
493
34
        CppType max_value = get_range_max_value();
494
34
        if constexpr (primitive_type == PrimitiveType::TYPE_DATE) {
495
34
            min_value.set_type(TimeType::TIME_DATE);
496
34
            max_value.set_type(TimeType::TIME_DATE);
497
34
        }
498
34
        auto empty_range_only_null = Compare::greater(min_value, max_value);
499
34
        if (empty_range_only_null) {
500
            // Not contain null will be disposed in `convert_to_close_range`, return eos.
501
0
            DCHECK(contain_null());
502
0
        }
503
504
34
        auto no_split = [&]() -> bool {
505
34
            begin_scan_keys.emplace_back();
506
34
            if (contain_null()) {
507
34
                begin_scan_keys.back().add_null();
508
34
            } else {
509
34
                begin_scan_keys.back().add_field(
510
34
                        Field::create_field<primitive_type>(get_range_min_value()));
511
34
            }
512
34
            end_scan_keys.emplace_back();
513
34
            if (empty_range_only_null) {
514
34
                end_scan_keys.back().add_null();
515
34
            } else {
516
34
                end_scan_keys.back().add_field(
517
34
                        Field::create_field<primitive_type>(get_range_max_value()));
518
34
            }
519
34
            return true;
520
34
        };
521
34
        if (empty_range_only_null || max_scan_key_num == 1) {
522
0
            return no_split();
523
0
        }
524
525
34
        auto cast = [](const CppType& value) {
526
34
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
527
34
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
528
34
                return value;
529
34
            } else {
530
34
                return (int128_t)value;
531
34
            }
532
34
        };
533
534
        // When CppType is date, we can not convert it to integer number and calculate distance.
535
        // In other case, we convert element to int128 to avoit overflow.
536
34
        int128_t step_size_may_overflow = (cast(max_value) - min_value) / max_scan_key_num;
537
538
34
        constexpr size_t MAX_STEP_SIZE = 1 << 20;
539
        // When the step size is too large, the range is easy to not really contain data.
540
34
        if (step_size_may_overflow > MAX_STEP_SIZE) {
541
0
            return no_split();
542
0
        }
543
34
        int step_size = cast_set<int>(step_size_may_overflow);
544
34
        int real_step_size = 0;
545
546
        // Add null key if contain null, must do after no_split check
547
34
        if (contain_null()) {
548
34
            begin_scan_keys.emplace_back();
549
34
            begin_scan_keys.back().add_null();
550
34
            end_scan_keys.emplace_back();
551
34
            end_scan_keys.back().add_null();
552
34
        }
553
1.63k
        while (true) {
554
1.63k
            begin_scan_keys.emplace_back();
555
1.63k
            begin_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
556
557
1.63k
            if (cast(max_value) - min_value < step_size) {
558
34
                min_value = max_value;
559
1.59k
            } else {
560
1.59k
                min_value += step_size;
561
1.59k
            }
562
563
1.63k
            end_scan_keys.emplace_back();
564
1.63k
            end_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
565
566
1.63k
            if (Compare::equal(min_value, max_value)) {
567
34
                break;
568
34
            }
569
1.59k
            ++min_value;
570
1.59k
            ++real_step_size;
571
1.59k
            if (real_step_size > MAX_STEP_SIZE) {
572
0
                throw Exception(Status::InternalError(
573
0
                        "convert_to_avg_range_value meet error. type={}, step_size={}",
574
0
                        int(primitive_type), step_size));
575
0
            }
576
1.59k
        }
577
578
34
        return step_size != 0;
579
34
    }
580
0
    return false;
581
34
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_i
Line
Count
Source
490
2.18k
        bool& begin_include, bool& end_include, int32_t max_scan_key_num) {
491
2.18k
    if constexpr (!_is_reject_split_type) {
492
2.18k
        CppType min_value = get_range_min_value();
493
2.18k
        CppType max_value = get_range_max_value();
494
        if constexpr (primitive_type == PrimitiveType::TYPE_DATE) {
495
            min_value.set_type(TimeType::TIME_DATE);
496
            max_value.set_type(TimeType::TIME_DATE);
497
        }
498
2.18k
        auto empty_range_only_null = Compare::greater(min_value, max_value);
499
2.18k
        if (empty_range_only_null) {
500
            // Not contain null will be disposed in `convert_to_close_range`, return eos.
501
0
            DCHECK(contain_null());
502
0
        }
503
504
2.18k
        auto no_split = [&]() -> bool {
505
2.18k
            begin_scan_keys.emplace_back();
506
2.18k
            if (contain_null()) {
507
2.18k
                begin_scan_keys.back().add_null();
508
2.18k
            } else {
509
2.18k
                begin_scan_keys.back().add_field(
510
2.18k
                        Field::create_field<primitive_type>(get_range_min_value()));
511
2.18k
            }
512
2.18k
            end_scan_keys.emplace_back();
513
2.18k
            if (empty_range_only_null) {
514
2.18k
                end_scan_keys.back().add_null();
515
2.18k
            } else {
516
2.18k
                end_scan_keys.back().add_field(
517
2.18k
                        Field::create_field<primitive_type>(get_range_max_value()));
518
2.18k
            }
519
2.18k
            return true;
520
2.18k
        };
521
2.18k
        if (empty_range_only_null || max_scan_key_num == 1) {
522
0
            return no_split();
523
0
        }
524
525
2.18k
        auto cast = [](const CppType& value) {
526
2.18k
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
527
2.18k
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
528
2.18k
                return value;
529
2.18k
            } else {
530
2.18k
                return (int128_t)value;
531
2.18k
            }
532
2.18k
        };
533
534
        // When CppType is date, we can not convert it to integer number and calculate distance.
535
        // In other case, we convert element to int128 to avoit overflow.
536
2.18k
        int128_t step_size_may_overflow = (cast(max_value) - min_value) / max_scan_key_num;
537
538
2.18k
        constexpr size_t MAX_STEP_SIZE = 1 << 20;
539
        // When the step size is too large, the range is easy to not really contain data.
540
2.18k
        if (step_size_may_overflow > MAX_STEP_SIZE) {
541
0
            return no_split();
542
0
        }
543
2.18k
        int step_size = cast_set<int>(step_size_may_overflow);
544
2.18k
        int real_step_size = 0;
545
546
        // Add null key if contain null, must do after no_split check
547
2.18k
        if (contain_null()) {
548
915
            begin_scan_keys.emplace_back();
549
915
            begin_scan_keys.back().add_null();
550
915
            end_scan_keys.emplace_back();
551
915
            end_scan_keys.back().add_null();
552
915
        }
553
101k
        while (true) {
554
101k
            begin_scan_keys.emplace_back();
555
101k
            begin_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
556
557
101k
            if (cast(max_value) - min_value < step_size) {
558
2.08k
                min_value = max_value;
559
99.1k
            } else {
560
99.1k
                min_value += step_size;
561
99.1k
            }
562
563
101k
            end_scan_keys.emplace_back();
564
101k
            end_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
565
566
101k
            if (Compare::equal(min_value, max_value)) {
567
2.19k
                break;
568
2.19k
            }
569
99.0k
            ++min_value;
570
99.0k
            ++real_step_size;
571
99.0k
            if (real_step_size > MAX_STEP_SIZE) {
572
0
                throw Exception(Status::InternalError(
573
0
                        "convert_to_avg_range_value meet error. type={}, step_size={}",
574
0
                        int(primitive_type), step_size));
575
0
            }
576
99.0k
        }
577
578
2.18k
        return step_size != 0;
579
2.18k
    }
580
0
    return false;
581
2.18k
}
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_i
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_i
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_i
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_i
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_i
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_i
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_i
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_i
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_i
582
583
template <PrimitiveType primitive_type>
584
58
void ColumnValueRange<primitive_type>::convert_to_range_value() {
585
58
    if (!is_range_value_convertible()) {
586
0
        return;
587
0
    }
588
589
58
    if (!_fixed_values.empty()) {
590
58
        _low_value = *_fixed_values.begin();
591
58
        _low_op = FILTER_LARGER_OR_EQUAL;
592
58
        _high_value = *_fixed_values.rbegin();
593
58
        _high_op = FILTER_LESS_OR_EQUAL;
594
58
        _fixed_values.clear();
595
58
    }
596
58
}
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE22convert_to_range_valueEv
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE22convert_to_range_valueEv
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE22convert_to_range_valueEv
Line
Count
Source
584
57
void ColumnValueRange<primitive_type>::convert_to_range_value() {
585
57
    if (!is_range_value_convertible()) {
586
0
        return;
587
0
    }
588
589
57
    if (!_fixed_values.empty()) {
590
57
        _low_value = *_fixed_values.begin();
591
57
        _low_op = FILTER_LARGER_OR_EQUAL;
592
57
        _high_value = *_fixed_values.rbegin();
593
57
        _high_op = FILTER_LESS_OR_EQUAL;
594
57
        _fixed_values.clear();
595
57
    }
596
57
}
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE22convert_to_range_valueEv
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE22convert_to_range_valueEv
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE22convert_to_range_valueEv
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE22convert_to_range_valueEv
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE22convert_to_range_valueEv
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE22convert_to_range_valueEv
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE22convert_to_range_valueEv
Line
Count
Source
584
1
void ColumnValueRange<primitive_type>::convert_to_range_value() {
585
1
    if (!is_range_value_convertible()) {
586
0
        return;
587
0
    }
588
589
1
    if (!_fixed_values.empty()) {
590
1
        _low_value = *_fixed_values.begin();
591
1
        _low_op = FILTER_LARGER_OR_EQUAL;
592
1
        _high_value = *_fixed_values.rbegin();
593
1
        _high_op = FILTER_LESS_OR_EQUAL;
594
1
        _fixed_values.clear();
595
1
    }
596
1
}
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE22convert_to_range_valueEv
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE22convert_to_range_valueEv
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE22convert_to_range_valueEv
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE22convert_to_range_valueEv
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE22convert_to_range_valueEv
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE22convert_to_range_valueEv
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE22convert_to_range_valueEv
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE22convert_to_range_valueEv
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE22convert_to_range_valueEv
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE22convert_to_range_valueEv
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE22convert_to_range_valueEv
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE22convert_to_range_valueEv
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE22convert_to_range_valueEv
597
598
template <PrimitiveType primitive_type>
599
88.8k
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
600
88.8k
    if (INVALID_TYPE == _column_type) {
601
0
        return Status::InternalError("AddRange failed, Invalid type");
602
0
    }
603
604
    // add range means range should not contain null
605
88.8k
    _contain_null = false;
606
607
88.8k
    if (is_fixed_value_range()) {
608
7.03k
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
609
610
7.03k
        switch (op) {
611
0
        case FILTER_LARGER: {
612
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
613
0
            break;
614
0
        }
615
616
5.97k
        case FILTER_LARGER_OR_EQUAL: {
617
5.97k
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
618
5.97k
            break;
619
0
        }
620
621
0
        case FILTER_LESS: {
622
0
            if (bound_pair.first == _fixed_values.find(value)) {
623
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
624
0
            } else {
625
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
626
0
            }
627
628
0
            break;
629
0
        }
630
631
1.05k
        case FILTER_LESS_OR_EQUAL: {
632
1.05k
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
633
1.05k
            break;
634
0
        }
635
636
0
        default: {
637
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
638
0
        }
639
7.03k
        }
640
641
7.03k
        _high_value = TYPE_MIN;
642
7.03k
        _low_value = TYPE_MAX;
643
81.8k
    } else {
644
81.8k
        if (Compare::greater(_high_value, _low_value)) {
645
53.9k
            switch (op) {
646
19.8k
            case FILTER_LARGER: {
647
19.8k
                if (Compare::greater_equal(value, _low_value)) {
648
19.8k
                    _low_value = value;
649
19.8k
                    _low_op = op;
650
19.8k
                }
651
652
19.8k
                break;
653
0
            }
654
655
14.6k
            case FILTER_LARGER_OR_EQUAL: {
656
14.6k
                if (Compare::greater(value, _low_value)) {
657
12.2k
                    _low_value = value;
658
12.2k
                    _low_op = op;
659
12.2k
                }
660
661
14.6k
                break;
662
0
            }
663
664
5.50k
            case FILTER_LESS: {
665
5.50k
                if (Compare::less_equal(value, _high_value)) {
666
5.50k
                    _high_value = value;
667
5.50k
                    _high_op = op;
668
5.50k
                }
669
670
5.50k
                break;
671
0
            }
672
673
14.0k
            case FILTER_LESS_OR_EQUAL: {
674
14.0k
                if (Compare::less(value, _high_value)) {
675
11.7k
                    _high_value = value;
676
11.7k
                    _high_op = op;
677
11.7k
                }
678
679
14.0k
                break;
680
0
            }
681
682
0
            default: {
683
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
684
0
            }
685
53.9k
            }
686
53.9k
        }
687
688
81.8k
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
689
81.8k
            Compare::equal(_high_value, _low_value)) {
690
6.29k
            RETURN_IF_ERROR(add_fixed_value(_high_value));
691
6.29k
            _high_value = TYPE_MIN;
692
6.29k
            _low_value = TYPE_MAX;
693
6.29k
        }
694
81.8k
    }
695
696
88.8k
    return Status::OK();
697
88.8k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE9add_rangeENS_11SQLFilterOpEa
Line
Count
Source
599
1.70k
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
600
1.70k
    if (INVALID_TYPE == _column_type) {
601
0
        return Status::InternalError("AddRange failed, Invalid type");
602
0
    }
603
604
    // add range means range should not contain null
605
1.70k
    _contain_null = false;
606
607
1.70k
    if (is_fixed_value_range()) {
608
216
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
609
610
216
        switch (op) {
611
0
        case FILTER_LARGER: {
612
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
613
0
            break;
614
0
        }
615
616
178
        case FILTER_LARGER_OR_EQUAL: {
617
178
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
618
178
            break;
619
0
        }
620
621
0
        case FILTER_LESS: {
622
0
            if (bound_pair.first == _fixed_values.find(value)) {
623
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
624
0
            } else {
625
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
626
0
            }
627
628
0
            break;
629
0
        }
630
631
38
        case FILTER_LESS_OR_EQUAL: {
632
38
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
633
38
            break;
634
0
        }
635
636
0
        default: {
637
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
638
0
        }
639
216
        }
640
641
216
        _high_value = TYPE_MIN;
642
216
        _low_value = TYPE_MAX;
643
1.48k
    } else {
644
1.48k
        if (Compare::greater(_high_value, _low_value)) {
645
1.36k
            switch (op) {
646
250
            case FILTER_LARGER: {
647
251
                if (Compare::greater_equal(value, _low_value)) {
648
251
                    _low_value = value;
649
251
                    _low_op = op;
650
251
                }
651
652
250
                break;
653
0
            }
654
655
378
            case FILTER_LARGER_OR_EQUAL: {
656
378
                if (Compare::greater(value, _low_value)) {
657
186
                    _low_value = value;
658
186
                    _low_op = op;
659
186
                }
660
661
378
                break;
662
0
            }
663
664
232
            case FILTER_LESS: {
665
232
                if (Compare::less_equal(value, _high_value)) {
666
231
                    _high_value = value;
667
231
                    _high_op = op;
668
231
                }
669
670
232
                break;
671
0
            }
672
673
506
            case FILTER_LESS_OR_EQUAL: {
674
506
                if (Compare::less(value, _high_value)) {
675
313
                    _high_value = value;
676
313
                    _high_op = op;
677
313
                }
678
679
506
                break;
680
0
            }
681
682
0
            default: {
683
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
684
0
            }
685
1.36k
            }
686
1.36k
        }
687
688
1.48k
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
689
1.48k
            Compare::equal(_high_value, _low_value)) {
690
187
            RETURN_IF_ERROR(add_fixed_value(_high_value));
691
187
            _high_value = TYPE_MIN;
692
187
            _low_value = TYPE_MAX;
693
187
        }
694
1.48k
    }
695
696
1.70k
    return Status::OK();
697
1.70k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE9add_rangeENS_11SQLFilterOpEs
Line
Count
Source
599
1.48k
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
600
1.48k
    if (INVALID_TYPE == _column_type) {
601
0
        return Status::InternalError("AddRange failed, Invalid type");
602
0
    }
603
604
    // add range means range should not contain null
605
1.48k
    _contain_null = false;
606
607
1.48k
    if (is_fixed_value_range()) {
608
43
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
609
610
43
        switch (op) {
611
0
        case FILTER_LARGER: {
612
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
613
0
            break;
614
0
        }
615
616
26
        case FILTER_LARGER_OR_EQUAL: {
617
26
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
618
26
            break;
619
0
        }
620
621
0
        case FILTER_LESS: {
622
0
            if (bound_pair.first == _fixed_values.find(value)) {
623
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
624
0
            } else {
625
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
626
0
            }
627
628
0
            break;
629
0
        }
630
631
17
        case FILTER_LESS_OR_EQUAL: {
632
17
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
633
17
            break;
634
0
        }
635
636
0
        default: {
637
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
638
0
        }
639
43
        }
640
641
43
        _high_value = TYPE_MIN;
642
43
        _low_value = TYPE_MAX;
643
1.44k
    } else {
644
1.44k
        if (Compare::greater(_high_value, _low_value)) {
645
1.44k
            switch (op) {
646
1.11k
            case FILTER_LARGER: {
647
1.11k
                if (Compare::greater_equal(value, _low_value)) {
648
1.10k
                    _low_value = value;
649
1.10k
                    _low_op = op;
650
1.10k
                }
651
652
1.11k
                break;
653
0
            }
654
655
166
            case FILTER_LARGER_OR_EQUAL: {
656
166
                if (Compare::greater(value, _low_value)) {
657
136
                    _low_value = value;
658
136
                    _low_op = op;
659
136
                }
660
661
166
                break;
662
0
            }
663
664
16
            case FILTER_LESS: {
665
16
                if (Compare::less_equal(value, _high_value)) {
666
16
                    _high_value = value;
667
16
                    _high_op = op;
668
16
                }
669
670
16
                break;
671
0
            }
672
673
156
            case FILTER_LESS_OR_EQUAL: {
674
156
                if (Compare::less(value, _high_value)) {
675
98
                    _high_value = value;
676
98
                    _high_op = op;
677
98
                }
678
679
156
                break;
680
0
            }
681
682
0
            default: {
683
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
684
0
            }
685
1.44k
            }
686
1.44k
        }
687
688
1.43k
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
689
1.43k
            Compare::equal(_high_value, _low_value)) {
690
10
            RETURN_IF_ERROR(add_fixed_value(_high_value));
691
10
            _high_value = TYPE_MIN;
692
10
            _low_value = TYPE_MAX;
693
10
        }
694
1.43k
    }
695
696
1.47k
    return Status::OK();
697
1.48k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE9add_rangeENS_11SQLFilterOpEi
Line
Count
Source
599
11.2k
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
600
11.2k
    if (INVALID_TYPE == _column_type) {
601
0
        return Status::InternalError("AddRange failed, Invalid type");
602
0
    }
603
604
    // add range means range should not contain null
605
11.2k
    _contain_null = false;
606
607
11.2k
    if (is_fixed_value_range()) {
608
446
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
609
610
446
        switch (op) {
611
0
        case FILTER_LARGER: {
612
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
613
0
            break;
614
0
        }
615
616
281
        case FILTER_LARGER_OR_EQUAL: {
617
281
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
618
281
            break;
619
0
        }
620
621
0
        case FILTER_LESS: {
622
0
            if (bound_pair.first == _fixed_values.find(value)) {
623
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
624
0
            } else {
625
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
626
0
            }
627
628
0
            break;
629
0
        }
630
631
164
        case FILTER_LESS_OR_EQUAL: {
632
164
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
633
164
            break;
634
0
        }
635
636
0
        default: {
637
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
638
0
        }
639
446
        }
640
641
444
        _high_value = TYPE_MIN;
642
444
        _low_value = TYPE_MAX;
643
10.8k
    } else {
644
10.8k
        if (Compare::greater(_high_value, _low_value)) {
645
10.5k
            switch (op) {
646
1.84k
            case FILTER_LARGER: {
647
1.84k
                if (Compare::greater_equal(value, _low_value)) {
648
1.83k
                    _low_value = value;
649
1.83k
                    _low_op = op;
650
1.83k
                }
651
652
1.84k
                break;
653
0
            }
654
655
4.02k
            case FILTER_LARGER_OR_EQUAL: {
656
4.02k
                if (Compare::greater(value, _low_value)) {
657
3.46k
                    _low_value = value;
658
3.46k
                    _low_op = op;
659
3.46k
                }
660
661
4.02k
                break;
662
0
            }
663
664
750
            case FILTER_LESS: {
665
750
                if (Compare::less_equal(value, _high_value)) {
666
748
                    _high_value = value;
667
748
                    _high_op = op;
668
748
                }
669
670
750
                break;
671
0
            }
672
673
3.91k
            case FILTER_LESS_OR_EQUAL: {
674
3.91k
                if (Compare::less(value, _high_value)) {
675
3.35k
                    _high_value = value;
676
3.35k
                    _high_op = op;
677
3.35k
                }
678
679
3.91k
                break;
680
0
            }
681
682
0
            default: {
683
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
684
0
            }
685
10.5k
            }
686
10.5k
        }
687
688
10.8k
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
689
10.8k
            Compare::equal(_high_value, _low_value)) {
690
366
            RETURN_IF_ERROR(add_fixed_value(_high_value));
691
366
            _high_value = TYPE_MIN;
692
366
            _low_value = TYPE_MAX;
693
366
        }
694
10.8k
    }
695
696
11.2k
    return Status::OK();
697
11.2k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE9add_rangeENS_11SQLFilterOpEl
Line
Count
Source
599
45.8k
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
600
45.8k
    if (INVALID_TYPE == _column_type) {
601
0
        return Status::InternalError("AddRange failed, Invalid type");
602
0
    }
603
604
    // add range means range should not contain null
605
45.8k
    _contain_null = false;
606
607
45.8k
    if (is_fixed_value_range()) {
608
6.29k
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
609
610
6.29k
        switch (op) {
611
0
        case FILTER_LARGER: {
612
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
613
0
            break;
614
0
        }
615
616
5.46k
        case FILTER_LARGER_OR_EQUAL: {
617
5.46k
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
618
5.46k
            break;
619
0
        }
620
621
0
        case FILTER_LESS: {
622
0
            if (bound_pair.first == _fixed_values.find(value)) {
623
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
624
0
            } else {
625
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
626
0
            }
627
628
0
            break;
629
0
        }
630
631
831
        case FILTER_LESS_OR_EQUAL: {
632
831
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
633
831
            break;
634
0
        }
635
636
0
        default: {
637
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
638
0
        }
639
6.29k
        }
640
641
6.28k
        _high_value = TYPE_MIN;
642
6.28k
        _low_value = TYPE_MAX;
643
39.5k
    } else {
644
39.5k
        if (Compare::greater(_high_value, _low_value)) {
645
12.1k
            switch (op) {
646
3.85k
            case FILTER_LARGER: {
647
3.85k
                if (Compare::greater_equal(value, _low_value)) {
648
3.84k
                    _low_value = value;
649
3.84k
                    _low_op = op;
650
3.84k
                }
651
652
3.85k
                break;
653
0
            }
654
655
2.36k
            case FILTER_LARGER_OR_EQUAL: {
656
2.36k
                if (Compare::greater(value, _low_value)) {
657
2.33k
                    _low_value = value;
658
2.33k
                    _low_op = op;
659
2.33k
                }
660
661
2.36k
                break;
662
0
            }
663
664
88
            case FILTER_LESS: {
665
88
                if (Compare::less_equal(value, _high_value)) {
666
88
                    _high_value = value;
667
88
                    _high_op = op;
668
88
                }
669
670
88
                break;
671
0
            }
672
673
5.89k
            case FILTER_LESS_OR_EQUAL: {
674
5.89k
                if (Compare::less(value, _high_value)) {
675
5.86k
                    _high_value = value;
676
5.86k
                    _high_op = op;
677
5.86k
                }
678
679
5.89k
                break;
680
0
            }
681
682
0
            default: {
683
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
684
0
            }
685
12.1k
            }
686
12.1k
        }
687
688
39.5k
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
689
39.5k
            Compare::equal(_high_value, _low_value)) {
690
5.01k
            RETURN_IF_ERROR(add_fixed_value(_high_value));
691
5.01k
            _high_value = TYPE_MIN;
692
5.01k
            _low_value = TYPE_MAX;
693
5.01k
        }
694
39.5k
    }
695
696
45.8k
    return Status::OK();
697
45.8k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE9add_rangeENS_11SQLFilterOpEn
Line
Count
Source
599
79
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
600
79
    if (INVALID_TYPE == _column_type) {
601
0
        return Status::InternalError("AddRange failed, Invalid type");
602
0
    }
603
604
    // add range means range should not contain null
605
79
    _contain_null = false;
606
607
79
    if (is_fixed_value_range()) {
608
2
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
609
610
2
        switch (op) {
611
0
        case FILTER_LARGER: {
612
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
613
0
            break;
614
0
        }
615
616
1
        case FILTER_LARGER_OR_EQUAL: {
617
1
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
618
1
            break;
619
0
        }
620
621
0
        case FILTER_LESS: {
622
0
            if (bound_pair.first == _fixed_values.find(value)) {
623
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
624
0
            } else {
625
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
626
0
            }
627
628
0
            break;
629
0
        }
630
631
1
        case FILTER_LESS_OR_EQUAL: {
632
1
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
633
1
            break;
634
0
        }
635
636
0
        default: {
637
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
638
0
        }
639
2
        }
640
641
2
        _high_value = TYPE_MIN;
642
2
        _low_value = TYPE_MAX;
643
77
    } else {
644
77
        if (Compare::greater(_high_value, _low_value)) {
645
77
            switch (op) {
646
17
            case FILTER_LARGER: {
647
17
                if (Compare::greater_equal(value, _low_value)) {
648
17
                    _low_value = value;
649
17
                    _low_op = op;
650
17
                }
651
652
17
                break;
653
0
            }
654
655
13
            case FILTER_LARGER_OR_EQUAL: {
656
13
                if (Compare::greater(value, _low_value)) {
657
10
                    _low_value = value;
658
10
                    _low_op = op;
659
10
                }
660
661
13
                break;
662
0
            }
663
664
8
            case FILTER_LESS: {
665
8
                if (Compare::less_equal(value, _high_value)) {
666
8
                    _high_value = value;
667
8
                    _high_op = op;
668
8
                }
669
670
8
                break;
671
0
            }
672
673
39
            case FILTER_LESS_OR_EQUAL: {
674
39
                if (Compare::less(value, _high_value)) {
675
35
                    _high_value = value;
676
35
                    _high_op = op;
677
35
                }
678
679
39
                break;
680
0
            }
681
682
0
            default: {
683
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
684
0
            }
685
77
            }
686
77
        }
687
688
76
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
689
76
            Compare::equal(_high_value, _low_value)) {
690
8
            RETURN_IF_ERROR(add_fixed_value(_high_value));
691
8
            _high_value = TYPE_MIN;
692
8
            _low_value = TYPE_MAX;
693
8
        }
694
76
    }
695
696
78
    return Status::OK();
697
79
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE9add_rangeENS_11SQLFilterOpEf
Line
Count
Source
599
152
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
600
152
    if (INVALID_TYPE == _column_type) {
601
0
        return Status::InternalError("AddRange failed, Invalid type");
602
0
    }
603
604
    // add range means range should not contain null
605
152
    _contain_null = false;
606
607
152
    if (is_fixed_value_range()) {
608
0
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
609
610
0
        switch (op) {
611
0
        case FILTER_LARGER: {
612
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
613
0
            break;
614
0
        }
615
616
0
        case FILTER_LARGER_OR_EQUAL: {
617
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
618
0
            break;
619
0
        }
620
621
0
        case FILTER_LESS: {
622
0
            if (bound_pair.first == _fixed_values.find(value)) {
623
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
624
0
            } else {
625
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
626
0
            }
627
628
0
            break;
629
0
        }
630
631
0
        case FILTER_LESS_OR_EQUAL: {
632
0
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
633
0
            break;
634
0
        }
635
636
0
        default: {
637
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
638
0
        }
639
0
        }
640
641
0
        _high_value = TYPE_MIN;
642
0
        _low_value = TYPE_MAX;
643
152
    } else {
644
152
        if (Compare::greater(_high_value, _low_value)) {
645
151
            switch (op) {
646
25
            case FILTER_LARGER: {
647
25
                if (Compare::greater_equal(value, _low_value)) {
648
25
                    _low_value = value;
649
25
                    _low_op = op;
650
25
                }
651
652
25
                break;
653
0
            }
654
655
51
            case FILTER_LARGER_OR_EQUAL: {
656
51
                if (Compare::greater(value, _low_value)) {
657
40
                    _low_value = value;
658
40
                    _low_op = op;
659
40
                }
660
661
51
                break;
662
0
            }
663
664
28
            case FILTER_LESS: {
665
28
                if (Compare::less_equal(value, _high_value)) {
666
28
                    _high_value = value;
667
28
                    _high_op = op;
668
28
                }
669
670
28
                break;
671
0
            }
672
673
47
            case FILTER_LESS_OR_EQUAL: {
674
47
                if (Compare::less(value, _high_value)) {
675
36
                    _high_value = value;
676
36
                    _high_op = op;
677
36
                }
678
679
47
                break;
680
0
            }
681
682
0
            default: {
683
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
684
0
            }
685
151
            }
686
151
        }
687
688
152
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
689
152
            Compare::equal(_high_value, _low_value)) {
690
16
            RETURN_IF_ERROR(add_fixed_value(_high_value));
691
16
            _high_value = TYPE_MIN;
692
16
            _low_value = TYPE_MAX;
693
16
        }
694
152
    }
695
696
152
    return Status::OK();
697
152
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE9add_rangeENS_11SQLFilterOpEd
Line
Count
Source
599
408
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
600
408
    if (INVALID_TYPE == _column_type) {
601
0
        return Status::InternalError("AddRange failed, Invalid type");
602
0
    }
603
604
    // add range means range should not contain null
605
408
    _contain_null = false;
606
607
408
    if (is_fixed_value_range()) {
608
0
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
609
610
0
        switch (op) {
611
0
        case FILTER_LARGER: {
612
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
613
0
            break;
614
0
        }
615
616
0
        case FILTER_LARGER_OR_EQUAL: {
617
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
618
0
            break;
619
0
        }
620
621
0
        case FILTER_LESS: {
622
0
            if (bound_pair.first == _fixed_values.find(value)) {
623
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
624
0
            } else {
625
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
626
0
            }
627
628
0
            break;
629
0
        }
630
631
0
        case FILTER_LESS_OR_EQUAL: {
632
0
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
633
0
            break;
634
0
        }
635
636
0
        default: {
637
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
638
0
        }
639
0
        }
640
641
0
        _high_value = TYPE_MIN;
642
0
        _low_value = TYPE_MAX;
643
408
    } else {
644
410
        if (Compare::greater(_high_value, _low_value)) {
645
410
            switch (op) {
646
157
            case FILTER_LARGER: {
647
157
                if (Compare::greater_equal(value, _low_value)) {
648
157
                    _low_value = value;
649
157
                    _low_op = op;
650
157
                }
651
652
157
                break;
653
0
            }
654
655
102
            case FILTER_LARGER_OR_EQUAL: {
656
102
                if (Compare::greater(value, _low_value)) {
657
41
                    _low_value = value;
658
41
                    _low_op = op;
659
41
                }
660
661
102
                break;
662
0
            }
663
664
50
            case FILTER_LESS: {
665
51
                if (Compare::less_equal(value, _high_value)) {
666
51
                    _high_value = value;
667
51
                    _high_op = op;
668
51
                }
669
670
50
                break;
671
0
            }
672
673
102
            case FILTER_LESS_OR_EQUAL: {
674
102
                if (Compare::less(value, _high_value)) {
675
41
                    _high_value = value;
676
41
                    _high_op = op;
677
41
                }
678
679
102
                break;
680
0
            }
681
682
0
            default: {
683
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
684
0
            }
685
410
            }
686
410
        }
687
688
408
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
689
408
            Compare::equal(_high_value, _low_value)) {
690
14
            RETURN_IF_ERROR(add_fixed_value(_high_value));
691
14
            _high_value = TYPE_MIN;
692
14
            _low_value = TYPE_MAX;
693
14
        }
694
408
    }
695
696
408
    return Status::OK();
697
408
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE9add_rangeENS_11SQLFilterOpEj
Line
Count
Source
599
14
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
600
14
    if (INVALID_TYPE == _column_type) {
601
0
        return Status::InternalError("AddRange failed, Invalid type");
602
0
    }
603
604
    // add range means range should not contain null
605
14
    _contain_null = false;
606
607
14
    if (is_fixed_value_range()) {
608
0
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
609
610
0
        switch (op) {
611
0
        case FILTER_LARGER: {
612
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
613
0
            break;
614
0
        }
615
616
0
        case FILTER_LARGER_OR_EQUAL: {
617
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
618
0
            break;
619
0
        }
620
621
0
        case FILTER_LESS: {
622
0
            if (bound_pair.first == _fixed_values.find(value)) {
623
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
624
0
            } else {
625
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
626
0
            }
627
628
0
            break;
629
0
        }
630
631
0
        case FILTER_LESS_OR_EQUAL: {
632
0
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
633
0
            break;
634
0
        }
635
636
0
        default: {
637
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
638
0
        }
639
0
        }
640
641
0
        _high_value = TYPE_MIN;
642
0
        _low_value = TYPE_MAX;
643
14
    } else {
644
14
        if (Compare::greater(_high_value, _low_value)) {
645
14
            switch (op) {
646
0
            case FILTER_LARGER: {
647
0
                if (Compare::greater_equal(value, _low_value)) {
648
0
                    _low_value = value;
649
0
                    _low_op = op;
650
0
                }
651
652
0
                break;
653
0
            }
654
655
7
            case FILTER_LARGER_OR_EQUAL: {
656
7
                if (Compare::greater(value, _low_value)) {
657
4
                    _low_value = value;
658
4
                    _low_op = op;
659
4
                }
660
661
7
                break;
662
0
            }
663
664
4
            case FILTER_LESS: {
665
4
                if (Compare::less_equal(value, _high_value)) {
666
4
                    _high_value = value;
667
4
                    _high_op = op;
668
4
                }
669
670
4
                break;
671
0
            }
672
673
3
            case FILTER_LESS_OR_EQUAL: {
674
3
                if (Compare::less(value, _high_value)) {
675
0
                    _high_value = value;
676
0
                    _high_op = op;
677
0
                }
678
679
3
                break;
680
0
            }
681
682
0
            default: {
683
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
684
0
            }
685
14
            }
686
14
        }
687
688
14
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
689
14
            Compare::equal(_high_value, _low_value)) {
690
0
            RETURN_IF_ERROR(add_fixed_value(_high_value));
691
0
            _high_value = TYPE_MIN;
692
0
            _low_value = TYPE_MAX;
693
0
        }
694
14
    }
695
696
14
    return Status::OK();
697
14
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE9add_rangeENS_11SQLFilterOpEo
Line
Count
Source
599
10
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
600
10
    if (INVALID_TYPE == _column_type) {
601
0
        return Status::InternalError("AddRange failed, Invalid type");
602
0
    }
603
604
    // add range means range should not contain null
605
10
    _contain_null = false;
606
607
10
    if (is_fixed_value_range()) {
608
0
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
609
610
0
        switch (op) {
611
0
        case FILTER_LARGER: {
612
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
613
0
            break;
614
0
        }
615
616
0
        case FILTER_LARGER_OR_EQUAL: {
617
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
618
0
            break;
619
0
        }
620
621
0
        case FILTER_LESS: {
622
0
            if (bound_pair.first == _fixed_values.find(value)) {
623
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
624
0
            } else {
625
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
626
0
            }
627
628
0
            break;
629
0
        }
630
631
0
        case FILTER_LESS_OR_EQUAL: {
632
0
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
633
0
            break;
634
0
        }
635
636
0
        default: {
637
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
638
0
        }
639
0
        }
640
641
0
        _high_value = TYPE_MIN;
642
0
        _low_value = TYPE_MAX;
643
10
    } else {
644
10
        if (Compare::greater(_high_value, _low_value)) {
645
10
            switch (op) {
646
0
            case FILTER_LARGER: {
647
0
                if (Compare::greater_equal(value, _low_value)) {
648
0
                    _low_value = value;
649
0
                    _low_op = op;
650
0
                }
651
652
0
                break;
653
0
            }
654
655
5
            case FILTER_LARGER_OR_EQUAL: {
656
5
                if (Compare::greater(value, _low_value)) {
657
4
                    _low_value = value;
658
4
                    _low_op = op;
659
4
                }
660
661
5
                break;
662
0
            }
663
664
4
            case FILTER_LESS: {
665
4
                if (Compare::less_equal(value, _high_value)) {
666
4
                    _high_value = value;
667
4
                    _high_op = op;
668
4
                }
669
670
4
                break;
671
0
            }
672
673
1
            case FILTER_LESS_OR_EQUAL: {
674
1
                if (Compare::less(value, _high_value)) {
675
0
                    _high_value = value;
676
0
                    _high_op = op;
677
0
                }
678
679
1
                break;
680
0
            }
681
682
0
            default: {
683
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
684
0
            }
685
10
            }
686
10
        }
687
688
10
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
689
10
            Compare::equal(_high_value, _low_value)) {
690
0
            RETURN_IF_ERROR(add_fixed_value(_high_value));
691
0
            _high_value = TYPE_MIN;
692
0
            _low_value = TYPE_MAX;
693
0
        }
694
10
    }
695
696
10
    return Status::OK();
697
10
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE9add_rangeENS_11SQLFilterOpENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
599
689
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
600
689
    if (INVALID_TYPE == _column_type) {
601
0
        return Status::InternalError("AddRange failed, Invalid type");
602
0
    }
603
604
    // add range means range should not contain null
605
689
    _contain_null = false;
606
607
689
    if (is_fixed_value_range()) {
608
0
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
609
610
0
        switch (op) {
611
0
        case FILTER_LARGER: {
612
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
613
0
            break;
614
0
        }
615
616
0
        case FILTER_LARGER_OR_EQUAL: {
617
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
618
0
            break;
619
0
        }
620
621
0
        case FILTER_LESS: {
622
0
            if (bound_pair.first == _fixed_values.find(value)) {
623
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
624
0
            } else {
625
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
626
0
            }
627
628
0
            break;
629
0
        }
630
631
0
        case FILTER_LESS_OR_EQUAL: {
632
0
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
633
0
            break;
634
0
        }
635
636
0
        default: {
637
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
638
0
        }
639
0
        }
640
641
0
        _high_value = TYPE_MIN;
642
0
        _low_value = TYPE_MAX;
643
689
    } else {
644
694
        if (Compare::greater(_high_value, _low_value)) {
645
694
            switch (op) {
646
522
            case FILTER_LARGER: {
647
522
                if (Compare::greater_equal(value, _low_value)) {
648
522
                    _low_value = value;
649
522
                    _low_op = op;
650
522
                }
651
652
522
                break;
653
0
            }
654
655
78
            case FILTER_LARGER_OR_EQUAL: {
656
78
                if (Compare::greater(value, _low_value)) {
657
52
                    _low_value = value;
658
52
                    _low_op = op;
659
52
                }
660
661
78
                break;
662
0
            }
663
664
36
            case FILTER_LESS: {
665
36
                if (Compare::less_equal(value, _high_value)) {
666
36
                    _high_value = value;
667
36
                    _high_op = op;
668
36
                }
669
670
36
                break;
671
0
            }
672
673
58
            case FILTER_LESS_OR_EQUAL: {
674
58
                if (Compare::less(value, _high_value)) {
675
46
                    _high_value = value;
676
46
                    _high_op = op;
677
46
                }
678
679
58
                break;
680
0
            }
681
682
0
            default: {
683
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
684
0
            }
685
694
            }
686
694
        }
687
688
689
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
689
689
            Compare::equal(_high_value, _low_value)) {
690
2
            RETURN_IF_ERROR(add_fixed_value(_high_value));
691
2
            _high_value = TYPE_MIN;
692
2
            _low_value = TYPE_MAX;
693
2
        }
694
689
    }
695
696
689
    return Status::OK();
697
689
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE9add_rangeENS_11SQLFilterOpENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
599
1.76k
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
600
1.76k
    if (INVALID_TYPE == _column_type) {
601
0
        return Status::InternalError("AddRange failed, Invalid type");
602
0
    }
603
604
    // add range means range should not contain null
605
1.76k
    _contain_null = false;
606
607
1.76k
    if (is_fixed_value_range()) {
608
15
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
609
610
15
        switch (op) {
611
0
        case FILTER_LARGER: {
612
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
613
0
            break;
614
0
        }
615
616
12
        case FILTER_LARGER_OR_EQUAL: {
617
12
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
618
12
            break;
619
0
        }
620
621
0
        case FILTER_LESS: {
622
0
            if (bound_pair.first == _fixed_values.find(value)) {
623
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
624
0
            } else {
625
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
626
0
            }
627
628
0
            break;
629
0
        }
630
631
3
        case FILTER_LESS_OR_EQUAL: {
632
3
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
633
3
            break;
634
0
        }
635
636
0
        default: {
637
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
638
0
        }
639
15
        }
640
641
15
        _high_value = TYPE_MIN;
642
15
        _low_value = TYPE_MAX;
643
1.75k
    } else {
644
1.75k
        if (Compare::greater(_high_value, _low_value)) {
645
1.73k
            switch (op) {
646
878
            case FILTER_LARGER: {
647
878
                if (Compare::greater_equal(value, _low_value)) {
648
875
                    _low_value = value;
649
875
                    _low_op = op;
650
875
                }
651
652
878
                break;
653
0
            }
654
655
418
            case FILTER_LARGER_OR_EQUAL: {
656
418
                if (Compare::greater(value, _low_value)) {
657
305
                    _low_value = value;
658
305
                    _low_op = op;
659
305
                }
660
661
418
                break;
662
0
            }
663
664
73
            case FILTER_LESS: {
665
73
                if (Compare::less_equal(value, _high_value)) {
666
73
                    _high_value = value;
667
73
                    _high_op = op;
668
73
                }
669
670
73
                break;
671
0
            }
672
673
362
            case FILTER_LESS_OR_EQUAL: {
674
362
                if (Compare::less(value, _high_value)) {
675
305
                    _high_value = value;
676
305
                    _high_op = op;
677
305
                }
678
679
362
                break;
680
0
            }
681
682
0
            default: {
683
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
684
0
            }
685
1.73k
            }
686
1.73k
        }
687
688
1.75k
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
689
1.75k
            Compare::equal(_high_value, _low_value)) {
690
192
            RETURN_IF_ERROR(add_fixed_value(_high_value));
691
192
            _high_value = TYPE_MIN;
692
192
            _low_value = TYPE_MAX;
693
192
        }
694
1.75k
    }
695
696
1.76k
    return Status::OK();
697
1.76k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE9add_rangeENS_11SQLFilterOpENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
599
2.39k
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
600
2.39k
    if (INVALID_TYPE == _column_type) {
601
0
        return Status::InternalError("AddRange failed, Invalid type");
602
0
    }
603
604
    // add range means range should not contain null
605
2.39k
    _contain_null = false;
606
607
2.39k
    if (is_fixed_value_range()) {
608
0
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
609
610
0
        switch (op) {
611
0
        case FILTER_LARGER: {
612
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
613
0
            break;
614
0
        }
615
616
0
        case FILTER_LARGER_OR_EQUAL: {
617
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
618
0
            break;
619
0
        }
620
621
0
        case FILTER_LESS: {
622
0
            if (bound_pair.first == _fixed_values.find(value)) {
623
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
624
0
            } else {
625
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
626
0
            }
627
628
0
            break;
629
0
        }
630
631
0
        case FILTER_LESS_OR_EQUAL: {
632
0
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
633
0
            break;
634
0
        }
635
636
0
        default: {
637
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
638
0
        }
639
0
        }
640
641
0
        _high_value = TYPE_MIN;
642
0
        _low_value = TYPE_MAX;
643
2.39k
    } else {
644
2.39k
        if (Compare::greater(_high_value, _low_value)) {
645
2.37k
            switch (op) {
646
27
            case FILTER_LARGER: {
647
27
                if (Compare::greater_equal(value, _low_value)) {
648
26
                    _low_value = value;
649
26
                    _low_op = op;
650
26
                }
651
652
27
                break;
653
0
            }
654
655
1.17k
            case FILTER_LARGER_OR_EQUAL: {
656
1.17k
                if (Compare::greater(value, _low_value)) {
657
131
                    _low_value = value;
658
131
                    _low_op = op;
659
131
                }
660
661
1.17k
                break;
662
0
            }
663
664
68
            case FILTER_LESS: {
665
68
                if (Compare::less_equal(value, _high_value)) {
666
68
                    _high_value = value;
667
68
                    _high_op = op;
668
68
                }
669
670
68
                break;
671
0
            }
672
673
1.11k
            case FILTER_LESS_OR_EQUAL: {
674
1.11k
                if (Compare::less(value, _high_value)) {
675
119
                    _high_value = value;
676
119
                    _high_op = op;
677
119
                }
678
679
1.11k
                break;
680
0
            }
681
682
0
            default: {
683
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
684
0
            }
685
2.37k
            }
686
2.37k
        }
687
688
2.40k
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
689
2.40k
            Compare::equal(_high_value, _low_value)) {
690
44
            RETURN_IF_ERROR(add_fixed_value(_high_value));
691
44
            _high_value = TYPE_MIN;
692
44
            _low_value = TYPE_MAX;
693
44
        }
694
2.40k
    }
695
696
2.40k
    return Status::OK();
697
2.39k
}
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE9add_rangeENS_11SQLFilterOpENS_16VecDateTimeValueE
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE9add_rangeENS_11SQLFilterOpENS_11DateV2ValueINS_15DateV2ValueTypeEEE
Line
Count
Source
599
16.6k
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
600
16.6k
    if (INVALID_TYPE == _column_type) {
601
0
        return Status::InternalError("AddRange failed, Invalid type");
602
0
    }
603
604
    // add range means range should not contain null
605
16.6k
    _contain_null = false;
606
607
16.6k
    if (is_fixed_value_range()) {
608
21
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
609
610
21
        switch (op) {
611
0
        case FILTER_LARGER: {
612
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
613
0
            break;
614
0
        }
615
616
18
        case FILTER_LARGER_OR_EQUAL: {
617
18
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
618
18
            break;
619
0
        }
620
621
0
        case FILTER_LESS: {
622
0
            if (bound_pair.first == _fixed_values.find(value)) {
623
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
624
0
            } else {
625
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
626
0
            }
627
628
0
            break;
629
0
        }
630
631
3
        case FILTER_LESS_OR_EQUAL: {
632
3
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
633
3
            break;
634
0
        }
635
636
0
        default: {
637
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
638
0
        }
639
21
        }
640
641
21
        _high_value = TYPE_MIN;
642
21
        _low_value = TYPE_MAX;
643
16.6k
    } else {
644
16.6k
        if (Compare::greater(_high_value, _low_value)) {
645
16.6k
            switch (op) {
646
10.4k
            case FILTER_LARGER: {
647
10.4k
                if (Compare::greater_equal(value, _low_value)) {
648
10.4k
                    _low_value = value;
649
10.4k
                    _low_op = op;
650
10.4k
                }
651
652
10.4k
                break;
653
0
            }
654
655
3.21k
            case FILTER_LARGER_OR_EQUAL: {
656
3.21k
                if (Compare::greater(value, _low_value)) {
657
3.19k
                    _low_value = value;
658
3.19k
                    _low_op = op;
659
3.19k
                }
660
661
3.21k
                break;
662
0
            }
663
664
2.60k
            case FILTER_LESS: {
665
2.60k
                if (Compare::less_equal(value, _high_value)) {
666
2.60k
                    _high_value = value;
667
2.60k
                    _high_op = op;
668
2.60k
                }
669
670
2.60k
                break;
671
0
            }
672
673
395
            case FILTER_LESS_OR_EQUAL: {
674
395
                if (Compare::less(value, _high_value)) {
675
372
                    _high_value = value;
676
372
                    _high_op = op;
677
372
                }
678
679
395
                break;
680
0
            }
681
682
0
            default: {
683
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
684
0
            }
685
16.6k
            }
686
16.6k
        }
687
688
16.6k
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
689
16.6k
            Compare::equal(_high_value, _low_value)) {
690
63
            RETURN_IF_ERROR(add_fixed_value(_high_value));
691
63
            _high_value = TYPE_MIN;
692
63
            _low_value = TYPE_MAX;
693
63
        }
694
16.6k
    }
695
696
16.6k
    return Status::OK();
697
16.6k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE9add_rangeENS_11SQLFilterOpENS_16VecDateTimeValueE
Line
Count
Source
599
18
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
600
18
    if (INVALID_TYPE == _column_type) {
601
0
        return Status::InternalError("AddRange failed, Invalid type");
602
0
    }
603
604
    // add range means range should not contain null
605
18
    _contain_null = false;
606
607
18
    if (is_fixed_value_range()) {
608
0
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
609
610
0
        switch (op) {
611
0
        case FILTER_LARGER: {
612
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
613
0
            break;
614
0
        }
615
616
0
        case FILTER_LARGER_OR_EQUAL: {
617
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
618
0
            break;
619
0
        }
620
621
0
        case FILTER_LESS: {
622
0
            if (bound_pair.first == _fixed_values.find(value)) {
623
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
624
0
            } else {
625
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
626
0
            }
627
628
0
            break;
629
0
        }
630
631
0
        case FILTER_LESS_OR_EQUAL: {
632
0
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
633
0
            break;
634
0
        }
635
636
0
        default: {
637
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
638
0
        }
639
0
        }
640
641
0
        _high_value = TYPE_MIN;
642
0
        _low_value = TYPE_MAX;
643
18
    } else {
644
18
        if (Compare::greater(_high_value, _low_value)) {
645
18
            switch (op) {
646
0
            case FILTER_LARGER: {
647
0
                if (Compare::greater_equal(value, _low_value)) {
648
0
                    _low_value = value;
649
0
                    _low_op = op;
650
0
                }
651
652
0
                break;
653
0
            }
654
655
9
            case FILTER_LARGER_OR_EQUAL: {
656
9
                if (Compare::greater(value, _low_value)) {
657
9
                    _low_value = value;
658
9
                    _low_op = op;
659
9
                }
660
661
9
                break;
662
0
            }
663
664
0
            case FILTER_LESS: {
665
0
                if (Compare::less_equal(value, _high_value)) {
666
0
                    _high_value = value;
667
0
                    _high_op = op;
668
0
                }
669
670
0
                break;
671
0
            }
672
673
9
            case FILTER_LESS_OR_EQUAL: {
674
9
                if (Compare::less(value, _high_value)) {
675
9
                    _high_value = value;
676
9
                    _high_op = op;
677
9
                }
678
679
9
                break;
680
0
            }
681
682
0
            default: {
683
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
684
0
            }
685
18
            }
686
18
        }
687
688
18
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
689
18
            Compare::equal(_high_value, _low_value)) {
690
0
            RETURN_IF_ERROR(add_fixed_value(_high_value));
691
0
            _high_value = TYPE_MIN;
692
0
            _low_value = TYPE_MAX;
693
0
        }
694
18
    }
695
696
18
    return Status::OK();
697
18
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE9add_rangeENS_11SQLFilterOpENS_11DateV2ValueINS_19DateTimeV2ValueTypeEEE
Line
Count
Source
599
4.03k
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
600
4.03k
    if (INVALID_TYPE == _column_type) {
601
0
        return Status::InternalError("AddRange failed, Invalid type");
602
0
    }
603
604
    // add range means range should not contain null
605
4.03k
    _contain_null = false;
606
607
4.03k
    if (is_fixed_value_range()) {
608
2
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
609
610
2
        switch (op) {
611
0
        case FILTER_LARGER: {
612
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
613
0
            break;
614
0
        }
615
616
1
        case FILTER_LARGER_OR_EQUAL: {
617
1
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
618
1
            break;
619
0
        }
620
621
0
        case FILTER_LESS: {
622
0
            if (bound_pair.first == _fixed_values.find(value)) {
623
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
624
0
            } else {
625
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
626
0
            }
627
628
0
            break;
629
0
        }
630
631
1
        case FILTER_LESS_OR_EQUAL: {
632
1
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
633
1
            break;
634
0
        }
635
636
0
        default: {
637
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
638
0
        }
639
2
        }
640
641
2
        _high_value = TYPE_MIN;
642
2
        _low_value = TYPE_MAX;
643
4.03k
    } else {
644
4.03k
        if (Compare::greater(_high_value, _low_value)) {
645
4.03k
            switch (op) {
646
236
            case FILTER_LARGER: {
647
236
                if (Compare::greater_equal(value, _low_value)) {
648
236
                    _low_value = value;
649
236
                    _low_op = op;
650
236
                }
651
652
236
                break;
653
0
            }
654
655
1.85k
            case FILTER_LARGER_OR_EQUAL: {
656
1.85k
                if (Compare::greater(value, _low_value)) {
657
1.81k
                    _low_value = value;
658
1.81k
                    _low_op = op;
659
1.81k
                }
660
661
1.85k
                break;
662
0
            }
663
664
1.31k
            case FILTER_LESS: {
665
1.31k
                if (Compare::less_equal(value, _high_value)) {
666
1.31k
                    _high_value = value;
667
1.31k
                    _high_op = op;
668
1.31k
                }
669
670
1.31k
                break;
671
0
            }
672
673
634
            case FILTER_LESS_OR_EQUAL: {
674
634
                if (Compare::less(value, _high_value)) {
675
597
                    _high_value = value;
676
597
                    _high_op = op;
677
597
                }
678
679
634
                break;
680
0
            }
681
682
0
            default: {
683
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
684
0
            }
685
4.03k
            }
686
4.03k
        }
687
688
4.03k
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
689
4.03k
            Compare::equal(_high_value, _low_value)) {
690
77
            RETURN_IF_ERROR(add_fixed_value(_high_value));
691
77
            _high_value = TYPE_MIN;
692
77
            _low_value = TYPE_MAX;
693
77
        }
694
4.03k
    }
695
696
4.03k
    return Status::OK();
697
4.03k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE9add_rangeENS_11SQLFilterOpENS_16TimestampTzValueE
Line
Count
Source
599
911
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
600
911
    if (INVALID_TYPE == _column_type) {
601
0
        return Status::InternalError("AddRange failed, Invalid type");
602
0
    }
603
604
    // add range means range should not contain null
605
911
    _contain_null = false;
606
607
911
    if (is_fixed_value_range()) {
608
0
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
609
610
0
        switch (op) {
611
0
        case FILTER_LARGER: {
612
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
613
0
            break;
614
0
        }
615
616
0
        case FILTER_LARGER_OR_EQUAL: {
617
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
618
0
            break;
619
0
        }
620
621
0
        case FILTER_LESS: {
622
0
            if (bound_pair.first == _fixed_values.find(value)) {
623
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
624
0
            } else {
625
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
626
0
            }
627
628
0
            break;
629
0
        }
630
631
0
        case FILTER_LESS_OR_EQUAL: {
632
0
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
633
0
            break;
634
0
        }
635
636
0
        default: {
637
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
638
0
        }
639
0
        }
640
641
0
        _high_value = TYPE_MIN;
642
0
        _low_value = TYPE_MAX;
643
911
    } else {
644
911
        if (Compare::greater(_high_value, _low_value)) {
645
903
            switch (op) {
646
229
            case FILTER_LARGER: {
647
229
                if (Compare::greater_equal(value, _low_value)) {
648
228
                    _low_value = value;
649
228
                    _low_op = op;
650
228
                }
651
652
229
                break;
653
0
            }
654
655
270
            case FILTER_LARGER_OR_EQUAL: {
656
270
                if (Compare::greater(value, _low_value)) {
657
136
                    _low_value = value;
658
136
                    _low_op = op;
659
136
                }
660
661
270
                break;
662
0
            }
663
664
143
            case FILTER_LESS: {
665
143
                if (Compare::less_equal(value, _high_value)) {
666
142
                    _high_value = value;
667
142
                    _high_op = op;
668
142
                }
669
670
143
                break;
671
0
            }
672
673
265
            case FILTER_LESS_OR_EQUAL: {
674
265
                if (Compare::less(value, _high_value)) {
675
204
                    _high_value = value;
676
204
                    _high_op = op;
677
204
                }
678
679
265
                break;
680
0
            }
681
682
0
            default: {
683
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
684
0
            }
685
903
            }
686
903
        }
687
688
911
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
689
911
            Compare::equal(_high_value, _low_value)) {
690
84
            RETURN_IF_ERROR(add_fixed_value(_high_value));
691
84
            _high_value = TYPE_MIN;
692
84
            _low_value = TYPE_MAX;
693
84
        }
694
911
    }
695
696
911
    return Status::OK();
697
911
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE9add_rangeENS_11SQLFilterOpENS_14DecimalV2ValueE
Line
Count
Source
599
4
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
600
4
    if (INVALID_TYPE == _column_type) {
601
0
        return Status::InternalError("AddRange failed, Invalid type");
602
0
    }
603
604
    // add range means range should not contain null
605
4
    _contain_null = false;
606
607
4
    if (is_fixed_value_range()) {
608
0
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
609
610
0
        switch (op) {
611
0
        case FILTER_LARGER: {
612
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
613
0
            break;
614
0
        }
615
616
0
        case FILTER_LARGER_OR_EQUAL: {
617
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
618
0
            break;
619
0
        }
620
621
0
        case FILTER_LESS: {
622
0
            if (bound_pair.first == _fixed_values.find(value)) {
623
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
624
0
            } else {
625
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
626
0
            }
627
628
0
            break;
629
0
        }
630
631
0
        case FILTER_LESS_OR_EQUAL: {
632
0
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
633
0
            break;
634
0
        }
635
636
0
        default: {
637
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
638
0
        }
639
0
        }
640
641
0
        _high_value = TYPE_MIN;
642
0
        _low_value = TYPE_MAX;
643
4
    } else {
644
4
        if (Compare::greater(_high_value, _low_value)) {
645
4
            switch (op) {
646
0
            case FILTER_LARGER: {
647
0
                if (Compare::greater_equal(value, _low_value)) {
648
0
                    _low_value = value;
649
0
                    _low_op = op;
650
0
                }
651
652
0
                break;
653
0
            }
654
655
2
            case FILTER_LARGER_OR_EQUAL: {
656
2
                if (Compare::greater(value, _low_value)) {
657
2
                    _low_value = value;
658
2
                    _low_op = op;
659
2
                }
660
661
2
                break;
662
0
            }
663
664
0
            case FILTER_LESS: {
665
0
                if (Compare::less_equal(value, _high_value)) {
666
0
                    _high_value = value;
667
0
                    _high_op = op;
668
0
                }
669
670
0
                break;
671
0
            }
672
673
2
            case FILTER_LESS_OR_EQUAL: {
674
2
                if (Compare::less(value, _high_value)) {
675
2
                    _high_value = value;
676
2
                    _high_op = op;
677
2
                }
678
679
2
                break;
680
0
            }
681
682
0
            default: {
683
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
684
0
            }
685
4
            }
686
4
        }
687
688
4
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
689
4
            Compare::equal(_high_value, _low_value)) {
690
0
            RETURN_IF_ERROR(add_fixed_value(_high_value));
691
0
            _high_value = TYPE_MIN;
692
0
            _low_value = TYPE_MAX;
693
0
        }
694
4
    }
695
696
4
    return Status::OK();
697
4
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE9add_rangeENS_11SQLFilterOpEh
Line
Count
Source
599
60
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
600
60
    if (INVALID_TYPE == _column_type) {
601
0
        return Status::InternalError("AddRange failed, Invalid type");
602
0
    }
603
604
    // add range means range should not contain null
605
60
    _contain_null = false;
606
607
60
    if (is_fixed_value_range()) {
608
0
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
609
610
0
        switch (op) {
611
0
        case FILTER_LARGER: {
612
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
613
0
            break;
614
0
        }
615
616
0
        case FILTER_LARGER_OR_EQUAL: {
617
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
618
0
            break;
619
0
        }
620
621
0
        case FILTER_LESS: {
622
0
            if (bound_pair.first == _fixed_values.find(value)) {
623
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
624
0
            } else {
625
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
626
0
            }
627
628
0
            break;
629
0
        }
630
631
0
        case FILTER_LESS_OR_EQUAL: {
632
0
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
633
0
            break;
634
0
        }
635
636
0
        default: {
637
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
638
0
        }
639
0
        }
640
641
0
        _high_value = TYPE_MIN;
642
0
        _low_value = TYPE_MAX;
643
60
    } else {
644
60
        if (Compare::greater(_high_value, _low_value)) {
645
60
            switch (op) {
646
0
            case FILTER_LARGER: {
647
0
                if (Compare::greater_equal(value, _low_value)) {
648
0
                    _low_value = value;
649
0
                    _low_op = op;
650
0
                }
651
652
0
                break;
653
0
            }
654
655
30
            case FILTER_LARGER_OR_EQUAL: {
656
30
                if (Compare::greater(value, _low_value)) {
657
16
                    _low_value = value;
658
16
                    _low_op = op;
659
16
                }
660
661
30
                break;
662
0
            }
663
664
0
            case FILTER_LESS: {
665
0
                if (Compare::less_equal(value, _high_value)) {
666
0
                    _high_value = value;
667
0
                    _high_op = op;
668
0
                }
669
670
0
                break;
671
0
            }
672
673
30
            case FILTER_LESS_OR_EQUAL: {
674
30
                if (Compare::less(value, _high_value)) {
675
0
                    _high_value = value;
676
0
                    _high_op = op;
677
0
                }
678
679
30
                break;
680
0
            }
681
682
0
            default: {
683
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
684
0
            }
685
60
            }
686
60
        }
687
688
60
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
689
60
            Compare::equal(_high_value, _low_value)) {
690
16
            RETURN_IF_ERROR(add_fixed_value(_high_value));
691
16
            _high_value = TYPE_MIN;
692
16
            _low_value = TYPE_MAX;
693
16
        }
694
60
    }
695
696
60
    return Status::OK();
697
60
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE9add_rangeENS_11SQLFilterOpENS_7DecimalIiEE
Line
Count
Source
599
137
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
600
137
    if (INVALID_TYPE == _column_type) {
601
0
        return Status::InternalError("AddRange failed, Invalid type");
602
0
    }
603
604
    // add range means range should not contain null
605
137
    _contain_null = false;
606
607
137
    if (is_fixed_value_range()) {
608
0
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
609
610
0
        switch (op) {
611
0
        case FILTER_LARGER: {
612
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
613
0
            break;
614
0
        }
615
616
0
        case FILTER_LARGER_OR_EQUAL: {
617
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
618
0
            break;
619
0
        }
620
621
0
        case FILTER_LESS: {
622
0
            if (bound_pair.first == _fixed_values.find(value)) {
623
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
624
0
            } else {
625
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
626
0
            }
627
628
0
            break;
629
0
        }
630
631
0
        case FILTER_LESS_OR_EQUAL: {
632
0
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
633
0
            break;
634
0
        }
635
636
0
        default: {
637
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
638
0
        }
639
0
        }
640
641
0
        _high_value = TYPE_MIN;
642
0
        _low_value = TYPE_MAX;
643
137
    } else {
644
137
        if (Compare::greater(_high_value, _low_value)) {
645
120
            switch (op) {
646
8
            case FILTER_LARGER: {
647
8
                if (Compare::greater_equal(value, _low_value)) {
648
8
                    _low_value = value;
649
8
                    _low_op = op;
650
8
                }
651
652
8
                break;
653
0
            }
654
655
47
            case FILTER_LARGER_OR_EQUAL: {
656
47
                if (Compare::greater(value, _low_value)) {
657
37
                    _low_value = value;
658
37
                    _low_op = op;
659
37
                }
660
661
47
                break;
662
0
            }
663
664
21
            case FILTER_LESS: {
665
21
                if (Compare::less_equal(value, _high_value)) {
666
21
                    _high_value = value;
667
21
                    _high_op = op;
668
21
                }
669
670
21
                break;
671
0
            }
672
673
44
            case FILTER_LESS_OR_EQUAL: {
674
44
                if (Compare::less(value, _high_value)) {
675
34
                    _high_value = value;
676
34
                    _high_op = op;
677
34
                }
678
679
44
                break;
680
0
            }
681
682
0
            default: {
683
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
684
0
            }
685
120
            }
686
120
        }
687
688
137
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
689
137
            Compare::equal(_high_value, _low_value)) {
690
0
            RETURN_IF_ERROR(add_fixed_value(_high_value));
691
0
            _high_value = TYPE_MIN;
692
0
            _low_value = TYPE_MAX;
693
0
        }
694
137
    }
695
696
137
    return Status::OK();
697
137
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE9add_rangeENS_11SQLFilterOpENS_7DecimalIlEE
Line
Count
Source
599
865
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
600
865
    if (INVALID_TYPE == _column_type) {
601
0
        return Status::InternalError("AddRange failed, Invalid type");
602
0
    }
603
604
    // add range means range should not contain null
605
865
    _contain_null = false;
606
607
865
    if (is_fixed_value_range()) {
608
0
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
609
610
0
        switch (op) {
611
0
        case FILTER_LARGER: {
612
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
613
0
            break;
614
0
        }
615
616
0
        case FILTER_LARGER_OR_EQUAL: {
617
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
618
0
            break;
619
0
        }
620
621
0
        case FILTER_LESS: {
622
0
            if (bound_pair.first == _fixed_values.find(value)) {
623
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
624
0
            } else {
625
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
626
0
            }
627
628
0
            break;
629
0
        }
630
631
0
        case FILTER_LESS_OR_EQUAL: {
632
0
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
633
0
            break;
634
0
        }
635
636
0
        default: {
637
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
638
0
        }
639
0
        }
640
641
0
        _high_value = TYPE_MIN;
642
0
        _low_value = TYPE_MAX;
643
865
    } else {
644
865
        if (Compare::greater(_high_value, _low_value)) {
645
865
            switch (op) {
646
108
            case FILTER_LARGER: {
647
108
                if (Compare::greater_equal(value, _low_value)) {
648
106
                    _low_value = value;
649
106
                    _low_op = op;
650
106
                }
651
652
108
                break;
653
0
            }
654
655
365
            case FILTER_LARGER_OR_EQUAL: {
656
365
                if (Compare::greater(value, _low_value)) {
657
257
                    _low_value = value;
658
257
                    _low_op = op;
659
257
                }
660
661
365
                break;
662
0
            }
663
664
29
            case FILTER_LESS: {
665
29
                if (Compare::less_equal(value, _high_value)) {
666
29
                    _high_value = value;
667
29
                    _high_op = op;
668
29
                }
669
670
29
                break;
671
0
            }
672
673
367
            case FILTER_LESS_OR_EQUAL: {
674
367
                if (Compare::less(value, _high_value)) {
675
256
                    _high_value = value;
676
256
                    _high_op = op;
677
256
                }
678
679
367
                break;
680
0
            }
681
682
0
            default: {
683
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
684
0
            }
685
865
            }
686
865
        }
687
688
867
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
689
867
            Compare::equal(_high_value, _low_value)) {
690
196
            RETURN_IF_ERROR(add_fixed_value(_high_value));
691
196
            _high_value = TYPE_MIN;
692
196
            _low_value = TYPE_MAX;
693
196
        }
694
867
    }
695
696
867
    return Status::OK();
697
865
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE9add_rangeENS_11SQLFilterOpENS_12Decimal128V3E
Line
Count
Source
599
130
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
600
130
    if (INVALID_TYPE == _column_type) {
601
0
        return Status::InternalError("AddRange failed, Invalid type");
602
0
    }
603
604
    // add range means range should not contain null
605
130
    _contain_null = false;
606
607
130
    if (is_fixed_value_range()) {
608
0
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
609
610
0
        switch (op) {
611
0
        case FILTER_LARGER: {
612
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
613
0
            break;
614
0
        }
615
616
0
        case FILTER_LARGER_OR_EQUAL: {
617
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
618
0
            break;
619
0
        }
620
621
0
        case FILTER_LESS: {
622
0
            if (bound_pair.first == _fixed_values.find(value)) {
623
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
624
0
            } else {
625
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
626
0
            }
627
628
0
            break;
629
0
        }
630
631
0
        case FILTER_LESS_OR_EQUAL: {
632
0
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
633
0
            break;
634
0
        }
635
636
0
        default: {
637
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
638
0
        }
639
0
        }
640
641
0
        _high_value = TYPE_MIN;
642
0
        _low_value = TYPE_MAX;
643
130
    } else {
644
131
        if (Compare::greater(_high_value, _low_value)) {
645
131
            switch (op) {
646
92
            case FILTER_LARGER: {
647
92
                if (Compare::greater_equal(value, _low_value)) {
648
89
                    _low_value = value;
649
89
                    _low_op = op;
650
89
                }
651
652
92
                break;
653
0
            }
654
655
18
            case FILTER_LARGER_OR_EQUAL: {
656
18
                if (Compare::greater(value, _low_value)) {
657
14
                    _low_value = value;
658
14
                    _low_op = op;
659
14
                }
660
661
18
                break;
662
0
            }
663
664
6
            case FILTER_LESS: {
665
6
                if (Compare::less_equal(value, _high_value)) {
666
6
                    _high_value = value;
667
6
                    _high_op = op;
668
6
                }
669
670
6
                break;
671
0
            }
672
673
14
            case FILTER_LESS_OR_EQUAL: {
674
14
                if (Compare::less(value, _high_value)) {
675
10
                    _high_value = value;
676
10
                    _high_op = op;
677
10
                }
678
679
14
                break;
680
0
            }
681
682
0
            default: {
683
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
684
0
            }
685
131
            }
686
131
        }
687
688
128
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
689
128
            Compare::equal(_high_value, _low_value)) {
690
0
            RETURN_IF_ERROR(add_fixed_value(_high_value));
691
0
            _high_value = TYPE_MIN;
692
0
            _low_value = TYPE_MAX;
693
0
        }
694
128
    }
695
696
128
    return Status::OK();
697
130
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE9add_rangeENS_11SQLFilterOpENS_7DecimalIN4wide7integerILm256EiEEEE
Line
Count
Source
599
181
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
600
181
    if (INVALID_TYPE == _column_type) {
601
0
        return Status::InternalError("AddRange failed, Invalid type");
602
0
    }
603
604
    // add range means range should not contain null
605
181
    _contain_null = false;
606
607
181
    if (is_fixed_value_range()) {
608
0
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
609
610
0
        switch (op) {
611
0
        case FILTER_LARGER: {
612
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
613
0
            break;
614
0
        }
615
616
0
        case FILTER_LARGER_OR_EQUAL: {
617
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
618
0
            break;
619
0
        }
620
621
0
        case FILTER_LESS: {
622
0
            if (bound_pair.first == _fixed_values.find(value)) {
623
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
624
0
            } else {
625
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
626
0
            }
627
628
0
            break;
629
0
        }
630
631
0
        case FILTER_LESS_OR_EQUAL: {
632
0
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
633
0
            break;
634
0
        }
635
636
0
        default: {
637
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
638
0
        }
639
0
        }
640
641
0
        _high_value = TYPE_MIN;
642
0
        _low_value = TYPE_MAX;
643
181
    } else {
644
181
        if (Compare::greater(_high_value, _low_value)) {
645
180
            switch (op) {
646
48
            case FILTER_LARGER: {
647
48
                if (Compare::greater_equal(value, _low_value)) {
648
47
                    _low_value = value;
649
47
                    _low_op = op;
650
47
                }
651
652
48
                break;
653
0
            }
654
655
48
            case FILTER_LARGER_OR_EQUAL: {
656
48
                if (Compare::greater(value, _low_value)) {
657
31
                    _low_value = value;
658
31
                    _low_op = op;
659
31
                }
660
661
48
                break;
662
0
            }
663
664
34
            case FILTER_LESS: {
665
34
                if (Compare::less_equal(value, _high_value)) {
666
34
                    _high_value = value;
667
34
                    _high_op = op;
668
34
                }
669
670
34
                break;
671
0
            }
672
673
50
            case FILTER_LESS_OR_EQUAL: {
674
50
                if (Compare::less(value, _high_value)) {
675
33
                    _high_value = value;
676
33
                    _high_op = op;
677
33
                }
678
679
50
                break;
680
0
            }
681
682
0
            default: {
683
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
684
0
            }
685
180
            }
686
180
        }
687
688
180
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
689
180
            Compare::equal(_high_value, _low_value)) {
690
0
            RETURN_IF_ERROR(add_fixed_value(_high_value));
691
0
            _high_value = TYPE_MIN;
692
0
            _low_value = TYPE_MAX;
693
0
        }
694
180
    }
695
696
180
    return Status::OK();
697
181
}
698
699
template <PrimitiveType primitive_type>
700
519k
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
701
519k
    switch (_high_op) {
702
94
    case FILTER_LESS: {
703
94
        switch (_low_op) {
704
3
        case FILTER_LARGER: {
705
3
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
706
0
        }
707
708
91
        case FILTER_LARGER_OR_EQUAL: {
709
91
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
710
0
        }
711
712
0
        default: {
713
0
            DCHECK(false);
714
0
        }
715
94
        }
716
717
0
        break;
718
94
    }
719
720
519k
    case FILTER_LESS_OR_EQUAL: {
721
519k
        switch (_low_op) {
722
44
        case FILTER_LARGER: {
723
44
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
724
0
        }
725
726
518k
        case FILTER_LARGER_OR_EQUAL: {
727
518k
            return Compare::less_equal(value, _high_value) &&
728
519k
                   Compare::greater_equal(value, _low_value);
729
0
        }
730
731
0
        default: {
732
0
            DCHECK(false);
733
0
        }
734
519k
        }
735
519k
    }
736
737
0
    default: {
738
0
        DCHECK(false);
739
0
    }
740
519k
    }
741
742
0
    return false;
743
519k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE11is_in_rangeERKa
Line
Count
Source
700
120k
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
701
120k
    switch (_high_op) {
702
9
    case FILTER_LESS: {
703
9
        switch (_low_op) {
704
3
        case FILTER_LARGER: {
705
3
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
706
0
        }
707
708
6
        case FILTER_LARGER_OR_EQUAL: {
709
6
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
710
0
        }
711
712
0
        default: {
713
0
            DCHECK(false);
714
0
        }
715
9
        }
716
717
0
        break;
718
9
    }
719
720
120k
    case FILTER_LESS_OR_EQUAL: {
721
120k
        switch (_low_op) {
722
0
        case FILTER_LARGER: {
723
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
724
0
        }
725
726
120k
        case FILTER_LARGER_OR_EQUAL: {
727
120k
            return Compare::less_equal(value, _high_value) &&
728
120k
                   Compare::greater_equal(value, _low_value);
729
0
        }
730
731
0
        default: {
732
0
            DCHECK(false);
733
0
        }
734
120k
        }
735
120k
    }
736
737
0
    default: {
738
0
        DCHECK(false);
739
0
    }
740
120k
    }
741
742
0
    return false;
743
120k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE11is_in_rangeERKs
Line
Count
Source
700
178
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
701
178
    switch (_high_op) {
702
0
    case FILTER_LESS: {
703
0
        switch (_low_op) {
704
0
        case FILTER_LARGER: {
705
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
706
0
        }
707
708
0
        case FILTER_LARGER_OR_EQUAL: {
709
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
710
0
        }
711
712
0
        default: {
713
0
            DCHECK(false);
714
0
        }
715
0
        }
716
717
0
        break;
718
0
    }
719
720
178
    case FILTER_LESS_OR_EQUAL: {
721
178
        switch (_low_op) {
722
0
        case FILTER_LARGER: {
723
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
724
0
        }
725
726
178
        case FILTER_LARGER_OR_EQUAL: {
727
178
            return Compare::less_equal(value, _high_value) &&
728
178
                   Compare::greater_equal(value, _low_value);
729
0
        }
730
731
0
        default: {
732
0
            DCHECK(false);
733
0
        }
734
178
        }
735
178
    }
736
737
0
    default: {
738
0
        DCHECK(false);
739
0
    }
740
178
    }
741
742
0
    return false;
743
178
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE11is_in_rangeERKi
Line
Count
Source
700
97.6k
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
701
97.6k
    switch (_high_op) {
702
66
    case FILTER_LESS: {
703
66
        switch (_low_op) {
704
0
        case FILTER_LARGER: {
705
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
706
0
        }
707
708
66
        case FILTER_LARGER_OR_EQUAL: {
709
66
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
710
0
        }
711
712
0
        default: {
713
0
            DCHECK(false);
714
0
        }
715
66
        }
716
717
0
        break;
718
66
    }
719
720
97.4k
    case FILTER_LESS_OR_EQUAL: {
721
97.4k
        switch (_low_op) {
722
40
        case FILTER_LARGER: {
723
40
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
724
0
        }
725
726
97.2k
        case FILTER_LARGER_OR_EQUAL: {
727
97.2k
            return Compare::less_equal(value, _high_value) &&
728
97.2k
                   Compare::greater_equal(value, _low_value);
729
0
        }
730
731
0
        default: {
732
0
            DCHECK(false);
733
0
        }
734
97.4k
        }
735
97.4k
    }
736
737
0
    default: {
738
0
        DCHECK(false);
739
0
    }
740
97.6k
    }
741
742
0
    return false;
743
97.6k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE11is_in_rangeERKl
Line
Count
Source
700
2.78k
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
701
2.78k
    switch (_high_op) {
702
0
    case FILTER_LESS: {
703
0
        switch (_low_op) {
704
0
        case FILTER_LARGER: {
705
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
706
0
        }
707
708
0
        case FILTER_LARGER_OR_EQUAL: {
709
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
710
0
        }
711
712
0
        default: {
713
0
            DCHECK(false);
714
0
        }
715
0
        }
716
717
0
        break;
718
0
    }
719
720
2.78k
    case FILTER_LESS_OR_EQUAL: {
721
2.78k
        switch (_low_op) {
722
1
        case FILTER_LARGER: {
723
1
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
724
0
        }
725
726
2.78k
        case FILTER_LARGER_OR_EQUAL: {
727
2.78k
            return Compare::less_equal(value, _high_value) &&
728
2.78k
                   Compare::greater_equal(value, _low_value);
729
0
        }
730
731
0
        default: {
732
0
            DCHECK(false);
733
0
        }
734
2.78k
        }
735
2.78k
    }
736
737
0
    default: {
738
0
        DCHECK(false);
739
0
    }
740
2.78k
    }
741
742
0
    return false;
743
2.78k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE11is_in_rangeERKn
Line
Count
Source
700
201
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
701
201
    switch (_high_op) {
702
0
    case FILTER_LESS: {
703
0
        switch (_low_op) {
704
0
        case FILTER_LARGER: {
705
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
706
0
        }
707
708
0
        case FILTER_LARGER_OR_EQUAL: {
709
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
710
0
        }
711
712
0
        default: {
713
0
            DCHECK(false);
714
0
        }
715
0
        }
716
717
0
        break;
718
0
    }
719
720
201
    case FILTER_LESS_OR_EQUAL: {
721
201
        switch (_low_op) {
722
0
        case FILTER_LARGER: {
723
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
724
0
        }
725
726
201
        case FILTER_LARGER_OR_EQUAL: {
727
201
            return Compare::less_equal(value, _high_value) &&
728
201
                   Compare::greater_equal(value, _low_value);
729
0
        }
730
731
0
        default: {
732
0
            DCHECK(false);
733
0
        }
734
201
        }
735
201
    }
736
737
0
    default: {
738
0
        DCHECK(false);
739
0
    }
740
201
    }
741
742
0
    return false;
743
201
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE11is_in_rangeERKf
Line
Count
Source
700
43
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
701
43
    switch (_high_op) {
702
0
    case FILTER_LESS: {
703
0
        switch (_low_op) {
704
0
        case FILTER_LARGER: {
705
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
706
0
        }
707
708
0
        case FILTER_LARGER_OR_EQUAL: {
709
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
710
0
        }
711
712
0
        default: {
713
0
            DCHECK(false);
714
0
        }
715
0
        }
716
717
0
        break;
718
0
    }
719
720
43
    case FILTER_LESS_OR_EQUAL: {
721
43
        switch (_low_op) {
722
0
        case FILTER_LARGER: {
723
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
724
0
        }
725
726
44
        case FILTER_LARGER_OR_EQUAL: {
727
44
            return Compare::less_equal(value, _high_value) &&
728
44
                   Compare::greater_equal(value, _low_value);
729
0
        }
730
731
0
        default: {
732
0
            DCHECK(false);
733
0
        }
734
43
        }
735
43
    }
736
737
0
    default: {
738
0
        DCHECK(false);
739
0
    }
740
43
    }
741
742
0
    return false;
743
43
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE11is_in_rangeERKd
Line
Count
Source
700
164
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
701
164
    switch (_high_op) {
702
0
    case FILTER_LESS: {
703
0
        switch (_low_op) {
704
0
        case FILTER_LARGER: {
705
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
706
0
        }
707
708
0
        case FILTER_LARGER_OR_EQUAL: {
709
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
710
0
        }
711
712
0
        default: {
713
0
            DCHECK(false);
714
0
        }
715
0
        }
716
717
0
        break;
718
0
    }
719
720
164
    case FILTER_LESS_OR_EQUAL: {
721
164
        switch (_low_op) {
722
0
        case FILTER_LARGER: {
723
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
724
0
        }
725
726
165
        case FILTER_LARGER_OR_EQUAL: {
727
165
            return Compare::less_equal(value, _high_value) &&
728
165
                   Compare::greater_equal(value, _low_value);
729
0
        }
730
731
0
        default: {
732
0
            DCHECK(false);
733
0
        }
734
164
        }
735
164
    }
736
737
0
    default: {
738
0
        DCHECK(false);
739
0
    }
740
164
    }
741
742
0
    return false;
743
164
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE11is_in_rangeERKj
Line
Count
Source
700
35
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
701
35
    switch (_high_op) {
702
0
    case FILTER_LESS: {
703
0
        switch (_low_op) {
704
0
        case FILTER_LARGER: {
705
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
706
0
        }
707
708
0
        case FILTER_LARGER_OR_EQUAL: {
709
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
710
0
        }
711
712
0
        default: {
713
0
            DCHECK(false);
714
0
        }
715
0
        }
716
717
0
        break;
718
0
    }
719
720
35
    case FILTER_LESS_OR_EQUAL: {
721
35
        switch (_low_op) {
722
0
        case FILTER_LARGER: {
723
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
724
0
        }
725
726
35
        case FILTER_LARGER_OR_EQUAL: {
727
35
            return Compare::less_equal(value, _high_value) &&
728
35
                   Compare::greater_equal(value, _low_value);
729
0
        }
730
731
0
        default: {
732
0
            DCHECK(false);
733
0
        }
734
35
        }
735
35
    }
736
737
0
    default: {
738
0
        DCHECK(false);
739
0
    }
740
35
    }
741
742
0
    return false;
743
35
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE11is_in_rangeERKo
Line
Count
Source
700
35
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
701
35
    switch (_high_op) {
702
0
    case FILTER_LESS: {
703
0
        switch (_low_op) {
704
0
        case FILTER_LARGER: {
705
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
706
0
        }
707
708
0
        case FILTER_LARGER_OR_EQUAL: {
709
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
710
0
        }
711
712
0
        default: {
713
0
            DCHECK(false);
714
0
        }
715
0
        }
716
717
0
        break;
718
0
    }
719
720
35
    case FILTER_LESS_OR_EQUAL: {
721
35
        switch (_low_op) {
722
0
        case FILTER_LARGER: {
723
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
724
0
        }
725
726
35
        case FILTER_LARGER_OR_EQUAL: {
727
35
            return Compare::less_equal(value, _high_value) &&
728
36
                   Compare::greater_equal(value, _low_value);
729
0
        }
730
731
0
        default: {
732
0
            DCHECK(false);
733
0
        }
734
35
        }
735
35
    }
736
737
0
    default: {
738
0
        DCHECK(false);
739
0
    }
740
35
    }
741
742
0
    return false;
743
35
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE11is_in_rangeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
700
486
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
701
486
    switch (_high_op) {
702
0
    case FILTER_LESS: {
703
0
        switch (_low_op) {
704
0
        case FILTER_LARGER: {
705
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
706
0
        }
707
708
0
        case FILTER_LARGER_OR_EQUAL: {
709
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
710
0
        }
711
712
0
        default: {
713
0
            DCHECK(false);
714
0
        }
715
0
        }
716
717
0
        break;
718
0
    }
719
720
486
    case FILTER_LESS_OR_EQUAL: {
721
486
        switch (_low_op) {
722
0
        case FILTER_LARGER: {
723
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
724
0
        }
725
726
486
        case FILTER_LARGER_OR_EQUAL: {
727
486
            return Compare::less_equal(value, _high_value) &&
728
486
                   Compare::greater_equal(value, _low_value);
729
0
        }
730
731
0
        default: {
732
0
            DCHECK(false);
733
0
        }
734
486
        }
735
486
    }
736
737
0
    default: {
738
0
        DCHECK(false);
739
0
    }
740
486
    }
741
742
0
    return false;
743
486
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE11is_in_rangeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
700
292k
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
701
292k
    switch (_high_op) {
702
0
    case FILTER_LESS: {
703
0
        switch (_low_op) {
704
0
        case FILTER_LARGER: {
705
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
706
0
        }
707
708
0
        case FILTER_LARGER_OR_EQUAL: {
709
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
710
0
        }
711
712
0
        default: {
713
0
            DCHECK(false);
714
0
        }
715
0
        }
716
717
0
        break;
718
0
    }
719
720
292k
    case FILTER_LESS_OR_EQUAL: {
721
292k
        switch (_low_op) {
722
0
        case FILTER_LARGER: {
723
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
724
0
        }
725
726
292k
        case FILTER_LARGER_OR_EQUAL: {
727
292k
            return Compare::less_equal(value, _high_value) &&
728
293k
                   Compare::greater_equal(value, _low_value);
729
0
        }
730
731
0
        default: {
732
0
            DCHECK(false);
733
0
        }
734
292k
        }
735
292k
    }
736
737
0
    default: {
738
0
        DCHECK(false);
739
0
    }
740
292k
    }
741
742
0
    return false;
743
292k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE11is_in_rangeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
700
1.47k
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
701
1.47k
    switch (_high_op) {
702
0
    case FILTER_LESS: {
703
0
        switch (_low_op) {
704
0
        case FILTER_LARGER: {
705
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
706
0
        }
707
708
0
        case FILTER_LARGER_OR_EQUAL: {
709
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
710
0
        }
711
712
0
        default: {
713
0
            DCHECK(false);
714
0
        }
715
0
        }
716
717
0
        break;
718
0
    }
719
720
1.47k
    case FILTER_LESS_OR_EQUAL: {
721
1.47k
        switch (_low_op) {
722
0
        case FILTER_LARGER: {
723
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
724
0
        }
725
726
1.47k
        case FILTER_LARGER_OR_EQUAL: {
727
1.47k
            return Compare::less_equal(value, _high_value) &&
728
1.48k
                   Compare::greater_equal(value, _low_value);
729
0
        }
730
731
0
        default: {
732
0
            DCHECK(false);
733
0
        }
734
1.47k
        }
735
1.47k
    }
736
737
0
    default: {
738
0
        DCHECK(false);
739
0
    }
740
1.47k
    }
741
742
0
    return false;
743
1.47k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE11is_in_rangeERKNS_16VecDateTimeValueE
Line
Count
Source
700
43
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
701
43
    switch (_high_op) {
702
0
    case FILTER_LESS: {
703
0
        switch (_low_op) {
704
0
        case FILTER_LARGER: {
705
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
706
0
        }
707
708
0
        case FILTER_LARGER_OR_EQUAL: {
709
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
710
0
        }
711
712
0
        default: {
713
0
            DCHECK(false);
714
0
        }
715
0
        }
716
717
0
        break;
718
0
    }
719
720
43
    case FILTER_LESS_OR_EQUAL: {
721
43
        switch (_low_op) {
722
0
        case FILTER_LARGER: {
723
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
724
0
        }
725
726
43
        case FILTER_LARGER_OR_EQUAL: {
727
43
            return Compare::less_equal(value, _high_value) &&
728
43
                   Compare::greater_equal(value, _low_value);
729
0
        }
730
731
0
        default: {
732
0
            DCHECK(false);
733
0
        }
734
43
        }
735
43
    }
736
737
0
    default: {
738
0
        DCHECK(false);
739
0
    }
740
43
    }
741
742
0
    return false;
743
43
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE11is_in_rangeERKNS_11DateV2ValueINS_15DateV2ValueTypeEEE
Line
Count
Source
700
1.22k
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
701
1.22k
    switch (_high_op) {
702
7
    case FILTER_LESS: {
703
7
        switch (_low_op) {
704
0
        case FILTER_LARGER: {
705
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
706
0
        }
707
708
7
        case FILTER_LARGER_OR_EQUAL: {
709
7
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
710
0
        }
711
712
0
        default: {
713
0
            DCHECK(false);
714
0
        }
715
7
        }
716
717
0
        break;
718
7
    }
719
720
1.22k
    case FILTER_LESS_OR_EQUAL: {
721
1.22k
        switch (_low_op) {
722
3
        case FILTER_LARGER: {
723
3
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
724
0
        }
725
726
1.22k
        case FILTER_LARGER_OR_EQUAL: {
727
1.22k
            return Compare::less_equal(value, _high_value) &&
728
1.22k
                   Compare::greater_equal(value, _low_value);
729
0
        }
730
731
0
        default: {
732
0
            DCHECK(false);
733
0
        }
734
1.22k
        }
735
1.22k
    }
736
737
0
    default: {
738
0
        DCHECK(false);
739
0
    }
740
1.22k
    }
741
742
0
    return false;
743
1.22k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE11is_in_rangeERKNS_16VecDateTimeValueE
Line
Count
Source
700
101
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
701
101
    switch (_high_op) {
702
0
    case FILTER_LESS: {
703
0
        switch (_low_op) {
704
0
        case FILTER_LARGER: {
705
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
706
0
        }
707
708
0
        case FILTER_LARGER_OR_EQUAL: {
709
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
710
0
        }
711
712
0
        default: {
713
0
            DCHECK(false);
714
0
        }
715
0
        }
716
717
0
        break;
718
0
    }
719
720
101
    case FILTER_LESS_OR_EQUAL: {
721
101
        switch (_low_op) {
722
0
        case FILTER_LARGER: {
723
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
724
0
        }
725
726
101
        case FILTER_LARGER_OR_EQUAL: {
727
101
            return Compare::less_equal(value, _high_value) &&
728
101
                   Compare::greater_equal(value, _low_value);
729
0
        }
730
731
0
        default: {
732
0
            DCHECK(false);
733
0
        }
734
101
        }
735
101
    }
736
737
0
    default: {
738
0
        DCHECK(false);
739
0
    }
740
101
    }
741
742
0
    return false;
743
101
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE11is_in_rangeERKNS_11DateV2ValueINS_19DateTimeV2ValueTypeEEE
Line
Count
Source
700
604
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
701
604
    switch (_high_op) {
702
12
    case FILTER_LESS: {
703
12
        switch (_low_op) {
704
0
        case FILTER_LARGER: {
705
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
706
0
        }
707
708
12
        case FILTER_LARGER_OR_EQUAL: {
709
12
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
710
0
        }
711
712
0
        default: {
713
0
            DCHECK(false);
714
0
        }
715
12
        }
716
717
0
        break;
718
12
    }
719
720
593
    case FILTER_LESS_OR_EQUAL: {
721
593
        switch (_low_op) {
722
0
        case FILTER_LARGER: {
723
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
724
0
        }
725
726
594
        case FILTER_LARGER_OR_EQUAL: {
727
594
            return Compare::less_equal(value, _high_value) &&
728
595
                   Compare::greater_equal(value, _low_value);
729
0
        }
730
731
0
        default: {
732
0
            DCHECK(false);
733
0
        }
734
593
        }
735
593
    }
736
737
0
    default: {
738
0
        DCHECK(false);
739
0
    }
740
604
    }
741
742
0
    return false;
743
604
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE11is_in_rangeERKNS_16TimestampTzValueE
Line
Count
Source
700
170
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
701
170
    switch (_high_op) {
702
0
    case FILTER_LESS: {
703
0
        switch (_low_op) {
704
0
        case FILTER_LARGER: {
705
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
706
0
        }
707
708
0
        case FILTER_LARGER_OR_EQUAL: {
709
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
710
0
        }
711
712
0
        default: {
713
0
            DCHECK(false);
714
0
        }
715
0
        }
716
717
0
        break;
718
0
    }
719
720
170
    case FILTER_LESS_OR_EQUAL: {
721
170
        switch (_low_op) {
722
0
        case FILTER_LARGER: {
723
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
724
0
        }
725
726
170
        case FILTER_LARGER_OR_EQUAL: {
727
170
            return Compare::less_equal(value, _high_value) &&
728
170
                   Compare::greater_equal(value, _low_value);
729
0
        }
730
731
0
        default: {
732
0
            DCHECK(false);
733
0
        }
734
170
        }
735
170
    }
736
737
0
    default: {
738
0
        DCHECK(false);
739
0
    }
740
170
    }
741
742
0
    return false;
743
170
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE11is_in_rangeERKNS_14DecimalV2ValueE
Line
Count
Source
700
13
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
701
13
    switch (_high_op) {
702
0
    case FILTER_LESS: {
703
0
        switch (_low_op) {
704
0
        case FILTER_LARGER: {
705
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
706
0
        }
707
708
0
        case FILTER_LARGER_OR_EQUAL: {
709
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
710
0
        }
711
712
0
        default: {
713
0
            DCHECK(false);
714
0
        }
715
0
        }
716
717
0
        break;
718
0
    }
719
720
13
    case FILTER_LESS_OR_EQUAL: {
721
13
        switch (_low_op) {
722
0
        case FILTER_LARGER: {
723
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
724
0
        }
725
726
13
        case FILTER_LARGER_OR_EQUAL: {
727
13
            return Compare::less_equal(value, _high_value) &&
728
13
                   Compare::greater_equal(value, _low_value);
729
0
        }
730
731
0
        default: {
732
0
            DCHECK(false);
733
0
        }
734
13
        }
735
13
    }
736
737
0
    default: {
738
0
        DCHECK(false);
739
0
    }
740
13
    }
741
742
0
    return false;
743
13
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE11is_in_rangeERKh
Line
Count
Source
700
342
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
701
342
    switch (_high_op) {
702
0
    case FILTER_LESS: {
703
0
        switch (_low_op) {
704
0
        case FILTER_LARGER: {
705
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
706
0
        }
707
708
0
        case FILTER_LARGER_OR_EQUAL: {
709
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
710
0
        }
711
712
0
        default: {
713
0
            DCHECK(false);
714
0
        }
715
0
        }
716
717
0
        break;
718
0
    }
719
720
342
    case FILTER_LESS_OR_EQUAL: {
721
342
        switch (_low_op) {
722
0
        case FILTER_LARGER: {
723
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
724
0
        }
725
726
341
        case FILTER_LARGER_OR_EQUAL: {
727
341
            return Compare::less_equal(value, _high_value) &&
728
341
                   Compare::greater_equal(value, _low_value);
729
0
        }
730
731
0
        default: {
732
0
            DCHECK(false);
733
0
        }
734
342
        }
735
342
    }
736
737
0
    default: {
738
0
        DCHECK(false);
739
0
    }
740
342
    }
741
742
0
    return false;
743
342
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE11is_in_rangeERKNS_7DecimalIiEE
Line
Count
Source
700
53
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
701
53
    switch (_high_op) {
702
0
    case FILTER_LESS: {
703
0
        switch (_low_op) {
704
0
        case FILTER_LARGER: {
705
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
706
0
        }
707
708
0
        case FILTER_LARGER_OR_EQUAL: {
709
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
710
0
        }
711
712
0
        default: {
713
0
            DCHECK(false);
714
0
        }
715
0
        }
716
717
0
        break;
718
0
    }
719
720
53
    case FILTER_LESS_OR_EQUAL: {
721
53
        switch (_low_op) {
722
0
        case FILTER_LARGER: {
723
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
724
0
        }
725
726
53
        case FILTER_LARGER_OR_EQUAL: {
727
53
            return Compare::less_equal(value, _high_value) &&
728
53
                   Compare::greater_equal(value, _low_value);
729
0
        }
730
731
0
        default: {
732
0
            DCHECK(false);
733
0
        }
734
53
        }
735
53
    }
736
737
0
    default: {
738
0
        DCHECK(false);
739
0
    }
740
53
    }
741
742
0
    return false;
743
53
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE11is_in_rangeERKNS_7DecimalIlEE
Line
Count
Source
700
230
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
701
230
    switch (_high_op) {
702
0
    case FILTER_LESS: {
703
0
        switch (_low_op) {
704
0
        case FILTER_LARGER: {
705
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
706
0
        }
707
708
0
        case FILTER_LARGER_OR_EQUAL: {
709
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
710
0
        }
711
712
0
        default: {
713
0
            DCHECK(false);
714
0
        }
715
0
        }
716
717
0
        break;
718
0
    }
719
720
230
    case FILTER_LESS_OR_EQUAL: {
721
230
        switch (_low_op) {
722
0
        case FILTER_LARGER: {
723
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
724
0
        }
725
726
230
        case FILTER_LARGER_OR_EQUAL: {
727
230
            return Compare::less_equal(value, _high_value) &&
728
230
                   Compare::greater_equal(value, _low_value);
729
0
        }
730
731
0
        default: {
732
0
            DCHECK(false);
733
0
        }
734
230
        }
735
230
    }
736
737
0
    default: {
738
0
        DCHECK(false);
739
0
    }
740
230
    }
741
742
0
    return false;
743
230
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE11is_in_rangeERKNS_12Decimal128V3E
Line
Count
Source
700
192
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
701
192
    switch (_high_op) {
702
0
    case FILTER_LESS: {
703
0
        switch (_low_op) {
704
0
        case FILTER_LARGER: {
705
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
706
0
        }
707
708
0
        case FILTER_LARGER_OR_EQUAL: {
709
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
710
0
        }
711
712
0
        default: {
713
0
            DCHECK(false);
714
0
        }
715
0
        }
716
717
0
        break;
718
0
    }
719
720
191
    case FILTER_LESS_OR_EQUAL: {
721
191
        switch (_low_op) {
722
0
        case FILTER_LARGER: {
723
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
724
0
        }
725
726
192
        case FILTER_LARGER_OR_EQUAL: {
727
192
            return Compare::less_equal(value, _high_value) &&
728
192
                   Compare::greater_equal(value, _low_value);
729
0
        }
730
731
0
        default: {
732
0
            DCHECK(false);
733
0
        }
734
191
        }
735
191
    }
736
737
0
    default: {
738
0
        DCHECK(false);
739
0
    }
740
192
    }
741
742
0
    return false;
743
192
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE11is_in_rangeERKNS_7DecimalIN4wide7integerILm256EiEEEE
Line
Count
Source
700
81
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
701
81
    switch (_high_op) {
702
0
    case FILTER_LESS: {
703
0
        switch (_low_op) {
704
0
        case FILTER_LARGER: {
705
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
706
0
        }
707
708
0
        case FILTER_LARGER_OR_EQUAL: {
709
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
710
0
        }
711
712
0
        default: {
713
0
            DCHECK(false);
714
0
        }
715
0
        }
716
717
0
        break;
718
0
    }
719
720
81
    case FILTER_LESS_OR_EQUAL: {
721
81
        switch (_low_op) {
722
0
        case FILTER_LARGER: {
723
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
724
0
        }
725
726
81
        case FILTER_LARGER_OR_EQUAL: {
727
81
            return Compare::less_equal(value, _high_value) &&
728
81
                   Compare::greater_equal(value, _low_value);
729
0
        }
730
731
0
        default: {
732
0
            DCHECK(false);
733
0
        }
734
81
        }
735
81
    }
736
737
0
    default: {
738
0
        DCHECK(false);
739
0
    }
740
81
    }
741
742
0
    return false;
743
81
}
744
745
template <PrimitiveType primitive_type>
746
438k
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
747
    // 1. clear if column type not match
748
438k
    if (_column_type != range._column_type) {
749
0
        set_empty_value_range();
750
0
    }
751
752
    // 2. clear if any range is empty
753
438k
    if (is_empty_value_range() || range.is_empty_value_range()) {
754
10.3k
        set_empty_value_range();
755
10.3k
    }
756
757
438k
    SetType result_values;
758
    // 3. fixed_value intersection, fixed value range do not contain null
759
438k
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
760
424k
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
761
365
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
762
365
                             range._fixed_values.begin(), range._fixed_values.end(),
763
365
                             std::inserter(result_values, result_values.begin()));
764
423k
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
765
8
            IteratorType iter = _fixed_values.begin();
766
767
30
            while (iter != _fixed_values.end()) {
768
22
                if (range.is_in_range(*iter)) {
769
22
                    result_values.insert(*iter);
770
22
                }
771
22
                ++iter;
772
22
            }
773
423k
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
774
423k
            IteratorType iter = range._fixed_values.begin();
775
943k
            while (iter != range._fixed_values.end()) {
776
519k
                if (this->is_in_range(*iter)) {
777
518k
                    result_values.insert(*iter);
778
518k
                }
779
519k
                ++iter;
780
519k
            }
781
423k
        }
782
783
426k
        if (!result_values.empty()) {
784
426k
            _fixed_values = std::move(result_values);
785
426k
            _contain_null = false;
786
426k
            _high_value = TYPE_MIN;
787
426k
            _low_value = TYPE_MAX;
788
18.4E
        } else {
789
18.4E
            set_empty_value_range();
790
18.4E
        }
791
424k
    } else {
792
14.6k
        if (contain_null() && range.contain_null()) {
793
            // if both is_whole_range to keep the same, else set_contain_null
794
655
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
795
655
                set_contain_null(true);
796
655
            }
797
13.9k
        } else {
798
13.9k
            static_cast<void>(add_range(range._high_op, range._high_value));
799
13.9k
            static_cast<void>(add_range(range._low_op, range._low_value));
800
13.9k
        }
801
14.6k
    }
802
438k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE12intersectionERS2_
Line
Count
Source
746
120k
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
747
    // 1. clear if column type not match
748
120k
    if (_column_type != range._column_type) {
749
0
        set_empty_value_range();
750
0
    }
751
752
    // 2. clear if any range is empty
753
120k
    if (is_empty_value_range() || range.is_empty_value_range()) {
754
34
        set_empty_value_range();
755
34
    }
756
757
120k
    SetType result_values;
758
    // 3. fixed_value intersection, fixed value range do not contain null
759
120k
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
760
120k
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
761
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
762
0
                             range._fixed_values.begin(), range._fixed_values.end(),
763
0
                             std::inserter(result_values, result_values.begin()));
764
120k
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
765
0
            IteratorType iter = _fixed_values.begin();
766
767
0
            while (iter != _fixed_values.end()) {
768
0
                if (range.is_in_range(*iter)) {
769
0
                    result_values.insert(*iter);
770
0
                }
771
0
                ++iter;
772
0
            }
773
120k
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
774
120k
            IteratorType iter = range._fixed_values.begin();
775
240k
            while (iter != range._fixed_values.end()) {
776
120k
                if (this->is_in_range(*iter)) {
777
120k
                    result_values.insert(*iter);
778
120k
                }
779
120k
                ++iter;
780
120k
            }
781
120k
        }
782
783
120k
        if (!result_values.empty()) {
784
120k
            _fixed_values = std::move(result_values);
785
120k
            _contain_null = false;
786
120k
            _high_value = TYPE_MIN;
787
120k
            _low_value = TYPE_MAX;
788
18.4E
        } else {
789
18.4E
            set_empty_value_range();
790
18.4E
        }
791
120k
    } else {
792
939
        if (contain_null() && range.contain_null()) {
793
            // if both is_whole_range to keep the same, else set_contain_null
794
16
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
795
16
                set_contain_null(true);
796
16
            }
797
923
        } else {
798
923
            static_cast<void>(add_range(range._high_op, range._high_value));
799
923
            static_cast<void>(add_range(range._low_op, range._low_value));
800
923
        }
801
939
    }
802
120k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE12intersectionERS2_
Line
Count
Source
746
153
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
747
    // 1. clear if column type not match
748
153
    if (_column_type != range._column_type) {
749
0
        set_empty_value_range();
750
0
    }
751
752
    // 2. clear if any range is empty
753
153
    if (is_empty_value_range() || range.is_empty_value_range()) {
754
0
        set_empty_value_range();
755
0
    }
756
757
153
    SetType result_values;
758
    // 3. fixed_value intersection, fixed value range do not contain null
759
153
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
760
107
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
761
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
762
0
                             range._fixed_values.begin(), range._fixed_values.end(),
763
0
                             std::inserter(result_values, result_values.begin()));
764
107
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
765
0
            IteratorType iter = _fixed_values.begin();
766
767
0
            while (iter != _fixed_values.end()) {
768
0
                if (range.is_in_range(*iter)) {
769
0
                    result_values.insert(*iter);
770
0
                }
771
0
                ++iter;
772
0
            }
773
107
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
774
107
            IteratorType iter = range._fixed_values.begin();
775
285
            while (iter != range._fixed_values.end()) {
776
178
                if (this->is_in_range(*iter)) {
777
178
                    result_values.insert(*iter);
778
178
                }
779
178
                ++iter;
780
178
            }
781
107
        }
782
783
107
        if (!result_values.empty()) {
784
107
            _fixed_values = std::move(result_values);
785
107
            _contain_null = false;
786
107
            _high_value = TYPE_MIN;
787
107
            _low_value = TYPE_MAX;
788
107
        } else {
789
0
            set_empty_value_range();
790
0
        }
791
107
    } else {
792
46
        if (contain_null() && range.contain_null()) {
793
            // if both is_whole_range to keep the same, else set_contain_null
794
17
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
795
17
                set_contain_null(true);
796
17
            }
797
29
        } else {
798
29
            static_cast<void>(add_range(range._high_op, range._high_value));
799
29
            static_cast<void>(add_range(range._low_op, range._low_value));
800
29
        }
801
46
    }
802
153
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE12intersectionERS2_
Line
Count
Source
746
6.85k
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
747
    // 1. clear if column type not match
748
6.85k
    if (_column_type != range._column_type) {
749
0
        set_empty_value_range();
750
0
    }
751
752
    // 2. clear if any range is empty
753
6.85k
    if (is_empty_value_range() || range.is_empty_value_range()) {
754
119
        set_empty_value_range();
755
119
    }
756
757
6.85k
    SetType result_values;
758
    // 3. fixed_value intersection, fixed value range do not contain null
759
6.85k
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
760
6.02k
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
761
125
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
762
125
                             range._fixed_values.begin(), range._fixed_values.end(),
763
125
                             std::inserter(result_values, result_values.begin()));
764
5.89k
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
765
0
            IteratorType iter = _fixed_values.begin();
766
767
0
            while (iter != _fixed_values.end()) {
768
0
                if (range.is_in_range(*iter)) {
769
0
                    result_values.insert(*iter);
770
0
                }
771
0
                ++iter;
772
0
            }
773
5.90k
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
774
5.90k
            IteratorType iter = range._fixed_values.begin();
775
104k
            while (iter != range._fixed_values.end()) {
776
98.5k
                if (this->is_in_range(*iter)) {
777
96.5k
                    result_values.insert(*iter);
778
96.5k
                }
779
98.5k
                ++iter;
780
98.5k
            }
781
5.90k
        }
782
783
6.06k
        if (!result_values.empty()) {
784
6.06k
            _fixed_values = std::move(result_values);
785
6.06k
            _contain_null = false;
786
6.06k
            _high_value = TYPE_MIN;
787
6.06k
            _low_value = TYPE_MAX;
788
18.4E
        } else {
789
18.4E
            set_empty_value_range();
790
18.4E
        }
791
6.02k
    } else {
792
832
        if (contain_null() && range.contain_null()) {
793
            // if both is_whole_range to keep the same, else set_contain_null
794
154
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
795
154
                set_contain_null(true);
796
154
            }
797
678
        } else {
798
678
            static_cast<void>(add_range(range._high_op, range._high_value));
799
678
            static_cast<void>(add_range(range._low_op, range._low_value));
800
678
        }
801
832
    }
802
6.85k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE12intersectionERS2_
Line
Count
Source
746
12.0k
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
747
    // 1. clear if column type not match
748
12.0k
    if (_column_type != range._column_type) {
749
0
        set_empty_value_range();
750
0
    }
751
752
    // 2. clear if any range is empty
753
12.0k
    if (is_empty_value_range() || range.is_empty_value_range()) {
754
10.1k
        set_empty_value_range();
755
10.1k
    }
756
757
12.0k
    SetType result_values;
758
    // 3. fixed_value intersection, fixed value range do not contain null
759
12.0k
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
760
1.84k
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
761
43
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
762
43
                             range._fixed_values.begin(), range._fixed_values.end(),
763
43
                             std::inserter(result_values, result_values.begin()));
764
1.80k
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
765
8
            IteratorType iter = _fixed_values.begin();
766
767
30
            while (iter != _fixed_values.end()) {
768
22
                if (range.is_in_range(*iter)) {
769
22
                    result_values.insert(*iter);
770
22
                }
771
22
                ++iter;
772
22
            }
773
1.79k
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
774
1.79k
            IteratorType iter = range._fixed_values.begin();
775
4.56k
            while (iter != range._fixed_values.end()) {
776
2.76k
                if (this->is_in_range(*iter)) {
777
2.76k
                    result_values.insert(*iter);
778
2.76k
                }
779
2.76k
                ++iter;
780
2.76k
            }
781
1.79k
        }
782
783
1.85k
        if (!result_values.empty()) {
784
1.85k
            _fixed_values = std::move(result_values);
785
1.85k
            _contain_null = false;
786
1.85k
            _high_value = TYPE_MIN;
787
1.85k
            _low_value = TYPE_MAX;
788
18.4E
        } else {
789
18.4E
            set_empty_value_range();
790
18.4E
        }
791
10.1k
    } else {
792
10.1k
        if (contain_null() && range.contain_null()) {
793
            // if both is_whole_range to keep the same, else set_contain_null
794
18
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
795
18
                set_contain_null(true);
796
18
            }
797
10.1k
        } else {
798
10.1k
            static_cast<void>(add_range(range._high_op, range._high_value));
799
10.1k
            static_cast<void>(add_range(range._low_op, range._low_value));
800
10.1k
        }
801
10.1k
    }
802
12.0k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE12intersectionERS2_
Line
Count
Source
746
207
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
747
    // 1. clear if column type not match
748
207
    if (_column_type != range._column_type) {
749
0
        set_empty_value_range();
750
0
    }
751
752
    // 2. clear if any range is empty
753
207
    if (is_empty_value_range() || range.is_empty_value_range()) {
754
0
        set_empty_value_range();
755
0
    }
756
757
207
    SetType result_values;
758
    // 3. fixed_value intersection, fixed value range do not contain null
759
207
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
760
195
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
761
1
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
762
1
                             range._fixed_values.begin(), range._fixed_values.end(),
763
1
                             std::inserter(result_values, result_values.begin()));
764
194
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
765
0
            IteratorType iter = _fixed_values.begin();
766
767
0
            while (iter != _fixed_values.end()) {
768
0
                if (range.is_in_range(*iter)) {
769
0
                    result_values.insert(*iter);
770
0
                }
771
0
                ++iter;
772
0
            }
773
194
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
774
194
            IteratorType iter = range._fixed_values.begin();
775
395
            while (iter != range._fixed_values.end()) {
776
201
                if (this->is_in_range(*iter)) {
777
201
                    result_values.insert(*iter);
778
201
                }
779
201
                ++iter;
780
201
            }
781
194
        }
782
783
195
        if (!result_values.empty()) {
784
195
            _fixed_values = std::move(result_values);
785
195
            _contain_null = false;
786
195
            _high_value = TYPE_MIN;
787
195
            _low_value = TYPE_MAX;
788
195
        } else {
789
0
            set_empty_value_range();
790
0
        }
791
195
    } else {
792
12
        if (contain_null() && range.contain_null()) {
793
            // if both is_whole_range to keep the same, else set_contain_null
794
9
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
795
9
                set_contain_null(true);
796
9
            }
797
9
        } else {
798
3
            static_cast<void>(add_range(range._high_op, range._high_value));
799
3
            static_cast<void>(add_range(range._low_op, range._low_value));
800
3
        }
801
12
    }
802
207
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE12intersectionERS2_
Line
Count
Source
746
85
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
747
    // 1. clear if column type not match
748
85
    if (_column_type != range._column_type) {
749
0
        set_empty_value_range();
750
0
    }
751
752
    // 2. clear if any range is empty
753
85
    if (is_empty_value_range() || range.is_empty_value_range()) {
754
0
        set_empty_value_range();
755
0
    }
756
757
85
    SetType result_values;
758
    // 3. fixed_value intersection, fixed value range do not contain null
759
85
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
760
48
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
761
16
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
762
16
                             range._fixed_values.begin(), range._fixed_values.end(),
763
16
                             std::inserter(result_values, result_values.begin()));
764
32
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
765
0
            IteratorType iter = _fixed_values.begin();
766
767
0
            while (iter != _fixed_values.end()) {
768
0
                if (range.is_in_range(*iter)) {
769
0
                    result_values.insert(*iter);
770
0
                }
771
0
                ++iter;
772
0
            }
773
32
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
774
32
            IteratorType iter = range._fixed_values.begin();
775
76
            while (iter != range._fixed_values.end()) {
776
44
                if (this->is_in_range(*iter)) {
777
43
                    result_values.insert(*iter);
778
43
                }
779
44
                ++iter;
780
44
            }
781
32
        }
782
783
48
        if (!result_values.empty()) {
784
47
            _fixed_values = std::move(result_values);
785
47
            _contain_null = false;
786
47
            _high_value = TYPE_MIN;
787
47
            _low_value = TYPE_MAX;
788
47
        } else {
789
1
            set_empty_value_range();
790
1
        }
791
48
    } else {
792
37
        if (contain_null() && range.contain_null()) {
793
            // if both is_whole_range to keep the same, else set_contain_null
794
25
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
795
25
                set_contain_null(true);
796
25
            }
797
25
        } else {
798
12
            static_cast<void>(add_range(range._high_op, range._high_value));
799
12
            static_cast<void>(add_range(range._low_op, range._low_value));
800
12
        }
801
37
    }
802
85
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE12intersectionERS2_
Line
Count
Source
746
211
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
747
    // 1. clear if column type not match
748
211
    if (_column_type != range._column_type) {
749
0
        set_empty_value_range();
750
0
    }
751
752
    // 2. clear if any range is empty
753
211
    if (is_empty_value_range() || range.is_empty_value_range()) {
754
0
        set_empty_value_range();
755
0
    }
756
757
211
    SetType result_values;
758
    // 3. fixed_value intersection, fixed value range do not contain null
759
211
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
760
119
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
761
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
762
0
                             range._fixed_values.begin(), range._fixed_values.end(),
763
0
                             std::inserter(result_values, result_values.begin()));
764
119
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
765
0
            IteratorType iter = _fixed_values.begin();
766
767
0
            while (iter != _fixed_values.end()) {
768
0
                if (range.is_in_range(*iter)) {
769
0
                    result_values.insert(*iter);
770
0
                }
771
0
                ++iter;
772
0
            }
773
120
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
774
120
            IteratorType iter = range._fixed_values.begin();
775
285
            while (iter != range._fixed_values.end()) {
776
165
                if (this->is_in_range(*iter)) {
777
165
                    result_values.insert(*iter);
778
165
                }
779
165
                ++iter;
780
165
            }
781
120
        }
782
783
120
        if (!result_values.empty()) {
784
120
            _fixed_values = std::move(result_values);
785
120
            _contain_null = false;
786
120
            _high_value = TYPE_MIN;
787
120
            _low_value = TYPE_MAX;
788
18.4E
        } else {
789
18.4E
            set_empty_value_range();
790
18.4E
        }
791
119
    } else {
792
92
        if (contain_null() && range.contain_null()) {
793
            // if both is_whole_range to keep the same, else set_contain_null
794
37
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
795
37
                set_contain_null(true);
796
37
            }
797
55
        } else {
798
55
            static_cast<void>(add_range(range._high_op, range._high_value));
799
55
            static_cast<void>(add_range(range._low_op, range._low_value));
800
55
        }
801
92
    }
802
211
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE12intersectionERS2_
Line
Count
Source
746
29
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
747
    // 1. clear if column type not match
748
29
    if (_column_type != range._column_type) {
749
0
        set_empty_value_range();
750
0
    }
751
752
    // 2. clear if any range is empty
753
29
    if (is_empty_value_range() || range.is_empty_value_range()) {
754
0
        set_empty_value_range();
755
0
    }
756
757
29
    SetType result_values;
758
    // 3. fixed_value intersection, fixed value range do not contain null
759
29
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
760
25
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
761
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
762
0
                             range._fixed_values.begin(), range._fixed_values.end(),
763
0
                             std::inserter(result_values, result_values.begin()));
764
25
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
765
0
            IteratorType iter = _fixed_values.begin();
766
767
0
            while (iter != _fixed_values.end()) {
768
0
                if (range.is_in_range(*iter)) {
769
0
                    result_values.insert(*iter);
770
0
                }
771
0
                ++iter;
772
0
            }
773
25
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
774
25
            IteratorType iter = range._fixed_values.begin();
775
59
            while (iter != range._fixed_values.end()) {
776
34
                if (this->is_in_range(*iter)) {
777
34
                    result_values.insert(*iter);
778
34
                }
779
34
                ++iter;
780
34
            }
781
25
        }
782
783
26
        if (!result_values.empty()) {
784
26
            _fixed_values = std::move(result_values);
785
26
            _contain_null = false;
786
26
            _high_value = TYPE_MIN;
787
26
            _low_value = TYPE_MAX;
788
18.4E
        } else {
789
18.4E
            set_empty_value_range();
790
18.4E
        }
791
25
    } else {
792
4
        if (contain_null() && range.contain_null()) {
793
            // if both is_whole_range to keep the same, else set_contain_null
794
0
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
795
0
                set_contain_null(true);
796
0
            }
797
4
        } else {
798
4
            static_cast<void>(add_range(range._high_op, range._high_value));
799
4
            static_cast<void>(add_range(range._low_op, range._low_value));
800
4
        }
801
4
    }
802
29
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE12intersectionERS2_
Line
Count
Source
746
28
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
747
    // 1. clear if column type not match
748
28
    if (_column_type != range._column_type) {
749
0
        set_empty_value_range();
750
0
    }
751
752
    // 2. clear if any range is empty
753
28
    if (is_empty_value_range() || range.is_empty_value_range()) {
754
0
        set_empty_value_range();
755
0
    }
756
757
28
    SetType result_values;
758
    // 3. fixed_value intersection, fixed value range do not contain null
759
28
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
760
26
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
761
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
762
0
                             range._fixed_values.begin(), range._fixed_values.end(),
763
0
                             std::inserter(result_values, result_values.begin()));
764
26
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
765
0
            IteratorType iter = _fixed_values.begin();
766
767
0
            while (iter != _fixed_values.end()) {
768
0
                if (range.is_in_range(*iter)) {
769
0
                    result_values.insert(*iter);
770
0
                }
771
0
                ++iter;
772
0
            }
773
26
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
774
26
            IteratorType iter = range._fixed_values.begin();
775
61
            while (iter != range._fixed_values.end()) {
776
35
                if (this->is_in_range(*iter)) {
777
35
                    result_values.insert(*iter);
778
35
                }
779
35
                ++iter;
780
35
            }
781
26
        }
782
783
27
        if (!result_values.empty()) {
784
27
            _fixed_values = std::move(result_values);
785
27
            _contain_null = false;
786
27
            _high_value = TYPE_MIN;
787
27
            _low_value = TYPE_MAX;
788
18.4E
        } else {
789
18.4E
            set_empty_value_range();
790
18.4E
        }
791
26
    } else {
792
2
        if (contain_null() && range.contain_null()) {
793
            // if both is_whole_range to keep the same, else set_contain_null
794
0
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
795
0
                set_contain_null(true);
796
0
            }
797
2
        } else {
798
2
            static_cast<void>(add_range(range._high_op, range._high_value));
799
2
            static_cast<void>(add_range(range._low_op, range._low_value));
800
2
        }
801
2
    }
802
28
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE12intersectionERS2_
Line
Count
Source
746
384
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
747
    // 1. clear if column type not match
748
384
    if (_column_type != range._column_type) {
749
0
        set_empty_value_range();
750
0
    }
751
752
    // 2. clear if any range is empty
753
384
    if (is_empty_value_range() || range.is_empty_value_range()) {
754
0
        set_empty_value_range();
755
0
    }
756
757
384
    SetType result_values;
758
    // 3. fixed_value intersection, fixed value range do not contain null
759
384
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
760
348
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
761
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
762
0
                             range._fixed_values.begin(), range._fixed_values.end(),
763
0
                             std::inserter(result_values, result_values.begin()));
764
348
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
765
0
            IteratorType iter = _fixed_values.begin();
766
767
0
            while (iter != _fixed_values.end()) {
768
0
                if (range.is_in_range(*iter)) {
769
0
                    result_values.insert(*iter);
770
0
                }
771
0
                ++iter;
772
0
            }
773
348
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
774
348
            IteratorType iter = range._fixed_values.begin();
775
828
            while (iter != range._fixed_values.end()) {
776
484
                if (this->is_in_range(*iter)) {
777
484
                    result_values.insert(*iter);
778
484
                }
779
480
                ++iter;
780
480
            }
781
348
        }
782
783
356
        if (!result_values.empty()) {
784
356
            _fixed_values = std::move(result_values);
785
356
            _contain_null = false;
786
356
            _high_value = TYPE_MIN;
787
356
            _low_value = TYPE_MAX;
788
18.4E
        } else {
789
18.4E
            set_empty_value_range();
790
18.4E
        }
791
348
    } else {
792
36
        if (contain_null() && range.contain_null()) {
793
            // if both is_whole_range to keep the same, else set_contain_null
794
18
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
795
18
                set_contain_null(true);
796
18
            }
797
18
        } else {
798
18
            static_cast<void>(add_range(range._high_op, range._high_value));
799
18
            static_cast<void>(add_range(range._low_op, range._low_value));
800
18
        }
801
36
    }
802
384
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE12intersectionERS2_
Line
Count
Source
746
292k
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
747
    // 1. clear if column type not match
748
292k
    if (_column_type != range._column_type) {
749
0
        set_empty_value_range();
750
0
    }
751
752
    // 2. clear if any range is empty
753
292k
    if (is_empty_value_range() || range.is_empty_value_range()) {
754
9
        set_empty_value_range();
755
9
    }
756
757
292k
    SetType result_values;
758
    // 3. fixed_value intersection, fixed value range do not contain null
759
292k
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
760
291k
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
761
8
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
762
8
                             range._fixed_values.begin(), range._fixed_values.end(),
763
8
                             std::inserter(result_values, result_values.begin()));
764
291k
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
765
0
            IteratorType iter = _fixed_values.begin();
766
767
0
            while (iter != _fixed_values.end()) {
768
0
                if (range.is_in_range(*iter)) {
769
0
                    result_values.insert(*iter);
770
0
                }
771
0
                ++iter;
772
0
            }
773
291k
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
774
291k
            IteratorType iter = range._fixed_values.begin();
775
583k
            while (iter != range._fixed_values.end()) {
776
292k
                if (this->is_in_range(*iter)) {
777
292k
                    result_values.insert(*iter);
778
292k
                }
779
292k
                ++iter;
780
292k
            }
781
291k
        }
782
783
292k
        if (!result_values.empty()) {
784
292k
            _fixed_values = std::move(result_values);
785
292k
            _contain_null = false;
786
292k
            _high_value = TYPE_MIN;
787
292k
            _low_value = TYPE_MAX;
788
18.4E
        } else {
789
18.4E
            set_empty_value_range();
790
18.4E
        }
791
291k
    } else {
792
905
        if (contain_null() && range.contain_null()) {
793
            // if both is_whole_range to keep the same, else set_contain_null
794
157
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
795
157
                set_contain_null(true);
796
157
            }
797
750
        } else {
798
750
            static_cast<void>(add_range(range._high_op, range._high_value));
799
750
            static_cast<void>(add_range(range._low_op, range._low_value));
800
750
        }
801
905
    }
802
292k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE12intersectionERS2_
Line
Count
Source
746
2.48k
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
747
    // 1. clear if column type not match
748
2.48k
    if (_column_type != range._column_type) {
749
0
        set_empty_value_range();
750
0
    }
751
752
    // 2. clear if any range is empty
753
2.48k
    if (is_empty_value_range() || range.is_empty_value_range()) {
754
0
        set_empty_value_range();
755
0
    }
756
757
2.48k
    SetType result_values;
758
    // 3. fixed_value intersection, fixed value range do not contain null
759
2.48k
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
760
1.33k
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
761
40
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
762
40
                             range._fixed_values.begin(), range._fixed_values.end(),
763
40
                             std::inserter(result_values, result_values.begin()));
764
1.29k
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
765
0
            IteratorType iter = _fixed_values.begin();
766
767
0
            while (iter != _fixed_values.end()) {
768
0
                if (range.is_in_range(*iter)) {
769
0
                    result_values.insert(*iter);
770
0
                }
771
0
                ++iter;
772
0
            }
773
1.29k
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
774
1.29k
            IteratorType iter = range._fixed_values.begin();
775
2.76k
            while (iter != range._fixed_values.end()) {
776
1.47k
                if (this->is_in_range(*iter)) {
777
1.47k
                    result_values.insert(*iter);
778
1.47k
                }
779
1.46k
                ++iter;
780
1.46k
            }
781
1.29k
        }
782
783
1.35k
        if (!result_values.empty()) {
784
1.35k
            _fixed_values = std::move(result_values);
785
1.35k
            _contain_null = false;
786
1.35k
            _high_value = TYPE_MIN;
787
1.35k
            _low_value = TYPE_MAX;
788
18.4E
        } else {
789
18.4E
            set_empty_value_range();
790
18.4E
        }
791
1.33k
    } else {
792
1.14k
        if (contain_null() && range.contain_null()) {
793
            // if both is_whole_range to keep the same, else set_contain_null
794
96
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
795
96
                set_contain_null(true);
796
96
            }
797
1.05k
        } else {
798
1.05k
            static_cast<void>(add_range(range._high_op, range._high_value));
799
1.05k
            static_cast<void>(add_range(range._low_op, range._low_value));
800
1.05k
        }
801
1.14k
    }
802
2.48k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE12intersectionERS2_
Line
Count
Source
746
31
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
747
    // 1. clear if column type not match
748
31
    if (_column_type != range._column_type) {
749
0
        set_empty_value_range();
750
0
    }
751
752
    // 2. clear if any range is empty
753
31
    if (is_empty_value_range() || range.is_empty_value_range()) {
754
0
        set_empty_value_range();
755
0
    }
756
757
31
    SetType result_values;
758
    // 3. fixed_value intersection, fixed value range do not contain null
759
31
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
760
31
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
761
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
762
0
                             range._fixed_values.begin(), range._fixed_values.end(),
763
0
                             std::inserter(result_values, result_values.begin()));
764
31
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
765
0
            IteratorType iter = _fixed_values.begin();
766
767
0
            while (iter != _fixed_values.end()) {
768
0
                if (range.is_in_range(*iter)) {
769
0
                    result_values.insert(*iter);
770
0
                }
771
0
                ++iter;
772
0
            }
773
31
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
774
31
            IteratorType iter = range._fixed_values.begin();
775
74
            while (iter != range._fixed_values.end()) {
776
43
                if (this->is_in_range(*iter)) {
777
43
                    result_values.insert(*iter);
778
43
                }
779
43
                ++iter;
780
43
            }
781
31
        }
782
783
31
        if (!result_values.empty()) {
784
31
            _fixed_values = std::move(result_values);
785
31
            _contain_null = false;
786
31
            _high_value = TYPE_MIN;
787
31
            _low_value = TYPE_MAX;
788
31
        } else {
789
0
            set_empty_value_range();
790
0
        }
791
31
    } else {
792
0
        if (contain_null() && range.contain_null()) {
793
            // if both is_whole_range to keep the same, else set_contain_null
794
0
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
795
0
                set_contain_null(true);
796
0
            }
797
0
        } else {
798
0
            static_cast<void>(add_range(range._high_op, range._high_value));
799
0
            static_cast<void>(add_range(range._low_op, range._low_value));
800
0
        }
801
0
    }
802
31
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE12intersectionERS2_
Line
Count
Source
746
1.10k
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
747
    // 1. clear if column type not match
748
1.10k
    if (_column_type != range._column_type) {
749
0
        set_empty_value_range();
750
0
    }
751
752
    // 2. clear if any range is empty
753
1.10k
    if (is_empty_value_range() || range.is_empty_value_range()) {
754
11
        set_empty_value_range();
755
11
    }
756
757
1.10k
    SetType result_values;
758
    // 3. fixed_value intersection, fixed value range do not contain null
759
1.10k
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
760
1.03k
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
761
18
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
762
18
                             range._fixed_values.begin(), range._fixed_values.end(),
763
18
                             std::inserter(result_values, result_values.begin()));
764
1.01k
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
765
0
            IteratorType iter = _fixed_values.begin();
766
767
0
            while (iter != _fixed_values.end()) {
768
0
                if (range.is_in_range(*iter)) {
769
0
                    result_values.insert(*iter);
770
0
                }
771
0
                ++iter;
772
0
            }
773
1.02k
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
774
1.02k
            IteratorType iter = range._fixed_values.begin();
775
2.24k
            while (iter != range._fixed_values.end()) {
776
1.22k
                if (this->is_in_range(*iter)) {
777
1.22k
                    result_values.insert(*iter);
778
1.22k
                }
779
1.22k
                ++iter;
780
1.22k
            }
781
1.02k
        }
782
783
1.04k
        if (!result_values.empty()) {
784
1.04k
            _fixed_values = std::move(result_values);
785
1.04k
            _contain_null = false;
786
1.04k
            _high_value = TYPE_MIN;
787
1.04k
            _low_value = TYPE_MAX;
788
18.4E
        } else {
789
18.4E
            set_empty_value_range();
790
18.4E
        }
791
1.03k
    } else {
792
73
        if (contain_null() && range.contain_null()) {
793
            // if both is_whole_range to keep the same, else set_contain_null
794
34
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
795
32
                set_contain_null(true);
796
32
            }
797
42
        } else {
798
42
            static_cast<void>(add_range(range._high_op, range._high_value));
799
42
            static_cast<void>(add_range(range._low_op, range._low_value));
800
42
        }
801
73
    }
802
1.10k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE12intersectionERS2_
Line
Count
Source
746
47
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
747
    // 1. clear if column type not match
748
47
    if (_column_type != range._column_type) {
749
0
        set_empty_value_range();
750
0
    }
751
752
    // 2. clear if any range is empty
753
47
    if (is_empty_value_range() || range.is_empty_value_range()) {
754
0
        set_empty_value_range();
755
0
    }
756
757
47
    SetType result_values;
758
    // 3. fixed_value intersection, fixed value range do not contain null
759
47
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
760
47
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
761
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
762
0
                             range._fixed_values.begin(), range._fixed_values.end(),
763
0
                             std::inserter(result_values, result_values.begin()));
764
47
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
765
0
            IteratorType iter = _fixed_values.begin();
766
767
0
            while (iter != _fixed_values.end()) {
768
0
                if (range.is_in_range(*iter)) {
769
0
                    result_values.insert(*iter);
770
0
                }
771
0
                ++iter;
772
0
            }
773
47
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
774
47
            IteratorType iter = range._fixed_values.begin();
775
148
            while (iter != range._fixed_values.end()) {
776
101
                if (this->is_in_range(*iter)) {
777
101
                    result_values.insert(*iter);
778
101
                }
779
101
                ++iter;
780
101
            }
781
47
        }
782
783
47
        if (!result_values.empty()) {
784
47
            _fixed_values = std::move(result_values);
785
47
            _contain_null = false;
786
47
            _high_value = TYPE_MIN;
787
47
            _low_value = TYPE_MAX;
788
47
        } else {
789
0
            set_empty_value_range();
790
0
        }
791
47
    } else {
792
0
        if (contain_null() && range.contain_null()) {
793
            // if both is_whole_range to keep the same, else set_contain_null
794
0
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
795
0
                set_contain_null(true);
796
0
            }
797
0
        } else {
798
0
            static_cast<void>(add_range(range._high_op, range._high_value));
799
0
            static_cast<void>(add_range(range._low_op, range._low_value));
800
0
        }
801
0
    }
802
47
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE12intersectionERS2_
Line
Count
Source
746
644
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
747
    // 1. clear if column type not match
748
644
    if (_column_type != range._column_type) {
749
0
        set_empty_value_range();
750
0
    }
751
752
    // 2. clear if any range is empty
753
644
    if (is_empty_value_range() || range.is_empty_value_range()) {
754
0
        set_empty_value_range();
755
0
    }
756
757
644
    SetType result_values;
758
    // 3. fixed_value intersection, fixed value range do not contain null
759
644
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
760
584
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
761
48
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
762
48
                             range._fixed_values.begin(), range._fixed_values.end(),
763
48
                             std::inserter(result_values, result_values.begin()));
764
536
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
765
0
            IteratorType iter = _fixed_values.begin();
766
767
0
            while (iter != _fixed_values.end()) {
768
0
                if (range.is_in_range(*iter)) {
769
0
                    result_values.insert(*iter);
770
0
                }
771
0
                ++iter;
772
0
            }
773
537
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
774
537
            IteratorType iter = range._fixed_values.begin();
775
1.14k
            while (iter != range._fixed_values.end()) {
776
609
                if (this->is_in_range(*iter)) {
777
609
                    result_values.insert(*iter);
778
609
                }
779
607
                ++iter;
780
607
            }
781
537
        }
782
783
593
        if (!result_values.empty()) {
784
593
            _fixed_values = std::move(result_values);
785
593
            _contain_null = false;
786
593
            _high_value = TYPE_MIN;
787
593
            _low_value = TYPE_MAX;
788
18.4E
        } else {
789
18.4E
            set_empty_value_range();
790
18.4E
        }
791
584
    } else {
792
60
        if (contain_null() && range.contain_null()) {
793
            // if both is_whole_range to keep the same, else set_contain_null
794
19
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
795
19
                set_contain_null(true);
796
19
            }
797
43
        } else {
798
43
            static_cast<void>(add_range(range._high_op, range._high_value));
799
43
            static_cast<void>(add_range(range._low_op, range._low_value));
800
43
        }
801
60
    }
802
644
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE12intersectionERS2_
Line
Count
Source
746
182
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
747
    // 1. clear if column type not match
748
182
    if (_column_type != range._column_type) {
749
0
        set_empty_value_range();
750
0
    }
751
752
    // 2. clear if any range is empty
753
182
    if (is_empty_value_range() || range.is_empty_value_range()) {
754
0
        set_empty_value_range();
755
0
    }
756
757
182
    SetType result_values;
758
    // 3. fixed_value intersection, fixed value range do not contain null
759
182
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
760
115
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
761
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
762
0
                             range._fixed_values.begin(), range._fixed_values.end(),
763
0
                             std::inserter(result_values, result_values.begin()));
764
115
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
765
0
            IteratorType iter = _fixed_values.begin();
766
767
0
            while (iter != _fixed_values.end()) {
768
0
                if (range.is_in_range(*iter)) {
769
0
                    result_values.insert(*iter);
770
0
                }
771
0
                ++iter;
772
0
            }
773
115
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
774
115
            IteratorType iter = range._fixed_values.begin();
775
285
            while (iter != range._fixed_values.end()) {
776
170
                if (this->is_in_range(*iter)) {
777
170
                    result_values.insert(*iter);
778
170
                }
779
170
                ++iter;
780
170
            }
781
115
        }
782
783
115
        if (!result_values.empty()) {
784
115
            _fixed_values = std::move(result_values);
785
115
            _contain_null = false;
786
115
            _high_value = TYPE_MIN;
787
115
            _low_value = TYPE_MAX;
788
115
        } else {
789
0
            set_empty_value_range();
790
0
        }
791
115
    } else {
792
67
        if (contain_null() && range.contain_null()) {
793
            // if both is_whole_range to keep the same, else set_contain_null
794
9
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
795
9
                set_contain_null(true);
796
9
            }
797
58
        } else {
798
58
            static_cast<void>(add_range(range._high_op, range._high_value));
799
58
            static_cast<void>(add_range(range._low_op, range._low_value));
800
58
        }
801
67
    }
802
182
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE12intersectionERS2_
Line
Count
Source
746
5
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
747
    // 1. clear if column type not match
748
5
    if (_column_type != range._column_type) {
749
0
        set_empty_value_range();
750
0
    }
751
752
    // 2. clear if any range is empty
753
5
    if (is_empty_value_range() || range.is_empty_value_range()) {
754
0
        set_empty_value_range();
755
0
    }
756
757
5
    SetType result_values;
758
    // 3. fixed_value intersection, fixed value range do not contain null
759
5
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
760
5
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
761
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
762
0
                             range._fixed_values.begin(), range._fixed_values.end(),
763
0
                             std::inserter(result_values, result_values.begin()));
764
5
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
765
0
            IteratorType iter = _fixed_values.begin();
766
767
0
            while (iter != _fixed_values.end()) {
768
0
                if (range.is_in_range(*iter)) {
769
0
                    result_values.insert(*iter);
770
0
                }
771
0
                ++iter;
772
0
            }
773
5
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
774
5
            IteratorType iter = range._fixed_values.begin();
775
18
            while (iter != range._fixed_values.end()) {
776
13
                if (this->is_in_range(*iter)) {
777
13
                    result_values.insert(*iter);
778
13
                }
779
13
                ++iter;
780
13
            }
781
5
        }
782
783
5
        if (!result_values.empty()) {
784
5
            _fixed_values = std::move(result_values);
785
5
            _contain_null = false;
786
5
            _high_value = TYPE_MIN;
787
5
            _low_value = TYPE_MAX;
788
5
        } else {
789
0
            set_empty_value_range();
790
0
        }
791
5
    } else {
792
0
        if (contain_null() && range.contain_null()) {
793
            // if both is_whole_range to keep the same, else set_contain_null
794
0
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
795
0
                set_contain_null(true);
796
0
            }
797
0
        } else {
798
0
            static_cast<void>(add_range(range._high_op, range._high_value));
799
0
            static_cast<void>(add_range(range._low_op, range._low_value));
800
0
        }
801
0
    }
802
5
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE12intersectionERS2_
Line
Count
Source
746
376
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
747
    // 1. clear if column type not match
748
376
    if (_column_type != range._column_type) {
749
0
        set_empty_value_range();
750
0
    }
751
752
    // 2. clear if any range is empty
753
377
    if (is_empty_value_range() || range.is_empty_value_range()) {
754
0
        set_empty_value_range();
755
0
    }
756
757
376
    SetType result_values;
758
    // 3. fixed_value intersection, fixed value range do not contain null
759
376
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
760
347
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
761
16
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
762
16
                             range._fixed_values.begin(), range._fixed_values.end(),
763
16
                             std::inserter(result_values, result_values.begin()));
764
331
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
765
0
            IteratorType iter = _fixed_values.begin();
766
767
0
            while (iter != _fixed_values.end()) {
768
0
                if (range.is_in_range(*iter)) {
769
0
                    result_values.insert(*iter);
770
0
                }
771
0
                ++iter;
772
0
            }
773
331
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
774
331
            IteratorType iter = range._fixed_values.begin();
775
673
            while (iter != range._fixed_values.end()) {
776
342
                if (this->is_in_range(*iter)) {
777
342
                    result_values.insert(*iter);
778
342
                }
779
342
                ++iter;
780
342
            }
781
331
        }
782
783
347
        if (!result_values.empty()) {
784
347
            _fixed_values = std::move(result_values);
785
347
            _contain_null = false;
786
347
            _high_value = TYPE_MIN;
787
347
            _low_value = TYPE_MAX;
788
347
        } else {
789
0
            set_empty_value_range();
790
0
        }
791
347
    } else {
792
29
        if (contain_null() && range.contain_null()) {
793
            // if both is_whole_range to keep the same, else set_contain_null
794
23
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
795
23
                set_contain_null(true);
796
23
            }
797
22
        } else {
798
7
            static_cast<void>(add_range(range._high_op, range._high_value));
799
7
            static_cast<void>(add_range(range._low_op, range._low_value));
800
7
        }
801
29
    }
802
376
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE12intersectionERS2_
Line
Count
Source
746
68
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
747
    // 1. clear if column type not match
748
68
    if (_column_type != range._column_type) {
749
0
        set_empty_value_range();
750
0
    }
751
752
    // 2. clear if any range is empty
753
69
    if (is_empty_value_range() || range.is_empty_value_range()) {
754
10
        set_empty_value_range();
755
10
    }
756
757
68
    SetType result_values;
758
    // 3. fixed_value intersection, fixed value range do not contain null
759
68
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
760
45
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
761
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
762
0
                             range._fixed_values.begin(), range._fixed_values.end(),
763
0
                             std::inserter(result_values, result_values.begin()));
764
45
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
765
0
            IteratorType iter = _fixed_values.begin();
766
767
0
            while (iter != _fixed_values.end()) {
768
0
                if (range.is_in_range(*iter)) {
769
0
                    result_values.insert(*iter);
770
0
                }
771
0
                ++iter;
772
0
            }
773
45
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
774
45
            IteratorType iter = range._fixed_values.begin();
775
98
            while (iter != range._fixed_values.end()) {
776
53
                if (this->is_in_range(*iter)) {
777
53
                    result_values.insert(*iter);
778
53
                }
779
53
                ++iter;
780
53
            }
781
45
        }
782
783
45
        if (!result_values.empty()) {
784
45
            _fixed_values = std::move(result_values);
785
45
            _contain_null = false;
786
45
            _high_value = TYPE_MIN;
787
45
            _low_value = TYPE_MAX;
788
45
        } else {
789
0
            set_empty_value_range();
790
0
        }
791
45
    } else {
792
23
        if (contain_null() && range.contain_null()) {
793
            // if both is_whole_range to keep the same, else set_contain_null
794
4
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
795
4
                set_contain_null(true);
796
4
            }
797
19
        } else {
798
19
            static_cast<void>(add_range(range._high_op, range._high_value));
799
19
            static_cast<void>(add_range(range._low_op, range._low_value));
800
19
        }
801
23
    }
802
68
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE12intersectionERS2_
Line
Count
Source
746
350
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
747
    // 1. clear if column type not match
748
350
    if (_column_type != range._column_type) {
749
0
        set_empty_value_range();
750
0
    }
751
752
    // 2. clear if any range is empty
753
350
    if (is_empty_value_range() || range.is_empty_value_range()) {
754
0
        set_empty_value_range();
755
0
    }
756
757
350
    SetType result_values;
758
    // 3. fixed_value intersection, fixed value range do not contain null
759
350
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
760
214
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
761
50
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
762
50
                             range._fixed_values.begin(), range._fixed_values.end(),
763
50
                             std::inserter(result_values, result_values.begin()));
764
164
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
765
0
            IteratorType iter = _fixed_values.begin();
766
767
0
            while (iter != _fixed_values.end()) {
768
0
                if (range.is_in_range(*iter)) {
769
0
                    result_values.insert(*iter);
770
0
                }
771
0
                ++iter;
772
0
            }
773
164
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
774
164
            IteratorType iter = range._fixed_values.begin();
775
392
            while (iter != range._fixed_values.end()) {
776
230
                if (this->is_in_range(*iter)) {
777
230
                    result_values.insert(*iter);
778
230
                }
779
228
                ++iter;
780
228
            }
781
164
        }
782
783
216
        if (!result_values.empty()) {
784
216
            _fixed_values = std::move(result_values);
785
216
            _contain_null = false;
786
216
            _high_value = TYPE_MIN;
787
216
            _low_value = TYPE_MAX;
788
18.4E
        } else {
789
18.4E
            set_empty_value_range();
790
18.4E
        }
791
214
    } else {
792
136
        if (contain_null() && range.contain_null()) {
793
            // if both is_whole_range to keep the same, else set_contain_null
794
20
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
795
20
                set_contain_null(true);
796
20
            }
797
116
        } else {
798
116
            static_cast<void>(add_range(range._high_op, range._high_value));
799
116
            static_cast<void>(add_range(range._low_op, range._low_value));
800
116
        }
801
136
    }
802
350
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE12intersectionERS2_
Line
Count
Source
746
188
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
747
    // 1. clear if column type not match
748
188
    if (_column_type != range._column_type) {
749
0
        set_empty_value_range();
750
0
    }
751
752
    // 2. clear if any range is empty
753
188
    if (is_empty_value_range() || range.is_empty_value_range()) {
754
0
        set_empty_value_range();
755
0
    }
756
757
188
    SetType result_values;
758
    // 3. fixed_value intersection, fixed value range do not contain null
759
188
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
760
183
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
761
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
762
0
                             range._fixed_values.begin(), range._fixed_values.end(),
763
0
                             std::inserter(result_values, result_values.begin()));
764
183
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
765
0
            IteratorType iter = _fixed_values.begin();
766
767
0
            while (iter != _fixed_values.end()) {
768
0
                if (range.is_in_range(*iter)) {
769
0
                    result_values.insert(*iter);
770
0
                }
771
0
                ++iter;
772
0
            }
773
183
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
774
183
            IteratorType iter = range._fixed_values.begin();
775
374
            while (iter != range._fixed_values.end()) {
776
191
                if (this->is_in_range(*iter)) {
777
191
                    result_values.insert(*iter);
778
191
                }
779
191
                ++iter;
780
191
            }
781
183
        }
782
783
184
        if (!result_values.empty()) {
784
184
            _fixed_values = std::move(result_values);
785
184
            _contain_null = false;
786
184
            _high_value = TYPE_MIN;
787
184
            _low_value = TYPE_MAX;
788
18.4E
        } else {
789
18.4E
            set_empty_value_range();
790
18.4E
        }
791
183
    } else {
792
5
        if (contain_null() && range.contain_null()) {
793
            // if both is_whole_range to keep the same, else set_contain_null
794
0
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
795
0
                set_contain_null(true);
796
0
            }
797
5
        } else {
798
5
            static_cast<void>(add_range(range._high_op, range._high_value));
799
5
            static_cast<void>(add_range(range._low_op, range._low_value));
800
5
        }
801
5
    }
802
188
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE12intersectionERS2_
Line
Count
Source
746
93
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
747
    // 1. clear if column type not match
748
93
    if (_column_type != range._column_type) {
749
0
        set_empty_value_range();
750
0
    }
751
752
    // 2. clear if any range is empty
753
93
    if (is_empty_value_range() || range.is_empty_value_range()) {
754
0
        set_empty_value_range();
755
0
    }
756
757
93
    SetType result_values;
758
    // 3. fixed_value intersection, fixed value range do not contain null
759
93
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
760
73
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
761
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
762
0
                             range._fixed_values.begin(), range._fixed_values.end(),
763
0
                             std::inserter(result_values, result_values.begin()));
764
73
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
765
0
            IteratorType iter = _fixed_values.begin();
766
767
0
            while (iter != _fixed_values.end()) {
768
0
                if (range.is_in_range(*iter)) {
769
0
                    result_values.insert(*iter);
770
0
                }
771
0
                ++iter;
772
0
            }
773
73
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
774
73
            IteratorType iter = range._fixed_values.begin();
775
152
            while (iter != range._fixed_values.end()) {
776
81
                if (this->is_in_range(*iter)) {
777
81
                    result_values.insert(*iter);
778
81
                }
779
79
                ++iter;
780
79
            }
781
73
        }
782
783
76
        if (!result_values.empty()) {
784
76
            _fixed_values = std::move(result_values);
785
76
            _contain_null = false;
786
76
            _high_value = TYPE_MIN;
787
76
            _low_value = TYPE_MAX;
788
18.4E
        } else {
789
18.4E
            set_empty_value_range();
790
18.4E
        }
791
73
    } else {
792
20
        if (contain_null() && range.contain_null()) {
793
            // if both is_whole_range to keep the same, else set_contain_null
794
1
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
795
1
                set_contain_null(true);
796
1
            }
797
19
        } else {
798
19
            static_cast<void>(add_range(range._high_op, range._high_value));
799
19
            static_cast<void>(add_range(range._low_op, range._low_value));
800
19
        }
801
20
    }
802
93
}
803
804
/// Extend the accumulated scan key pairs (_begin_scan_keys / _end_scan_keys) by appending
805
/// one more key column's ColumnValueRange.
806
///
807
/// Called once per key column in schema order by _build_key_ranges_and_filters().
808
/// The function handles two kinds of ColumnValueRange:
809
///   (A) Fixed values  — from IN / = predicates  (begin == end for each value, point lookup)
810
///   (B) Scope range   — from > / >= / < / <= predicates  (begin = min, end = max)
811
///
812
/// ======== Example 1: Two fixed-value columns (IN + =) ========
813
/// Table t(k1 INT, k2 INT, v INT), key columns = (k1, k2).
814
/// WHERE k1 IN (1, 2) AND k2 = 10
815
///
816
///   Call 1: extend_scan_key(k1's range {fixed_values={1,2}})
817
///     _begin_scan_keys was empty, so create one pair per fixed value:
818
///       _begin = [(1), (2)]    _end = [(1), (2)]    include=[true, true]
819
///
820
///   Call 2: extend_scan_key(k2's range {fixed_values={10}})
821
///     _begin is non-empty, so do Cartesian product (existing keys × new fixed values):
822
///       _begin = [(1,10), (2,10)]    _end = [(1,10), (2,10)]    include=[true, true]
823
///
824
/// ======== Example 2: Fixed + range (IN + between) ========
825
/// WHERE k1 IN (1, 2) AND k2 >= 5 AND k2 < 10
826
///
827
///   Call 1: extend_scan_key(k1's range {fixed_values={1,2}})
828
///       _begin = [(1), (2)]    _end = [(1), (2)]
829
///
830
///   Call 2: extend_scan_key(k2's range {scope [5, 10)})
831
///     k2 is a scope range, so append min=5 to all begin keys, max=10 to all end keys:
832
///       _begin = [(1,5), (2,5)]    _end = [(1,10), (2,10)]
833
///       _begin_include = true (>=)    _end_include = false (<)
834
///     Set _has_range_value = true → no further columns can be appended.
835
///
836
/// ======== Example 3: Single range column ========
837
/// WHERE k1 >= 100 AND k1 <= 200
838
///
839
///   Call 1: extend_scan_key(k1's range {scope [100, 200]})
840
///     _begin was empty, so create one pair:
841
///       _begin = [(100)]    _end = [(200)]    include=[true, true]
842
///     Set _has_range_value = true.
843
///
844
/// ======== Example 4: Too many fixed values (exceeds max_scan_key_num) ========
845
/// WHERE k1 IN (1, 2, ..., 10000) — exceeds limit
846
///
847
///   If is_range_value_convertible(): convert fixed set {1..10000} to scope [1, 10000],
848
///   then extend as a range (same as Example 3), and set *exact_value = false
849
///   (the predicate must be kept for residual filtering).
850
///
851
///   If NOT convertible (e.g. BOOLEAN/NULL type): set *should_break = true, stop extending.
852
///
853
/// ======== Example 5: Range splitting (convert_to_avg_range_value) ========
854
/// WHERE k1 >= 1 AND k1 <= 100, with max_scan_key_num = 4
855
/// If k1 is an integer type that supports splitting:
856
///   convert_to_close_range: adjust to closed range [1, 100]
857
///   convert_to_avg_range_value: split into ~4 sub-ranges:
858
///       _begin = [(1), (26), (51), (76)]    _end = [(25), (50), (75), (100)]
859
///   Set _has_range_value = true.
860
///
861
/// @param range           [in/out] The next key column's ColumnValueRange (may be mutated
862
///                                  if fixed values must be converted to a range).
863
/// @param max_scan_key_num [in]    Upper limit on total number of scan key pairs.
864
/// @param exact_value      [out]   Set to true if the column's predicate is fully captured
865
///                                  by scan keys (can be erased from residual filters).
866
/// @param eos              [out]   Set to true if the range is provably empty.
867
/// @param should_break     [out]   Set to true if extending must stop (un-convertible overflow).
868
template <PrimitiveType primitive_type>
869
Status OlapScanKeys::extend_scan_key(ColumnValueRange<primitive_type>& range,
870
                                     int32_t max_scan_key_num, bool* exact_value, bool* eos,
871
519k
                                     bool* should_break) {
872
519k
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
873
874
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
875
    //    clear all accumulated keys — no rows can match.
876
519k
    if (range.is_empty_value_range()) {
877
0
        _begin_scan_keys.clear();
878
0
        _end_scan_keys.clear();
879
0
        return Status::OK();
880
0
    }
881
882
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
883
    //    because the begin/end keys would have different semantics per pair.
884
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
885
519k
    if (_has_range_value) {
886
0
        return Status::OK();
887
0
    }
888
889
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
890
    //    Cartesian product would be too large.
891
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
892
    //      set *exact_value = false (keep predicate as residual filter).
893
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
894
519k
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
895
519k
    if (range.is_fixed_value_range()) {
896
288k
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
897
59
            if (range.is_range_value_convertible()) {
898
58
                range.convert_to_range_value();
899
58
                *exact_value = false;
900
58
            } else {
901
1
                *should_break = true;
902
1
                return Status::OK();
903
1
            }
904
59
        }
905
288k
    } else {
906
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
907
        //    range on a splittable integer type, try to split [low, high] into multiple
908
        //    sub-ranges for parallel / pipelined scanning.
909
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
910
231k
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
911
231k
            !range.is_reject_split_type()) {
912
111k
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
913
111k
                                                 _end_include);
914
915
111k
            if (!(*eos) &&
916
111k
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
917
111k
                                                 _end_include, max_scan_key_num)) {
918
109k
                _has_range_value = true;
919
109k
            }
920
111k
            return Status::OK();
921
111k
        }
922
231k
    }
923
924
    // ====================================================================
925
    // 5. Actually extend scan keys with this column's values.
926
    // ====================================================================
927
928
408k
    if (range.is_fixed_value_range()) {
929
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
930
287k
        if (_begin_scan_keys.empty()) {
931
            // First column: create one key pair per fixed value.
932
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
933
98.3k
            auto fixed_value_set = range.get_fixed_value_set();
934
98.3k
            ConstIterator iter = fixed_value_set.begin();
935
936
197k
            for (; iter != fixed_value_set.end(); ++iter) {
937
99.5k
                _begin_scan_keys.emplace_back();
938
99.5k
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
99.5k
                _end_scan_keys.emplace_back();
940
99.5k
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
941
99.5k
            }
942
943
98.3k
            if (range.contain_null()) {
944
0
                _begin_scan_keys.emplace_back();
945
0
                _begin_scan_keys.back().add_null();
946
0
                _end_scan_keys.emplace_back();
947
0
                _end_scan_keys.back().add_null();
948
0
            }
949
189k
        } else {
950
            // Subsequent column: Cartesian product of existing keys × new fixed values.
951
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
952
            //     → [(1,10),(1,20),(2,10),(2,20)]
953
189k
            auto fixed_value_set = range.get_fixed_value_set();
954
189k
            size_t original_key_range_size = _begin_scan_keys.size();
955
956
379k
            for (int i = 0; i < original_key_range_size; ++i) {
957
189k
                OlapTuple start_base_key_range = _begin_scan_keys[i];
958
189k
                OlapTuple end_base_key_range = _end_scan_keys[i];
959
960
189k
                ConstIterator iter = fixed_value_set.begin();
961
962
379k
                for (; iter != fixed_value_set.end(); ++iter) {
963
                    // Reuse i-th slot for the first value, append new slots for the rest.
964
190k
                    if (iter == fixed_value_set.begin()) {
965
189k
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
966
189k
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
967
189k
                    } else {
968
284
                        _begin_scan_keys.push_back(start_base_key_range);
969
284
                        _begin_scan_keys.back().add_field(
970
284
                                Field::create_field<primitive_type>(*iter));
971
284
                        _end_scan_keys.push_back(end_base_key_range);
972
284
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
973
284
                    }
974
190k
                }
975
976
189k
                if (range.contain_null()) {
977
0
                    _begin_scan_keys.push_back(start_base_key_range);
978
0
                    _begin_scan_keys.back().add_null();
979
0
                    _end_scan_keys.push_back(end_base_key_range);
980
0
                    _end_scan_keys.back().add_null();
981
0
                }
982
189k
            }
983
189k
        }
984
985
        // Fixed values are always closed intervals (begin == end, point lookup).
986
287k
        _begin_include = true;
987
287k
        _end_include = true;
988
287k
    } else {
989
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
990
        // After this, no more columns can be appended (_has_range_value = true),
991
        // because the range semantics only apply to the last appended column.
992
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
993
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
994
        //     → begin_include=true, end_include=false
995
120k
        _has_range_value = true;
996
997
        // Special case: max < min means the range itself is empty,
998
        // but contain_null() is true, so only null values match this column.
999
120k
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
1000
19
            CHECK(range.contain_null());
1001
19
            if (_begin_scan_keys.empty()) {
1002
19
                _begin_scan_keys.emplace_back();
1003
19
                _begin_scan_keys.back().add_null();
1004
19
                _end_scan_keys.emplace_back();
1005
19
                _end_scan_keys.back().add_null();
1006
19
            } else {
1007
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1008
0
                    _begin_scan_keys[i].add_null();
1009
0
                    _end_scan_keys[i].add_null();
1010
0
                }
1011
0
            }
1012
120k
        } else if (_begin_scan_keys.empty()) {
1013
            // First column as a range:
1014
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1015
24.0k
            _begin_scan_keys.emplace_back();
1016
24.0k
            if (range.contain_null()) {
1017
13.2k
                _begin_scan_keys.back().add_null();
1018
13.2k
            } else {
1019
10.8k
                _begin_scan_keys.back().add_field(
1020
10.8k
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1021
10.8k
            }
1022
24.0k
            _end_scan_keys.emplace_back();
1023
24.0k
            _end_scan_keys.back().add_field(
1024
24.0k
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1025
96.4k
        } else {
1026
            // Subsequent column as a range: append min/max to every existing key pair.
1027
201k
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1028
105k
                if (range.contain_null()) {
1029
8.10k
                    _begin_scan_keys[i].add_null();
1030
96.9k
                } else {
1031
96.9k
                    _begin_scan_keys[i].add_field(
1032
96.9k
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1033
96.9k
                }
1034
105k
            }
1035
1036
201k
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1037
104k
                _end_scan_keys[i].add_field(
1038
104k
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1039
104k
            }
1040
96.4k
        }
1041
120k
        _begin_include = range.is_begin_include();
1042
120k
        _end_include = range.is_end_include();
1043
120k
    }
1044
1045
408k
    return Status::OK();
1046
519k
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE3EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
871
2.12k
                                     bool* should_break) {
872
2.12k
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
873
874
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
875
    //    clear all accumulated keys — no rows can match.
876
2.12k
    if (range.is_empty_value_range()) {
877
0
        _begin_scan_keys.clear();
878
0
        _end_scan_keys.clear();
879
0
        return Status::OK();
880
0
    }
881
882
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
883
    //    because the begin/end keys would have different semantics per pair.
884
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
885
2.12k
    if (_has_range_value) {
886
0
        return Status::OK();
887
0
    }
888
889
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
890
    //    Cartesian product would be too large.
891
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
892
    //      set *exact_value = false (keep predicate as residual filter).
893
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
894
2.12k
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
895
2.12k
    if (range.is_fixed_value_range()) {
896
9
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
897
0
            if (range.is_range_value_convertible()) {
898
0
                range.convert_to_range_value();
899
0
                *exact_value = false;
900
0
            } else {
901
0
                *should_break = true;
902
0
                return Status::OK();
903
0
            }
904
0
        }
905
2.11k
    } else {
906
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
907
        //    range on a splittable integer type, try to split [low, high] into multiple
908
        //    sub-ranges for parallel / pipelined scanning.
909
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
910
2.11k
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
911
2.11k
            !range.is_reject_split_type()) {
912
2.10k
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
913
2.10k
                                                 _end_include);
914
915
2.10k
            if (!(*eos) &&
916
2.10k
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
917
2.12k
                                                 _end_include, max_scan_key_num)) {
918
2.12k
                _has_range_value = true;
919
2.12k
            }
920
2.10k
            return Status::OK();
921
2.10k
        }
922
2.11k
    }
923
924
    // ====================================================================
925
    // 5. Actually extend scan keys with this column's values.
926
    // ====================================================================
927
928
23
    if (range.is_fixed_value_range()) {
929
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
930
9
        if (_begin_scan_keys.empty()) {
931
            // First column: create one key pair per fixed value.
932
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
933
9
            auto fixed_value_set = range.get_fixed_value_set();
934
9
            ConstIterator iter = fixed_value_set.begin();
935
936
20
            for (; iter != fixed_value_set.end(); ++iter) {
937
11
                _begin_scan_keys.emplace_back();
938
11
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
11
                _end_scan_keys.emplace_back();
940
11
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
941
11
            }
942
943
9
            if (range.contain_null()) {
944
0
                _begin_scan_keys.emplace_back();
945
0
                _begin_scan_keys.back().add_null();
946
0
                _end_scan_keys.emplace_back();
947
0
                _end_scan_keys.back().add_null();
948
0
            }
949
9
        } else {
950
            // Subsequent column: Cartesian product of existing keys × new fixed values.
951
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
952
            //     → [(1,10),(1,20),(2,10),(2,20)]
953
0
            auto fixed_value_set = range.get_fixed_value_set();
954
0
            size_t original_key_range_size = _begin_scan_keys.size();
955
956
0
            for (int i = 0; i < original_key_range_size; ++i) {
957
0
                OlapTuple start_base_key_range = _begin_scan_keys[i];
958
0
                OlapTuple end_base_key_range = _end_scan_keys[i];
959
960
0
                ConstIterator iter = fixed_value_set.begin();
961
962
0
                for (; iter != fixed_value_set.end(); ++iter) {
963
                    // Reuse i-th slot for the first value, append new slots for the rest.
964
0
                    if (iter == fixed_value_set.begin()) {
965
0
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
966
0
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
967
0
                    } else {
968
0
                        _begin_scan_keys.push_back(start_base_key_range);
969
0
                        _begin_scan_keys.back().add_field(
970
0
                                Field::create_field<primitive_type>(*iter));
971
0
                        _end_scan_keys.push_back(end_base_key_range);
972
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
973
0
                    }
974
0
                }
975
976
0
                if (range.contain_null()) {
977
0
                    _begin_scan_keys.push_back(start_base_key_range);
978
0
                    _begin_scan_keys.back().add_null();
979
0
                    _end_scan_keys.push_back(end_base_key_range);
980
0
                    _end_scan_keys.back().add_null();
981
0
                }
982
0
            }
983
0
        }
984
985
        // Fixed values are always closed intervals (begin == end, point lookup).
986
9
        _begin_include = true;
987
9
        _end_include = true;
988
14
    } else {
989
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
990
        // After this, no more columns can be appended (_has_range_value = true),
991
        // because the range semantics only apply to the last appended column.
992
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
993
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
994
        //     → begin_include=true, end_include=false
995
14
        _has_range_value = true;
996
997
        // Special case: max < min means the range itself is empty,
998
        // but contain_null() is true, so only null values match this column.
999
14
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
1000
0
            CHECK(range.contain_null());
1001
0
            if (_begin_scan_keys.empty()) {
1002
0
                _begin_scan_keys.emplace_back();
1003
0
                _begin_scan_keys.back().add_null();
1004
0
                _end_scan_keys.emplace_back();
1005
0
                _end_scan_keys.back().add_null();
1006
0
            } else {
1007
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1008
0
                    _begin_scan_keys[i].add_null();
1009
0
                    _end_scan_keys[i].add_null();
1010
0
                }
1011
0
            }
1012
14
        } else if (_begin_scan_keys.empty()) {
1013
            // First column as a range:
1014
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1015
1
            _begin_scan_keys.emplace_back();
1016
1
            if (range.contain_null()) {
1017
1
                _begin_scan_keys.back().add_null();
1018
1
            } else {
1019
0
                _begin_scan_keys.back().add_field(
1020
0
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1021
0
            }
1022
1
            _end_scan_keys.emplace_back();
1023
1
            _end_scan_keys.back().add_field(
1024
1
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1025
13
        } else {
1026
            // Subsequent column as a range: append min/max to every existing key pair.
1027
43
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1028
30
                if (range.contain_null()) {
1029
30
                    _begin_scan_keys[i].add_null();
1030
30
                } else {
1031
0
                    _begin_scan_keys[i].add_field(
1032
0
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1033
0
                }
1034
30
            }
1035
1036
43
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1037
30
                _end_scan_keys[i].add_field(
1038
30
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1039
30
            }
1040
13
        }
1041
14
        _begin_include = range.is_begin_include();
1042
14
        _end_include = range.is_end_include();
1043
14
    }
1044
1045
23
    return Status::OK();
1046
2.12k
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE4EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
871
286
                                     bool* should_break) {
872
286
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
873
874
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
875
    //    clear all accumulated keys — no rows can match.
876
286
    if (range.is_empty_value_range()) {
877
0
        _begin_scan_keys.clear();
878
0
        _end_scan_keys.clear();
879
0
        return Status::OK();
880
0
    }
881
882
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
883
    //    because the begin/end keys would have different semantics per pair.
884
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
885
286
    if (_has_range_value) {
886
0
        return Status::OK();
887
0
    }
888
889
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
890
    //    Cartesian product would be too large.
891
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
892
    //      set *exact_value = false (keep predicate as residual filter).
893
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
894
286
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
895
286
    if (range.is_fixed_value_range()) {
896
3
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
897
0
            if (range.is_range_value_convertible()) {
898
0
                range.convert_to_range_value();
899
0
                *exact_value = false;
900
0
            } else {
901
0
                *should_break = true;
902
0
                return Status::OK();
903
0
            }
904
0
        }
905
283
    } else {
906
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
907
        //    range on a splittable integer type, try to split [low, high] into multiple
908
        //    sub-ranges for parallel / pipelined scanning.
909
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
910
283
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
911
283
            !range.is_reject_split_type()) {
912
231
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
913
231
                                                 _end_include);
914
915
231
            if (!(*eos) &&
916
231
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
917
233
                                                 _end_include, max_scan_key_num)) {
918
233
                _has_range_value = true;
919
233
            }
920
231
            return Status::OK();
921
231
        }
922
283
    }
923
924
    // ====================================================================
925
    // 5. Actually extend scan keys with this column's values.
926
    // ====================================================================
927
928
55
    if (range.is_fixed_value_range()) {
929
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
930
3
        if (_begin_scan_keys.empty()) {
931
            // First column: create one key pair per fixed value.
932
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
933
2
            auto fixed_value_set = range.get_fixed_value_set();
934
2
            ConstIterator iter = fixed_value_set.begin();
935
936
5
            for (; iter != fixed_value_set.end(); ++iter) {
937
3
                _begin_scan_keys.emplace_back();
938
3
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
3
                _end_scan_keys.emplace_back();
940
3
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
941
3
            }
942
943
2
            if (range.contain_null()) {
944
0
                _begin_scan_keys.emplace_back();
945
0
                _begin_scan_keys.back().add_null();
946
0
                _end_scan_keys.emplace_back();
947
0
                _end_scan_keys.back().add_null();
948
0
            }
949
2
        } else {
950
            // Subsequent column: Cartesian product of existing keys × new fixed values.
951
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
952
            //     → [(1,10),(1,20),(2,10),(2,20)]
953
1
            auto fixed_value_set = range.get_fixed_value_set();
954
1
            size_t original_key_range_size = _begin_scan_keys.size();
955
956
3
            for (int i = 0; i < original_key_range_size; ++i) {
957
2
                OlapTuple start_base_key_range = _begin_scan_keys[i];
958
2
                OlapTuple end_base_key_range = _end_scan_keys[i];
959
960
2
                ConstIterator iter = fixed_value_set.begin();
961
962
4
                for (; iter != fixed_value_set.end(); ++iter) {
963
                    // Reuse i-th slot for the first value, append new slots for the rest.
964
2
                    if (iter == fixed_value_set.begin()) {
965
2
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
966
2
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
967
2
                    } else {
968
0
                        _begin_scan_keys.push_back(start_base_key_range);
969
0
                        _begin_scan_keys.back().add_field(
970
0
                                Field::create_field<primitive_type>(*iter));
971
0
                        _end_scan_keys.push_back(end_base_key_range);
972
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
973
0
                    }
974
2
                }
975
976
2
                if (range.contain_null()) {
977
0
                    _begin_scan_keys.push_back(start_base_key_range);
978
0
                    _begin_scan_keys.back().add_null();
979
0
                    _end_scan_keys.push_back(end_base_key_range);
980
0
                    _end_scan_keys.back().add_null();
981
0
                }
982
2
            }
983
1
        }
984
985
        // Fixed values are always closed intervals (begin == end, point lookup).
986
3
        _begin_include = true;
987
3
        _end_include = true;
988
52
    } else {
989
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
990
        // After this, no more columns can be appended (_has_range_value = true),
991
        // because the range semantics only apply to the last appended column.
992
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
993
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
994
        //     → begin_include=true, end_include=false
995
52
        _has_range_value = true;
996
997
        // Special case: max < min means the range itself is empty,
998
        // but contain_null() is true, so only null values match this column.
999
52
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
1000
0
            CHECK(range.contain_null());
1001
0
            if (_begin_scan_keys.empty()) {
1002
0
                _begin_scan_keys.emplace_back();
1003
0
                _begin_scan_keys.back().add_null();
1004
0
                _end_scan_keys.emplace_back();
1005
0
                _end_scan_keys.back().add_null();
1006
0
            } else {
1007
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1008
0
                    _begin_scan_keys[i].add_null();
1009
0
                    _end_scan_keys[i].add_null();
1010
0
                }
1011
0
            }
1012
52
        } else if (_begin_scan_keys.empty()) {
1013
            // First column as a range:
1014
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1015
0
            _begin_scan_keys.emplace_back();
1016
0
            if (range.contain_null()) {
1017
0
                _begin_scan_keys.back().add_null();
1018
0
            } else {
1019
0
                _begin_scan_keys.back().add_field(
1020
0
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1021
0
            }
1022
0
            _end_scan_keys.emplace_back();
1023
0
            _end_scan_keys.back().add_field(
1024
0
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1025
52
        } else {
1026
            // Subsequent column as a range: append min/max to every existing key pair.
1027
277
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1028
225
                if (range.contain_null()) {
1029
122
                    _begin_scan_keys[i].add_null();
1030
122
                } else {
1031
103
                    _begin_scan_keys[i].add_field(
1032
103
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1033
103
                }
1034
225
            }
1035
1036
277
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1037
225
                _end_scan_keys[i].add_field(
1038
225
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1039
225
            }
1040
52
        }
1041
52
        _begin_include = range.is_begin_include();
1042
52
        _end_include = range.is_end_include();
1043
52
    }
1044
1045
55
    return Status::OK();
1046
286
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE5EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
871
65.7k
                                     bool* should_break) {
872
65.7k
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
873
874
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
875
    //    clear all accumulated keys — no rows can match.
876
65.7k
    if (range.is_empty_value_range()) {
877
0
        _begin_scan_keys.clear();
878
0
        _end_scan_keys.clear();
879
0
        return Status::OK();
880
0
    }
881
882
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
883
    //    because the begin/end keys would have different semantics per pair.
884
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
885
65.7k
    if (_has_range_value) {
886
0
        return Status::OK();
887
0
    }
888
889
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
890
    //    Cartesian product would be too large.
891
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
892
    //      set *exact_value = false (keep predicate as residual filter).
893
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
894
65.7k
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
895
65.7k
    if (range.is_fixed_value_range()) {
896
2.15k
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
897
57
            if (range.is_range_value_convertible()) {
898
57
                range.convert_to_range_value();
899
57
                *exact_value = false;
900
57
            } else {
901
0
                *should_break = true;
902
0
                return Status::OK();
903
0
            }
904
57
        }
905
63.5k
    } else {
906
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
907
        //    range on a splittable integer type, try to split [low, high] into multiple
908
        //    sub-ranges for parallel / pipelined scanning.
909
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
910
63.5k
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
911
63.5k
            !range.is_reject_split_type()) {
912
62.9k
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
913
62.9k
                                                 _end_include);
914
915
62.9k
            if (!(*eos) &&
916
62.9k
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
917
62.9k
                                                 _end_include, max_scan_key_num)) {
918
62.0k
                _has_range_value = true;
919
62.0k
            }
920
62.9k
            return Status::OK();
921
62.9k
        }
922
63.5k
    }
923
924
    // ====================================================================
925
    // 5. Actually extend scan keys with this column's values.
926
    // ====================================================================
927
928
2.76k
    if (range.is_fixed_value_range()) {
929
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
930
2.09k
        if (_begin_scan_keys.empty()) {
931
            // First column: create one key pair per fixed value.
932
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
933
2.05k
            auto fixed_value_set = range.get_fixed_value_set();
934
2.05k
            ConstIterator iter = fixed_value_set.begin();
935
936
4.91k
            for (; iter != fixed_value_set.end(); ++iter) {
937
2.86k
                _begin_scan_keys.emplace_back();
938
2.86k
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
2.86k
                _end_scan_keys.emplace_back();
940
2.86k
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
941
2.86k
            }
942
943
2.05k
            if (range.contain_null()) {
944
0
                _begin_scan_keys.emplace_back();
945
0
                _begin_scan_keys.back().add_null();
946
0
                _end_scan_keys.emplace_back();
947
0
                _end_scan_keys.back().add_null();
948
0
            }
949
2.05k
        } else {
950
            // Subsequent column: Cartesian product of existing keys × new fixed values.
951
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
952
            //     → [(1,10),(1,20),(2,10),(2,20)]
953
42
            auto fixed_value_set = range.get_fixed_value_set();
954
42
            size_t original_key_range_size = _begin_scan_keys.size();
955
956
95
            for (int i = 0; i < original_key_range_size; ++i) {
957
53
                OlapTuple start_base_key_range = _begin_scan_keys[i];
958
53
                OlapTuple end_base_key_range = _end_scan_keys[i];
959
960
53
                ConstIterator iter = fixed_value_set.begin();
961
962
106
                for (; iter != fixed_value_set.end(); ++iter) {
963
                    // Reuse i-th slot for the first value, append new slots for the rest.
964
53
                    if (iter == fixed_value_set.begin()) {
965
53
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
966
53
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
967
53
                    } else {
968
0
                        _begin_scan_keys.push_back(start_base_key_range);
969
0
                        _begin_scan_keys.back().add_field(
970
0
                                Field::create_field<primitive_type>(*iter));
971
0
                        _end_scan_keys.push_back(end_base_key_range);
972
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
973
0
                    }
974
53
                }
975
976
53
                if (range.contain_null()) {
977
0
                    _begin_scan_keys.push_back(start_base_key_range);
978
0
                    _begin_scan_keys.back().add_null();
979
0
                    _end_scan_keys.push_back(end_base_key_range);
980
0
                    _end_scan_keys.back().add_null();
981
0
                }
982
53
            }
983
42
        }
984
985
        // Fixed values are always closed intervals (begin == end, point lookup).
986
2.09k
        _begin_include = true;
987
2.09k
        _end_include = true;
988
2.09k
    } else {
989
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
990
        // After this, no more columns can be appended (_has_range_value = true),
991
        // because the range semantics only apply to the last appended column.
992
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
993
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
994
        //     → begin_include=true, end_include=false
995
670
        _has_range_value = true;
996
997
        // Special case: max < min means the range itself is empty,
998
        // but contain_null() is true, so only null values match this column.
999
670
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
1000
0
            CHECK(range.contain_null());
1001
0
            if (_begin_scan_keys.empty()) {
1002
0
                _begin_scan_keys.emplace_back();
1003
0
                _begin_scan_keys.back().add_null();
1004
0
                _end_scan_keys.emplace_back();
1005
0
                _end_scan_keys.back().add_null();
1006
0
            } else {
1007
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1008
0
                    _begin_scan_keys[i].add_null();
1009
0
                    _end_scan_keys[i].add_null();
1010
0
                }
1011
0
            }
1012
670
        } else if (_begin_scan_keys.empty()) {
1013
            // First column as a range:
1014
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1015
158
            _begin_scan_keys.emplace_back();
1016
158
            if (range.contain_null()) {
1017
51
                _begin_scan_keys.back().add_null();
1018
107
            } else {
1019
107
                _begin_scan_keys.back().add_field(
1020
107
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1021
107
            }
1022
158
            _end_scan_keys.emplace_back();
1023
158
            _end_scan_keys.back().add_field(
1024
158
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1025
512
        } else {
1026
            // Subsequent column as a range: append min/max to every existing key pair.
1027
8.58k
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1028
8.07k
                if (range.contain_null()) {
1029
6.51k
                    _begin_scan_keys[i].add_null();
1030
6.51k
                } else {
1031
1.55k
                    _begin_scan_keys[i].add_field(
1032
1.55k
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1033
1.55k
                }
1034
8.07k
            }
1035
1036
8.57k
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1037
8.06k
                _end_scan_keys[i].add_field(
1038
8.06k
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1039
8.06k
            }
1040
512
        }
1041
670
        _begin_include = range.is_begin_include();
1042
670
        _end_include = range.is_end_include();
1043
670
    }
1044
1045
2.76k
    return Status::OK();
1046
65.7k
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE6EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
871
44.6k
                                     bool* should_break) {
872
44.6k
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
873
874
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
875
    //    clear all accumulated keys — no rows can match.
876
44.6k
    if (range.is_empty_value_range()) {
877
0
        _begin_scan_keys.clear();
878
0
        _end_scan_keys.clear();
879
0
        return Status::OK();
880
0
    }
881
882
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
883
    //    because the begin/end keys would have different semantics per pair.
884
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
885
44.6k
    if (_has_range_value) {
886
0
        return Status::OK();
887
0
    }
888
889
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
890
    //    Cartesian product would be too large.
891
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
892
    //      set *exact_value = false (keep predicate as residual filter).
893
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
894
44.6k
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
895
44.6k
    if (range.is_fixed_value_range()) {
896
549
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
897
0
            if (range.is_range_value_convertible()) {
898
0
                range.convert_to_range_value();
899
0
                *exact_value = false;
900
0
            } else {
901
0
                *should_break = true;
902
0
                return Status::OK();
903
0
            }
904
0
        }
905
44.0k
    } else {
906
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
907
        //    range on a splittable integer type, try to split [low, high] into multiple
908
        //    sub-ranges for parallel / pipelined scanning.
909
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
910
44.0k
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
911
44.0k
            !range.is_reject_split_type()) {
912
43.6k
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
913
43.6k
                                                 _end_include);
914
915
43.6k
            if (!(*eos) &&
916
43.6k
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
917
43.6k
                                                 _end_include, max_scan_key_num)) {
918
43.3k
                _has_range_value = true;
919
43.3k
            }
920
43.6k
            return Status::OK();
921
43.6k
        }
922
44.0k
    }
923
924
    // ====================================================================
925
    // 5. Actually extend scan keys with this column's values.
926
    // ====================================================================
927
928
1.02k
    if (range.is_fixed_value_range()) {
929
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
930
550
        if (_begin_scan_keys.empty()) {
931
            // First column: create one key pair per fixed value.
932
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
933
550
            auto fixed_value_set = range.get_fixed_value_set();
934
550
            ConstIterator iter = fixed_value_set.begin();
935
936
1.21k
            for (; iter != fixed_value_set.end(); ++iter) {
937
665
                _begin_scan_keys.emplace_back();
938
665
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
665
                _end_scan_keys.emplace_back();
940
665
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
941
665
            }
942
943
550
            if (range.contain_null()) {
944
0
                _begin_scan_keys.emplace_back();
945
0
                _begin_scan_keys.back().add_null();
946
0
                _end_scan_keys.emplace_back();
947
0
                _end_scan_keys.back().add_null();
948
0
            }
949
18.4E
        } else {
950
            // Subsequent column: Cartesian product of existing keys × new fixed values.
951
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
952
            //     → [(1,10),(1,20),(2,10),(2,20)]
953
18.4E
            auto fixed_value_set = range.get_fixed_value_set();
954
18.4E
            size_t original_key_range_size = _begin_scan_keys.size();
955
956
18.4E
            for (int i = 0; i < original_key_range_size; ++i) {
957
0
                OlapTuple start_base_key_range = _begin_scan_keys[i];
958
0
                OlapTuple end_base_key_range = _end_scan_keys[i];
959
960
0
                ConstIterator iter = fixed_value_set.begin();
961
962
0
                for (; iter != fixed_value_set.end(); ++iter) {
963
                    // Reuse i-th slot for the first value, append new slots for the rest.
964
0
                    if (iter == fixed_value_set.begin()) {
965
0
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
966
0
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
967
0
                    } else {
968
0
                        _begin_scan_keys.push_back(start_base_key_range);
969
0
                        _begin_scan_keys.back().add_field(
970
0
                                Field::create_field<primitive_type>(*iter));
971
0
                        _end_scan_keys.push_back(end_base_key_range);
972
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
973
0
                    }
974
0
                }
975
976
0
                if (range.contain_null()) {
977
0
                    _begin_scan_keys.push_back(start_base_key_range);
978
0
                    _begin_scan_keys.back().add_null();
979
0
                    _end_scan_keys.push_back(end_base_key_range);
980
0
                    _end_scan_keys.back().add_null();
981
0
                }
982
0
            }
983
18.4E
        }
984
985
        // Fixed values are always closed intervals (begin == end, point lookup).
986
549
        _begin_include = true;
987
549
        _end_include = true;
988
549
    } else {
989
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
990
        // After this, no more columns can be appended (_has_range_value = true),
991
        // because the range semantics only apply to the last appended column.
992
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
993
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
994
        //     → begin_include=true, end_include=false
995
474
        _has_range_value = true;
996
997
        // Special case: max < min means the range itself is empty,
998
        // but contain_null() is true, so only null values match this column.
999
474
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
1000
0
            CHECK(range.contain_null());
1001
0
            if (_begin_scan_keys.empty()) {
1002
0
                _begin_scan_keys.emplace_back();
1003
0
                _begin_scan_keys.back().add_null();
1004
0
                _end_scan_keys.emplace_back();
1005
0
                _end_scan_keys.back().add_null();
1006
0
            } else {
1007
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1008
0
                    _begin_scan_keys[i].add_null();
1009
0
                    _end_scan_keys[i].add_null();
1010
0
                }
1011
0
            }
1012
474
        } else if (_begin_scan_keys.empty()) {
1013
            // First column as a range:
1014
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1015
21
            _begin_scan_keys.emplace_back();
1016
21
            if (range.contain_null()) {
1017
20
                _begin_scan_keys.back().add_null();
1018
20
            } else {
1019
1
                _begin_scan_keys.back().add_field(
1020
1
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1021
1
            }
1022
21
            _end_scan_keys.emplace_back();
1023
21
            _end_scan_keys.back().add_field(
1024
21
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1025
453
        } else {
1026
            // Subsequent column as a range: append min/max to every existing key pair.
1027
1.22k
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1028
772
                if (range.contain_null()) {
1029
744
                    _begin_scan_keys[i].add_null();
1030
744
                } else {
1031
28
                    _begin_scan_keys[i].add_field(
1032
28
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1033
28
                }
1034
772
            }
1035
1036
1.23k
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1037
777
                _end_scan_keys[i].add_field(
1038
777
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1039
777
            }
1040
453
        }
1041
474
        _begin_include = range.is_begin_include();
1042
474
        _end_include = range.is_end_include();
1043
474
    }
1044
1045
1.02k
    return Status::OK();
1046
44.6k
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE7EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
871
4.39k
                                     bool* should_break) {
872
4.39k
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
873
874
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
875
    //    clear all accumulated keys — no rows can match.
876
4.39k
    if (range.is_empty_value_range()) {
877
0
        _begin_scan_keys.clear();
878
0
        _end_scan_keys.clear();
879
0
        return Status::OK();
880
0
    }
881
882
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
883
    //    because the begin/end keys would have different semantics per pair.
884
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
885
4.39k
    if (_has_range_value) {
886
0
        return Status::OK();
887
0
    }
888
889
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
890
    //    Cartesian product would be too large.
891
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
892
    //      set *exact_value = false (keep predicate as residual filter).
893
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
894
18.4E
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
895
4.39k
    if (range.is_fixed_value_range()) {
896
137
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
897
0
            if (range.is_range_value_convertible()) {
898
0
                range.convert_to_range_value();
899
0
                *exact_value = false;
900
0
            } else {
901
0
                *should_break = true;
902
0
                return Status::OK();
903
0
            }
904
0
        }
905
4.25k
    } else {
906
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
907
        //    range on a splittable integer type, try to split [low, high] into multiple
908
        //    sub-ranges for parallel / pipelined scanning.
909
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
910
4.26k
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
911
4.25k
            !range.is_reject_split_type()) {
912
0
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
913
0
                                                 _end_include);
914
915
0
            if (!(*eos) &&
916
0
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
917
0
                                                 _end_include, max_scan_key_num)) {
918
0
                _has_range_value = true;
919
0
            }
920
0
            return Status::OK();
921
0
        }
922
4.25k
    }
923
924
    // ====================================================================
925
    // 5. Actually extend scan keys with this column's values.
926
    // ====================================================================
927
928
4.39k
    if (range.is_fixed_value_range()) {
929
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
930
137
        if (_begin_scan_keys.empty()) {
931
            // First column: create one key pair per fixed value.
932
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
933
137
            auto fixed_value_set = range.get_fixed_value_set();
934
137
            ConstIterator iter = fixed_value_set.begin();
935
936
279
            for (; iter != fixed_value_set.end(); ++iter) {
937
142
                _begin_scan_keys.emplace_back();
938
142
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
142
                _end_scan_keys.emplace_back();
940
142
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
941
142
            }
942
943
137
            if (range.contain_null()) {
944
0
                _begin_scan_keys.emplace_back();
945
0
                _begin_scan_keys.back().add_null();
946
0
                _end_scan_keys.emplace_back();
947
0
                _end_scan_keys.back().add_null();
948
0
            }
949
137
        } else {
950
            // Subsequent column: Cartesian product of existing keys × new fixed values.
951
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
952
            //     → [(1,10),(1,20),(2,10),(2,20)]
953
0
            auto fixed_value_set = range.get_fixed_value_set();
954
0
            size_t original_key_range_size = _begin_scan_keys.size();
955
956
0
            for (int i = 0; i < original_key_range_size; ++i) {
957
0
                OlapTuple start_base_key_range = _begin_scan_keys[i];
958
0
                OlapTuple end_base_key_range = _end_scan_keys[i];
959
960
0
                ConstIterator iter = fixed_value_set.begin();
961
962
0
                for (; iter != fixed_value_set.end(); ++iter) {
963
                    // Reuse i-th slot for the first value, append new slots for the rest.
964
0
                    if (iter == fixed_value_set.begin()) {
965
0
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
966
0
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
967
0
                    } else {
968
0
                        _begin_scan_keys.push_back(start_base_key_range);
969
0
                        _begin_scan_keys.back().add_field(
970
0
                                Field::create_field<primitive_type>(*iter));
971
0
                        _end_scan_keys.push_back(end_base_key_range);
972
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
973
0
                    }
974
0
                }
975
976
0
                if (range.contain_null()) {
977
0
                    _begin_scan_keys.push_back(start_base_key_range);
978
0
                    _begin_scan_keys.back().add_null();
979
0
                    _end_scan_keys.push_back(end_base_key_range);
980
0
                    _end_scan_keys.back().add_null();
981
0
                }
982
0
            }
983
0
        }
984
985
        // Fixed values are always closed intervals (begin == end, point lookup).
986
137
        _begin_include = true;
987
137
        _end_include = true;
988
4.25k
    } else {
989
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
990
        // After this, no more columns can be appended (_has_range_value = true),
991
        // because the range semantics only apply to the last appended column.
992
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
993
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
994
        //     → begin_include=true, end_include=false
995
4.25k
        _has_range_value = true;
996
997
        // Special case: max < min means the range itself is empty,
998
        // but contain_null() is true, so only null values match this column.
999
4.25k
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
1000
1
            CHECK(range.contain_null());
1001
1
            if (_begin_scan_keys.empty()) {
1002
1
                _begin_scan_keys.emplace_back();
1003
1
                _begin_scan_keys.back().add_null();
1004
1
                _end_scan_keys.emplace_back();
1005
1
                _end_scan_keys.back().add_null();
1006
1
            } else {
1007
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1008
0
                    _begin_scan_keys[i].add_null();
1009
0
                    _end_scan_keys[i].add_null();
1010
0
                }
1011
0
            }
1012
4.25k
        } else if (_begin_scan_keys.empty()) {
1013
            // First column as a range:
1014
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1015
4.23k
            _begin_scan_keys.emplace_back();
1016
4.23k
            if (range.contain_null()) {
1017
191
                _begin_scan_keys.back().add_null();
1018
4.04k
            } else {
1019
4.04k
                _begin_scan_keys.back().add_field(
1020
4.04k
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1021
4.04k
            }
1022
4.23k
            _end_scan_keys.emplace_back();
1023
4.23k
            _end_scan_keys.back().add_field(
1024
4.23k
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1025
4.23k
        } else {
1026
            // Subsequent column as a range: append min/max to every existing key pair.
1027
79
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1028
60
                if (range.contain_null()) {
1029
56
                    _begin_scan_keys[i].add_null();
1030
56
                } else {
1031
4
                    _begin_scan_keys[i].add_field(
1032
4
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1033
4
                }
1034
60
            }
1035
1036
79
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1037
60
                _end_scan_keys[i].add_field(
1038
60
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1039
60
            }
1040
19
        }
1041
4.25k
        _begin_include = range.is_begin_include();
1042
4.25k
        _end_include = range.is_end_include();
1043
4.25k
    }
1044
1045
4.39k
    return Status::OK();
1046
4.39k
}
Unexecuted instantiation: _ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE8EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Unexecuted instantiation: _ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE9EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Unexecuted instantiation: _ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE36EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE37EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
871
2
                                     bool* should_break) {
872
2
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
873
874
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
875
    //    clear all accumulated keys — no rows can match.
876
2
    if (range.is_empty_value_range()) {
877
0
        _begin_scan_keys.clear();
878
0
        _end_scan_keys.clear();
879
0
        return Status::OK();
880
0
    }
881
882
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
883
    //    because the begin/end keys would have different semantics per pair.
884
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
885
2
    if (_has_range_value) {
886
0
        return Status::OK();
887
0
    }
888
889
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
890
    //    Cartesian product would be too large.
891
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
892
    //      set *exact_value = false (keep predicate as residual filter).
893
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
894
2
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
895
2
    if (range.is_fixed_value_range()) {
896
0
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
897
0
            if (range.is_range_value_convertible()) {
898
0
                range.convert_to_range_value();
899
0
                *exact_value = false;
900
0
            } else {
901
0
                *should_break = true;
902
0
                return Status::OK();
903
0
            }
904
0
        }
905
2
    } else {
906
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
907
        //    range on a splittable integer type, try to split [low, high] into multiple
908
        //    sub-ranges for parallel / pipelined scanning.
909
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
910
2
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
911
2
            !range.is_reject_split_type()) {
912
1
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
913
1
                                                 _end_include);
914
915
1
            if (!(*eos) &&
916
1
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
917
1
                                                 _end_include, max_scan_key_num)) {
918
1
                _has_range_value = true;
919
1
            }
920
1
            return Status::OK();
921
1
        }
922
2
    }
923
924
    // ====================================================================
925
    // 5. Actually extend scan keys with this column's values.
926
    // ====================================================================
927
928
1
    if (range.is_fixed_value_range()) {
929
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
930
0
        if (_begin_scan_keys.empty()) {
931
            // First column: create one key pair per fixed value.
932
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
933
0
            auto fixed_value_set = range.get_fixed_value_set();
934
0
            ConstIterator iter = fixed_value_set.begin();
935
936
0
            for (; iter != fixed_value_set.end(); ++iter) {
937
0
                _begin_scan_keys.emplace_back();
938
0
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
0
                _end_scan_keys.emplace_back();
940
0
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
941
0
            }
942
943
0
            if (range.contain_null()) {
944
0
                _begin_scan_keys.emplace_back();
945
0
                _begin_scan_keys.back().add_null();
946
0
                _end_scan_keys.emplace_back();
947
0
                _end_scan_keys.back().add_null();
948
0
            }
949
0
        } else {
950
            // Subsequent column: Cartesian product of existing keys × new fixed values.
951
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
952
            //     → [(1,10),(1,20),(2,10),(2,20)]
953
0
            auto fixed_value_set = range.get_fixed_value_set();
954
0
            size_t original_key_range_size = _begin_scan_keys.size();
955
956
0
            for (int i = 0; i < original_key_range_size; ++i) {
957
0
                OlapTuple start_base_key_range = _begin_scan_keys[i];
958
0
                OlapTuple end_base_key_range = _end_scan_keys[i];
959
960
0
                ConstIterator iter = fixed_value_set.begin();
961
962
0
                for (; iter != fixed_value_set.end(); ++iter) {
963
                    // Reuse i-th slot for the first value, append new slots for the rest.
964
0
                    if (iter == fixed_value_set.begin()) {
965
0
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
966
0
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
967
0
                    } else {
968
0
                        _begin_scan_keys.push_back(start_base_key_range);
969
0
                        _begin_scan_keys.back().add_field(
970
0
                                Field::create_field<primitive_type>(*iter));
971
0
                        _end_scan_keys.push_back(end_base_key_range);
972
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
973
0
                    }
974
0
                }
975
976
0
                if (range.contain_null()) {
977
0
                    _begin_scan_keys.push_back(start_base_key_range);
978
0
                    _begin_scan_keys.back().add_null();
979
0
                    _end_scan_keys.push_back(end_base_key_range);
980
0
                    _end_scan_keys.back().add_null();
981
0
                }
982
0
            }
983
0
        }
984
985
        // Fixed values are always closed intervals (begin == end, point lookup).
986
0
        _begin_include = true;
987
0
        _end_include = true;
988
1
    } else {
989
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
990
        // After this, no more columns can be appended (_has_range_value = true),
991
        // because the range semantics only apply to the last appended column.
992
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
993
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
994
        //     → begin_include=true, end_include=false
995
1
        _has_range_value = true;
996
997
        // Special case: max < min means the range itself is empty,
998
        // but contain_null() is true, so only null values match this column.
999
1
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
1000
0
            CHECK(range.contain_null());
1001
0
            if (_begin_scan_keys.empty()) {
1002
0
                _begin_scan_keys.emplace_back();
1003
0
                _begin_scan_keys.back().add_null();
1004
0
                _end_scan_keys.emplace_back();
1005
0
                _end_scan_keys.back().add_null();
1006
0
            } else {
1007
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1008
0
                    _begin_scan_keys[i].add_null();
1009
0
                    _end_scan_keys[i].add_null();
1010
0
                }
1011
0
            }
1012
1
        } else if (_begin_scan_keys.empty()) {
1013
            // First column as a range:
1014
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1015
0
            _begin_scan_keys.emplace_back();
1016
0
            if (range.contain_null()) {
1017
0
                _begin_scan_keys.back().add_null();
1018
0
            } else {
1019
0
                _begin_scan_keys.back().add_field(
1020
0
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1021
0
            }
1022
0
            _end_scan_keys.emplace_back();
1023
0
            _end_scan_keys.back().add_field(
1024
0
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1025
1
        } else {
1026
            // Subsequent column as a range: append min/max to every existing key pair.
1027
2
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1028
1
                if (range.contain_null()) {
1029
1
                    _begin_scan_keys[i].add_null();
1030
1
                } else {
1031
0
                    _begin_scan_keys[i].add_field(
1032
0
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1033
0
                }
1034
1
            }
1035
1036
2
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1037
1
                _end_scan_keys[i].add_field(
1038
1
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1039
1
            }
1040
1
        }
1041
1
        _begin_include = range.is_begin_include();
1042
1
        _end_include = range.is_end_include();
1043
1
    }
1044
1045
1
    return Status::OK();
1046
2
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE15EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
871
353
                                     bool* should_break) {
872
353
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
873
874
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
875
    //    clear all accumulated keys — no rows can match.
876
353
    if (range.is_empty_value_range()) {
877
0
        _begin_scan_keys.clear();
878
0
        _end_scan_keys.clear();
879
0
        return Status::OK();
880
0
    }
881
882
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
883
    //    because the begin/end keys would have different semantics per pair.
884
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
885
353
    if (_has_range_value) {
886
0
        return Status::OK();
887
0
    }
888
889
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
890
    //    Cartesian product would be too large.
891
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
892
    //      set *exact_value = false (keep predicate as residual filter).
893
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
894
353
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
895
353
    if (range.is_fixed_value_range()) {
896
13
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
897
1
            if (range.is_range_value_convertible()) {
898
1
                range.convert_to_range_value();
899
1
                *exact_value = false;
900
1
            } else {
901
0
                *should_break = true;
902
0
                return Status::OK();
903
0
            }
904
1
        }
905
340
    } else {
906
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
907
        //    range on a splittable integer type, try to split [low, high] into multiple
908
        //    sub-ranges for parallel / pipelined scanning.
909
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
910
340
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
911
340
            !range.is_reject_split_type()) {
912
0
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
913
0
                                                 _end_include);
914
915
0
            if (!(*eos) &&
916
0
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
917
0
                                                 _end_include, max_scan_key_num)) {
918
0
                _has_range_value = true;
919
0
            }
920
0
            return Status::OK();
921
0
        }
922
340
    }
923
924
    // ====================================================================
925
    // 5. Actually extend scan keys with this column's values.
926
    // ====================================================================
927
928
353
    if (range.is_fixed_value_range()) {
929
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
930
12
        if (_begin_scan_keys.empty()) {
931
            // First column: create one key pair per fixed value.
932
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
933
11
            auto fixed_value_set = range.get_fixed_value_set();
934
11
            ConstIterator iter = fixed_value_set.begin();
935
936
30
            for (; iter != fixed_value_set.end(); ++iter) {
937
19
                _begin_scan_keys.emplace_back();
938
19
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
19
                _end_scan_keys.emplace_back();
940
19
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
941
19
            }
942
943
11
            if (range.contain_null()) {
944
0
                _begin_scan_keys.emplace_back();
945
0
                _begin_scan_keys.back().add_null();
946
0
                _end_scan_keys.emplace_back();
947
0
                _end_scan_keys.back().add_null();
948
0
            }
949
11
        } else {
950
            // Subsequent column: Cartesian product of existing keys × new fixed values.
951
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
952
            //     → [(1,10),(1,20),(2,10),(2,20)]
953
1
            auto fixed_value_set = range.get_fixed_value_set();
954
1
            size_t original_key_range_size = _begin_scan_keys.size();
955
956
2
            for (int i = 0; i < original_key_range_size; ++i) {
957
1
                OlapTuple start_base_key_range = _begin_scan_keys[i];
958
1
                OlapTuple end_base_key_range = _end_scan_keys[i];
959
960
1
                ConstIterator iter = fixed_value_set.begin();
961
962
2
                for (; iter != fixed_value_set.end(); ++iter) {
963
                    // Reuse i-th slot for the first value, append new slots for the rest.
964
1
                    if (iter == fixed_value_set.begin()) {
965
1
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
966
1
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
967
1
                    } else {
968
0
                        _begin_scan_keys.push_back(start_base_key_range);
969
0
                        _begin_scan_keys.back().add_field(
970
0
                                Field::create_field<primitive_type>(*iter));
971
0
                        _end_scan_keys.push_back(end_base_key_range);
972
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
973
0
                    }
974
1
                }
975
976
1
                if (range.contain_null()) {
977
0
                    _begin_scan_keys.push_back(start_base_key_range);
978
0
                    _begin_scan_keys.back().add_null();
979
0
                    _end_scan_keys.push_back(end_base_key_range);
980
0
                    _end_scan_keys.back().add_null();
981
0
                }
982
1
            }
983
1
        }
984
985
        // Fixed values are always closed intervals (begin == end, point lookup).
986
12
        _begin_include = true;
987
12
        _end_include = true;
988
341
    } else {
989
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
990
        // After this, no more columns can be appended (_has_range_value = true),
991
        // because the range semantics only apply to the last appended column.
992
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
993
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
994
        //     → begin_include=true, end_include=false
995
341
        _has_range_value = true;
996
997
        // Special case: max < min means the range itself is empty,
998
        // but contain_null() is true, so only null values match this column.
999
341
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
1000
1
            CHECK(range.contain_null());
1001
1
            if (_begin_scan_keys.empty()) {
1002
1
                _begin_scan_keys.emplace_back();
1003
1
                _begin_scan_keys.back().add_null();
1004
1
                _end_scan_keys.emplace_back();
1005
1
                _end_scan_keys.back().add_null();
1006
1
            } else {
1007
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1008
0
                    _begin_scan_keys[i].add_null();
1009
0
                    _end_scan_keys[i].add_null();
1010
0
                }
1011
0
            }
1012
340
        } else if (_begin_scan_keys.empty()) {
1013
            // First column as a range:
1014
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1015
332
            _begin_scan_keys.emplace_back();
1016
332
            if (range.contain_null()) {
1017
170
                _begin_scan_keys.back().add_null();
1018
170
            } else {
1019
162
                _begin_scan_keys.back().add_field(
1020
162
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1021
162
            }
1022
332
            _end_scan_keys.emplace_back();
1023
332
            _end_scan_keys.back().add_field(
1024
332
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1025
332
        } else {
1026
            // Subsequent column as a range: append min/max to every existing key pair.
1027
152
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1028
144
                if (range.contain_null()) {
1029
0
                    _begin_scan_keys[i].add_null();
1030
144
                } else {
1031
144
                    _begin_scan_keys[i].add_field(
1032
144
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1033
144
                }
1034
144
            }
1035
1036
152
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1037
144
                _end_scan_keys[i].add_field(
1038
144
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1039
144
            }
1040
8
        }
1041
341
        _begin_include = range.is_begin_include();
1042
341
        _end_include = range.is_end_include();
1043
341
    }
1044
1045
353
    return Status::OK();
1046
353
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE10EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
871
388k
                                     bool* should_break) {
872
388k
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
873
874
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
875
    //    clear all accumulated keys — no rows can match.
876
388k
    if (range.is_empty_value_range()) {
877
0
        _begin_scan_keys.clear();
878
0
        _end_scan_keys.clear();
879
0
        return Status::OK();
880
0
    }
881
882
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
883
    //    because the begin/end keys would have different semantics per pair.
884
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
885
388k
    if (_has_range_value) {
886
0
        return Status::OK();
887
0
    }
888
889
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
890
    //    Cartesian product would be too large.
891
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
892
    //      set *exact_value = false (keep predicate as residual filter).
893
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
894
388k
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
895
388k
    if (range.is_fixed_value_range()) {
896
284k
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
897
0
            if (range.is_range_value_convertible()) {
898
0
                range.convert_to_range_value();
899
0
                *exact_value = false;
900
0
            } else {
901
0
                *should_break = true;
902
0
                return Status::OK();
903
0
            }
904
0
        }
905
284k
    } else {
906
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
907
        //    range on a splittable integer type, try to split [low, high] into multiple
908
        //    sub-ranges for parallel / pipelined scanning.
909
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
910
103k
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
911
103k
            !range.is_reject_split_type()) {
912
0
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
913
0
                                                 _end_include);
914
915
0
            if (!(*eos) &&
916
0
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
917
0
                                                 _end_include, max_scan_key_num)) {
918
0
                _has_range_value = true;
919
0
            }
920
0
            return Status::OK();
921
0
        }
922
103k
    }
923
924
    // ====================================================================
925
    // 5. Actually extend scan keys with this column's values.
926
    // ====================================================================
927
928
388k
    if (range.is_fixed_value_range()) {
929
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
930
284k
        if (_begin_scan_keys.empty()) {
931
            // First column: create one key pair per fixed value.
932
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
933
95.0k
            auto fixed_value_set = range.get_fixed_value_set();
934
95.0k
            ConstIterator iter = fixed_value_set.begin();
935
936
190k
            for (; iter != fixed_value_set.end(); ++iter) {
937
95.3k
                _begin_scan_keys.emplace_back();
938
95.3k
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
95.3k
                _end_scan_keys.emplace_back();
940
95.3k
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
941
95.3k
            }
942
943
95.0k
            if (range.contain_null()) {
944
0
                _begin_scan_keys.emplace_back();
945
0
                _begin_scan_keys.back().add_null();
946
0
                _end_scan_keys.emplace_back();
947
0
                _end_scan_keys.back().add_null();
948
0
            }
949
189k
        } else {
950
            // Subsequent column: Cartesian product of existing keys × new fixed values.
951
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
952
            //     → [(1,10),(1,20),(2,10),(2,20)]
953
189k
            auto fixed_value_set = range.get_fixed_value_set();
954
189k
            size_t original_key_range_size = _begin_scan_keys.size();
955
956
379k
            for (int i = 0; i < original_key_range_size; ++i) {
957
189k
                OlapTuple start_base_key_range = _begin_scan_keys[i];
958
189k
                OlapTuple end_base_key_range = _end_scan_keys[i];
959
960
189k
                ConstIterator iter = fixed_value_set.begin();
961
962
379k
                for (; iter != fixed_value_set.end(); ++iter) {
963
                    // Reuse i-th slot for the first value, append new slots for the rest.
964
189k
                    if (iter == fixed_value_set.begin()) {
965
189k
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
966
189k
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
967
189k
                    } else {
968
284
                        _begin_scan_keys.push_back(start_base_key_range);
969
284
                        _begin_scan_keys.back().add_field(
970
284
                                Field::create_field<primitive_type>(*iter));
971
284
                        _end_scan_keys.push_back(end_base_key_range);
972
284
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
973
284
                    }
974
189k
                }
975
976
189k
                if (range.contain_null()) {
977
0
                    _begin_scan_keys.push_back(start_base_key_range);
978
0
                    _begin_scan_keys.back().add_null();
979
0
                    _end_scan_keys.push_back(end_base_key_range);
980
0
                    _end_scan_keys.back().add_null();
981
0
                }
982
189k
            }
983
189k
        }
984
985
        // Fixed values are always closed intervals (begin == end, point lookup).
986
284k
        _begin_include = true;
987
284k
        _end_include = true;
988
284k
    } else {
989
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
990
        // After this, no more columns can be appended (_has_range_value = true),
991
        // because the range semantics only apply to the last appended column.
992
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
993
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
994
        //     → begin_include=true, end_include=false
995
104k
        _has_range_value = true;
996
997
        // Special case: max < min means the range itself is empty,
998
        // but contain_null() is true, so only null values match this column.
999
104k
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
1000
1
            CHECK(range.contain_null());
1001
1
            if (_begin_scan_keys.empty()) {
1002
1
                _begin_scan_keys.emplace_back();
1003
1
                _begin_scan_keys.back().add_null();
1004
1
                _end_scan_keys.emplace_back();
1005
1
                _end_scan_keys.back().add_null();
1006
1
            } else {
1007
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1008
0
                    _begin_scan_keys[i].add_null();
1009
0
                    _end_scan_keys[i].add_null();
1010
0
                }
1011
0
            }
1012
104k
        } else if (_begin_scan_keys.empty()) {
1013
            // First column as a range:
1014
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1015
8.77k
            _begin_scan_keys.emplace_back();
1016
8.77k
            if (range.contain_null()) {
1017
4.46k
                _begin_scan_keys.back().add_null();
1018
4.46k
            } else {
1019
4.31k
                _begin_scan_keys.back().add_field(
1020
4.31k
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1021
4.31k
            }
1022
8.77k
            _end_scan_keys.emplace_back();
1023
8.77k
            _end_scan_keys.back().add_field(
1024
8.77k
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1025
95.2k
        } else {
1026
            // Subsequent column as a range: append min/max to every existing key pair.
1027
190k
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1028
95.3k
                if (range.contain_null()) {
1029
403
                    _begin_scan_keys[i].add_null();
1030
94.9k
                } else {
1031
94.9k
                    _begin_scan_keys[i].add_field(
1032
94.9k
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1033
94.9k
                }
1034
95.3k
            }
1035
1036
190k
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1037
95.3k
                _end_scan_keys[i].add_field(
1038
95.3k
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1039
95.3k
            }
1040
95.2k
        }
1041
104k
        _begin_include = range.is_begin_include();
1042
104k
        _end_include = range.is_end_include();
1043
104k
    }
1044
1045
388k
    return Status::OK();
1046
388k
}
Unexecuted instantiation: _ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE23EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE11EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
871
37
                                     bool* should_break) {
872
37
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
873
874
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
875
    //    clear all accumulated keys — no rows can match.
876
37
    if (range.is_empty_value_range()) {
877
0
        _begin_scan_keys.clear();
878
0
        _end_scan_keys.clear();
879
0
        return Status::OK();
880
0
    }
881
882
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
883
    //    because the begin/end keys would have different semantics per pair.
884
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
885
37
    if (_has_range_value) {
886
0
        return Status::OK();
887
0
    }
888
889
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
890
    //    Cartesian product would be too large.
891
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
892
    //      set *exact_value = false (keep predicate as residual filter).
893
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
894
37
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
895
37
    if (range.is_fixed_value_range()) {
896
3
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
897
0
            if (range.is_range_value_convertible()) {
898
0
                range.convert_to_range_value();
899
0
                *exact_value = false;
900
0
            } else {
901
0
                *should_break = true;
902
0
                return Status::OK();
903
0
            }
904
0
        }
905
34
    } else {
906
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
907
        //    range on a splittable integer type, try to split [low, high] into multiple
908
        //    sub-ranges for parallel / pipelined scanning.
909
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
910
34
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
911
34
            !range.is_reject_split_type()) {
912
34
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
913
34
                                                 _end_include);
914
915
34
            if (!(*eos) &&
916
34
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
917
34
                                                 _end_include, max_scan_key_num)) {
918
34
                _has_range_value = true;
919
34
            }
920
34
            return Status::OK();
921
34
        }
922
34
    }
923
924
    // ====================================================================
925
    // 5. Actually extend scan keys with this column's values.
926
    // ====================================================================
927
928
3
    if (range.is_fixed_value_range()) {
929
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
930
3
        if (_begin_scan_keys.empty()) {
931
            // First column: create one key pair per fixed value.
932
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
933
3
            auto fixed_value_set = range.get_fixed_value_set();
934
3
            ConstIterator iter = fixed_value_set.begin();
935
936
10
            for (; iter != fixed_value_set.end(); ++iter) {
937
7
                _begin_scan_keys.emplace_back();
938
7
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
7
                _end_scan_keys.emplace_back();
940
7
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
941
7
            }
942
943
3
            if (range.contain_null()) {
944
0
                _begin_scan_keys.emplace_back();
945
0
                _begin_scan_keys.back().add_null();
946
0
                _end_scan_keys.emplace_back();
947
0
                _end_scan_keys.back().add_null();
948
0
            }
949
3
        } else {
950
            // Subsequent column: Cartesian product of existing keys × new fixed values.
951
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
952
            //     → [(1,10),(1,20),(2,10),(2,20)]
953
0
            auto fixed_value_set = range.get_fixed_value_set();
954
0
            size_t original_key_range_size = _begin_scan_keys.size();
955
956
0
            for (int i = 0; i < original_key_range_size; ++i) {
957
0
                OlapTuple start_base_key_range = _begin_scan_keys[i];
958
0
                OlapTuple end_base_key_range = _end_scan_keys[i];
959
960
0
                ConstIterator iter = fixed_value_set.begin();
961
962
0
                for (; iter != fixed_value_set.end(); ++iter) {
963
                    // Reuse i-th slot for the first value, append new slots for the rest.
964
0
                    if (iter == fixed_value_set.begin()) {
965
0
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
966
0
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
967
0
                    } else {
968
0
                        _begin_scan_keys.push_back(start_base_key_range);
969
0
                        _begin_scan_keys.back().add_field(
970
0
                                Field::create_field<primitive_type>(*iter));
971
0
                        _end_scan_keys.push_back(end_base_key_range);
972
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
973
0
                    }
974
0
                }
975
976
0
                if (range.contain_null()) {
977
0
                    _begin_scan_keys.push_back(start_base_key_range);
978
0
                    _begin_scan_keys.back().add_null();
979
0
                    _end_scan_keys.push_back(end_base_key_range);
980
0
                    _end_scan_keys.back().add_null();
981
0
                }
982
0
            }
983
0
        }
984
985
        // Fixed values are always closed intervals (begin == end, point lookup).
986
3
        _begin_include = true;
987
3
        _end_include = true;
988
3
    } else {
989
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
990
        // After this, no more columns can be appended (_has_range_value = true),
991
        // because the range semantics only apply to the last appended column.
992
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
993
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
994
        //     → begin_include=true, end_include=false
995
0
        _has_range_value = true;
996
997
        // Special case: max < min means the range itself is empty,
998
        // but contain_null() is true, so only null values match this column.
999
0
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
1000
0
            CHECK(range.contain_null());
1001
0
            if (_begin_scan_keys.empty()) {
1002
0
                _begin_scan_keys.emplace_back();
1003
0
                _begin_scan_keys.back().add_null();
1004
0
                _end_scan_keys.emplace_back();
1005
0
                _end_scan_keys.back().add_null();
1006
0
            } else {
1007
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1008
0
                    _begin_scan_keys[i].add_null();
1009
0
                    _end_scan_keys[i].add_null();
1010
0
                }
1011
0
            }
1012
0
        } else if (_begin_scan_keys.empty()) {
1013
            // First column as a range:
1014
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1015
0
            _begin_scan_keys.emplace_back();
1016
0
            if (range.contain_null()) {
1017
0
                _begin_scan_keys.back().add_null();
1018
0
            } else {
1019
0
                _begin_scan_keys.back().add_field(
1020
0
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1021
0
            }
1022
0
            _end_scan_keys.emplace_back();
1023
0
            _end_scan_keys.back().add_field(
1024
0
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1025
0
        } else {
1026
            // Subsequent column as a range: append min/max to every existing key pair.
1027
0
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1028
0
                if (range.contain_null()) {
1029
0
                    _begin_scan_keys[i].add_null();
1030
0
                } else {
1031
0
                    _begin_scan_keys[i].add_field(
1032
0
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1033
0
                }
1034
0
            }
1035
1036
0
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1037
0
                _end_scan_keys[i].add_field(
1038
0
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1039
0
            }
1040
0
        }
1041
0
        _begin_include = range.is_begin_include();
1042
0
        _end_include = range.is_end_include();
1043
0
    }
1044
1045
3
    return Status::OK();
1046
37
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE25EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
871
2.44k
                                     bool* should_break) {
872
2.44k
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
873
874
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
875
    //    clear all accumulated keys — no rows can match.
876
2.44k
    if (range.is_empty_value_range()) {
877
0
        _begin_scan_keys.clear();
878
0
        _end_scan_keys.clear();
879
0
        return Status::OK();
880
0
    }
881
882
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
883
    //    because the begin/end keys would have different semantics per pair.
884
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
885
2.44k
    if (_has_range_value) {
886
0
        return Status::OK();
887
0
    }
888
889
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
890
    //    Cartesian product would be too large.
891
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
892
    //      set *exact_value = false (keep predicate as residual filter).
893
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
894
2.44k
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
895
2.44k
    if (range.is_fixed_value_range()) {
896
177
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
897
0
            if (range.is_range_value_convertible()) {
898
0
                range.convert_to_range_value();
899
0
                *exact_value = false;
900
0
            } else {
901
0
                *should_break = true;
902
0
                return Status::OK();
903
0
            }
904
0
        }
905
2.26k
    } else {
906
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
907
        //    range on a splittable integer type, try to split [low, high] into multiple
908
        //    sub-ranges for parallel / pipelined scanning.
909
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
910
2.26k
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
911
2.26k
            !range.is_reject_split_type()) {
912
2.18k
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
913
2.18k
                                                 _end_include);
914
915
2.18k
            if (!(*eos) &&
916
2.18k
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
917
2.18k
                                                 _end_include, max_scan_key_num)) {
918
2.08k
                _has_range_value = true;
919
2.08k
            }
920
2.18k
            return Status::OK();
921
2.18k
        }
922
2.26k
    }
923
924
    // ====================================================================
925
    // 5. Actually extend scan keys with this column's values.
926
    // ====================================================================
927
928
257
    if (range.is_fixed_value_range()) {
929
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
930
175
        if (_begin_scan_keys.empty()) {
931
            // First column: create one key pair per fixed value.
932
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
933
174
            auto fixed_value_set = range.get_fixed_value_set();
934
174
            ConstIterator iter = fixed_value_set.begin();
935
936
366
            for (; iter != fixed_value_set.end(); ++iter) {
937
192
                _begin_scan_keys.emplace_back();
938
192
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
192
                _end_scan_keys.emplace_back();
940
192
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
941
192
            }
942
943
174
            if (range.contain_null()) {
944
0
                _begin_scan_keys.emplace_back();
945
0
                _begin_scan_keys.back().add_null();
946
0
                _end_scan_keys.emplace_back();
947
0
                _end_scan_keys.back().add_null();
948
0
            }
949
174
        } else {
950
            // Subsequent column: Cartesian product of existing keys × new fixed values.
951
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
952
            //     → [(1,10),(1,20),(2,10),(2,20)]
953
1
            auto fixed_value_set = range.get_fixed_value_set();
954
1
            size_t original_key_range_size = _begin_scan_keys.size();
955
956
3
            for (int i = 0; i < original_key_range_size; ++i) {
957
2
                OlapTuple start_base_key_range = _begin_scan_keys[i];
958
2
                OlapTuple end_base_key_range = _end_scan_keys[i];
959
960
2
                ConstIterator iter = fixed_value_set.begin();
961
962
4
                for (; iter != fixed_value_set.end(); ++iter) {
963
                    // Reuse i-th slot for the first value, append new slots for the rest.
964
2
                    if (iter == fixed_value_set.begin()) {
965
2
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
966
2
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
967
2
                    } else {
968
0
                        _begin_scan_keys.push_back(start_base_key_range);
969
0
                        _begin_scan_keys.back().add_field(
970
0
                                Field::create_field<primitive_type>(*iter));
971
0
                        _end_scan_keys.push_back(end_base_key_range);
972
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
973
0
                    }
974
2
                }
975
976
2
                if (range.contain_null()) {
977
0
                    _begin_scan_keys.push_back(start_base_key_range);
978
0
                    _begin_scan_keys.back().add_null();
979
0
                    _end_scan_keys.push_back(end_base_key_range);
980
0
                    _end_scan_keys.back().add_null();
981
0
                }
982
2
            }
983
1
        }
984
985
        // Fixed values are always closed intervals (begin == end, point lookup).
986
175
        _begin_include = true;
987
175
        _end_include = true;
988
175
    } else {
989
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
990
        // After this, no more columns can be appended (_has_range_value = true),
991
        // because the range semantics only apply to the last appended column.
992
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
993
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
994
        //     → begin_include=true, end_include=false
995
82
        _has_range_value = true;
996
997
        // Special case: max < min means the range itself is empty,
998
        // but contain_null() is true, so only null values match this column.
999
82
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
1000
0
            CHECK(range.contain_null());
1001
0
            if (_begin_scan_keys.empty()) {
1002
0
                _begin_scan_keys.emplace_back();
1003
0
                _begin_scan_keys.back().add_null();
1004
0
                _end_scan_keys.emplace_back();
1005
0
                _end_scan_keys.back().add_null();
1006
0
            } else {
1007
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1008
0
                    _begin_scan_keys[i].add_null();
1009
0
                    _end_scan_keys[i].add_null();
1010
0
                }
1011
0
            }
1012
82
        } else if (_begin_scan_keys.empty()) {
1013
            // First column as a range:
1014
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1015
0
            _begin_scan_keys.emplace_back();
1016
0
            if (range.contain_null()) {
1017
0
                _begin_scan_keys.back().add_null();
1018
0
            } else {
1019
0
                _begin_scan_keys.back().add_field(
1020
0
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1021
0
            }
1022
0
            _end_scan_keys.emplace_back();
1023
0
            _end_scan_keys.back().add_field(
1024
0
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1025
82
        } else {
1026
            // Subsequent column as a range: append min/max to every existing key pair.
1027
186
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1028
104
                if (range.contain_null()) {
1029
31
                    _begin_scan_keys[i].add_null();
1030
73
                } else {
1031
73
                    _begin_scan_keys[i].add_field(
1032
73
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1033
73
                }
1034
104
            }
1035
1036
185
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1037
103
                _end_scan_keys[i].add_field(
1038
103
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1039
103
            }
1040
82
        }
1041
82
        _begin_include = range.is_begin_include();
1042
82
        _end_include = range.is_end_include();
1043
82
    }
1044
1045
257
    return Status::OK();
1046
2.44k
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE12EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
871
33
                                     bool* should_break) {
872
33
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
873
874
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
875
    //    clear all accumulated keys — no rows can match.
876
33
    if (range.is_empty_value_range()) {
877
0
        _begin_scan_keys.clear();
878
0
        _end_scan_keys.clear();
879
0
        return Status::OK();
880
0
    }
881
882
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
883
    //    because the begin/end keys would have different semantics per pair.
884
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
885
33
    if (_has_range_value) {
886
0
        return Status::OK();
887
0
    }
888
889
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
890
    //    Cartesian product would be too large.
891
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
892
    //      set *exact_value = false (keep predicate as residual filter).
893
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
894
33
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
895
33
    if (range.is_fixed_value_range()) {
896
3
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
897
0
            if (range.is_range_value_convertible()) {
898
0
                range.convert_to_range_value();
899
0
                *exact_value = false;
900
0
            } else {
901
0
                *should_break = true;
902
0
                return Status::OK();
903
0
            }
904
0
        }
905
30
    } else {
906
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
907
        //    range on a splittable integer type, try to split [low, high] into multiple
908
        //    sub-ranges for parallel / pipelined scanning.
909
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
910
30
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
911
30
            !range.is_reject_split_type()) {
912
0
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
913
0
                                                 _end_include);
914
915
0
            if (!(*eos) &&
916
0
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
917
0
                                                 _end_include, max_scan_key_num)) {
918
0
                _has_range_value = true;
919
0
            }
920
0
            return Status::OK();
921
0
        }
922
30
    }
923
924
    // ====================================================================
925
    // 5. Actually extend scan keys with this column's values.
926
    // ====================================================================
927
928
33
    if (range.is_fixed_value_range()) {
929
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
930
3
        if (_begin_scan_keys.empty()) {
931
            // First column: create one key pair per fixed value.
932
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
933
3
            auto fixed_value_set = range.get_fixed_value_set();
934
3
            ConstIterator iter = fixed_value_set.begin();
935
936
10
            for (; iter != fixed_value_set.end(); ++iter) {
937
7
                _begin_scan_keys.emplace_back();
938
7
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
7
                _end_scan_keys.emplace_back();
940
7
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
941
7
            }
942
943
3
            if (range.contain_null()) {
944
0
                _begin_scan_keys.emplace_back();
945
0
                _begin_scan_keys.back().add_null();
946
0
                _end_scan_keys.emplace_back();
947
0
                _end_scan_keys.back().add_null();
948
0
            }
949
3
        } else {
950
            // Subsequent column: Cartesian product of existing keys × new fixed values.
951
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
952
            //     → [(1,10),(1,20),(2,10),(2,20)]
953
0
            auto fixed_value_set = range.get_fixed_value_set();
954
0
            size_t original_key_range_size = _begin_scan_keys.size();
955
956
0
            for (int i = 0; i < original_key_range_size; ++i) {
957
0
                OlapTuple start_base_key_range = _begin_scan_keys[i];
958
0
                OlapTuple end_base_key_range = _end_scan_keys[i];
959
960
0
                ConstIterator iter = fixed_value_set.begin();
961
962
0
                for (; iter != fixed_value_set.end(); ++iter) {
963
                    // Reuse i-th slot for the first value, append new slots for the rest.
964
0
                    if (iter == fixed_value_set.begin()) {
965
0
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
966
0
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
967
0
                    } else {
968
0
                        _begin_scan_keys.push_back(start_base_key_range);
969
0
                        _begin_scan_keys.back().add_field(
970
0
                                Field::create_field<primitive_type>(*iter));
971
0
                        _end_scan_keys.push_back(end_base_key_range);
972
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
973
0
                    }
974
0
                }
975
976
0
                if (range.contain_null()) {
977
0
                    _begin_scan_keys.push_back(start_base_key_range);
978
0
                    _begin_scan_keys.back().add_null();
979
0
                    _end_scan_keys.push_back(end_base_key_range);
980
0
                    _end_scan_keys.back().add_null();
981
0
                }
982
0
            }
983
0
        }
984
985
        // Fixed values are always closed intervals (begin == end, point lookup).
986
3
        _begin_include = true;
987
3
        _end_include = true;
988
30
    } else {
989
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
990
        // After this, no more columns can be appended (_has_range_value = true),
991
        // because the range semantics only apply to the last appended column.
992
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
993
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
994
        //     → begin_include=true, end_include=false
995
30
        _has_range_value = true;
996
997
        // Special case: max < min means the range itself is empty,
998
        // but contain_null() is true, so only null values match this column.
999
30
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
1000
0
            CHECK(range.contain_null());
1001
0
            if (_begin_scan_keys.empty()) {
1002
0
                _begin_scan_keys.emplace_back();
1003
0
                _begin_scan_keys.back().add_null();
1004
0
                _end_scan_keys.emplace_back();
1005
0
                _end_scan_keys.back().add_null();
1006
0
            } else {
1007
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1008
0
                    _begin_scan_keys[i].add_null();
1009
0
                    _end_scan_keys[i].add_null();
1010
0
                }
1011
0
            }
1012
30
        } else if (_begin_scan_keys.empty()) {
1013
            // First column as a range:
1014
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1015
30
            _begin_scan_keys.emplace_back();
1016
30
            if (range.contain_null()) {
1017
27
                _begin_scan_keys.back().add_null();
1018
27
            } else {
1019
3
                _begin_scan_keys.back().add_field(
1020
3
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1021
3
            }
1022
30
            _end_scan_keys.emplace_back();
1023
30
            _end_scan_keys.back().add_field(
1024
30
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1025
30
        } else {
1026
            // Subsequent column as a range: append min/max to every existing key pair.
1027
0
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1028
0
                if (range.contain_null()) {
1029
0
                    _begin_scan_keys[i].add_null();
1030
0
                } else {
1031
0
                    _begin_scan_keys[i].add_field(
1032
0
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1033
0
                }
1034
0
            }
1035
1036
0
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1037
0
                _end_scan_keys[i].add_field(
1038
0
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1039
0
            }
1040
0
        }
1041
30
        _begin_include = range.is_begin_include();
1042
30
        _end_include = range.is_end_include();
1043
30
    }
1044
1045
33
    return Status::OK();
1046
33
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE26EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
871
2.37k
                                     bool* should_break) {
872
2.37k
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
873
874
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
875
    //    clear all accumulated keys — no rows can match.
876
2.37k
    if (range.is_empty_value_range()) {
877
0
        _begin_scan_keys.clear();
878
0
        _end_scan_keys.clear();
879
0
        return Status::OK();
880
0
    }
881
882
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
883
    //    because the begin/end keys would have different semantics per pair.
884
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
885
2.37k
    if (_has_range_value) {
886
0
        return Status::OK();
887
0
    }
888
889
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
890
    //    Cartesian product would be too large.
891
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
892
    //      set *exact_value = false (keep predicate as residual filter).
893
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
894
18.4E
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
895
2.37k
    if (range.is_fixed_value_range()) {
896
77
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
897
0
            if (range.is_range_value_convertible()) {
898
0
                range.convert_to_range_value();
899
0
                *exact_value = false;
900
0
            } else {
901
0
                *should_break = true;
902
0
                return Status::OK();
903
0
            }
904
0
        }
905
2.29k
    } else {
906
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
907
        //    range on a splittable integer type, try to split [low, high] into multiple
908
        //    sub-ranges for parallel / pipelined scanning.
909
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
910
2.29k
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
911
2.29k
            !range.is_reject_split_type()) {
912
0
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
913
0
                                                 _end_include);
914
915
0
            if (!(*eos) &&
916
0
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
917
0
                                                 _end_include, max_scan_key_num)) {
918
0
                _has_range_value = true;
919
0
            }
920
0
            return Status::OK();
921
0
        }
922
2.29k
    }
923
924
    // ====================================================================
925
    // 5. Actually extend scan keys with this column's values.
926
    // ====================================================================
927
928
2.37k
    if (range.is_fixed_value_range()) {
929
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
930
77
        if (_begin_scan_keys.empty()) {
931
            // First column: create one key pair per fixed value.
932
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
933
75
            auto fixed_value_set = range.get_fixed_value_set();
934
75
            ConstIterator iter = fixed_value_set.begin();
935
936
156
            for (; iter != fixed_value_set.end(); ++iter) {
937
81
                _begin_scan_keys.emplace_back();
938
81
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
81
                _end_scan_keys.emplace_back();
940
81
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
941
81
            }
942
943
75
            if (range.contain_null()) {
944
0
                _begin_scan_keys.emplace_back();
945
0
                _begin_scan_keys.back().add_null();
946
0
                _end_scan_keys.emplace_back();
947
0
                _end_scan_keys.back().add_null();
948
0
            }
949
75
        } else {
950
            // Subsequent column: Cartesian product of existing keys × new fixed values.
951
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
952
            //     → [(1,10),(1,20),(2,10),(2,20)]
953
2
            auto fixed_value_set = range.get_fixed_value_set();
954
2
            size_t original_key_range_size = _begin_scan_keys.size();
955
956
6
            for (int i = 0; i < original_key_range_size; ++i) {
957
4
                OlapTuple start_base_key_range = _begin_scan_keys[i];
958
4
                OlapTuple end_base_key_range = _end_scan_keys[i];
959
960
4
                ConstIterator iter = fixed_value_set.begin();
961
962
8
                for (; iter != fixed_value_set.end(); ++iter) {
963
                    // Reuse i-th slot for the first value, append new slots for the rest.
964
4
                    if (iter == fixed_value_set.begin()) {
965
4
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
966
4
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
967
4
                    } else {
968
0
                        _begin_scan_keys.push_back(start_base_key_range);
969
0
                        _begin_scan_keys.back().add_field(
970
0
                                Field::create_field<primitive_type>(*iter));
971
0
                        _end_scan_keys.push_back(end_base_key_range);
972
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
973
0
                    }
974
4
                }
975
976
4
                if (range.contain_null()) {
977
0
                    _begin_scan_keys.push_back(start_base_key_range);
978
0
                    _begin_scan_keys.back().add_null();
979
0
                    _end_scan_keys.push_back(end_base_key_range);
980
0
                    _end_scan_keys.back().add_null();
981
0
                }
982
4
            }
983
2
        }
984
985
        // Fixed values are always closed intervals (begin == end, point lookup).
986
77
        _begin_include = true;
987
77
        _end_include = true;
988
2.29k
    } else {
989
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
990
        // After this, no more columns can be appended (_has_range_value = true),
991
        // because the range semantics only apply to the last appended column.
992
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
993
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
994
        //     → begin_include=true, end_include=false
995
2.29k
        _has_range_value = true;
996
997
        // Special case: max < min means the range itself is empty,
998
        // but contain_null() is true, so only null values match this column.
999
2.29k
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
1000
0
            CHECK(range.contain_null());
1001
0
            if (_begin_scan_keys.empty()) {
1002
0
                _begin_scan_keys.emplace_back();
1003
0
                _begin_scan_keys.back().add_null();
1004
0
                _end_scan_keys.emplace_back();
1005
0
                _end_scan_keys.back().add_null();
1006
0
            } else {
1007
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1008
0
                    _begin_scan_keys[i].add_null();
1009
0
                    _end_scan_keys[i].add_null();
1010
0
                }
1011
0
            }
1012
2.29k
        } else if (_begin_scan_keys.empty()) {
1013
            // First column as a range:
1014
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1015
2.29k
            _begin_scan_keys.emplace_back();
1016
2.29k
            if (range.contain_null()) {
1017
1.05k
                _begin_scan_keys.back().add_null();
1018
1.24k
            } else {
1019
1.24k
                _begin_scan_keys.back().add_field(
1020
1.24k
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1021
1.24k
            }
1022
2.29k
            _end_scan_keys.emplace_back();
1023
2.29k
            _end_scan_keys.back().add_field(
1024
2.29k
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1025
2.29k
        } else {
1026
            // Subsequent column as a range: append min/max to every existing key pair.
1027
2
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1028
2
                if (range.contain_null()) {
1029
0
                    _begin_scan_keys[i].add_null();
1030
2
                } else {
1031
2
                    _begin_scan_keys[i].add_field(
1032
2
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1033
2
                }
1034
2
            }
1035
1036
2
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1037
2
                _end_scan_keys[i].add_field(
1038
2
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1039
2
            }
1040
0
        }
1041
2.29k
        _begin_include = range.is_begin_include();
1042
2.29k
        _end_include = range.is_end_include();
1043
2.29k
    }
1044
1045
2.37k
    return Status::OK();
1046
2.37k
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE42EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
871
3.56k
                                     bool* should_break) {
872
3.56k
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
873
874
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
875
    //    clear all accumulated keys — no rows can match.
876
3.56k
    if (range.is_empty_value_range()) {
877
0
        _begin_scan_keys.clear();
878
0
        _end_scan_keys.clear();
879
0
        return Status::OK();
880
0
    }
881
882
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
883
    //    because the begin/end keys would have different semantics per pair.
884
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
885
3.56k
    if (_has_range_value) {
886
0
        return Status::OK();
887
0
    }
888
889
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
890
    //    Cartesian product would be too large.
891
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
892
    //      set *exact_value = false (keep predicate as residual filter).
893
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
894
18.4E
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
895
3.56k
    if (range.is_fixed_value_range()) {
896
181
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
897
0
            if (range.is_range_value_convertible()) {
898
0
                range.convert_to_range_value();
899
0
                *exact_value = false;
900
0
            } else {
901
0
                *should_break = true;
902
0
                return Status::OK();
903
0
            }
904
0
        }
905
3.38k
    } else {
906
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
907
        //    range on a splittable integer type, try to split [low, high] into multiple
908
        //    sub-ranges for parallel / pipelined scanning.
909
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
910
3.40k
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
911
3.38k
            !range.is_reject_split_type()) {
912
0
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
913
0
                                                 _end_include);
914
915
0
            if (!(*eos) &&
916
0
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
917
0
                                                 _end_include, max_scan_key_num)) {
918
0
                _has_range_value = true;
919
0
            }
920
0
            return Status::OK();
921
0
        }
922
3.38k
    }
923
924
    // ====================================================================
925
    // 5. Actually extend scan keys with this column's values.
926
    // ====================================================================
927
928
3.56k
    if (range.is_fixed_value_range()) {
929
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
930
180
        if (_begin_scan_keys.empty()) {
931
            // First column: create one key pair per fixed value.
932
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
933
180
            auto fixed_value_set = range.get_fixed_value_set();
934
180
            ConstIterator iter = fixed_value_set.begin();
935
936
404
            for (; iter != fixed_value_set.end(); ++iter) {
937
224
                _begin_scan_keys.emplace_back();
938
224
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
224
                _end_scan_keys.emplace_back();
940
224
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
941
224
            }
942
943
180
            if (range.contain_null()) {
944
0
                _begin_scan_keys.emplace_back();
945
0
                _begin_scan_keys.back().add_null();
946
0
                _end_scan_keys.emplace_back();
947
0
                _end_scan_keys.back().add_null();
948
0
            }
949
180
        } else {
950
            // Subsequent column: Cartesian product of existing keys × new fixed values.
951
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
952
            //     → [(1,10),(1,20),(2,10),(2,20)]
953
0
            auto fixed_value_set = range.get_fixed_value_set();
954
0
            size_t original_key_range_size = _begin_scan_keys.size();
955
956
0
            for (int i = 0; i < original_key_range_size; ++i) {
957
0
                OlapTuple start_base_key_range = _begin_scan_keys[i];
958
0
                OlapTuple end_base_key_range = _end_scan_keys[i];
959
960
0
                ConstIterator iter = fixed_value_set.begin();
961
962
0
                for (; iter != fixed_value_set.end(); ++iter) {
963
                    // Reuse i-th slot for the first value, append new slots for the rest.
964
0
                    if (iter == fixed_value_set.begin()) {
965
0
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
966
0
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
967
0
                    } else {
968
0
                        _begin_scan_keys.push_back(start_base_key_range);
969
0
                        _begin_scan_keys.back().add_field(
970
0
                                Field::create_field<primitive_type>(*iter));
971
0
                        _end_scan_keys.push_back(end_base_key_range);
972
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
973
0
                    }
974
0
                }
975
976
0
                if (range.contain_null()) {
977
0
                    _begin_scan_keys.push_back(start_base_key_range);
978
0
                    _begin_scan_keys.back().add_null();
979
0
                    _end_scan_keys.push_back(end_base_key_range);
980
0
                    _end_scan_keys.back().add_null();
981
0
                }
982
0
            }
983
0
        }
984
985
        // Fixed values are always closed intervals (begin == end, point lookup).
986
180
        _begin_include = true;
987
180
        _end_include = true;
988
3.38k
    } else {
989
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
990
        // After this, no more columns can be appended (_has_range_value = true),
991
        // because the range semantics only apply to the last appended column.
992
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
993
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
994
        //     → begin_include=true, end_include=false
995
3.38k
        _has_range_value = true;
996
997
        // Special case: max < min means the range itself is empty,
998
        // but contain_null() is true, so only null values match this column.
999
3.38k
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
1000
9
            CHECK(range.contain_null());
1001
9
            if (_begin_scan_keys.empty()) {
1002
9
                _begin_scan_keys.emplace_back();
1003
9
                _begin_scan_keys.back().add_null();
1004
9
                _end_scan_keys.emplace_back();
1005
9
                _end_scan_keys.back().add_null();
1006
9
            } else {
1007
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1008
0
                    _begin_scan_keys[i].add_null();
1009
0
                    _end_scan_keys[i].add_null();
1010
0
                }
1011
0
            }
1012
3.39k
        } else if (_begin_scan_keys.empty()) {
1013
            // First column as a range:
1014
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1015
3.39k
            _begin_scan_keys.emplace_back();
1016
3.39k
            if (range.contain_null()) {
1017
2.70k
                _begin_scan_keys.back().add_null();
1018
2.70k
            } else {
1019
693
                _begin_scan_keys.back().add_field(
1020
693
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1021
693
            }
1022
3.39k
            _end_scan_keys.emplace_back();
1023
3.39k
            _end_scan_keys.back().add_field(
1024
3.39k
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1025
18.4E
        } else {
1026
            // Subsequent column as a range: append min/max to every existing key pair.
1027
18.4E
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1028
0
                if (range.contain_null()) {
1029
0
                    _begin_scan_keys[i].add_null();
1030
0
                } else {
1031
0
                    _begin_scan_keys[i].add_field(
1032
0
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1033
0
                }
1034
0
            }
1035
1036
18.4E
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1037
0
                _end_scan_keys[i].add_field(
1038
0
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1039
0
            }
1040
18.4E
        }
1041
3.38k
        _begin_include = range.is_begin_include();
1042
3.38k
        _end_include = range.is_end_include();
1043
3.38k
    }
1044
1045
3.56k
    return Status::OK();
1046
3.56k
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE20EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
871
88
                                     bool* should_break) {
872
88
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
873
874
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
875
    //    clear all accumulated keys — no rows can match.
876
88
    if (range.is_empty_value_range()) {
877
0
        _begin_scan_keys.clear();
878
0
        _end_scan_keys.clear();
879
0
        return Status::OK();
880
0
    }
881
882
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
883
    //    because the begin/end keys would have different semantics per pair.
884
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
885
88
    if (_has_range_value) {
886
0
        return Status::OK();
887
0
    }
888
889
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
890
    //    Cartesian product would be too large.
891
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
892
    //      set *exact_value = false (keep predicate as residual filter).
893
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
894
18.4E
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
895
88
    if (range.is_fixed_value_range()) {
896
1
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
897
0
            if (range.is_range_value_convertible()) {
898
0
                range.convert_to_range_value();
899
0
                *exact_value = false;
900
0
            } else {
901
0
                *should_break = true;
902
0
                return Status::OK();
903
0
            }
904
0
        }
905
87
    } else {
906
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
907
        //    range on a splittable integer type, try to split [low, high] into multiple
908
        //    sub-ranges for parallel / pipelined scanning.
909
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
910
88
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
911
87
            !range.is_reject_split_type()) {
912
0
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
913
0
                                                 _end_include);
914
915
0
            if (!(*eos) &&
916
0
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
917
0
                                                 _end_include, max_scan_key_num)) {
918
0
                _has_range_value = true;
919
0
            }
920
0
            return Status::OK();
921
0
        }
922
87
    }
923
924
    // ====================================================================
925
    // 5. Actually extend scan keys with this column's values.
926
    // ====================================================================
927
928
88
    if (range.is_fixed_value_range()) {
929
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
930
1
        if (_begin_scan_keys.empty()) {
931
            // First column: create one key pair per fixed value.
932
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
933
1
            auto fixed_value_set = range.get_fixed_value_set();
934
1
            ConstIterator iter = fixed_value_set.begin();
935
936
2
            for (; iter != fixed_value_set.end(); ++iter) {
937
1
                _begin_scan_keys.emplace_back();
938
1
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
1
                _end_scan_keys.emplace_back();
940
1
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
941
1
            }
942
943
1
            if (range.contain_null()) {
944
0
                _begin_scan_keys.emplace_back();
945
0
                _begin_scan_keys.back().add_null();
946
0
                _end_scan_keys.emplace_back();
947
0
                _end_scan_keys.back().add_null();
948
0
            }
949
1
        } else {
950
            // Subsequent column: Cartesian product of existing keys × new fixed values.
951
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
952
            //     → [(1,10),(1,20),(2,10),(2,20)]
953
0
            auto fixed_value_set = range.get_fixed_value_set();
954
0
            size_t original_key_range_size = _begin_scan_keys.size();
955
956
0
            for (int i = 0; i < original_key_range_size; ++i) {
957
0
                OlapTuple start_base_key_range = _begin_scan_keys[i];
958
0
                OlapTuple end_base_key_range = _end_scan_keys[i];
959
960
0
                ConstIterator iter = fixed_value_set.begin();
961
962
0
                for (; iter != fixed_value_set.end(); ++iter) {
963
                    // Reuse i-th slot for the first value, append new slots for the rest.
964
0
                    if (iter == fixed_value_set.begin()) {
965
0
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
966
0
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
967
0
                    } else {
968
0
                        _begin_scan_keys.push_back(start_base_key_range);
969
0
                        _begin_scan_keys.back().add_field(
970
0
                                Field::create_field<primitive_type>(*iter));
971
0
                        _end_scan_keys.push_back(end_base_key_range);
972
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
973
0
                    }
974
0
                }
975
976
0
                if (range.contain_null()) {
977
0
                    _begin_scan_keys.push_back(start_base_key_range);
978
0
                    _begin_scan_keys.back().add_null();
979
0
                    _end_scan_keys.push_back(end_base_key_range);
980
0
                    _end_scan_keys.back().add_null();
981
0
                }
982
0
            }
983
0
        }
984
985
        // Fixed values are always closed intervals (begin == end, point lookup).
986
1
        _begin_include = true;
987
1
        _end_include = true;
988
87
    } else {
989
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
990
        // After this, no more columns can be appended (_has_range_value = true),
991
        // because the range semantics only apply to the last appended column.
992
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
993
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
994
        //     → begin_include=true, end_include=false
995
87
        _has_range_value = true;
996
997
        // Special case: max < min means the range itself is empty,
998
        // but contain_null() is true, so only null values match this column.
999
87
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
1000
0
            CHECK(range.contain_null());
1001
0
            if (_begin_scan_keys.empty()) {
1002
0
                _begin_scan_keys.emplace_back();
1003
0
                _begin_scan_keys.back().add_null();
1004
0
                _end_scan_keys.emplace_back();
1005
0
                _end_scan_keys.back().add_null();
1006
0
            } else {
1007
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1008
0
                    _begin_scan_keys[i].add_null();
1009
0
                    _end_scan_keys[i].add_null();
1010
0
                }
1011
0
            }
1012
87
        } else if (_begin_scan_keys.empty()) {
1013
            // First column as a range:
1014
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1015
86
            _begin_scan_keys.emplace_back();
1016
88
            if (range.contain_null()) {
1017
88
                _begin_scan_keys.back().add_null();
1018
18.4E
            } else {
1019
18.4E
                _begin_scan_keys.back().add_field(
1020
18.4E
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1021
18.4E
            }
1022
86
            _end_scan_keys.emplace_back();
1023
86
            _end_scan_keys.back().add_field(
1024
86
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1025
86
        } else {
1026
            // Subsequent column as a range: append min/max to every existing key pair.
1027
2
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1028
1
                if (range.contain_null()) {
1029
1
                    _begin_scan_keys[i].add_null();
1030
1
                } else {
1031
0
                    _begin_scan_keys[i].add_field(
1032
0
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1033
0
                }
1034
1
            }
1035
1036
2
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1037
1
                _end_scan_keys[i].add_field(
1038
1
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1039
1
            }
1040
1
        }
1041
87
        _begin_include = range.is_begin_include();
1042
87
        _end_include = range.is_end_include();
1043
87
    }
1044
1045
88
    return Status::OK();
1046
88
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE2EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
871
1.64k
                                     bool* should_break) {
872
1.64k
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
873
874
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
875
    //    clear all accumulated keys — no rows can match.
876
1.64k
    if (range.is_empty_value_range()) {
877
0
        _begin_scan_keys.clear();
878
0
        _end_scan_keys.clear();
879
0
        return Status::OK();
880
0
    }
881
882
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
883
    //    because the begin/end keys would have different semantics per pair.
884
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
885
1.64k
    if (_has_range_value) {
886
0
        return Status::OK();
887
0
    }
888
889
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
890
    //    Cartesian product would be too large.
891
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
892
    //      set *exact_value = false (keep predicate as residual filter).
893
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
894
18.4E
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
895
1.64k
    if (range.is_fixed_value_range()) {
896
5
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
897
1
            if (range.is_range_value_convertible()) {
898
0
                range.convert_to_range_value();
899
0
                *exact_value = false;
900
1
            } else {
901
1
                *should_break = true;
902
1
                return Status::OK();
903
1
            }
904
1
        }
905
1.64k
    } else {
906
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
907
        //    range on a splittable integer type, try to split [low, high] into multiple
908
        //    sub-ranges for parallel / pipelined scanning.
909
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
910
1.67k
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
911
1.64k
            !range.is_reject_split_type()) {
912
0
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
913
0
                                                 _end_include);
914
915
0
            if (!(*eos) &&
916
0
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
917
0
                                                 _end_include, max_scan_key_num)) {
918
0
                _has_range_value = true;
919
0
            }
920
0
            return Status::OK();
921
0
        }
922
1.64k
    }
923
924
    // ====================================================================
925
    // 5. Actually extend scan keys with this column's values.
926
    // ====================================================================
927
928
1.64k
    if (range.is_fixed_value_range()) {
929
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
930
4
        if (_begin_scan_keys.empty()) {
931
            // First column: create one key pair per fixed value.
932
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
933
4
            auto fixed_value_set = range.get_fixed_value_set();
934
4
            ConstIterator iter = fixed_value_set.begin();
935
936
10
            for (; iter != fixed_value_set.end(); ++iter) {
937
6
                _begin_scan_keys.emplace_back();
938
6
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
6
                _end_scan_keys.emplace_back();
940
6
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
941
6
            }
942
943
4
            if (range.contain_null()) {
944
0
                _begin_scan_keys.emplace_back();
945
0
                _begin_scan_keys.back().add_null();
946
0
                _end_scan_keys.emplace_back();
947
0
                _end_scan_keys.back().add_null();
948
0
            }
949
4
        } else {
950
            // Subsequent column: Cartesian product of existing keys × new fixed values.
951
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
952
            //     → [(1,10),(1,20),(2,10),(2,20)]
953
0
            auto fixed_value_set = range.get_fixed_value_set();
954
0
            size_t original_key_range_size = _begin_scan_keys.size();
955
956
0
            for (int i = 0; i < original_key_range_size; ++i) {
957
0
                OlapTuple start_base_key_range = _begin_scan_keys[i];
958
0
                OlapTuple end_base_key_range = _end_scan_keys[i];
959
960
0
                ConstIterator iter = fixed_value_set.begin();
961
962
0
                for (; iter != fixed_value_set.end(); ++iter) {
963
                    // Reuse i-th slot for the first value, append new slots for the rest.
964
0
                    if (iter == fixed_value_set.begin()) {
965
0
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
966
0
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
967
0
                    } else {
968
0
                        _begin_scan_keys.push_back(start_base_key_range);
969
0
                        _begin_scan_keys.back().add_field(
970
0
                                Field::create_field<primitive_type>(*iter));
971
0
                        _end_scan_keys.push_back(end_base_key_range);
972
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
973
0
                    }
974
0
                }
975
976
0
                if (range.contain_null()) {
977
0
                    _begin_scan_keys.push_back(start_base_key_range);
978
0
                    _begin_scan_keys.back().add_null();
979
0
                    _end_scan_keys.push_back(end_base_key_range);
980
0
                    _end_scan_keys.back().add_null();
981
0
                }
982
0
            }
983
0
        }
984
985
        // Fixed values are always closed intervals (begin == end, point lookup).
986
4
        _begin_include = true;
987
4
        _end_include = true;
988
1.64k
    } else {
989
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
990
        // After this, no more columns can be appended (_has_range_value = true),
991
        // because the range semantics only apply to the last appended column.
992
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
993
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
994
        //     → begin_include=true, end_include=false
995
1.64k
        _has_range_value = true;
996
997
        // Special case: max < min means the range itself is empty,
998
        // but contain_null() is true, so only null values match this column.
999
1.64k
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
1000
6
            CHECK(range.contain_null());
1001
6
            if (_begin_scan_keys.empty()) {
1002
6
                _begin_scan_keys.emplace_back();
1003
6
                _begin_scan_keys.back().add_null();
1004
6
                _end_scan_keys.emplace_back();
1005
6
                _end_scan_keys.back().add_null();
1006
6
            } else {
1007
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1008
0
                    _begin_scan_keys[i].add_null();
1009
0
                    _end_scan_keys[i].add_null();
1010
0
                }
1011
0
            }
1012
1.66k
        } else if (_begin_scan_keys.empty()) {
1013
            // First column as a range:
1014
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1015
1.66k
            _begin_scan_keys.emplace_back();
1016
1.66k
            if (range.contain_null()) {
1017
1.56k
                _begin_scan_keys.back().add_null();
1018
1.56k
            } else {
1019
105
                _begin_scan_keys.back().add_field(
1020
105
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1021
105
            }
1022
1.66k
            _end_scan_keys.emplace_back();
1023
1.66k
            _end_scan_keys.back().add_field(
1024
1.66k
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1025
18.4E
        } else {
1026
            // Subsequent column as a range: append min/max to every existing key pair.
1027
18.4E
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1028
30
                if (range.contain_null()) {
1029
1
                    _begin_scan_keys[i].add_null();
1030
29
                } else {
1031
29
                    _begin_scan_keys[i].add_field(
1032
29
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1033
29
                }
1034
30
            }
1035
1036
18.4E
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1037
30
                _end_scan_keys[i].add_field(
1038
30
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1039
30
            }
1040
18.4E
        }
1041
1.64k
        _begin_include = range.is_begin_include();
1042
1.64k
        _end_include = range.is_end_include();
1043
1.64k
    }
1044
1045
1.64k
    return Status::OK();
1046
1.64k
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE28EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
871
504
                                     bool* should_break) {
872
504
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
873
874
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
875
    //    clear all accumulated keys — no rows can match.
876
504
    if (range.is_empty_value_range()) {
877
0
        _begin_scan_keys.clear();
878
0
        _end_scan_keys.clear();
879
0
        return Status::OK();
880
0
    }
881
882
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
883
    //    because the begin/end keys would have different semantics per pair.
884
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
885
504
    if (_has_range_value) {
886
0
        return Status::OK();
887
0
    }
888
889
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
890
    //    Cartesian product would be too large.
891
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
892
    //      set *exact_value = false (keep predicate as residual filter).
893
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
894
18.4E
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
895
504
    if (range.is_fixed_value_range()) {
896
21
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
897
0
            if (range.is_range_value_convertible()) {
898
0
                range.convert_to_range_value();
899
0
                *exact_value = false;
900
0
            } else {
901
0
                *should_break = true;
902
0
                return Status::OK();
903
0
            }
904
0
        }
905
483
    } else {
906
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
907
        //    range on a splittable integer type, try to split [low, high] into multiple
908
        //    sub-ranges for parallel / pipelined scanning.
909
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
910
490
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
911
483
            !range.is_reject_split_type()) {
912
0
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
913
0
                                                 _end_include);
914
915
0
            if (!(*eos) &&
916
0
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
917
0
                                                 _end_include, max_scan_key_num)) {
918
0
                _has_range_value = true;
919
0
            }
920
0
            return Status::OK();
921
0
        }
922
483
    }
923
924
    // ====================================================================
925
    // 5. Actually extend scan keys with this column's values.
926
    // ====================================================================
927
928
504
    if (range.is_fixed_value_range()) {
929
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
930
21
        if (_begin_scan_keys.empty()) {
931
            // First column: create one key pair per fixed value.
932
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
933
19
            auto fixed_value_set = range.get_fixed_value_set();
934
19
            ConstIterator iter = fixed_value_set.begin();
935
936
47
            for (; iter != fixed_value_set.end(); ++iter) {
937
28
                _begin_scan_keys.emplace_back();
938
28
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
28
                _end_scan_keys.emplace_back();
940
28
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
941
28
            }
942
943
19
            if (range.contain_null()) {
944
0
                _begin_scan_keys.emplace_back();
945
0
                _begin_scan_keys.back().add_null();
946
0
                _end_scan_keys.emplace_back();
947
0
                _end_scan_keys.back().add_null();
948
0
            }
949
19
        } else {
950
            // Subsequent column: Cartesian product of existing keys × new fixed values.
951
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
952
            //     → [(1,10),(1,20),(2,10),(2,20)]
953
2
            auto fixed_value_set = range.get_fixed_value_set();
954
2
            size_t original_key_range_size = _begin_scan_keys.size();
955
956
4
            for (int i = 0; i < original_key_range_size; ++i) {
957
2
                OlapTuple start_base_key_range = _begin_scan_keys[i];
958
2
                OlapTuple end_base_key_range = _end_scan_keys[i];
959
960
2
                ConstIterator iter = fixed_value_set.begin();
961
962
4
                for (; iter != fixed_value_set.end(); ++iter) {
963
                    // Reuse i-th slot for the first value, append new slots for the rest.
964
2
                    if (iter == fixed_value_set.begin()) {
965
2
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
966
2
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
967
2
                    } else {
968
0
                        _begin_scan_keys.push_back(start_base_key_range);
969
0
                        _begin_scan_keys.back().add_field(
970
0
                                Field::create_field<primitive_type>(*iter));
971
0
                        _end_scan_keys.push_back(end_base_key_range);
972
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
973
0
                    }
974
2
                }
975
976
2
                if (range.contain_null()) {
977
0
                    _begin_scan_keys.push_back(start_base_key_range);
978
0
                    _begin_scan_keys.back().add_null();
979
0
                    _end_scan_keys.push_back(end_base_key_range);
980
0
                    _end_scan_keys.back().add_null();
981
0
                }
982
2
            }
983
2
        }
984
985
        // Fixed values are always closed intervals (begin == end, point lookup).
986
21
        _begin_include = true;
987
21
        _end_include = true;
988
483
    } else {
989
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
990
        // After this, no more columns can be appended (_has_range_value = true),
991
        // because the range semantics only apply to the last appended column.
992
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
993
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
994
        //     → begin_include=true, end_include=false
995
483
        _has_range_value = true;
996
997
        // Special case: max < min means the range itself is empty,
998
        // but contain_null() is true, so only null values match this column.
999
483
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
1000
0
            CHECK(range.contain_null());
1001
0
            if (_begin_scan_keys.empty()) {
1002
0
                _begin_scan_keys.emplace_back();
1003
0
                _begin_scan_keys.back().add_null();
1004
0
                _end_scan_keys.emplace_back();
1005
0
                _end_scan_keys.back().add_null();
1006
0
            } else {
1007
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1008
0
                    _begin_scan_keys[i].add_null();
1009
0
                    _end_scan_keys[i].add_null();
1010
0
                }
1011
0
            }
1012
491
        } else if (_begin_scan_keys.empty()) {
1013
            // First column as a range:
1014
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1015
491
            _begin_scan_keys.emplace_back();
1016
491
            if (range.contain_null()) {
1017
467
                _begin_scan_keys.back().add_null();
1018
467
            } else {
1019
24
                _begin_scan_keys.back().add_field(
1020
24
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1021
24
            }
1022
491
            _end_scan_keys.emplace_back();
1023
491
            _end_scan_keys.back().add_field(
1024
491
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1025
18.4E
        } else {
1026
            // Subsequent column as a range: append min/max to every existing key pair.
1027
18.4E
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1028
1
                if (range.contain_null()) {
1029
1
                    _begin_scan_keys[i].add_null();
1030
1
                } else {
1031
0
                    _begin_scan_keys[i].add_field(
1032
0
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1033
0
                }
1034
1
            }
1035
1036
18.4E
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1037
1
                _end_scan_keys[i].add_field(
1038
1
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1039
1
            }
1040
18.4E
        }
1041
483
        _begin_include = range.is_begin_include();
1042
483
        _end_include = range.is_end_include();
1043
483
    }
1044
1045
504
    return Status::OK();
1046
504
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE29EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
871
780
                                     bool* should_break) {
872
780
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
873
874
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
875
    //    clear all accumulated keys — no rows can match.
876
780
    if (range.is_empty_value_range()) {
877
0
        _begin_scan_keys.clear();
878
0
        _end_scan_keys.clear();
879
0
        return Status::OK();
880
0
    }
881
882
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
883
    //    because the begin/end keys would have different semantics per pair.
884
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
885
780
    if (_has_range_value) {
886
0
        return Status::OK();
887
0
    }
888
889
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
890
    //    Cartesian product would be too large.
891
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
892
    //      set *exact_value = false (keep predicate as residual filter).
893
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
894
780
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
895
780
    if (range.is_fixed_value_range()) {
896
20
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
897
0
            if (range.is_range_value_convertible()) {
898
0
                range.convert_to_range_value();
899
0
                *exact_value = false;
900
0
            } else {
901
0
                *should_break = true;
902
0
                return Status::OK();
903
0
            }
904
0
        }
905
760
    } else {
906
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
907
        //    range on a splittable integer type, try to split [low, high] into multiple
908
        //    sub-ranges for parallel / pipelined scanning.
909
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
910
760
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
911
760
            !range.is_reject_split_type()) {
912
0
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
913
0
                                                 _end_include);
914
915
0
            if (!(*eos) &&
916
0
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
917
0
                                                 _end_include, max_scan_key_num)) {
918
0
                _has_range_value = true;
919
0
            }
920
0
            return Status::OK();
921
0
        }
922
760
    }
923
924
    // ====================================================================
925
    // 5. Actually extend scan keys with this column's values.
926
    // ====================================================================
927
928
780
    if (range.is_fixed_value_range()) {
929
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
930
20
        if (_begin_scan_keys.empty()) {
931
            // First column: create one key pair per fixed value.
932
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
933
19
            auto fixed_value_set = range.get_fixed_value_set();
934
19
            ConstIterator iter = fixed_value_set.begin();
935
936
38
            for (; iter != fixed_value_set.end(); ++iter) {
937
19
                _begin_scan_keys.emplace_back();
938
19
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
19
                _end_scan_keys.emplace_back();
940
19
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
941
19
            }
942
943
19
            if (range.contain_null()) {
944
0
                _begin_scan_keys.emplace_back();
945
0
                _begin_scan_keys.back().add_null();
946
0
                _end_scan_keys.emplace_back();
947
0
                _end_scan_keys.back().add_null();
948
0
            }
949
19
        } else {
950
            // Subsequent column: Cartesian product of existing keys × new fixed values.
951
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
952
            //     → [(1,10),(1,20),(2,10),(2,20)]
953
1
            auto fixed_value_set = range.get_fixed_value_set();
954
1
            size_t original_key_range_size = _begin_scan_keys.size();
955
956
2
            for (int i = 0; i < original_key_range_size; ++i) {
957
1
                OlapTuple start_base_key_range = _begin_scan_keys[i];
958
1
                OlapTuple end_base_key_range = _end_scan_keys[i];
959
960
1
                ConstIterator iter = fixed_value_set.begin();
961
962
2
                for (; iter != fixed_value_set.end(); ++iter) {
963
                    // Reuse i-th slot for the first value, append new slots for the rest.
964
1
                    if (iter == fixed_value_set.begin()) {
965
1
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
966
1
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
967
1
                    } else {
968
0
                        _begin_scan_keys.push_back(start_base_key_range);
969
0
                        _begin_scan_keys.back().add_field(
970
0
                                Field::create_field<primitive_type>(*iter));
971
0
                        _end_scan_keys.push_back(end_base_key_range);
972
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
973
0
                    }
974
1
                }
975
976
1
                if (range.contain_null()) {
977
0
                    _begin_scan_keys.push_back(start_base_key_range);
978
0
                    _begin_scan_keys.back().add_null();
979
0
                    _end_scan_keys.push_back(end_base_key_range);
980
0
                    _end_scan_keys.back().add_null();
981
0
                }
982
1
            }
983
1
        }
984
985
        // Fixed values are always closed intervals (begin == end, point lookup).
986
20
        _begin_include = true;
987
20
        _end_include = true;
988
760
    } else {
989
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
990
        // After this, no more columns can be appended (_has_range_value = true),
991
        // because the range semantics only apply to the last appended column.
992
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
993
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
994
        //     → begin_include=true, end_include=false
995
760
        _has_range_value = true;
996
997
        // Special case: max < min means the range itself is empty,
998
        // but contain_null() is true, so only null values match this column.
999
760
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
1000
0
            CHECK(range.contain_null());
1001
0
            if (_begin_scan_keys.empty()) {
1002
0
                _begin_scan_keys.emplace_back();
1003
0
                _begin_scan_keys.back().add_null();
1004
0
                _end_scan_keys.emplace_back();
1005
0
                _end_scan_keys.back().add_null();
1006
0
            } else {
1007
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1008
0
                    _begin_scan_keys[i].add_null();
1009
0
                    _end_scan_keys[i].add_null();
1010
0
                }
1011
0
            }
1012
760
        } else if (_begin_scan_keys.empty()) {
1013
            // First column as a range:
1014
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1015
745
            _begin_scan_keys.emplace_back();
1016
745
            if (range.contain_null()) {
1017
721
                _begin_scan_keys.back().add_null();
1018
721
            } else {
1019
24
                _begin_scan_keys.back().add_field(
1020
24
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1021
24
            }
1022
745
            _end_scan_keys.emplace_back();
1023
745
            _end_scan_keys.back().add_field(
1024
745
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1025
745
        } else {
1026
            // Subsequent column as a range: append min/max to every existing key pair.
1027
48
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1028
33
                if (range.contain_null()) {
1029
29
                    _begin_scan_keys[i].add_null();
1030
29
                } else {
1031
4
                    _begin_scan_keys[i].add_field(
1032
4
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1033
4
                }
1034
33
            }
1035
1036
47
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1037
32
                _end_scan_keys[i].add_field(
1038
32
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1039
32
            }
1040
15
        }
1041
760
        _begin_include = range.is_begin_include();
1042
760
        _end_include = range.is_end_include();
1043
760
    }
1044
1045
780
    return Status::OK();
1046
780
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE30EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
871
1.40k
                                     bool* should_break) {
872
1.40k
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
873
874
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
875
    //    clear all accumulated keys — no rows can match.
876
1.40k
    if (range.is_empty_value_range()) {
877
0
        _begin_scan_keys.clear();
878
0
        _end_scan_keys.clear();
879
0
        return Status::OK();
880
0
    }
881
882
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
883
    //    because the begin/end keys would have different semantics per pair.
884
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
885
1.40k
    if (_has_range_value) {
886
0
        return Status::OK();
887
0
    }
888
889
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
890
    //    Cartesian product would be too large.
891
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
892
    //      set *exact_value = false (keep predicate as residual filter).
893
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
894
1.40k
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
895
1.40k
    if (range.is_fixed_value_range()) {
896
6
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
897
0
            if (range.is_range_value_convertible()) {
898
0
                range.convert_to_range_value();
899
0
                *exact_value = false;
900
0
            } else {
901
0
                *should_break = true;
902
0
                return Status::OK();
903
0
            }
904
0
        }
905
1.40k
    } else {
906
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
907
        //    range on a splittable integer type, try to split [low, high] into multiple
908
        //    sub-ranges for parallel / pipelined scanning.
909
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
910
1.40k
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
911
1.40k
            !range.is_reject_split_type()) {
912
0
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
913
0
                                                 _end_include);
914
915
0
            if (!(*eos) &&
916
0
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
917
0
                                                 _end_include, max_scan_key_num)) {
918
0
                _has_range_value = true;
919
0
            }
920
0
            return Status::OK();
921
0
        }
922
1.40k
    }
923
924
    // ====================================================================
925
    // 5. Actually extend scan keys with this column's values.
926
    // ====================================================================
927
928
1.40k
    if (range.is_fixed_value_range()) {
929
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
930
6
        if (_begin_scan_keys.empty()) {
931
            // First column: create one key pair per fixed value.
932
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
933
6
            auto fixed_value_set = range.get_fixed_value_set();
934
6
            ConstIterator iter = fixed_value_set.begin();
935
936
12
            for (; iter != fixed_value_set.end(); ++iter) {
937
6
                _begin_scan_keys.emplace_back();
938
6
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
6
                _end_scan_keys.emplace_back();
940
6
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
941
6
            }
942
943
6
            if (range.contain_null()) {
944
0
                _begin_scan_keys.emplace_back();
945
0
                _begin_scan_keys.back().add_null();
946
0
                _end_scan_keys.emplace_back();
947
0
                _end_scan_keys.back().add_null();
948
0
            }
949
6
        } else {
950
            // Subsequent column: Cartesian product of existing keys × new fixed values.
951
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
952
            //     → [(1,10),(1,20),(2,10),(2,20)]
953
0
            auto fixed_value_set = range.get_fixed_value_set();
954
0
            size_t original_key_range_size = _begin_scan_keys.size();
955
956
0
            for (int i = 0; i < original_key_range_size; ++i) {
957
0
                OlapTuple start_base_key_range = _begin_scan_keys[i];
958
0
                OlapTuple end_base_key_range = _end_scan_keys[i];
959
960
0
                ConstIterator iter = fixed_value_set.begin();
961
962
0
                for (; iter != fixed_value_set.end(); ++iter) {
963
                    // Reuse i-th slot for the first value, append new slots for the rest.
964
0
                    if (iter == fixed_value_set.begin()) {
965
0
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
966
0
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
967
0
                    } else {
968
0
                        _begin_scan_keys.push_back(start_base_key_range);
969
0
                        _begin_scan_keys.back().add_field(
970
0
                                Field::create_field<primitive_type>(*iter));
971
0
                        _end_scan_keys.push_back(end_base_key_range);
972
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
973
0
                    }
974
0
                }
975
976
0
                if (range.contain_null()) {
977
0
                    _begin_scan_keys.push_back(start_base_key_range);
978
0
                    _begin_scan_keys.back().add_null();
979
0
                    _end_scan_keys.push_back(end_base_key_range);
980
0
                    _end_scan_keys.back().add_null();
981
0
                }
982
0
            }
983
0
        }
984
985
        // Fixed values are always closed intervals (begin == end, point lookup).
986
6
        _begin_include = true;
987
6
        _end_include = true;
988
1.40k
    } else {
989
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
990
        // After this, no more columns can be appended (_has_range_value = true),
991
        // because the range semantics only apply to the last appended column.
992
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
993
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
994
        //     → begin_include=true, end_include=false
995
1.40k
        _has_range_value = true;
996
997
        // Special case: max < min means the range itself is empty,
998
        // but contain_null() is true, so only null values match this column.
999
1.40k
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
1000
0
            CHECK(range.contain_null());
1001
0
            if (_begin_scan_keys.empty()) {
1002
0
                _begin_scan_keys.emplace_back();
1003
0
                _begin_scan_keys.back().add_null();
1004
0
                _end_scan_keys.emplace_back();
1005
0
                _end_scan_keys.back().add_null();
1006
0
            } else {
1007
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1008
0
                    _begin_scan_keys[i].add_null();
1009
0
                    _end_scan_keys[i].add_null();
1010
0
                }
1011
0
            }
1012
1.40k
        } else if (_begin_scan_keys.empty()) {
1013
            // First column as a range:
1014
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1015
1.30k
            _begin_scan_keys.emplace_back();
1016
1.30k
            if (range.contain_null()) {
1017
1.23k
                _begin_scan_keys.back().add_null();
1018
1.23k
            } else {
1019
69
                _begin_scan_keys.back().add_field(
1020
69
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1021
69
            }
1022
1.30k
            _end_scan_keys.emplace_back();
1023
1.30k
            _end_scan_keys.back().add_field(
1024
1.30k
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1025
1.30k
        } else {
1026
            // Subsequent column as a range: append min/max to every existing key pair.
1027
205
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1028
108
                if (range.contain_null()) {
1029
108
                    _begin_scan_keys[i].add_null();
1030
108
                } else {
1031
0
                    _begin_scan_keys[i].add_field(
1032
0
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1033
0
                }
1034
108
            }
1035
1036
205
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1037
108
                _end_scan_keys[i].add_field(
1038
108
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1039
108
            }
1040
97
        }
1041
1.40k
        _begin_include = range.is_begin_include();
1042
1.40k
        _end_include = range.is_end_include();
1043
1.40k
    }
1044
1045
1.40k
    return Status::OK();
1046
1.40k
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE35EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
871
602
                                     bool* should_break) {
872
602
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
873
874
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
875
    //    clear all accumulated keys — no rows can match.
876
602
    if (range.is_empty_value_range()) {
877
0
        _begin_scan_keys.clear();
878
0
        _end_scan_keys.clear();
879
0
        return Status::OK();
880
0
    }
881
882
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
883
    //    because the begin/end keys would have different semantics per pair.
884
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
885
602
    if (_has_range_value) {
886
0
        return Status::OK();
887
0
    }
888
889
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
890
    //    Cartesian product would be too large.
891
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
892
    //      set *exact_value = false (keep predicate as residual filter).
893
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
894
602
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
895
602
    if (range.is_fixed_value_range()) {
896
16
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
897
0
            if (range.is_range_value_convertible()) {
898
0
                range.convert_to_range_value();
899
0
                *exact_value = false;
900
0
            } else {
901
0
                *should_break = true;
902
0
                return Status::OK();
903
0
            }
904
0
        }
905
586
    } else {
906
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
907
        //    range on a splittable integer type, try to split [low, high] into multiple
908
        //    sub-ranges for parallel / pipelined scanning.
909
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
910
586
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
911
586
            !range.is_reject_split_type()) {
912
0
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
913
0
                                                 _end_include);
914
915
0
            if (!(*eos) &&
916
0
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
917
0
                                                 _end_include, max_scan_key_num)) {
918
0
                _has_range_value = true;
919
0
            }
920
0
            return Status::OK();
921
0
        }
922
586
    }
923
924
    // ====================================================================
925
    // 5. Actually extend scan keys with this column's values.
926
    // ====================================================================
927
928
602
    if (range.is_fixed_value_range()) {
929
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
930
16
        if (_begin_scan_keys.empty()) {
931
            // First column: create one key pair per fixed value.
932
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
933
16
            auto fixed_value_set = range.get_fixed_value_set();
934
16
            ConstIterator iter = fixed_value_set.begin();
935
936
36
            for (; iter != fixed_value_set.end(); ++iter) {
937
20
                _begin_scan_keys.emplace_back();
938
20
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
20
                _end_scan_keys.emplace_back();
940
20
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
941
20
            }
942
943
16
            if (range.contain_null()) {
944
0
                _begin_scan_keys.emplace_back();
945
0
                _begin_scan_keys.back().add_null();
946
0
                _end_scan_keys.emplace_back();
947
0
                _end_scan_keys.back().add_null();
948
0
            }
949
16
        } else {
950
            // Subsequent column: Cartesian product of existing keys × new fixed values.
951
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
952
            //     → [(1,10),(1,20),(2,10),(2,20)]
953
0
            auto fixed_value_set = range.get_fixed_value_set();
954
0
            size_t original_key_range_size = _begin_scan_keys.size();
955
956
0
            for (int i = 0; i < original_key_range_size; ++i) {
957
0
                OlapTuple start_base_key_range = _begin_scan_keys[i];
958
0
                OlapTuple end_base_key_range = _end_scan_keys[i];
959
960
0
                ConstIterator iter = fixed_value_set.begin();
961
962
0
                for (; iter != fixed_value_set.end(); ++iter) {
963
                    // Reuse i-th slot for the first value, append new slots for the rest.
964
0
                    if (iter == fixed_value_set.begin()) {
965
0
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
966
0
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
967
0
                    } else {
968
0
                        _begin_scan_keys.push_back(start_base_key_range);
969
0
                        _begin_scan_keys.back().add_field(
970
0
                                Field::create_field<primitive_type>(*iter));
971
0
                        _end_scan_keys.push_back(end_base_key_range);
972
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
973
0
                    }
974
0
                }
975
976
0
                if (range.contain_null()) {
977
0
                    _begin_scan_keys.push_back(start_base_key_range);
978
0
                    _begin_scan_keys.back().add_null();
979
0
                    _end_scan_keys.push_back(end_base_key_range);
980
0
                    _end_scan_keys.back().add_null();
981
0
                }
982
0
            }
983
0
        }
984
985
        // Fixed values are always closed intervals (begin == end, point lookup).
986
16
        _begin_include = true;
987
16
        _end_include = true;
988
586
    } else {
989
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
990
        // After this, no more columns can be appended (_has_range_value = true),
991
        // because the range semantics only apply to the last appended column.
992
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
993
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
994
        //     → begin_include=true, end_include=false
995
586
        _has_range_value = true;
996
997
        // Special case: max < min means the range itself is empty,
998
        // but contain_null() is true, so only null values match this column.
999
586
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
1000
1
            CHECK(range.contain_null());
1001
1
            if (_begin_scan_keys.empty()) {
1002
1
                _begin_scan_keys.emplace_back();
1003
1
                _begin_scan_keys.back().add_null();
1004
1
                _end_scan_keys.emplace_back();
1005
1
                _end_scan_keys.back().add_null();
1006
1
            } else {
1007
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1008
0
                    _begin_scan_keys[i].add_null();
1009
0
                    _end_scan_keys[i].add_null();
1010
0
                }
1011
0
            }
1012
585
        } else if (_begin_scan_keys.empty()) {
1013
            // First column as a range:
1014
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1015
533
            _begin_scan_keys.emplace_back();
1016
533
            if (range.contain_null()) {
1017
502
                _begin_scan_keys.back().add_null();
1018
502
            } else {
1019
31
                _begin_scan_keys.back().add_field(
1020
31
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1021
31
            }
1022
533
            _end_scan_keys.emplace_back();
1023
533
            _end_scan_keys.back().add_field(
1024
533
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1025
533
        } else {
1026
            // Subsequent column as a range: append min/max to every existing key pair.
1027
112
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1028
60
                if (range.contain_null()) {
1029
60
                    _begin_scan_keys[i].add_null();
1030
60
                } else {
1031
0
                    _begin_scan_keys[i].add_field(
1032
0
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1033
0
                }
1034
60
            }
1035
1036
112
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1037
60
                _end_scan_keys[i].add_field(
1038
60
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1039
60
            }
1040
52
        }
1041
586
        _begin_include = range.is_begin_include();
1042
586
        _end_include = range.is_end_include();
1043
586
    }
1044
1045
602
    return Status::OK();
1046
602
}
1047
1048
#include "common/compile_check_end.h"
1049
} // namespace doris