Coverage Report

Created: 2026-05-20 11:46

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
55
namespace doris {
56
57
/**
58
 * @brief Column's value range
59
 **/
60
template <PrimitiveType primitive_type>
61
class ColumnValueRange {
62
public:
63
    using CppType = typename PrimitiveTypeTraits<primitive_type>::CppType;
64
    using SetType = std::set<CppType, doris::Less<CppType>>;
65
    using IteratorType = typename SetType::iterator;
66
67
    ColumnValueRange();
68
69
    ColumnValueRange(std::string col_name, bool is_nullable_col, int precision, int scale);
70
71
    // should add fixed value before add range
72
    Status add_fixed_value(const CppType& value);
73
74
    // should remove fixed value after add fixed value
75
    void remove_fixed_value(const CppType& value);
76
77
    Status add_range(SQLFilterOp op, CppType value);
78
79
    bool is_fixed_value_range() const;
80
81
    bool is_scope_value_range() const;
82
83
    bool is_empty_value_range() const;
84
85
    bool is_fixed_value_convertible() const;
86
87
    bool is_range_value_convertible() const;
88
89
    void convert_to_range_value();
90
91
    bool convert_to_avg_range_value(std::vector<OlapTuple>& begin_scan_keys,
92
                                    std::vector<OlapTuple>& end_scan_keys, bool& begin_include,
93
                                    bool& end_include, int32_t max_scan_key_num);
94
95
    bool convert_to_close_range(std::vector<OlapTuple>& begin_scan_keys,
96
                                std::vector<OlapTuple>& end_scan_keys, bool& begin_include,
97
                                bool& end_include);
98
99
98.6k
    constexpr bool is_reject_split_type() const { return _is_reject_split_type; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE20is_reject_split_typeEv
Line
Count
Source
99
1.81k
    constexpr bool is_reject_split_type() const { return _is_reject_split_type; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE20is_reject_split_typeEv
Line
Count
Source
99
78
    constexpr bool is_reject_split_type() const { return _is_reject_split_type; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE20is_reject_split_typeEv
Line
Count
Source
99
61.4k
    constexpr bool is_reject_split_type() const { return _is_reject_split_type; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE20is_reject_split_typeEv
Line
Count
Source
99
28.4k
    constexpr bool is_reject_split_type() const { return _is_reject_split_type; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE20is_reject_split_typeEv
Line
Count
Source
99
4.36k
    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
99
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
99
34
    constexpr bool is_reject_split_type() const { return _is_reject_split_type; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE20is_reject_split_typeEv
Line
Count
Source
99
2.31k
    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
100
101
    void intersection(ColumnValueRange<primitive_type>& range);
102
103
895
    void set_empty_value_range() {
104
895
        _fixed_values.clear();
105
895
        _low_value = TYPE_MAX;
106
895
        _high_value = TYPE_MIN;
107
895
        _contain_null = false;
108
895
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE21set_empty_value_rangeEv
Line
Count
Source
103
12
    void set_empty_value_range() {
104
12
        _fixed_values.clear();
105
12
        _low_value = TYPE_MAX;
106
12
        _high_value = TYPE_MIN;
107
12
        _contain_null = false;
108
12
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE21set_empty_value_rangeEv
Line
Count
Source
103
10
    void set_empty_value_range() {
104
10
        _fixed_values.clear();
105
10
        _low_value = TYPE_MAX;
106
10
        _high_value = TYPE_MIN;
107
10
        _contain_null = false;
108
10
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE21set_empty_value_rangeEv
Line
Count
Source
103
265
    void set_empty_value_range() {
104
265
        _fixed_values.clear();
105
265
        _low_value = TYPE_MAX;
106
265
        _high_value = TYPE_MIN;
107
265
        _contain_null = false;
108
265
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE21set_empty_value_rangeEv
Line
Count
Source
103
139
    void set_empty_value_range() {
104
139
        _fixed_values.clear();
105
139
        _low_value = TYPE_MAX;
106
139
        _high_value = TYPE_MIN;
107
139
        _contain_null = false;
108
139
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE21set_empty_value_rangeEv
Line
Count
Source
103
18
    void set_empty_value_range() {
104
18
        _fixed_values.clear();
105
18
        _low_value = TYPE_MAX;
106
18
        _high_value = TYPE_MIN;
107
18
        _contain_null = false;
108
18
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE21set_empty_value_rangeEv
Line
Count
Source
103
16
    void set_empty_value_range() {
104
16
        _fixed_values.clear();
105
16
        _low_value = TYPE_MAX;
106
16
        _high_value = TYPE_MIN;
107
16
        _contain_null = false;
108
16
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE21set_empty_value_rangeEv
Line
Count
Source
103
31
    void set_empty_value_range() {
104
31
        _fixed_values.clear();
105
31
        _low_value = TYPE_MAX;
106
31
        _high_value = TYPE_MIN;
107
31
        _contain_null = false;
108
31
    }
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE21set_empty_value_rangeEv
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE21set_empty_value_rangeEv
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE21set_empty_value_rangeEv
Line
Count
Source
103
4
    void set_empty_value_range() {
104
4
        _fixed_values.clear();
105
4
        _low_value = TYPE_MAX;
106
4
        _high_value = TYPE_MIN;
107
4
        _contain_null = false;
108
4
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE21set_empty_value_rangeEv
Line
Count
Source
103
258
    void set_empty_value_range() {
104
258
        _fixed_values.clear();
105
258
        _low_value = TYPE_MAX;
106
258
        _high_value = TYPE_MIN;
107
258
        _contain_null = false;
108
258
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE21set_empty_value_rangeEv
Line
Count
Source
103
64
    void set_empty_value_range() {
104
64
        _fixed_values.clear();
105
64
        _low_value = TYPE_MAX;
106
64
        _high_value = TYPE_MIN;
107
64
        _contain_null = false;
108
64
    }
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE21set_empty_value_rangeEv
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE21set_empty_value_rangeEv
Line
Count
Source
103
36
    void set_empty_value_range() {
104
36
        _fixed_values.clear();
105
36
        _low_value = TYPE_MAX;
106
36
        _high_value = TYPE_MIN;
107
36
        _contain_null = false;
108
36
    }
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE21set_empty_value_rangeEv
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE21set_empty_value_rangeEv
Line
Count
Source
103
11
    void set_empty_value_range() {
104
11
        _fixed_values.clear();
105
11
        _low_value = TYPE_MAX;
106
11
        _high_value = TYPE_MIN;
107
11
        _contain_null = false;
108
11
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE21set_empty_value_rangeEv
Line
Count
Source
103
18
    void set_empty_value_range() {
104
18
        _fixed_values.clear();
105
18
        _low_value = TYPE_MAX;
106
18
        _high_value = TYPE_MIN;
107
18
        _contain_null = false;
108
18
    }
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE21set_empty_value_rangeEv
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE21set_empty_value_rangeEv
Line
Count
Source
103
6
    void set_empty_value_range() {
104
6
        _fixed_values.clear();
105
6
        _low_value = TYPE_MAX;
106
6
        _high_value = TYPE_MIN;
107
6
        _contain_null = false;
108
6
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE21set_empty_value_rangeEv
Line
Count
Source
103
1
    void set_empty_value_range() {
104
1
        _fixed_values.clear();
105
1
        _low_value = TYPE_MAX;
106
1
        _high_value = TYPE_MIN;
107
1
        _contain_null = false;
108
1
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE21set_empty_value_rangeEv
Line
Count
Source
103
4
    void set_empty_value_range() {
104
4
        _fixed_values.clear();
105
4
        _low_value = TYPE_MAX;
106
4
        _high_value = TYPE_MIN;
107
4
        _contain_null = false;
108
4
    }
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE21set_empty_value_rangeEv
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE21set_empty_value_rangeEv
Line
Count
Source
103
2
    void set_empty_value_range() {
104
2
        _fixed_values.clear();
105
2
        _low_value = TYPE_MAX;
106
2
        _high_value = TYPE_MIN;
107
2
        _contain_null = false;
108
2
    }
109
110
155k
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE19get_fixed_value_setEv
Line
Count
Source
110
12
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE19get_fixed_value_setEv
Line
Count
Source
110
3
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE19get_fixed_value_setEv
Line
Count
Source
110
2.20k
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE19get_fixed_value_setEv
Line
Count
Source
110
528
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE19get_fixed_value_setEv
Line
Count
Source
110
136
    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
110
12
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE19get_fixed_value_setB5cxx11Ev
Line
Count
Source
110
152k
    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
110
3
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE19get_fixed_value_setEv
Line
Count
Source
110
227
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE19get_fixed_value_setEv
Line
Count
Source
110
6
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE19get_fixed_value_setEv
Line
Count
Source
110
67
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE19get_fixed_value_setEv
Line
Count
Source
110
127
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE19get_fixed_value_setEv
Line
Count
Source
110
1
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE19get_fixed_value_setEv
Line
Count
Source
110
5
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE19get_fixed_value_setEv
Line
Count
Source
110
24
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE19get_fixed_value_setEv
Line
Count
Source
110
20
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE19get_fixed_value_setEv
Line
Count
Source
110
6
    const SetType& get_fixed_value_set() const { return _fixed_values; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE19get_fixed_value_setEv
Line
Count
Source
110
16
    const SetType& get_fixed_value_set() const { return _fixed_values; }
111
112
336k
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE19get_range_max_valueEv
Line
Count
Source
112
1.87k
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE19get_range_max_valueEv
Line
Count
Source
112
327
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE19get_range_max_valueEv
Line
Count
Source
112
124k
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE19get_range_max_valueEv
Line
Count
Source
112
58.0k
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE19get_range_max_valueEv
Line
Count
Source
112
8.83k
    CppType get_range_max_value() const { return _high_value; }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE19get_range_max_valueEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE19get_range_max_valueEv
Line
Count
Source
112
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
112
4
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE19get_range_max_valueB5cxx11Ev
Line
Count
Source
112
827
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE19get_range_max_valueB5cxx11Ev
Line
Count
Source
112
120k
    CppType get_range_max_value() const { return _high_value; }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE19get_range_max_valueB5cxx11Ev
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE19get_range_max_valueEv
Line
Count
Source
112
34
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE19get_range_max_valueEv
Line
Count
Source
112
2.50k
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE19get_range_max_valueEv
Line
Count
Source
112
71
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE19get_range_max_valueEv
Line
Count
Source
112
4.91k
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE19get_range_max_valueEv
Line
Count
Source
112
5.10k
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE19get_range_max_valueEv
Line
Count
Source
112
404
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE19get_range_max_valueEv
Line
Count
Source
112
2.50k
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE19get_range_max_valueEv
Line
Count
Source
112
1.07k
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE19get_range_max_valueEv
Line
Count
Source
112
1.66k
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE19get_range_max_valueEv
Line
Count
Source
112
2.77k
    CppType get_range_max_value() const { return _high_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE19get_range_max_valueEv
Line
Count
Source
112
1.05k
    CppType get_range_max_value() const { return _high_value; }
113
114
257k
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE19get_range_min_valueEv
Line
Count
Source
114
1.84k
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE19get_range_min_valueEv
Line
Count
Source
114
286
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE19get_range_min_valueEv
Line
Count
Source
114
80.2k
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE19get_range_min_valueEv
Line
Count
Source
114
37.0k
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE19get_range_min_valueEv
Line
Count
Source
114
8.63k
    CppType get_range_min_value() const { return _low_value; }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE19get_range_min_valueEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE19get_range_min_valueEv
Line
Count
Source
114
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
114
2
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE19get_range_min_valueB5cxx11Ev
Line
Count
Source
114
662
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE19get_range_min_valueB5cxx11Ev
Line
Count
Source
114
114k
    CppType get_range_min_value() const { return _low_value; }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE19get_range_min_valueB5cxx11Ev
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE19get_range_min_valueEv
Line
Count
Source
114
34
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE19get_range_min_valueEv
Line
Count
Source
114
2.48k
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE19get_range_min_valueEv
Line
Count
Source
114
42
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE19get_range_min_valueEv
Line
Count
Source
114
3.87k
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE19get_range_min_valueEv
Line
Count
Source
114
3.00k
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE19get_range_min_valueEv
Line
Count
Source
114
201
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE19get_range_min_valueEv
Line
Count
Source
114
1.43k
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE19get_range_min_valueEv
Line
Count
Source
114
564
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE19get_range_min_valueEv
Line
Count
Source
114
866
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE19get_range_min_valueEv
Line
Count
Source
114
1.46k
    CppType get_range_min_value() const { return _low_value; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE19get_range_min_valueEv
Line
Count
Source
114
608
    CppType get_range_min_value() const { return _low_value; }
115
116
    const CppType* get_range_max_value_ptr() const { return &_high_value; }
117
118
    const CppType* get_range_min_value_ptr() const { return &_low_value; }
119
120
    SQLFilterOp get_range_high_op() const { return _high_op; }
121
122
    SQLFilterOp get_range_low_op() const { return _low_op; }
123
124
    bool is_low_value_minimum() const { return Compare::equal(_low_value, TYPE_MIN); }
125
126
    bool is_high_value_maximum() const { return Compare::equal(_high_value, TYPE_MAX); }
127
128
169k
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE16is_begin_includeEv
Line
Count
Source
128
1.84k
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE16is_begin_includeEv
Line
Count
Source
128
124
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE16is_begin_includeEv
Line
Count
Source
128
61.8k
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE16is_begin_includeEv
Line
Count
Source
128
28.9k
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE16is_begin_includeEv
Line
Count
Source
128
4.45k
    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
128
2
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE16is_begin_includeEv
Line
Count
Source
128
367
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE16is_begin_includeEv
Line
Count
Source
128
59.6k
    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
128
34
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE16is_begin_includeEv
Line
Count
Source
128
2.40k
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE16is_begin_includeEv
Line
Count
Source
128
36
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE16is_begin_includeEv
Line
Count
Source
128
2.46k
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE16is_begin_includeEv
Line
Count
Source
128
2.56k
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE16is_begin_includeEv
Line
Count
Source
128
203
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE16is_begin_includeEv
Line
Count
Source
128
1.24k
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE16is_begin_includeEv
Line
Count
Source
128
538
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE16is_begin_includeEv
Line
Count
Source
128
826
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE16is_begin_includeEv
Line
Count
Source
128
1.39k
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE16is_begin_includeEv
Line
Count
Source
128
531
    bool is_begin_include() const { return _low_op == FILTER_LARGER_OR_EQUAL; }
129
130
169k
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE14is_end_includeEv
Line
Count
Source
130
1.84k
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE14is_end_includeEv
Line
Count
Source
130
124
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE14is_end_includeEv
Line
Count
Source
130
61.9k
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE14is_end_includeEv
Line
Count
Source
130
28.9k
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE14is_end_includeEv
Line
Count
Source
130
4.45k
    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
130
2
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE14is_end_includeEv
Line
Count
Source
130
367
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE14is_end_includeEv
Line
Count
Source
130
59.6k
    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
130
34
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE14is_end_includeEv
Line
Count
Source
130
2.40k
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE14is_end_includeEv
Line
Count
Source
130
36
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE14is_end_includeEv
Line
Count
Source
130
2.47k
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE14is_end_includeEv
Line
Count
Source
130
2.57k
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE14is_end_includeEv
Line
Count
Source
130
203
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE14is_end_includeEv
Line
Count
Source
130
1.24k
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE14is_end_includeEv
Line
Count
Source
130
538
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE14is_end_includeEv
Line
Count
Source
130
827
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE14is_end_includeEv
Line
Count
Source
130
1.39k
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE14is_end_includeEv
Line
Count
Source
130
531
    bool is_end_include() const { return _high_op == FILTER_LESS_OR_EQUAL; }
131
132
    PrimitiveType type() const { return _column_type; }
133
134
    const std::string& column_name() const { return _column_name; }
135
136
333k
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE12contain_nullEv
Line
Count
Source
136
2.14k
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE12contain_nullEv
Line
Count
Source
136
352
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE12contain_nullEv
Line
Count
Source
136
68.1k
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE12contain_nullEv
Line
Count
Source
136
31.1k
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE12contain_nullEv
Line
Count
Source
136
4.63k
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE12contain_nullEv
Line
Count
Source
136
55
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE12contain_nullEv
Line
Count
Source
136
183
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE12contain_nullEv
Line
Count
Source
136
6
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE12contain_nullEv
Line
Count
Source
136
4
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE12contain_nullEv
Line
Count
Source
136
515
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE12contain_nullEv
Line
Count
Source
136
212k
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE12contain_nullEv
Line
Count
Source
136
249
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE12contain_nullEv
Line
Count
Source
136
37
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE12contain_nullEv
Line
Count
Source
136
2.76k
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE12contain_nullEv
Line
Count
Source
136
42
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE12contain_nullEv
Line
Count
Source
136
2.61k
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE12contain_nullEv
Line
Count
Source
136
2.85k
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE12contain_nullEv
Line
Count
Source
136
203
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE12contain_nullEv
Line
Count
Source
136
1.29k
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE12contain_nullEv
Line
Count
Source
136
596
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE12contain_nullEv
Line
Count
Source
136
877
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE12contain_nullEv
Line
Count
Source
136
1.39k
    bool contain_null() const { return _contain_null; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE12contain_nullEv
Line
Count
Source
136
583
    bool contain_null() const { return _contain_null; }
137
138
480k
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE20get_fixed_value_sizeEv
Line
Count
Source
138
1.88k
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE20get_fixed_value_sizeEv
Line
Count
Source
138
130
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE20get_fixed_value_sizeEv
Line
Count
Source
138
67.4k
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE20get_fixed_value_sizeEv
Line
Count
Source
138
30.1k
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE20get_fixed_value_sizeEv
Line
Count
Source
138
4.74k
    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
138
2
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE20get_fixed_value_sizeEv
Line
Count
Source
138
395
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE20get_fixed_value_sizeEv
Line
Count
Source
138
362k
    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
138
40
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE20get_fixed_value_sizeEv
Line
Count
Source
138
2.86k
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE20get_fixed_value_sizeEv
Line
Count
Source
138
48
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE20get_fixed_value_sizeEv
Line
Count
Source
138
2.59k
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE20get_fixed_value_sizeEv
Line
Count
Source
138
2.81k
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE20get_fixed_value_sizeEv
Line
Count
Source
138
205
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE20get_fixed_value_sizeEv
Line
Count
Source
138
1.26k
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE20get_fixed_value_sizeEv
Line
Count
Source
138
587
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE20get_fixed_value_sizeEv
Line
Count
Source
138
872
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE20get_fixed_value_sizeEv
Line
Count
Source
138
1.39k
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE20get_fixed_value_sizeEv
Line
Count
Source
138
556
    size_t get_fixed_value_size() const { return _fixed_values.size(); }
139
140
1.20k
    void set_whole_value_range() {
141
1.20k
        _fixed_values.clear();
142
1.20k
        _low_value = TYPE_MIN;
143
1.20k
        _high_value = TYPE_MAX;
144
1.20k
        _low_op = FILTER_LARGER_OR_EQUAL;
145
1.20k
        _high_op = FILTER_LESS_OR_EQUAL;
146
1.20k
        _contain_null = _is_nullable_col;
147
1.20k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE21set_whole_value_rangeEv
Line
Count
Source
140
120
    void set_whole_value_range() {
141
120
        _fixed_values.clear();
142
120
        _low_value = TYPE_MIN;
143
120
        _high_value = TYPE_MAX;
144
120
        _low_op = FILTER_LARGER_OR_EQUAL;
145
120
        _high_op = FILTER_LESS_OR_EQUAL;
146
120
        _contain_null = _is_nullable_col;
147
120
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE21set_whole_value_rangeEv
Line
Count
Source
140
19
    void set_whole_value_range() {
141
19
        _fixed_values.clear();
142
19
        _low_value = TYPE_MIN;
143
19
        _high_value = TYPE_MAX;
144
19
        _low_op = FILTER_LARGER_OR_EQUAL;
145
19
        _high_op = FILTER_LESS_OR_EQUAL;
146
19
        _contain_null = _is_nullable_col;
147
19
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE21set_whole_value_rangeEv
Line
Count
Source
140
366
    void set_whole_value_range() {
141
366
        _fixed_values.clear();
142
366
        _low_value = TYPE_MIN;
143
366
        _high_value = TYPE_MAX;
144
366
        _low_op = FILTER_LARGER_OR_EQUAL;
145
366
        _high_op = FILTER_LESS_OR_EQUAL;
146
366
        _contain_null = _is_nullable_col;
147
366
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE21set_whole_value_rangeEv
Line
Count
Source
140
415
    void set_whole_value_range() {
141
415
        _fixed_values.clear();
142
415
        _low_value = TYPE_MIN;
143
415
        _high_value = TYPE_MAX;
144
415
        _low_op = FILTER_LARGER_OR_EQUAL;
145
415
        _high_op = FILTER_LESS_OR_EQUAL;
146
415
        _contain_null = _is_nullable_col;
147
415
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE21set_whole_value_rangeEv
Line
Count
Source
140
3
    void set_whole_value_range() {
141
3
        _fixed_values.clear();
142
3
        _low_value = TYPE_MIN;
143
3
        _high_value = TYPE_MAX;
144
3
        _low_op = FILTER_LARGER_OR_EQUAL;
145
3
        _high_op = FILTER_LESS_OR_EQUAL;
146
3
        _contain_null = _is_nullable_col;
147
3
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE21set_whole_value_rangeEv
Line
Count
Source
140
8
    void set_whole_value_range() {
141
8
        _fixed_values.clear();
142
8
        _low_value = TYPE_MIN;
143
8
        _high_value = TYPE_MAX;
144
8
        _low_op = FILTER_LARGER_OR_EQUAL;
145
8
        _high_op = FILTER_LESS_OR_EQUAL;
146
8
        _contain_null = _is_nullable_col;
147
8
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE21set_whole_value_rangeEv
Line
Count
Source
140
48
    void set_whole_value_range() {
141
48
        _fixed_values.clear();
142
48
        _low_value = TYPE_MIN;
143
48
        _high_value = TYPE_MAX;
144
48
        _low_op = FILTER_LARGER_OR_EQUAL;
145
48
        _high_op = FILTER_LESS_OR_EQUAL;
146
48
        _contain_null = _is_nullable_col;
147
48
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE21set_whole_value_rangeEv
Line
Count
Source
140
3
    void set_whole_value_range() {
141
3
        _fixed_values.clear();
142
3
        _low_value = TYPE_MIN;
143
3
        _high_value = TYPE_MAX;
144
3
        _low_op = FILTER_LARGER_OR_EQUAL;
145
3
        _high_op = FILTER_LESS_OR_EQUAL;
146
3
        _contain_null = _is_nullable_col;
147
3
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE21set_whole_value_rangeEv
Line
Count
Source
140
1
    void set_whole_value_range() {
141
1
        _fixed_values.clear();
142
1
        _low_value = TYPE_MIN;
143
1
        _high_value = TYPE_MAX;
144
1
        _low_op = FILTER_LARGER_OR_EQUAL;
145
1
        _high_op = FILTER_LESS_OR_EQUAL;
146
1
        _contain_null = _is_nullable_col;
147
1
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE21set_whole_value_rangeEv
Line
Count
Source
140
10
    void set_whole_value_range() {
141
10
        _fixed_values.clear();
142
10
        _low_value = TYPE_MIN;
143
10
        _high_value = TYPE_MAX;
144
10
        _low_op = FILTER_LARGER_OR_EQUAL;
145
10
        _high_op = FILTER_LESS_OR_EQUAL;
146
10
        _contain_null = _is_nullable_col;
147
10
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE21set_whole_value_rangeEv
Line
Count
Source
140
49
    void set_whole_value_range() {
141
49
        _fixed_values.clear();
142
49
        _low_value = TYPE_MIN;
143
49
        _high_value = TYPE_MAX;
144
49
        _low_op = FILTER_LARGER_OR_EQUAL;
145
49
        _high_op = FILTER_LESS_OR_EQUAL;
146
49
        _contain_null = _is_nullable_col;
147
49
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE21set_whole_value_rangeEv
Line
Count
Source
140
38
    void set_whole_value_range() {
141
38
        _fixed_values.clear();
142
38
        _low_value = TYPE_MIN;
143
38
        _high_value = TYPE_MAX;
144
38
        _low_op = FILTER_LARGER_OR_EQUAL;
145
38
        _high_op = FILTER_LESS_OR_EQUAL;
146
38
        _contain_null = _is_nullable_col;
147
38
    }
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE21set_whole_value_rangeEv
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE21set_whole_value_rangeEv
Line
Count
Source
140
14
    void set_whole_value_range() {
141
14
        _fixed_values.clear();
142
14
        _low_value = TYPE_MIN;
143
14
        _high_value = TYPE_MAX;
144
14
        _low_op = FILTER_LARGER_OR_EQUAL;
145
14
        _high_op = FILTER_LESS_OR_EQUAL;
146
14
        _contain_null = _is_nullable_col;
147
14
    }
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE21set_whole_value_rangeEv
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE21set_whole_value_rangeEv
Line
Count
Source
140
32
    void set_whole_value_range() {
141
32
        _fixed_values.clear();
142
32
        _low_value = TYPE_MIN;
143
32
        _high_value = TYPE_MAX;
144
32
        _low_op = FILTER_LARGER_OR_EQUAL;
145
32
        _high_op = FILTER_LESS_OR_EQUAL;
146
32
        _contain_null = _is_nullable_col;
147
32
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE21set_whole_value_rangeEv
Line
Count
Source
140
43
    void set_whole_value_range() {
141
43
        _fixed_values.clear();
142
43
        _low_value = TYPE_MIN;
143
43
        _high_value = TYPE_MAX;
144
43
        _low_op = FILTER_LARGER_OR_EQUAL;
145
43
        _high_op = FILTER_LESS_OR_EQUAL;
146
43
        _contain_null = _is_nullable_col;
147
43
    }
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE21set_whole_value_rangeEv
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE21set_whole_value_rangeEv
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE21set_whole_value_rangeEv
Line
Count
Source
140
15
    void set_whole_value_range() {
141
15
        _fixed_values.clear();
142
15
        _low_value = TYPE_MIN;
143
15
        _high_value = TYPE_MAX;
144
15
        _low_op = FILTER_LARGER_OR_EQUAL;
145
15
        _high_op = FILTER_LESS_OR_EQUAL;
146
15
        _contain_null = _is_nullable_col;
147
15
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE21set_whole_value_rangeEv
Line
Count
Source
140
2
    void set_whole_value_range() {
141
2
        _fixed_values.clear();
142
2
        _low_value = TYPE_MIN;
143
2
        _high_value = TYPE_MAX;
144
2
        _low_op = FILTER_LARGER_OR_EQUAL;
145
2
        _high_op = FILTER_LESS_OR_EQUAL;
146
2
        _contain_null = _is_nullable_col;
147
2
    }
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE21set_whole_value_rangeEv
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE21set_whole_value_rangeEv
Line
Count
Source
140
16
    void set_whole_value_range() {
141
16
        _fixed_values.clear();
142
16
        _low_value = TYPE_MIN;
143
16
        _high_value = TYPE_MAX;
144
16
        _low_op = FILTER_LARGER_OR_EQUAL;
145
16
        _high_op = FILTER_LESS_OR_EQUAL;
146
16
        _contain_null = _is_nullable_col;
147
16
    }
148
149
573
    bool is_whole_value_range() const {
150
18.4E
        DCHECK(_is_nullable_col || !contain_null())
151
18.4E
                << "Non-nullable column cannot contains null value";
152
153
576
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
154
573
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
155
573
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
156
573
    }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE20is_whole_value_rangeEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE20is_whole_value_rangeEv
Line
Count
Source
149
2
    bool is_whole_value_range() const {
150
2
        DCHECK(_is_nullable_col || !contain_null())
151
0
                << "Non-nullable column cannot contains null value";
152
153
2
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
154
2
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
155
2
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
156
2
    }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE20is_whole_value_rangeEv
Line
Count
Source
149
115
    bool is_whole_value_range() const {
150
115
        DCHECK(_is_nullable_col || !contain_null())
151
0
                << "Non-nullable column cannot contains null value";
152
153
115
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
154
115
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
155
115
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
156
115
    }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE20is_whole_value_rangeEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE20is_whole_value_rangeEv
Line
Count
Source
149
18
    bool is_whole_value_range() const {
150
18
        DCHECK(_is_nullable_col || !contain_null())
151
0
                << "Non-nullable column cannot contains null value";
152
153
18
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
154
18
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
155
18
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
156
18
    }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE20is_whole_value_rangeEv
Line
Count
Source
149
17
    bool is_whole_value_range() const {
150
17
        DCHECK(_is_nullable_col || !contain_null())
151
0
                << "Non-nullable column cannot contains null value";
152
153
17
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
154
17
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
155
17
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
156
17
    }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE20is_whole_value_rangeEv
Line
Count
Source
149
30
    bool is_whole_value_range() const {
150
30
        DCHECK(_is_nullable_col || !contain_null())
151
0
                << "Non-nullable column cannot contains null value";
152
153
31
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
154
30
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
155
30
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
156
30
    }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE20is_whole_value_rangeEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE20is_whole_value_rangeEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE20is_whole_value_rangeEv
Line
Count
Source
149
4
    bool is_whole_value_range() const {
150
4
        DCHECK(_is_nullable_col || !contain_null())
151
0
                << "Non-nullable column cannot contains null value";
152
153
4
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
154
4
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
155
4
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
156
4
    }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE20is_whole_value_rangeEv
Line
Count
Source
149
256
    bool is_whole_value_range() const {
150
256
        DCHECK(_is_nullable_col || !contain_null())
151
0
                << "Non-nullable column cannot contains null value";
152
153
256
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
154
256
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
155
256
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
156
256
    }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE20is_whole_value_rangeEv
Line
Count
Source
149
61
    bool is_whole_value_range() const {
150
18.4E
        DCHECK(_is_nullable_col || !contain_null())
151
18.4E
                << "Non-nullable column cannot contains null value";
152
153
62
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
154
61
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
155
61
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
156
61
    }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE20is_whole_value_rangeEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE20is_whole_value_rangeEv
Line
Count
Source
149
30
    bool is_whole_value_range() const {
150
30
        DCHECK(_is_nullable_col || !contain_null())
151
0
                << "Non-nullable column cannot contains null value";
152
153
30
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
154
30
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
155
30
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
156
30
    }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE20is_whole_value_rangeEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE20is_whole_value_rangeEv
Line
Count
Source
149
10
    bool is_whole_value_range() const {
150
10
        DCHECK(_is_nullable_col || !contain_null())
151
0
                << "Non-nullable column cannot contains null value";
152
153
11
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
154
10
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
155
10
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
156
10
    }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE20is_whole_value_rangeEv
Line
Count
Source
149
18
    bool is_whole_value_range() const {
150
18
        DCHECK(_is_nullable_col || !contain_null())
151
0
                << "Non-nullable column cannot contains null value";
152
153
18
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
154
18
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
155
18
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
156
18
    }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE20is_whole_value_rangeEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE20is_whole_value_rangeEv
Line
Count
Source
149
6
    bool is_whole_value_range() const {
150
6
        DCHECK(_is_nullable_col || !contain_null())
151
0
                << "Non-nullable column cannot contains null value";
152
153
6
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
154
6
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
155
6
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
156
6
    }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE20is_whole_value_rangeEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE20is_whole_value_rangeEv
Line
Count
Source
149
4
    bool is_whole_value_range() const {
150
4
        DCHECK(_is_nullable_col || !contain_null())
151
0
                << "Non-nullable column cannot contains null value";
152
153
4
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
154
4
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
155
4
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
156
4
    }
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE20is_whole_value_rangeEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE20is_whole_value_rangeEv
Line
Count
Source
149
2
    bool is_whole_value_range() const {
150
2
        DCHECK(_is_nullable_col || !contain_null())
151
0
                << "Non-nullable column cannot contains null value";
152
153
2
        return _fixed_values.empty() && Compare::equal(_low_value, TYPE_MIN) &&
154
2
               Compare::equal(_high_value, TYPE_MAX) && _low_op == FILTER_LARGER_OR_EQUAL &&
155
2
               _high_op == FILTER_LESS_OR_EQUAL && _is_nullable_col == contain_null();
156
2
    }
157
158
    // only two case will set range contain null, call by temp_range in olap scan node
159
    // 'is null' and 'is not null'
160
    // 1. if the pred is 'is null' means the range should be
161
    // empty in fixed_range and _high_value < _low_value
162
    // 2. if the pred is 'is not null' means the range should be whole range and
163
    // 'is not null' be effective
164
1.78k
    void set_contain_null(bool contain_null) {
165
1.78k
        if (contain_null) {
166
584
            set_empty_value_range();
167
1.20k
        } else {
168
1.20k
            set_whole_value_range();
169
1.20k
        }
170
1.78k
        _contain_null = _is_nullable_col && contain_null;
171
1.78k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE16set_contain_nullEb
Line
Count
Source
164
120
    void set_contain_null(bool contain_null) {
165
120
        if (contain_null) {
166
0
            set_empty_value_range();
167
120
        } else {
168
120
            set_whole_value_range();
169
120
        }
170
120
        _contain_null = _is_nullable_col && contain_null;
171
120
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE16set_contain_nullEb
Line
Count
Source
164
21
    void set_contain_null(bool contain_null) {
165
21
        if (contain_null) {
166
2
            set_empty_value_range();
167
19
        } else {
168
19
            set_whole_value_range();
169
19
        }
170
21
        _contain_null = _is_nullable_col && contain_null;
171
21
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE16set_contain_nullEb
Line
Count
Source
164
488
    void set_contain_null(bool contain_null) {
165
488
        if (contain_null) {
166
120
            set_empty_value_range();
167
368
        } else {
168
368
            set_whole_value_range();
169
368
        }
170
488
        _contain_null = _is_nullable_col && contain_null;
171
488
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE16set_contain_nullEb
Line
Count
Source
164
417
    void set_contain_null(bool contain_null) {
165
417
        if (contain_null) {
166
1
            set_empty_value_range();
167
416
        } else {
168
416
            set_whole_value_range();
169
416
        }
170
417
        _contain_null = _is_nullable_col && contain_null;
171
417
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE16set_contain_nullEb
Line
Count
Source
164
21
    void set_contain_null(bool contain_null) {
165
21
        if (contain_null) {
166
18
            set_empty_value_range();
167
18
        } else {
168
3
            set_whole_value_range();
169
3
        }
170
21
        _contain_null = _is_nullable_col && contain_null;
171
21
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE16set_contain_nullEb
Line
Count
Source
164
25
    void set_contain_null(bool contain_null) {
165
25
        if (contain_null) {
166
17
            set_empty_value_range();
167
17
        } else {
168
8
            set_whole_value_range();
169
8
        }
170
25
        _contain_null = _is_nullable_col && contain_null;
171
25
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE16set_contain_nullEb
Line
Count
Source
164
79
    void set_contain_null(bool contain_null) {
165
79
        if (contain_null) {
166
31
            set_empty_value_range();
167
48
        } else {
168
48
            set_whole_value_range();
169
48
        }
170
79
        _contain_null = _is_nullable_col && contain_null;
171
79
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE16set_contain_nullEb
Line
Count
Source
164
3
    void set_contain_null(bool contain_null) {
165
3
        if (contain_null) {
166
0
            set_empty_value_range();
167
3
        } else {
168
3
            set_whole_value_range();
169
3
        }
170
3
        _contain_null = _is_nullable_col && contain_null;
171
3
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE16set_contain_nullEb
Line
Count
Source
164
1
    void set_contain_null(bool contain_null) {
165
1
        if (contain_null) {
166
0
            set_empty_value_range();
167
1
        } else {
168
1
            set_whole_value_range();
169
1
        }
170
1
        _contain_null = _is_nullable_col && contain_null;
171
1
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE16set_contain_nullEb
Line
Count
Source
164
14
    void set_contain_null(bool contain_null) {
165
14
        if (contain_null) {
166
4
            set_empty_value_range();
167
10
        } else {
168
10
            set_whole_value_range();
169
10
        }
170
14
        _contain_null = _is_nullable_col && contain_null;
171
14
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE16set_contain_nullEb
Line
Count
Source
164
305
    void set_contain_null(bool contain_null) {
165
305
        if (contain_null) {
166
256
            set_empty_value_range();
167
256
        } else {
168
49
            set_whole_value_range();
169
49
        }
170
305
        _contain_null = _is_nullable_col && contain_null;
171
305
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE16set_contain_nullEb
Line
Count
Source
164
102
    void set_contain_null(bool contain_null) {
165
102
        if (contain_null) {
166
64
            set_empty_value_range();
167
64
        } else {
168
38
            set_whole_value_range();
169
38
        }
170
102
        _contain_null = _is_nullable_col && contain_null;
171
102
    }
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE16set_contain_nullEb
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE16set_contain_nullEb
Line
Count
Source
164
44
    void set_contain_null(bool contain_null) {
165
44
        if (contain_null) {
166
30
            set_empty_value_range();
167
30
        } else {
168
14
            set_whole_value_range();
169
14
        }
170
44
        _contain_null = _is_nullable_col && contain_null;
171
44
    }
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE16set_contain_nullEb
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE16set_contain_nullEb
Line
Count
Source
164
43
    void set_contain_null(bool contain_null) {
165
43
        if (contain_null) {
166
11
            set_empty_value_range();
167
32
        } else {
168
32
            set_whole_value_range();
169
32
        }
170
43
        _contain_null = _is_nullable_col && contain_null;
171
43
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE16set_contain_nullEb
Line
Count
Source
164
61
    void set_contain_null(bool contain_null) {
165
61
        if (contain_null) {
166
18
            set_empty_value_range();
167
43
        } else {
168
43
            set_whole_value_range();
169
43
        }
170
61
        _contain_null = _is_nullable_col && contain_null;
171
61
    }
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE16set_contain_nullEb
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE16set_contain_nullEb
Line
Count
Source
164
6
    void set_contain_null(bool contain_null) {
165
6
        if (contain_null) {
166
6
            set_empty_value_range();
167
6
        } else {
168
0
            set_whole_value_range();
169
0
        }
170
6
        _contain_null = _is_nullable_col && contain_null;
171
6
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE16set_contain_nullEb
Line
Count
Source
164
15
    void set_contain_null(bool contain_null) {
165
15
        if (contain_null) {
166
0
            set_empty_value_range();
167
15
        } else {
168
15
            set_whole_value_range();
169
15
        }
170
15
        _contain_null = _is_nullable_col && contain_null;
171
15
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE16set_contain_nullEb
Line
Count
Source
164
6
    void set_contain_null(bool contain_null) {
165
6
        if (contain_null) {
166
4
            set_empty_value_range();
167
4
        } else {
168
2
            set_whole_value_range();
169
2
        }
170
6
        _contain_null = _is_nullable_col && contain_null;
171
6
    }
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE16set_contain_nullEb
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE16set_contain_nullEb
Line
Count
Source
164
18
    void set_contain_null(bool contain_null) {
165
18
        if (contain_null) {
166
2
            set_empty_value_range();
167
16
        } else {
168
16
            set_whole_value_range();
169
16
        }
170
18
        _contain_null = _is_nullable_col && contain_null;
171
18
    }
172
173
265k
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE9precisionEv
Line
Count
Source
173
75.1k
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE9precisionEv
Line
Count
Source
173
1.33k
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE9precisionEv
Line
Count
Source
173
12.0k
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE9precisionEv
Line
Count
Source
173
5.02k
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE9precisionEv
Line
Count
Source
173
360
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE9precisionEv
Line
Count
Source
173
152
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE9precisionEv
Line
Count
Source
173
451
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE9precisionEv
Line
Count
Source
173
45
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE9precisionEv
Line
Count
Source
173
46
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE9precisionEv
Line
Count
Source
173
886
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE9precisionEv
Line
Count
Source
173
161k
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE9precisionEv
Line
Count
Source
173
714
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE9precisionEv
Line
Count
Source
173
54
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE9precisionEv
Line
Count
Source
173
4.29k
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE9precisionEv
Line
Count
Source
173
93
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE9precisionEv
Line
Count
Source
173
1.67k
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE9precisionEv
Line
Count
Source
173
885
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE9precisionEv
Line
Count
Source
173
25
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE9precisionEv
Line
Count
Source
173
100
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE9precisionEv
Line
Count
Source
173
163
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE9precisionEv
Line
Count
Source
173
223
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE9precisionEv
Line
Count
Source
173
237
    int precision() const { return _precision; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE9precisionEv
Line
Count
Source
173
230
    int precision() const { return _precision; }
174
175
265k
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE5scaleEv
Line
Count
Source
175
75.1k
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE5scaleEv
Line
Count
Source
175
1.33k
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE5scaleEv
Line
Count
Source
175
12.0k
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE5scaleEv
Line
Count
Source
175
5.03k
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE5scaleEv
Line
Count
Source
175
360
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE5scaleEv
Line
Count
Source
175
152
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE5scaleEv
Line
Count
Source
175
451
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE5scaleEv
Line
Count
Source
175
45
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE5scaleEv
Line
Count
Source
175
46
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE5scaleEv
Line
Count
Source
175
886
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE5scaleEv
Line
Count
Source
175
161k
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE5scaleEv
Line
Count
Source
175
716
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE5scaleEv
Line
Count
Source
175
54
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE5scaleEv
Line
Count
Source
175
4.30k
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE5scaleEv
Line
Count
Source
175
93
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE5scaleEv
Line
Count
Source
175
1.67k
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE5scaleEv
Line
Count
Source
175
885
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE5scaleEv
Line
Count
Source
175
25
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE5scaleEv
Line
Count
Source
175
100
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE5scaleEv
Line
Count
Source
175
163
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE5scaleEv
Line
Count
Source
175
223
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE5scaleEv
Line
Count
Source
175
237
    int scale() const { return _scale; }
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE5scaleEv
Line
Count
Source
175
231
    int scale() const { return _scale; }
176
177
    static void add_fixed_value_range(ColumnValueRange<primitive_type>& range, SQLFilterOp op,
178
306k
                                      const CppType& value) {
179
306k
        static_cast<void>(range.add_fixed_value(value));
180
306k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKa
Line
Count
Source
178
73.7k
                                      const CppType& value) {
179
73.7k
        static_cast<void>(range.add_fixed_value(value));
180
73.7k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKs
Line
Count
Source
178
236
                                      const CppType& value) {
179
236
        static_cast<void>(range.add_fixed_value(value));
180
236
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKi
Line
Count
Source
178
69.0k
                                      const CppType& value) {
179
69.0k
        static_cast<void>(range.add_fixed_value(value));
180
69.0k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKl
Line
Count
Source
178
963
                                      const CppType& value) {
179
963
        static_cast<void>(range.add_fixed_value(value));
180
963
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKn
Line
Count
Source
178
190
                                      const CppType& value) {
179
190
        static_cast<void>(range.add_fixed_value(value));
180
190
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKf
Line
Count
Source
178
30
                                      const CppType& value) {
179
30
        static_cast<void>(range.add_fixed_value(value));
180
30
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKd
Line
Count
Source
178
165
                                      const CppType& value) {
179
165
        static_cast<void>(range.add_fixed_value(value));
180
165
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKj
Line
Count
Source
178
24
                                      const CppType& value) {
179
24
        static_cast<void>(range.add_fixed_value(value));
180
24
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKo
Line
Count
Source
178
27
                                      const CppType& value) {
179
27
        static_cast<void>(range.add_fixed_value(value));
180
27
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
178
403
                                      const CppType& value) {
179
403
        static_cast<void>(range.add_fixed_value(value));
180
403
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
178
159k
                                      const CppType& value) {
179
159k
        static_cast<void>(range.add_fixed_value(value));
180
159k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
178
307
                                      const CppType& value) {
179
307
        static_cast<void>(range.add_fixed_value(value));
180
307
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_16VecDateTimeValueE
Line
Count
Source
178
59
                                      const CppType& value) {
179
59
        static_cast<void>(range.add_fixed_value(value));
180
59
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_11DateV2ValueINS_15DateV2ValueTypeEEE
Line
Count
Source
178
879
                                      const CppType& value) {
179
879
        static_cast<void>(range.add_fixed_value(value));
180
879
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_16VecDateTimeValueE
Line
Count
Source
178
109
                                      const CppType& value) {
179
109
        static_cast<void>(range.add_fixed_value(value));
180
109
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_11DateV2ValueINS_19DateTimeV2ValueTypeEEE
Line
Count
Source
178
298
                                      const CppType& value) {
179
298
        static_cast<void>(range.add_fixed_value(value));
180
298
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_16TimestampTzValueE
Line
Count
Source
178
204
                                      const CppType& value) {
179
204
        static_cast<void>(range.add_fixed_value(value));
180
204
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_14DecimalV2ValueE
Line
Count
Source
178
36
                                      const CppType& value) {
179
36
        static_cast<void>(range.add_fixed_value(value));
180
36
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKh
Line
Count
Source
178
98
                                      const CppType& value) {
179
98
        static_cast<void>(range.add_fixed_value(value));
180
98
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_7DecimalIiEE
Line
Count
Source
178
51
                                      const CppType& value) {
179
51
        static_cast<void>(range.add_fixed_value(value));
180
51
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_7DecimalIlEE
Line
Count
Source
178
120
                                      const CppType& value) {
179
120
        static_cast<void>(range.add_fixed_value(value));
180
120
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_12Decimal128V3E
Line
Count
Source
178
140
                                      const CppType& value) {
179
140
        static_cast<void>(range.add_fixed_value(value));
180
140
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE21add_fixed_value_rangeERS2_NS_11SQLFilterOpERKNS_7DecimalIN4wide7integerILm256EiEEEE
Line
Count
Source
178
48
                                      const CppType& value) {
179
48
        static_cast<void>(range.add_fixed_value(value));
180
48
    }
181
182
    static void remove_fixed_value_range(ColumnValueRange<primitive_type>& range, SQLFilterOp op,
183
3
                                         const CppType& value) {
184
3
        range.remove_fixed_value(value);
185
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
183
3
                                         const CppType& value) {
184
3
        range.remove_fixed_value(value);
185
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
186
187
    static void empty_function(ColumnValueRange<primitive_type>& range, SQLFilterOp op,
188
2.30k
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE14empty_functionERS2_NS_11SQLFilterOpERKa
Line
Count
Source
188
58
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE14empty_functionERS2_NS_11SQLFilterOpERKs
Line
Count
Source
188
34
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE14empty_functionERS2_NS_11SQLFilterOpERKi
Line
Count
Source
188
870
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE14empty_functionERS2_NS_11SQLFilterOpERKl
Line
Count
Source
188
26
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE14empty_functionERS2_NS_11SQLFilterOpERKn
Line
Count
Source
188
2
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE14empty_functionERS2_NS_11SQLFilterOpERKf
Line
Count
Source
188
57
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE14empty_functionERS2_NS_11SQLFilterOpERKd
Line
Count
Source
188
142
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE14empty_functionERS2_NS_11SQLFilterOpERKj
Line
Count
Source
188
6
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE14empty_functionERS2_NS_11SQLFilterOpERKo
Line
Count
Source
188
6
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE14empty_functionERS2_NS_11SQLFilterOpERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
188
92
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE14empty_functionERS2_NS_11SQLFilterOpERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
188
296
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE14empty_functionERS2_NS_11SQLFilterOpERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
188
110
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE14empty_functionERS2_NS_11SQLFilterOpERKNS_16VecDateTimeValueE
Line
Count
Source
188
45
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE14empty_functionERS2_NS_11SQLFilterOpERKNS_11DateV2ValueINS_15DateV2ValueTypeEEE
Line
Count
Source
188
19
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE14empty_functionERS2_NS_11SQLFilterOpERKNS_16VecDateTimeValueE
Line
Count
Source
188
29
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE14empty_functionERS2_NS_11SQLFilterOpERKNS_11DateV2ValueINS_19DateTimeV2ValueTypeEEE
Line
Count
Source
188
37
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE14empty_functionERS2_NS_11SQLFilterOpERKNS_16TimestampTzValueE
Line
Count
Source
188
338
                               const CppType& value) {}
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE14empty_functionERS2_NS_11SQLFilterOpERKNS_14DecimalV2ValueE
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE14empty_functionERS2_NS_11SQLFilterOpERKh
Line
Count
Source
188
6
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE14empty_functionERS2_NS_11SQLFilterOpERKNS_7DecimalIiEE
Line
Count
Source
188
37
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE14empty_functionERS2_NS_11SQLFilterOpERKNS_7DecimalIlEE
Line
Count
Source
188
5
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE14empty_functionERS2_NS_11SQLFilterOpERKNS_12Decimal128V3E
Line
Count
Source
188
8
                               const CppType& value) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE14empty_functionERS2_NS_11SQLFilterOpERKNS_7DecimalIN4wide7integerILm256EiEEEE
Line
Count
Source
188
80
                               const CppType& value) {}
189
190
    static void add_value_range(ColumnValueRange<primitive_type>& range, SQLFilterOp op,
191
21.3k
                                const CppType& value) {
192
21.3k
        static_cast<void>(range.add_range(op, value));
193
21.3k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE15add_value_rangeERS2_NS_11SQLFilterOpERKa
Line
Count
Source
191
785
                                const CppType& value) {
192
785
        static_cast<void>(range.add_range(op, value));
193
785
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE15add_value_rangeERS2_NS_11SQLFilterOpERKs
Line
Count
Source
191
1.17k
                                const CppType& value) {
192
1.17k
        static_cast<void>(range.add_range(op, value));
193
1.17k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE15add_value_rangeERS2_NS_11SQLFilterOpERKi
Line
Count
Source
191
7.05k
                                const CppType& value) {
192
7.05k
        static_cast<void>(range.add_range(op, value));
193
7.05k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE15add_value_rangeERS2_NS_11SQLFilterOpERKl
Line
Count
Source
191
3.90k
                                const CppType& value) {
192
3.90k
        static_cast<void>(range.add_range(op, value));
193
3.90k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE15add_value_rangeERS2_NS_11SQLFilterOpERKn
Line
Count
Source
191
155
                                const CppType& value) {
192
155
        static_cast<void>(range.add_range(op, value));
193
155
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE15add_value_rangeERS2_NS_11SQLFilterOpERKf
Line
Count
Source
191
58
                                const CppType& value) {
192
58
        static_cast<void>(range.add_range(op, value));
193
58
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE15add_value_rangeERS2_NS_11SQLFilterOpERKd
Line
Count
Source
191
185
                                const CppType& value) {
192
185
        static_cast<void>(range.add_range(op, value));
193
185
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE15add_value_rangeERS2_NS_11SQLFilterOpERKj
Line
Count
Source
191
20
                                const CppType& value) {
192
20
        static_cast<void>(range.add_range(op, value));
193
20
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE15add_value_rangeERS2_NS_11SQLFilterOpERKo
Line
Count
Source
191
19
                                const CppType& value) {
192
19
        static_cast<void>(range.add_range(op, value));
193
19
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE15add_value_rangeERS2_NS_11SQLFilterOpERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
191
517
                                const CppType& value) {
192
517
        static_cast<void>(range.add_range(op, value));
193
517
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE15add_value_rangeERS2_NS_11SQLFilterOpERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
191
1.51k
                                const CppType& value) {
192
1.51k
        static_cast<void>(range.add_range(op, value));
193
1.51k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE15add_value_rangeERS2_NS_11SQLFilterOpERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
191
292
                                const CppType& value) {
192
292
        static_cast<void>(range.add_range(op, value));
193
292
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE15add_value_rangeERS2_NS_11SQLFilterOpERKNS_16VecDateTimeValueE
Line
Count
Source
191
6
                                const CppType& value) {
192
6
        static_cast<void>(range.add_range(op, value));
193
6
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE15add_value_rangeERS2_NS_11SQLFilterOpERKNS_11DateV2ValueINS_15DateV2ValueTypeEEE
Line
Count
Source
191
3.40k
                                const CppType& value) {
192
3.40k
        static_cast<void>(range.add_range(op, value));
193
3.40k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE15add_value_rangeERS2_NS_11SQLFilterOpERKNS_16VecDateTimeValueE
Line
Count
Source
191
26
                                const CppType& value) {
192
26
        static_cast<void>(range.add_range(op, value));
193
26
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE15add_value_rangeERS2_NS_11SQLFilterOpERKNS_11DateV2ValueINS_19DateTimeV2ValueTypeEEE
Line
Count
Source
191
1.29k
                                const CppType& value) {
192
1.29k
        static_cast<void>(range.add_range(op, value));
193
1.29k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE15add_value_rangeERS2_NS_11SQLFilterOpERKNS_16TimestampTzValueE
Line
Count
Source
191
505
                                const CppType& value) {
192
505
        static_cast<void>(range.add_range(op, value));
193
505
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE15add_value_rangeERS2_NS_11SQLFilterOpERKNS_14DecimalV2ValueE
Line
Count
Source
191
12
                                const CppType& value) {
192
12
        static_cast<void>(range.add_range(op, value));
193
12
    }
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE15add_value_rangeERS2_NS_11SQLFilterOpERKh
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE15add_value_rangeERS2_NS_11SQLFilterOpERKNS_7DecimalIiEE
Line
Count
Source
191
70
                                const CppType& value) {
192
70
        static_cast<void>(range.add_range(op, value));
193
70
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE15add_value_rangeERS2_NS_11SQLFilterOpERKNS_7DecimalIlEE
Line
Count
Source
191
115
                                const CppType& value) {
192
115
        static_cast<void>(range.add_range(op, value));
193
115
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE15add_value_rangeERS2_NS_11SQLFilterOpERKNS_12Decimal128V3E
Line
Count
Source
191
99
                                const CppType& value) {
192
99
        static_cast<void>(range.add_range(op, value));
193
99
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE15add_value_rangeERS2_NS_11SQLFilterOpERKNS_7DecimalIN4wide7integerILm256EiEEEE
Line
Count
Source
191
110
                                const CppType& value) {
192
110
        static_cast<void>(range.add_range(op, value));
193
110
    }
194
195
    static ColumnValueRange<primitive_type> create_empty_column_value_range(bool is_nullable_col,
196
                                                                            int precision,
197
264k
                                                                            int scale) {
198
264k
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
199
264k
                                                precision, scale);
200
264k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE31create_empty_column_value_rangeEbii
Line
Count
Source
197
74.7k
                                                                            int scale) {
198
74.7k
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
199
74.7k
                                                precision, scale);
200
74.7k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE31create_empty_column_value_rangeEbii
Line
Count
Source
197
1.32k
                                                                            int scale) {
198
1.32k
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
199
1.32k
                                                precision, scale);
200
1.32k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE31create_empty_column_value_rangeEbii
Line
Count
Source
197
12.0k
                                                                            int scale) {
198
12.0k
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
199
12.0k
                                                precision, scale);
200
12.0k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE31create_empty_column_value_rangeEbii
Line
Count
Source
197
4.99k
                                                                            int scale) {
198
4.99k
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
199
4.99k
                                                precision, scale);
200
4.99k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE31create_empty_column_value_rangeEbii
Line
Count
Source
197
358
                                                                            int scale) {
198
358
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
199
358
                                                precision, scale);
200
358
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE31create_empty_column_value_rangeEbii
Line
Count
Source
197
147
                                                                            int scale) {
198
147
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
199
147
                                                precision, scale);
200
147
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE31create_empty_column_value_rangeEbii
Line
Count
Source
197
443
                                                                            int scale) {
198
443
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
199
443
                                                precision, scale);
200
443
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE31create_empty_column_value_rangeEbii
Line
Count
Source
197
45
                                                                            int scale) {
198
45
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
199
45
                                                precision, scale);
200
45
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE31create_empty_column_value_rangeEbii
Line
Count
Source
197
45
                                                                            int scale) {
198
45
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
199
45
                                                precision, scale);
200
45
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE31create_empty_column_value_rangeEbii
Line
Count
Source
197
879
                                                                            int scale) {
198
879
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
199
879
                                                precision, scale);
200
879
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE31create_empty_column_value_rangeEbii
Line
Count
Source
197
160k
                                                                            int scale) {
198
160k
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
199
160k
                                                precision, scale);
200
160k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE31create_empty_column_value_rangeEbii
Line
Count
Source
197
703
                                                                            int scale) {
198
703
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
199
703
                                                precision, scale);
200
703
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE31create_empty_column_value_rangeEbii
Line
Count
Source
197
54
                                                                            int scale) {
198
54
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
199
54
                                                precision, scale);
200
54
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE31create_empty_column_value_rangeEbii
Line
Count
Source
197
4.29k
                                                                            int scale) {
198
4.29k
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
199
4.29k
                                                precision, scale);
200
4.29k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE31create_empty_column_value_rangeEbii
Line
Count
Source
197
91
                                                                            int scale) {
198
91
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
199
91
                                                precision, scale);
200
91
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE31create_empty_column_value_rangeEbii
Line
Count
Source
197
1.63k
                                                                            int scale) {
198
1.63k
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
199
1.63k
                                                precision, scale);
200
1.63k
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE31create_empty_column_value_rangeEbii
Line
Count
Source
197
877
                                                                            int scale) {
198
877
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
199
877
                                                precision, scale);
200
877
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE31create_empty_column_value_rangeEbii
Line
Count
Source
197
24
                                                                            int scale) {
198
24
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
199
24
                                                precision, scale);
200
24
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE31create_empty_column_value_rangeEbii
Line
Count
Source
197
100
                                                                            int scale) {
198
100
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
199
100
                                                precision, scale);
200
100
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE31create_empty_column_value_rangeEbii
Line
Count
Source
197
163
                                                                            int scale) {
198
163
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
199
163
                                                precision, scale);
200
163
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE31create_empty_column_value_rangeEbii
Line
Count
Source
197
221
                                                                            int scale) {
198
221
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
199
221
                                                precision, scale);
200
221
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE31create_empty_column_value_rangeEbii
Line
Count
Source
197
233
                                                                            int scale) {
198
233
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
199
233
                                                precision, scale);
200
233
    }
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE31create_empty_column_value_rangeEbii
Line
Count
Source
197
228
                                                                            int scale) {
198
228
        return ColumnValueRange<primitive_type>("", TYPE_MAX, TYPE_MIN, is_nullable_col, false,
199
228
                                                precision, scale);
200
228
    }
201
202
protected:
203
    bool is_in_range(const CppType& value);
204
205
private:
206
    ColumnValueRange(std::string col_name, const CppType& min, const CppType& max,
207
                     bool is_nullable_col, bool contain_null, int precision, int scale);
208
209
    const static CppType TYPE_MIN; // Column type's min value
210
    const static CppType TYPE_MAX; // Column type's max value
211
212
    std::string _column_name;
213
    PrimitiveType _column_type; // Column type (eg: TINYINT,SMALLINT,INT,BIGINT)
214
    CppType _low_value;         // Column's low value, closed interval at left
215
    CppType _high_value;        // Column's high value, open interval at right
216
    SQLFilterOp _low_op;
217
    SQLFilterOp _high_op;
218
    SetType _fixed_values; // Column's fixed int value
219
220
    bool _is_nullable_col;
221
    bool _contain_null;
222
    int _precision;
223
    int _scale;
224
225
    static constexpr bool _is_reject_split_type =
226
            primitive_type == PrimitiveType::TYPE_FLOAT ||
227
            primitive_type == PrimitiveType::TYPE_DOUBLE ||
228
            primitive_type == PrimitiveType::TYPE_LARGEINT ||
229
            primitive_type == PrimitiveType::TYPE_DECIMALV2 ||
230
            primitive_type == PrimitiveType::TYPE_VARCHAR ||
231
            primitive_type == PrimitiveType::TYPE_CHAR ||
232
            primitive_type == PrimitiveType::TYPE_STRING ||
233
            primitive_type == PrimitiveType::TYPE_BOOLEAN ||
234
            primitive_type == PrimitiveType::TYPE_DATETIME ||
235
            primitive_type == PrimitiveType::TYPE_DATETIMEV2 ||
236
            primitive_type == PrimitiveType::TYPE_TIMESTAMPTZ ||
237
            primitive_type == PrimitiveType::TYPE_DECIMAL256;
238
};
239
template <>
240
const typename ColumnValueRange<TYPE_FLOAT>::CppType ColumnValueRange<TYPE_FLOAT>::TYPE_MIN;
241
template <>
242
const typename ColumnValueRange<TYPE_FLOAT>::CppType ColumnValueRange<TYPE_FLOAT>::TYPE_MAX;
243
template <>
244
const typename ColumnValueRange<TYPE_DOUBLE>::CppType ColumnValueRange<TYPE_DOUBLE>::TYPE_MIN;
245
template <>
246
const typename ColumnValueRange<TYPE_DOUBLE>::CppType ColumnValueRange<TYPE_DOUBLE>::TYPE_MAX;
247
248
/// OlapScanKeys accumulates multi-column prefix scan keys from per-column ColumnValueRange
249
/// constraints, and converts them into OlapScanRange objects for the storage layer.
250
///
251
/// Overall pipeline (with examples for table t(k1 INT, k2 INT, v INT)):
252
///
253
///  1. _normalize_conjuncts()  (scan_operator.cpp)
254
///     Parses SQL WHERE conjuncts into per-column ColumnValueRange objects.
255
///       e.g. "WHERE k1 IN (1,2) AND k2 = 10"
256
///         => ColumnValueRange<k1>: fixed_values = {1, 2}
257
///         => ColumnValueRange<k2>: fixed_values = {10}
258
///
259
///  2. _build_key_ranges_and_filters()  (olap_scan_operator.cpp)
260
///     Iterates key columns in schema order, calling extend_scan_key() for each column
261
///     to expand internal _begin_scan_keys / _end_scan_keys.
262
///
263
///  3. extend_scan_key()  (this class)
264
///     Appends one more column dimension to existing scan keys (Cartesian product for
265
///     fixed values, or min/max for range values).
266
///       After k1: _begin_scan_keys = [(1), (2)]     _end_scan_keys = [(1), (2)]
267
///       After k2: _begin_scan_keys = [(1,10), (2,10)] _end_scan_keys = [(1,10), (2,10)]
268
///
269
///  4. get_key_range()  (olap_scan_common.cpp)
270
///     Converts each (_begin_scan_keys[i], _end_scan_keys[i]) pair into an OlapScanRange.
271
///       => OlapScanRange{ begin=(1,10), end=(1,10), has_lower_bound=true, ... }
272
///       => OlapScanRange{ begin=(2,10), end=(2,10), has_lower_bound=true, ... }
273
///
274
///  5. If no key predicates exist, get_key_range returns empty; the caller creates a single
275
///     default OlapScanRange with has_lower_bound=false (represents full table scan).
276
///
277
class OlapScanKeys {
278
public:
279
    /// Extend internal scan key pairs with the next key column's ColumnValueRange.
280
    ///
281
    /// - If the range has fixed values, produces a Cartesian product of existing keys
282
    ///   and the fixed values (subject to max_scan_key_num limit).
283
    /// - If the range is a scope (min..max), appends min to begin keys and max to end keys,
284
    ///   and sets _has_range_value=true (no further columns can be appended).
285
    ///
286
    /// @param exact_value [out]: true if the range covers the column's values exactly
287
    ///                           (can be erased from residual predicates).
288
    /// @param eos         [out]: true if the range is provably empty (no rows to scan).
289
    /// @param should_break[out]: true if the range cannot be encoded and we should stop.
290
    template <PrimitiveType primitive_type>
291
    Status extend_scan_key(ColumnValueRange<primitive_type>& range, int32_t max_scan_key_num,
292
                           bool* exact_value, bool* eos, bool* should_break);
293
294
    /// Convert accumulated scan key pairs into OlapScanRange objects for the storage layer.
295
    Status get_key_range(std::vector<std::unique_ptr<OlapScanRange>>* key_range);
296
297
482k
    bool has_range_value() const { return _has_range_value; }
298
299
0
    void clear() {
300
0
        _has_range_value = false;
301
0
        _begin_scan_keys.clear();
302
0
        _end_scan_keys.clear();
303
0
    }
304
305
1.38k
    std::string debug_string() {
306
1.38k
        std::stringstream ss;
307
1.38k
        DCHECK(_begin_scan_keys.size() == _end_scan_keys.size());
308
1.38k
        ss << "ScanKeys:";
309
310
9.28k
        for (int i = 0; i < _begin_scan_keys.size(); ++i) {
311
18.4E
            ss << "ScanKey=" << (_begin_include ? "[" : "(") << _begin_scan_keys[i].debug_string()
312
18.4E
               << " : " << _end_scan_keys[i].debug_string() << (_end_include ? "]" : ")");
313
7.89k
        }
314
1.38k
        return ss.str();
315
1.38k
    }
316
317
0
    size_t size() {
318
0
        DCHECK(_begin_scan_keys.size() == _end_scan_keys.size());
319
0
        return _begin_scan_keys.size();
320
0
    }
321
322
213k
    void set_is_convertible(bool is_convertible) { _is_convertible = is_convertible; }
323
324
private:
325
    std::vector<OlapTuple> _begin_scan_keys;
326
    std::vector<OlapTuple> _end_scan_keys;
327
    bool _has_range_value = false;
328
    bool _begin_include = false;
329
    bool _end_include = false;
330
    bool _is_convertible = false;
331
};
332
333
using ColumnValueRangeType = std::variant<
334
        ColumnValueRange<TYPE_TINYINT>, ColumnValueRange<TYPE_SMALLINT>, ColumnValueRange<TYPE_INT>,
335
        ColumnValueRange<TYPE_BIGINT>, ColumnValueRange<TYPE_LARGEINT>,
336
        ColumnValueRange<TYPE_FLOAT>, ColumnValueRange<TYPE_DOUBLE>, ColumnValueRange<TYPE_IPV4>,
337
        ColumnValueRange<TYPE_IPV6>, ColumnValueRange<TYPE_CHAR>, ColumnValueRange<TYPE_VARCHAR>,
338
        ColumnValueRange<TYPE_STRING>, ColumnValueRange<TYPE_DATE>, ColumnValueRange<TYPE_DATEV2>,
339
        ColumnValueRange<TYPE_DATETIME>, ColumnValueRange<TYPE_DATETIMEV2>,
340
        ColumnValueRange<TYPE_TIMESTAMPTZ>, ColumnValueRange<TYPE_DECIMALV2>,
341
        ColumnValueRange<TYPE_BOOLEAN>, ColumnValueRange<TYPE_DECIMAL32>,
342
        ColumnValueRange<TYPE_DECIMAL64>, ColumnValueRange<TYPE_DECIMAL128I>,
343
        ColumnValueRange<TYPE_DECIMAL256>>;
344
345
template <PrimitiveType primitive_type>
346
const typename ColumnValueRange<primitive_type>::CppType
347
        ColumnValueRange<primitive_type>::TYPE_MIN =
348
                type_limit<typename ColumnValueRange<primitive_type>::CppType>::min();
349
template <PrimitiveType primitive_type>
350
const typename ColumnValueRange<primitive_type>::CppType
351
        ColumnValueRange<primitive_type>::TYPE_MAX =
352
                type_limit<typename ColumnValueRange<primitive_type>::CppType>::max();
353
354
template <PrimitiveType primitive_type>
355
ColumnValueRange<primitive_type>::ColumnValueRange()
356
1.27M
        : _column_type(INVALID_TYPE), _precision(-1), _scale(-1) {}
357
358
template <PrimitiveType primitive_type>
359
ColumnValueRange<primitive_type>::ColumnValueRange(std::string col_name, const CppType& min,
360
                                                   const CppType& max, bool is_nullable_col,
361
                                                   bool contain_null, int precision, int scale)
362
1.53M
        : _column_name(std::move(col_name)),
363
1.53M
          _column_type(primitive_type),
364
920k
          _low_value(min),
365
920k
          _high_value(max),
366
1.53M
          _low_op(FILTER_LARGER_OR_EQUAL),
367
1.53M
          _high_op(FILTER_LESS_OR_EQUAL),
368
1.53M
          _is_nullable_col(is_nullable_col),
369
1.53M
          _contain_null(is_nullable_col && contain_null),
370
1.53M
          _precision(precision),
371
1.53M
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKaSA_bbii
Line
Count
Source
362
163k
        : _column_name(std::move(col_name)),
363
163k
          _column_type(primitive_type),
364
163k
          _low_value(min),
365
163k
          _high_value(max),
366
163k
          _low_op(FILTER_LARGER_OR_EQUAL),
367
163k
          _high_op(FILTER_LESS_OR_EQUAL),
368
163k
          _is_nullable_col(is_nullable_col),
369
163k
          _contain_null(is_nullable_col && contain_null),
370
163k
          _precision(precision),
371
163k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKsSA_bbii
Line
Count
Source
362
13.6k
        : _column_name(std::move(col_name)),
363
13.6k
          _column_type(primitive_type),
364
13.6k
          _low_value(min),
365
13.6k
          _high_value(max),
366
13.6k
          _low_op(FILTER_LARGER_OR_EQUAL),
367
13.6k
          _high_op(FILTER_LESS_OR_EQUAL),
368
13.6k
          _is_nullable_col(is_nullable_col),
369
13.6k
          _contain_null(is_nullable_col && contain_null),
370
13.6k
          _precision(precision),
371
13.6k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKiSA_bbii
Line
Count
Source
362
144k
        : _column_name(std::move(col_name)),
363
144k
          _column_type(primitive_type),
364
144k
          _low_value(min),
365
144k
          _high_value(max),
366
144k
          _low_op(FILTER_LARGER_OR_EQUAL),
367
144k
          _high_op(FILTER_LESS_OR_EQUAL),
368
144k
          _is_nullable_col(is_nullable_col),
369
144k
          _contain_null(is_nullable_col && contain_null),
370
144k
          _precision(precision),
371
144k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKlSA_bbii
Line
Count
Source
362
262k
        : _column_name(std::move(col_name)),
363
262k
          _column_type(primitive_type),
364
262k
          _low_value(min),
365
262k
          _high_value(max),
366
262k
          _low_op(FILTER_LARGER_OR_EQUAL),
367
262k
          _high_op(FILTER_LESS_OR_EQUAL),
368
262k
          _is_nullable_col(is_nullable_col),
369
262k
          _contain_null(is_nullable_col && contain_null),
370
262k
          _precision(precision),
371
262k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKnSA_bbii
Line
Count
Source
362
11.0k
        : _column_name(std::move(col_name)),
363
11.0k
          _column_type(primitive_type),
364
11.0k
          _low_value(min),
365
11.0k
          _high_value(max),
366
11.0k
          _low_op(FILTER_LARGER_OR_EQUAL),
367
11.0k
          _high_op(FILTER_LESS_OR_EQUAL),
368
11.0k
          _is_nullable_col(is_nullable_col),
369
11.0k
          _contain_null(is_nullable_col && contain_null),
370
11.0k
          _precision(precision),
371
11.0k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKfSA_bbii
Line
Count
Source
362
7.06k
        : _column_name(std::move(col_name)),
363
7.06k
          _column_type(primitive_type),
364
7.06k
          _low_value(min),
365
7.06k
          _high_value(max),
366
7.06k
          _low_op(FILTER_LARGER_OR_EQUAL),
367
7.06k
          _high_op(FILTER_LESS_OR_EQUAL),
368
7.06k
          _is_nullable_col(is_nullable_col),
369
7.06k
          _contain_null(is_nullable_col && contain_null),
370
7.06k
          _precision(precision),
371
7.06k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKdSA_bbii
Line
Count
Source
362
9.40k
        : _column_name(std::move(col_name)),
363
9.40k
          _column_type(primitive_type),
364
9.40k
          _low_value(min),
365
9.40k
          _high_value(max),
366
9.40k
          _low_op(FILTER_LARGER_OR_EQUAL),
367
9.40k
          _high_op(FILTER_LESS_OR_EQUAL),
368
9.40k
          _is_nullable_col(is_nullable_col),
369
9.40k
          _contain_null(is_nullable_col && contain_null),
370
9.40k
          _precision(precision),
371
9.40k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKjSA_bbii
Line
Count
Source
362
435
        : _column_name(std::move(col_name)),
363
435
          _column_type(primitive_type),
364
435
          _low_value(min),
365
435
          _high_value(max),
366
435
          _low_op(FILTER_LARGER_OR_EQUAL),
367
435
          _high_op(FILTER_LESS_OR_EQUAL),
368
435
          _is_nullable_col(is_nullable_col),
369
435
          _contain_null(is_nullable_col && contain_null),
370
435
          _precision(precision),
371
435
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKoSA_bbii
Line
Count
Source
362
453
        : _column_name(std::move(col_name)),
363
453
          _column_type(primitive_type),
364
453
          _low_value(min),
365
453
          _high_value(max),
366
453
          _low_op(FILTER_LARGER_OR_EQUAL),
367
453
          _high_op(FILTER_LESS_OR_EQUAL),
368
453
          _is_nullable_col(is_nullable_col),
369
453
          _contain_null(is_nullable_col && contain_null),
370
453
          _precision(precision),
371
453
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS8_SA_bbii
Line
Count
Source
362
13.7k
        : _column_name(std::move(col_name)),
363
13.7k
          _column_type(primitive_type),
364
13.7k
          _low_value(min),
365
13.7k
          _high_value(max),
366
13.7k
          _low_op(FILTER_LARGER_OR_EQUAL),
367
13.7k
          _high_op(FILTER_LESS_OR_EQUAL),
368
13.7k
          _is_nullable_col(is_nullable_col),
369
13.7k
          _contain_null(is_nullable_col && contain_null),
370
13.7k
          _precision(precision),
371
13.7k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS8_SA_bbii
Line
Count
Source
362
683k
        : _column_name(std::move(col_name)),
363
683k
          _column_type(primitive_type),
364
683k
          _low_value(min),
365
683k
          _high_value(max),
366
683k
          _low_op(FILTER_LARGER_OR_EQUAL),
367
683k
          _high_op(FILTER_LESS_OR_EQUAL),
368
683k
          _is_nullable_col(is_nullable_col),
369
683k
          _contain_null(is_nullable_col && contain_null),
370
683k
          _precision(precision),
371
683k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS8_SA_bbii
Line
Count
Source
362
80.7k
        : _column_name(std::move(col_name)),
363
80.7k
          _column_type(primitive_type),
364
80.7k
          _low_value(min),
365
80.7k
          _high_value(max),
366
80.7k
          _low_op(FILTER_LARGER_OR_EQUAL),
367
80.7k
          _high_op(FILTER_LESS_OR_EQUAL),
368
80.7k
          _is_nullable_col(is_nullable_col),
369
80.7k
          _contain_null(is_nullable_col && contain_null),
370
80.7k
          _precision(precision),
371
80.7k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_16VecDateTimeValueESB_bbii
Line
Count
Source
362
640
        : _column_name(std::move(col_name)),
363
640
          _column_type(primitive_type),
364
640
          _low_value(min),
365
640
          _high_value(max),
366
640
          _low_op(FILTER_LARGER_OR_EQUAL),
367
640
          _high_op(FILTER_LESS_OR_EQUAL),
368
640
          _is_nullable_col(is_nullable_col),
369
640
          _contain_null(is_nullable_col && contain_null),
370
640
          _precision(precision),
371
640
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_11DateV2ValueINS_15DateV2ValueTypeEEESD_bbii
Line
Count
Source
362
30.2k
        : _column_name(std::move(col_name)),
363
30.2k
          _column_type(primitive_type),
364
30.2k
          _low_value(min),
365
30.2k
          _high_value(max),
366
30.2k
          _low_op(FILTER_LARGER_OR_EQUAL),
367
30.2k
          _high_op(FILTER_LESS_OR_EQUAL),
368
30.2k
          _is_nullable_col(is_nullable_col),
369
30.2k
          _contain_null(is_nullable_col && contain_null),
370
30.2k
          _precision(precision),
371
30.2k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_16VecDateTimeValueESB_bbii
Line
Count
Source
362
654
        : _column_name(std::move(col_name)),
363
654
          _column_type(primitive_type),
364
654
          _low_value(min),
365
654
          _high_value(max),
366
654
          _low_op(FILTER_LARGER_OR_EQUAL),
367
654
          _high_op(FILTER_LESS_OR_EQUAL),
368
654
          _is_nullable_col(is_nullable_col),
369
654
          _contain_null(is_nullable_col && contain_null),
370
654
          _precision(precision),
371
654
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_11DateV2ValueINS_19DateTimeV2ValueTypeEEESD_bbii
Line
Count
Source
362
73.9k
        : _column_name(std::move(col_name)),
363
73.9k
          _column_type(primitive_type),
364
73.9k
          _low_value(min),
365
73.9k
          _high_value(max),
366
73.9k
          _low_op(FILTER_LARGER_OR_EQUAL),
367
73.9k
          _high_op(FILTER_LESS_OR_EQUAL),
368
73.9k
          _is_nullable_col(is_nullable_col),
369
73.9k
          _contain_null(is_nullable_col && contain_null),
370
73.9k
          _precision(precision),
371
73.9k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_16TimestampTzValueESB_bbii
Line
Count
Source
362
6.24k
        : _column_name(std::move(col_name)),
363
6.24k
          _column_type(primitive_type),
364
6.24k
          _low_value(min),
365
6.24k
          _high_value(max),
366
6.24k
          _low_op(FILTER_LARGER_OR_EQUAL),
367
6.24k
          _high_op(FILTER_LESS_OR_EQUAL),
368
6.24k
          _is_nullable_col(is_nullable_col),
369
6.24k
          _contain_null(is_nullable_col && contain_null),
370
6.24k
          _precision(precision),
371
6.24k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_14DecimalV2ValueESB_bbii
Line
Count
Source
362
860
        : _column_name(std::move(col_name)),
363
860
          _column_type(primitive_type),
364
860
          _low_value(min),
365
860
          _high_value(max),
366
860
          _low_op(FILTER_LARGER_OR_EQUAL),
367
860
          _high_op(FILTER_LESS_OR_EQUAL),
368
860
          _is_nullable_col(is_nullable_col),
369
860
          _contain_null(is_nullable_col && contain_null),
370
860
          _precision(precision),
371
860
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKhSA_bbii
Line
Count
Source
362
6.65k
        : _column_name(std::move(col_name)),
363
6.65k
          _column_type(primitive_type),
364
6.65k
          _low_value(min),
365
6.65k
          _high_value(max),
366
6.65k
          _low_op(FILTER_LARGER_OR_EQUAL),
367
6.65k
          _high_op(FILTER_LESS_OR_EQUAL),
368
6.65k
          _is_nullable_col(is_nullable_col),
369
6.65k
          _contain_null(is_nullable_col && contain_null),
370
6.65k
          _precision(precision),
371
6.65k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_7DecimalIiEESC_bbii
Line
Count
Source
362
6.78k
        : _column_name(std::move(col_name)),
363
6.78k
          _column_type(primitive_type),
364
6.78k
          _low_value(min),
365
6.78k
          _high_value(max),
366
6.78k
          _low_op(FILTER_LARGER_OR_EQUAL),
367
6.78k
          _high_op(FILTER_LESS_OR_EQUAL),
368
6.78k
          _is_nullable_col(is_nullable_col),
369
6.78k
          _contain_null(is_nullable_col && contain_null),
370
6.78k
          _precision(precision),
371
6.78k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_7DecimalIlEESC_bbii
Line
Count
Source
362
11.4k
        : _column_name(std::move(col_name)),
363
11.4k
          _column_type(primitive_type),
364
11.4k
          _low_value(min),
365
11.4k
          _high_value(max),
366
11.4k
          _low_op(FILTER_LARGER_OR_EQUAL),
367
11.4k
          _high_op(FILTER_LESS_OR_EQUAL),
368
11.4k
          _is_nullable_col(is_nullable_col),
369
11.4k
          _contain_null(is_nullable_col && contain_null),
370
11.4k
          _precision(precision),
371
11.4k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_12Decimal128V3ESB_bbii
Line
Count
Source
362
9.62k
        : _column_name(std::move(col_name)),
363
9.62k
          _column_type(primitive_type),
364
9.62k
          _low_value(min),
365
9.62k
          _high_value(max),
366
9.62k
          _low_op(FILTER_LARGER_OR_EQUAL),
367
9.62k
          _high_op(FILTER_LESS_OR_EQUAL),
368
9.62k
          _is_nullable_col(is_nullable_col),
369
9.62k
          _contain_null(is_nullable_col && contain_null),
370
9.62k
          _precision(precision),
371
9.62k
          _scale(scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_7DecimalIN4wide7integerILm256EiEEEESF_bbii
Line
Count
Source
362
1.65k
        : _column_name(std::move(col_name)),
363
1.65k
          _column_type(primitive_type),
364
1.65k
          _low_value(min),
365
1.65k
          _high_value(max),
366
1.65k
          _low_op(FILTER_LARGER_OR_EQUAL),
367
1.65k
          _high_op(FILTER_LESS_OR_EQUAL),
368
1.65k
          _is_nullable_col(is_nullable_col),
369
1.65k
          _contain_null(is_nullable_col && contain_null),
370
1.65k
          _precision(precision),
371
1.65k
          _scale(scale) {}
372
373
template <PrimitiveType primitive_type>
374
ColumnValueRange<primitive_type>::ColumnValueRange(std::string col_name, bool is_nullable_col,
375
                                                   int precision, int scale)
376
1.26M
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
377
1.26M
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
376
88.4k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
377
88.4k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
376
12.2k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
377
12.2k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
376
131k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
377
131k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
376
257k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
377
257k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
376
10.6k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
377
10.6k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
376
6.87k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
377
6.87k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
376
8.89k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
377
8.89k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
376
12.7k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
377
12.7k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
376
586
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
377
586
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
376
562
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
377
562
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
376
25.7k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
377
25.7k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
376
72.1k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
377
72.1k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
376
5.34k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
377
5.34k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
376
520k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
377
520k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
376
79.8k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
377
79.8k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
376
6.59k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
377
6.59k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
376
11.1k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
377
11.1k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
376
9.33k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
377
9.33k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
376
1.41k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
377
1.41k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
376
830
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
377
830
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
376
6.47k
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
377
6.47k
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
376
387
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
377
387
                           is_nullable_col, precision, scale) {}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EEC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbii
Line
Count
Source
376
403
        : ColumnValueRange(std::move(col_name), TYPE_MIN, TYPE_MAX, is_nullable_col,
377
403
                           is_nullable_col, precision, scale) {}
378
379
template <PrimitiveType primitive_type>
380
307k
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
381
307k
    if (INVALID_TYPE == _column_type) {
382
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
383
0
    }
384
385
307k
    _fixed_values.insert(value);
386
307k
    _contain_null = false;
387
388
307k
    _high_value = TYPE_MIN;
389
307k
    _low_value = TYPE_MAX;
390
391
307k
    return Status::OK();
392
307k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE15add_fixed_valueERKa
Line
Count
Source
380
73.7k
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
381
73.7k
    if (INVALID_TYPE == _column_type) {
382
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
383
0
    }
384
385
73.7k
    _fixed_values.insert(value);
386
73.7k
    _contain_null = false;
387
388
73.7k
    _high_value = TYPE_MIN;
389
73.7k
    _low_value = TYPE_MAX;
390
391
73.7k
    return Status::OK();
392
73.7k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE15add_fixed_valueERKs
Line
Count
Source
380
237
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
381
237
    if (INVALID_TYPE == _column_type) {
382
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
383
0
    }
384
385
237
    _fixed_values.insert(value);
386
237
    _contain_null = false;
387
388
237
    _high_value = TYPE_MIN;
389
237
    _low_value = TYPE_MAX;
390
391
237
    return Status::OK();
392
237
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE15add_fixed_valueERKi
Line
Count
Source
380
69.3k
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
381
69.3k
    if (INVALID_TYPE == _column_type) {
382
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
383
0
    }
384
385
69.3k
    _fixed_values.insert(value);
386
69.3k
    _contain_null = false;
387
388
69.3k
    _high_value = TYPE_MIN;
389
69.3k
    _low_value = TYPE_MAX;
390
391
69.3k
    return Status::OK();
392
69.3k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE15add_fixed_valueERKl
Line
Count
Source
380
1.24k
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
381
1.24k
    if (INVALID_TYPE == _column_type) {
382
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
383
0
    }
384
385
1.24k
    _fixed_values.insert(value);
386
1.24k
    _contain_null = false;
387
388
1.24k
    _high_value = TYPE_MIN;
389
1.24k
    _low_value = TYPE_MAX;
390
391
1.24k
    return Status::OK();
392
1.24k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE15add_fixed_valueERKn
Line
Count
Source
380
199
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
381
199
    if (INVALID_TYPE == _column_type) {
382
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
383
0
    }
384
385
199
    _fixed_values.insert(value);
386
199
    _contain_null = false;
387
388
199
    _high_value = TYPE_MIN;
389
199
    _low_value = TYPE_MAX;
390
391
199
    return Status::OK();
392
199
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE15add_fixed_valueERKf
Line
Count
Source
380
28
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
381
28
    if (INVALID_TYPE == _column_type) {
382
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
383
0
    }
384
385
28
    _fixed_values.insert(value);
386
28
    _contain_null = false;
387
388
28
    _high_value = TYPE_MIN;
389
28
    _low_value = TYPE_MAX;
390
391
28
    return Status::OK();
392
28
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE15add_fixed_valueERKd
Line
Count
Source
380
179
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
381
179
    if (INVALID_TYPE == _column_type) {
382
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
383
0
    }
384
385
179
    _fixed_values.insert(value);
386
179
    _contain_null = false;
387
388
179
    _high_value = TYPE_MIN;
389
179
    _low_value = TYPE_MAX;
390
391
179
    return Status::OK();
392
179
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE15add_fixed_valueERKj
Line
Count
Source
380
24
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
381
24
    if (INVALID_TYPE == _column_type) {
382
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
383
0
    }
384
385
24
    _fixed_values.insert(value);
386
24
    _contain_null = false;
387
388
24
    _high_value = TYPE_MIN;
389
24
    _low_value = TYPE_MAX;
390
391
24
    return Status::OK();
392
24
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE15add_fixed_valueERKo
Line
Count
Source
380
27
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
381
27
    if (INVALID_TYPE == _column_type) {
382
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
383
0
    }
384
385
27
    _fixed_values.insert(value);
386
27
    _contain_null = false;
387
388
27
    _high_value = TYPE_MIN;
389
27
    _low_value = TYPE_MAX;
390
391
27
    return Status::OK();
392
27
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE15add_fixed_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
380
409
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
381
409
    if (INVALID_TYPE == _column_type) {
382
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
383
0
    }
384
385
409
    _fixed_values.insert(value);
386
409
    _contain_null = false;
387
388
409
    _high_value = TYPE_MIN;
389
409
    _low_value = TYPE_MAX;
390
391
409
    return Status::OK();
392
409
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE15add_fixed_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
380
159k
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
381
159k
    if (INVALID_TYPE == _column_type) {
382
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
383
0
    }
384
385
159k
    _fixed_values.insert(value);
386
159k
    _contain_null = false;
387
388
159k
    _high_value = TYPE_MIN;
389
159k
    _low_value = TYPE_MAX;
390
391
159k
    return Status::OK();
392
159k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE15add_fixed_valueERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
380
319
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
381
319
    if (INVALID_TYPE == _column_type) {
382
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
383
0
    }
384
385
319
    _fixed_values.insert(value);
386
319
    _contain_null = false;
387
388
319
    _high_value = TYPE_MIN;
389
319
    _low_value = TYPE_MAX;
390
391
319
    return Status::OK();
392
319
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE15add_fixed_valueERKNS_16VecDateTimeValueE
Line
Count
Source
380
59
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
381
59
    if (INVALID_TYPE == _column_type) {
382
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
383
0
    }
384
385
59
    _fixed_values.insert(value);
386
59
    _contain_null = false;
387
388
59
    _high_value = TYPE_MIN;
389
59
    _low_value = TYPE_MAX;
390
391
59
    return Status::OK();
392
59
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE15add_fixed_valueERKNS_11DateV2ValueINS_15DateV2ValueTypeEEE
Line
Count
Source
380
913
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
381
913
    if (INVALID_TYPE == _column_type) {
382
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
383
0
    }
384
385
913
    _fixed_values.insert(value);
386
913
    _contain_null = false;
387
388
913
    _high_value = TYPE_MIN;
389
913
    _low_value = TYPE_MAX;
390
391
913
    return Status::OK();
392
913
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE15add_fixed_valueERKNS_16VecDateTimeValueE
Line
Count
Source
380
110
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
381
110
    if (INVALID_TYPE == _column_type) {
382
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
383
0
    }
384
385
110
    _fixed_values.insert(value);
386
110
    _contain_null = false;
387
388
110
    _high_value = TYPE_MIN;
389
110
    _low_value = TYPE_MAX;
390
391
110
    return Status::OK();
392
110
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE15add_fixed_valueERKNS_11DateV2ValueINS_19DateTimeV2ValueTypeEEE
Line
Count
Source
380
314
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
381
314
    if (INVALID_TYPE == _column_type) {
382
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
383
0
    }
384
385
314
    _fixed_values.insert(value);
386
314
    _contain_null = false;
387
388
314
    _high_value = TYPE_MIN;
389
314
    _low_value = TYPE_MAX;
390
391
314
    return Status::OK();
392
314
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE15add_fixed_valueERKNS_16TimestampTzValueE
Line
Count
Source
380
260
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
381
260
    if (INVALID_TYPE == _column_type) {
382
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
383
0
    }
384
385
260
    _fixed_values.insert(value);
386
260
    _contain_null = false;
387
388
260
    _high_value = TYPE_MIN;
389
260
    _low_value = TYPE_MAX;
390
391
260
    return Status::OK();
392
260
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE15add_fixed_valueERKNS_14DecimalV2ValueE
Line
Count
Source
380
37
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
381
37
    if (INVALID_TYPE == _column_type) {
382
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
383
0
    }
384
385
37
    _fixed_values.insert(value);
386
37
    _contain_null = false;
387
388
37
    _high_value = TYPE_MIN;
389
37
    _low_value = TYPE_MAX;
390
391
37
    return Status::OK();
392
37
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE15add_fixed_valueERKh
Line
Count
Source
380
98
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
381
98
    if (INVALID_TYPE == _column_type) {
382
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
383
0
    }
384
385
98
    _fixed_values.insert(value);
386
98
    _contain_null = false;
387
388
98
    _high_value = TYPE_MIN;
389
98
    _low_value = TYPE_MAX;
390
391
98
    return Status::OK();
392
98
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE15add_fixed_valueERKNS_7DecimalIiEE
Line
Count
Source
380
51
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
381
51
    if (INVALID_TYPE == _column_type) {
382
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
383
0
    }
384
385
51
    _fixed_values.insert(value);
386
51
    _contain_null = false;
387
388
51
    _high_value = TYPE_MIN;
389
51
    _low_value = TYPE_MAX;
390
391
51
    return Status::OK();
392
51
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE15add_fixed_valueERKNS_7DecimalIlEE
Line
Count
Source
380
120
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
381
120
    if (INVALID_TYPE == _column_type) {
382
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
383
0
    }
384
385
120
    _fixed_values.insert(value);
386
120
    _contain_null = false;
387
388
120
    _high_value = TYPE_MIN;
389
120
    _low_value = TYPE_MAX;
390
391
120
    return Status::OK();
392
120
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE15add_fixed_valueERKNS_12Decimal128V3E
Line
Count
Source
380
141
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
381
141
    if (INVALID_TYPE == _column_type) {
382
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
383
0
    }
384
385
141
    _fixed_values.insert(value);
386
141
    _contain_null = false;
387
388
141
    _high_value = TYPE_MIN;
389
141
    _low_value = TYPE_MAX;
390
391
141
    return Status::OK();
392
141
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE15add_fixed_valueERKNS_7DecimalIN4wide7integerILm256EiEEEE
Line
Count
Source
380
48
Status ColumnValueRange<primitive_type>::add_fixed_value(const CppType& value) {
381
48
    if (INVALID_TYPE == _column_type) {
382
0
        return Status::InternalError("AddFixedValue failed, Invalid type");
383
0
    }
384
385
48
    _fixed_values.insert(value);
386
48
    _contain_null = false;
387
388
48
    _high_value = TYPE_MIN;
389
48
    _low_value = TYPE_MAX;
390
391
48
    return Status::OK();
392
48
}
393
394
template <PrimitiveType primitive_type>
395
3
void ColumnValueRange<primitive_type>::remove_fixed_value(const CppType& value) {
396
3
    _fixed_values.erase(value);
397
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
395
3
void ColumnValueRange<primitive_type>::remove_fixed_value(const CppType& value) {
396
3
    _fixed_values.erase(value);
397
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
398
399
template <PrimitiveType primitive_type>
400
4.50M
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
401
4.50M
    return _fixed_values.size() != 0;
402
4.50M
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE20is_fixed_value_rangeEv
Line
Count
Source
400
678k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
401
678k
    return _fixed_values.size() != 0;
402
678k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE20is_fixed_value_rangeEv
Line
Count
Source
400
14.7k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
401
14.7k
    return _fixed_values.size() != 0;
402
14.7k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE20is_fixed_value_rangeEv
Line
Count
Source
400
424k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
401
424k
    return _fixed_values.size() != 0;
402
424k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE20is_fixed_value_rangeEv
Line
Count
Source
400
384k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
401
384k
    return _fixed_values.size() != 0;
402
384k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE20is_fixed_value_rangeEv
Line
Count
Source
400
34.1k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
401
34.1k
    return _fixed_values.size() != 0;
402
34.1k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE20is_fixed_value_rangeEv
Line
Count
Source
400
7.20k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
401
7.20k
    return _fixed_values.size() != 0;
402
7.20k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE20is_fixed_value_rangeEv
Line
Count
Source
400
10.2k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
401
10.2k
    return _fixed_values.size() != 0;
402
10.2k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE20is_fixed_value_rangeEv
Line
Count
Source
400
580
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
401
580
    return _fixed_values.size() != 0;
402
580
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE20is_fixed_value_rangeEv
Line
Count
Source
400
618
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
401
618
    return _fixed_values.size() != 0;
402
618
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE20is_fixed_value_rangeEv
Line
Count
Source
400
17.3k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
401
17.3k
    return _fixed_values.size() != 0;
402
17.3k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE20is_fixed_value_rangeEv
Line
Count
Source
400
2.63M
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
401
2.63M
    return _fixed_values.size() != 0;
402
2.63M
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE20is_fixed_value_rangeEv
Line
Count
Source
400
82.1k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
401
82.1k
    return _fixed_values.size() != 0;
402
82.1k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE20is_fixed_value_rangeEv
Line
Count
Source
400
988
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
401
988
    return _fixed_values.size() != 0;
402
988
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE20is_fixed_value_rangeEv
Line
Count
Source
400
45.9k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
401
45.9k
    return _fixed_values.size() != 0;
402
45.9k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE20is_fixed_value_rangeEv
Line
Count
Source
400
1.22k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
401
1.22k
    return _fixed_values.size() != 0;
402
1.22k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE20is_fixed_value_rangeEv
Line
Count
Source
400
87.8k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
401
87.8k
    return _fixed_values.size() != 0;
402
87.8k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE20is_fixed_value_rangeEv
Line
Count
Source
400
20.1k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
401
20.1k
    return _fixed_values.size() != 0;
402
20.1k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE20is_fixed_value_rangeEv
Line
Count
Source
400
1.92k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
401
1.92k
    return _fixed_values.size() != 0;
402
1.92k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE20is_fixed_value_rangeEv
Line
Count
Source
400
13.3k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
401
13.3k
    return _fixed_values.size() != 0;
402
13.3k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE20is_fixed_value_rangeEv
Line
Count
Source
400
9.80k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
401
9.80k
    return _fixed_values.size() != 0;
402
9.80k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE20is_fixed_value_rangeEv
Line
Count
Source
400
16.1k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
401
16.1k
    return _fixed_values.size() != 0;
402
16.1k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE20is_fixed_value_rangeEv
Line
Count
Source
400
17.1k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
401
17.1k
    return _fixed_values.size() != 0;
402
17.1k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE20is_fixed_value_rangeEv
Line
Count
Source
400
4.64k
bool ColumnValueRange<primitive_type>::is_fixed_value_range() const {
401
4.64k
    return _fixed_values.size() != 0;
402
4.64k
}
403
404
template <PrimitiveType primitive_type>
405
1.43M
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
406
1.43M
    return Compare::greater(_high_value, _low_value);
407
1.43M
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE20is_scope_value_rangeEv
Line
Count
Source
405
90.7k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
406
90.7k
    return Compare::greater(_high_value, _low_value);
407
90.7k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE20is_scope_value_rangeEv
Line
Count
Source
405
12.2k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
406
12.2k
    return Compare::greater(_high_value, _low_value);
407
12.2k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE20is_scope_value_rangeEv
Line
Count
Source
405
193k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
406
193k
    return Compare::greater(_high_value, _low_value);
407
193k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE20is_scope_value_rangeEv
Line
Count
Source
405
286k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
406
286k
    return Compare::greater(_high_value, _low_value);
407
286k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE20is_scope_value_rangeEv
Line
Count
Source
405
14.7k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
406
14.7k
    return Compare::greater(_high_value, _low_value);
407
14.7k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE20is_scope_value_rangeEv
Line
Count
Source
405
6.87k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
406
6.87k
    return Compare::greater(_high_value, _low_value);
407
6.87k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE20is_scope_value_rangeEv
Line
Count
Source
405
8.95k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
406
8.95k
    return Compare::greater(_high_value, _low_value);
407
8.95k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE20is_scope_value_rangeEv
Line
Count
Source
405
392
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
406
392
    return Compare::greater(_high_value, _low_value);
407
392
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE20is_scope_value_rangeEv
Line
Count
Source
405
410
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
406
410
    return Compare::greater(_high_value, _low_value);
407
410
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE20is_scope_value_rangeEv
Line
Count
Source
405
12.8k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
406
12.8k
    return Compare::greater(_high_value, _low_value);
407
12.8k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE20is_scope_value_rangeEv
Line
Count
Source
405
576k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
406
576k
    return Compare::greater(_high_value, _low_value);
407
576k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE20is_scope_value_rangeEv
Line
Count
Source
405
79.6k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
406
79.6k
    return Compare::greater(_high_value, _low_value);
407
79.6k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE20is_scope_value_rangeEv
Line
Count
Source
405
617
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
406
617
    return Compare::greater(_high_value, _low_value);
407
617
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE20is_scope_value_rangeEv
Line
Count
Source
405
28.1k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
406
28.1k
    return Compare::greater(_high_value, _low_value);
407
28.1k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE20is_scope_value_rangeEv
Line
Count
Source
405
598
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
406
598
    return Compare::greater(_high_value, _low_value);
407
598
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE20is_scope_value_rangeEv
Line
Count
Source
405
74.3k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
406
74.3k
    return Compare::greater(_high_value, _low_value);
407
74.3k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE20is_scope_value_rangeEv
Line
Count
Source
405
7.83k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
406
7.83k
    return Compare::greater(_high_value, _low_value);
407
7.83k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE20is_scope_value_rangeEv
Line
Count
Source
405
1.00k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
406
1.00k
    return Compare::greater(_high_value, _low_value);
407
1.00k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE20is_scope_value_rangeEv
Line
Count
Source
405
7.72k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
406
7.72k
    return Compare::greater(_high_value, _low_value);
407
7.72k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE20is_scope_value_rangeEv
Line
Count
Source
405
7.12k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
406
7.12k
    return Compare::greater(_high_value, _low_value);
407
7.12k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE20is_scope_value_rangeEv
Line
Count
Source
405
11.8k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
406
11.8k
    return Compare::greater(_high_value, _low_value);
407
11.8k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE20is_scope_value_rangeEv
Line
Count
Source
405
10.7k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
406
10.7k
    return Compare::greater(_high_value, _low_value);
407
10.7k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE20is_scope_value_rangeEv
Line
Count
Source
405
1.97k
bool ColumnValueRange<primitive_type>::is_scope_value_range() const {
406
1.97k
    return Compare::greater(_high_value, _low_value);
407
1.97k
}
408
409
template <PrimitiveType primitive_type>
410
2.06M
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
411
2.06M
    if (INVALID_TYPE == _column_type) {
412
0
        return true;
413
0
    }
414
415
2.06M
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
416
2.06M
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE20is_empty_value_rangeEv
Line
Count
Source
410
237k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
411
237k
    if (INVALID_TYPE == _column_type) {
412
0
        return true;
413
0
    }
414
415
237k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
416
237k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE20is_empty_value_rangeEv
Line
Count
Source
410
12.5k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
411
12.5k
    if (INVALID_TYPE == _column_type) {
412
0
        return true;
413
0
    }
414
415
12.5k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
416
12.5k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE20is_empty_value_rangeEv
Line
Count
Source
410
201k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
411
201k
    if (INVALID_TYPE == _column_type) {
412
0
        return true;
413
0
    }
414
415
201k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
416
201k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE20is_empty_value_rangeEv
Line
Count
Source
410
287k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
411
287k
    if (INVALID_TYPE == _column_type) {
412
0
        return true;
413
0
    }
414
415
287k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
416
287k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE20is_empty_value_rangeEv
Line
Count
Source
410
15.3k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
411
15.3k
    if (INVALID_TYPE == _column_type) {
412
0
        return true;
413
0
    }
414
415
15.3k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
416
15.3k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE20is_empty_value_rangeEv
Line
Count
Source
410
6.92k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
411
6.92k
    if (INVALID_TYPE == _column_type) {
412
0
        return true;
413
0
    }
414
415
6.92k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
416
6.92k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE20is_empty_value_rangeEv
Line
Count
Source
410
9.10k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
411
9.10k
    if (INVALID_TYPE == _column_type) {
412
0
        return true;
413
0
    }
414
415
9.10k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
416
9.10k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE20is_empty_value_rangeEv
Line
Count
Source
410
429
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
411
429
    if (INVALID_TYPE == _column_type) {
412
0
        return true;
413
0
    }
414
415
429
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
416
429
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE20is_empty_value_rangeEv
Line
Count
Source
410
453
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
411
453
    if (INVALID_TYPE == _column_type) {
412
0
        return true;
413
0
    }
414
415
453
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
416
453
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE20is_empty_value_rangeEv
Line
Count
Source
410
13.6k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
411
13.6k
    if (INVALID_TYPE == _column_type) {
412
0
        return true;
413
0
    }
414
415
13.6k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
416
13.6k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE20is_empty_value_rangeEv
Line
Count
Source
410
1.04M
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
411
1.04M
    if (INVALID_TYPE == _column_type) {
412
0
        return true;
413
0
    }
414
415
1.04M
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
416
1.04M
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE20is_empty_value_rangeEv
Line
Count
Source
410
79.9k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
411
79.9k
    if (INVALID_TYPE == _column_type) {
412
0
        return true;
413
0
    }
414
415
79.9k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
416
79.9k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE20is_empty_value_rangeEv
Line
Count
Source
410
677
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
411
677
    if (INVALID_TYPE == _column_type) {
412
0
        return true;
413
0
    }
414
415
677
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
416
677
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE20is_empty_value_rangeEv
Line
Count
Source
410
29.9k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
411
29.9k
    if (INVALID_TYPE == _column_type) {
412
0
        return true;
413
0
    }
414
415
29.9k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
416
29.9k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE20is_empty_value_rangeEv
Line
Count
Source
410
709
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
411
709
    if (INVALID_TYPE == _column_type) {
412
0
        return true;
413
0
    }
414
415
709
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
416
709
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE20is_empty_value_rangeEv
Line
Count
Source
410
75.0k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
411
75.0k
    if (INVALID_TYPE == _column_type) {
412
0
        return true;
413
0
    }
414
415
75.0k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
416
75.0k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE20is_empty_value_rangeEv
Line
Count
Source
410
8.20k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
411
8.20k
    if (INVALID_TYPE == _column_type) {
412
0
        return true;
413
0
    }
414
415
8.20k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
416
8.20k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE20is_empty_value_rangeEv
Line
Count
Source
410
1.04k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
411
1.04k
    if (INVALID_TYPE == _column_type) {
412
0
        return true;
413
0
    }
414
415
1.04k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
416
1.04k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE20is_empty_value_rangeEv
Line
Count
Source
410
7.89k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
411
7.89k
    if (INVALID_TYPE == _column_type) {
412
0
        return true;
413
0
    }
414
415
7.89k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
416
7.89k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE20is_empty_value_rangeEv
Line
Count
Source
410
7.18k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
411
7.18k
    if (INVALID_TYPE == _column_type) {
412
0
        return true;
413
0
    }
414
415
7.18k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
416
7.18k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE20is_empty_value_rangeEv
Line
Count
Source
410
12.1k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
411
12.1k
    if (INVALID_TYPE == _column_type) {
412
0
        return true;
413
0
    }
414
415
12.1k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
416
12.1k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE20is_empty_value_rangeEv
Line
Count
Source
410
10.9k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
411
10.9k
    if (INVALID_TYPE == _column_type) {
412
0
        return true;
413
0
    }
414
415
10.9k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
416
10.9k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE20is_empty_value_rangeEv
Line
Count
Source
410
2.07k
bool ColumnValueRange<primitive_type>::is_empty_value_range() const {
411
2.07k
    if (INVALID_TYPE == _column_type) {
412
0
        return true;
413
0
    }
414
415
2.07k
    return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null());
416
2.07k
}
417
418
template <PrimitiveType primitive_type>
419
117k
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
420
117k
    if (is_fixed_value_range()) {
421
0
        return false;
422
0
    }
423
424
117k
    if (!is_enumeration_type(_column_type)) {
425
18.3k
        return false;
426
18.3k
    }
427
428
99.0k
    return true;
429
117k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE26is_fixed_value_convertibleEv
Line
Count
Source
419
1.82k
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
420
1.82k
    if (is_fixed_value_range()) {
421
0
        return false;
422
0
    }
423
424
1.82k
    if (!is_enumeration_type(_column_type)) {
425
0
        return false;
426
0
    }
427
428
1.82k
    return true;
429
1.82k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE26is_fixed_value_convertibleEv
Line
Count
Source
419
77
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
420
77
    if (is_fixed_value_range()) {
421
0
        return false;
422
0
    }
423
424
77
    if (!is_enumeration_type(_column_type)) {
425
0
        return false;
426
0
    }
427
428
77
    return true;
429
77
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE26is_fixed_value_convertibleEv
Line
Count
Source
419
62.0k
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
420
62.0k
    if (is_fixed_value_range()) {
421
0
        return false;
422
0
    }
423
424
62.0k
    if (!is_enumeration_type(_column_type)) {
425
0
        return false;
426
0
    }
427
428
62.0k
    return true;
429
62.0k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE26is_fixed_value_convertibleEv
Line
Count
Source
419
28.5k
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
420
28.5k
    if (is_fixed_value_range()) {
421
0
        return false;
422
0
    }
423
424
28.5k
    if (!is_enumeration_type(_column_type)) {
425
0
        return false;
426
0
    }
427
428
28.5k
    return true;
429
28.5k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE26is_fixed_value_convertibleEv
Line
Count
Source
419
4.28k
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
420
4.28k
    if (is_fixed_value_range()) {
421
0
        return false;
422
0
    }
423
424
4.28k
    if (!is_enumeration_type(_column_type)) {
425
0
        return false;
426
0
    }
427
428
4.28k
    return true;
429
4.28k
}
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
419
1
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
420
1
    if (is_fixed_value_range()) {
421
0
        return false;
422
0
    }
423
424
1
    if (!is_enumeration_type(_column_type)) {
425
0
        return false;
426
0
    }
427
428
1
    return true;
429
1
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE26is_fixed_value_convertibleEv
Line
Count
Source
419
362
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
420
362
    if (is_fixed_value_range()) {
421
0
        return false;
422
0
    }
423
424
363
    if (!is_enumeration_type(_column_type)) {
425
363
        return false;
426
363
    }
427
428
18.4E
    return true;
429
362
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE26is_fixed_value_convertibleEv
Line
Count
Source
419
8.45k
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
420
8.45k
    if (is_fixed_value_range()) {
421
0
        return false;
422
0
    }
423
424
8.49k
    if (!is_enumeration_type(_column_type)) {
425
8.49k
        return false;
426
8.49k
    }
427
428
18.4E
    return true;
429
8.45k
}
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE26is_fixed_value_convertibleEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE26is_fixed_value_convertibleEv
Line
Count
Source
419
34
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
420
34
    if (is_fixed_value_range()) {
421
0
        return false;
422
0
    }
423
424
34
    if (!is_enumeration_type(_column_type)) {
425
0
        return false;
426
0
    }
427
428
34
    return true;
429
34
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE26is_fixed_value_convertibleEv
Line
Count
Source
419
2.30k
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
420
2.30k
    if (is_fixed_value_range()) {
421
0
        return false;
422
0
    }
423
424
2.30k
    if (!is_enumeration_type(_column_type)) {
425
0
        return false;
426
0
    }
427
428
2.30k
    return true;
429
2.30k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE26is_fixed_value_convertibleEv
Line
Count
Source
419
36
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
420
36
    if (is_fixed_value_range()) {
421
0
        return false;
422
0
    }
423
424
36
    if (!is_enumeration_type(_column_type)) {
425
36
        return false;
426
36
    }
427
428
0
    return true;
429
36
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE26is_fixed_value_convertibleEv
Line
Count
Source
419
2.44k
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
420
2.44k
    if (is_fixed_value_range()) {
421
0
        return false;
422
0
    }
423
424
2.44k
    if (!is_enumeration_type(_column_type)) {
425
2.44k
        return false;
426
2.44k
    }
427
428
0
    return true;
429
2.44k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE26is_fixed_value_convertibleEv
Line
Count
Source
419
2.54k
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
420
2.54k
    if (is_fixed_value_range()) {
421
0
        return false;
422
0
    }
423
424
2.54k
    if (!is_enumeration_type(_column_type)) {
425
2.53k
        return false;
426
2.53k
    }
427
428
11
    return true;
429
2.54k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE26is_fixed_value_convertibleEv
Line
Count
Source
419
199
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
420
199
    if (is_fixed_value_range()) {
421
0
        return false;
422
0
    }
423
424
200
    if (!is_enumeration_type(_column_type)) {
425
200
        return false;
426
200
    }
427
428
18.4E
    return true;
429
199
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE26is_fixed_value_convertibleEv
Line
Count
Source
419
1.23k
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
420
1.23k
    if (is_fixed_value_range()) {
421
0
        return false;
422
0
    }
423
424
1.23k
    if (!is_enumeration_type(_column_type)) {
425
1.23k
        return false;
426
1.23k
    }
427
428
18.4E
    return true;
429
1.23k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE26is_fixed_value_convertibleEv
Line
Count
Source
419
534
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
420
534
    if (is_fixed_value_range()) {
421
0
        return false;
422
0
    }
423
424
535
    if (!is_enumeration_type(_column_type)) {
425
535
        return false;
426
535
    }
427
428
18.4E
    return true;
429
534
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE26is_fixed_value_convertibleEv
Line
Count
Source
419
792
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
420
792
    if (is_fixed_value_range()) {
421
0
        return false;
422
0
    }
423
424
795
    if (!is_enumeration_type(_column_type)) {
425
795
        return false;
426
795
    }
427
428
18.4E
    return true;
429
792
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE26is_fixed_value_convertibleEv
Line
Count
Source
419
1.27k
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
420
1.27k
    if (is_fixed_value_range()) {
421
0
        return false;
422
0
    }
423
424
1.27k
    if (!is_enumeration_type(_column_type)) {
425
1.27k
        return false;
426
1.27k
    }
427
428
0
    return true;
429
1.27k
}
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE26is_fixed_value_convertibleEv
Line
Count
Source
419
469
bool ColumnValueRange<primitive_type>::is_fixed_value_convertible() const {
420
469
    if (is_fixed_value_range()) {
421
0
        return false;
422
0
    }
423
424
469
    if (!is_enumeration_type(_column_type)) {
425
465
        return false;
426
465
    }
427
428
4
    return true;
429
469
}
430
431
template <PrimitiveType primitive_type>
432
109
bool ColumnValueRange<primitive_type>::is_range_value_convertible() const {
433
109
    if (!is_fixed_value_range()) {
434
0
        return false;
435
0
    }
436
437
109
    if (TYPE_NULL == _column_type || TYPE_BOOLEAN == _column_type) {
438
1
        return false;
439
1
    }
440
441
108
    return true;
442
109
}
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE26is_range_value_convertibleEv
Unexecuted instantiation: _ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE26is_range_value_convertibleEv
_ZNK5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE26is_range_value_convertibleEv
Line
Count
Source
432
106
bool ColumnValueRange<primitive_type>::is_range_value_convertible() const {
433
106
    if (!is_fixed_value_range()) {
434
0
        return false;
435
0
    }
436
437
106
    if (TYPE_NULL == _column_type || TYPE_BOOLEAN == _column_type) {
438
0
        return false;
439
0
    }
440
441
106
    return true;
442
106
}
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
432
2
bool ColumnValueRange<primitive_type>::is_range_value_convertible() const {
433
2
    if (!is_fixed_value_range()) {
434
0
        return false;
435
0
    }
436
437
2
    if (TYPE_NULL == _column_type || TYPE_BOOLEAN == _column_type) {
438
0
        return false;
439
0
    }
440
441
2
    return true;
442
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
432
1
bool ColumnValueRange<primitive_type>::is_range_value_convertible() const {
433
1
    if (!is_fixed_value_range()) {
434
0
        return false;
435
0
    }
436
437
1
    if (TYPE_NULL == _column_type || TYPE_BOOLEAN == _column_type) {
438
1
        return false;
439
1
    }
440
441
0
    return true;
442
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
443
444
// The return value indicates whether eos.
445
template <PrimitiveType primitive_type>
446
bool ColumnValueRange<primitive_type>::convert_to_close_range(
447
        std::vector<OlapTuple>& begin_scan_keys, std::vector<OlapTuple>& end_scan_keys,
448
94.1k
        bool& begin_include, bool& end_include) {
449
94.1k
    if constexpr (!_is_reject_split_type) {
450
94.1k
        begin_include = true;
451
94.1k
        end_include = true;
452
453
94.1k
        bool is_empty = false;
454
455
94.1k
        if (!is_begin_include()) {
456
2.51k
            if (Compare::equal(_low_value, TYPE_MAX)) {
457
0
                is_empty = true;
458
2.51k
            } else {
459
2.51k
                ++_low_value;
460
2.51k
            }
461
2.51k
        }
462
463
94.1k
        if (!is_end_include()) {
464
786
            if (Compare::equal(_high_value, TYPE_MIN)) {
465
0
                is_empty = true;
466
786
            } else {
467
786
                --_high_value;
468
786
            }
469
786
        }
470
471
94.1k
        if (Compare::less(_high_value, _low_value)) {
472
27
            is_empty = true;
473
27
        }
474
475
94.1k
        if (is_empty && !contain_null()) {
476
0
            begin_scan_keys.clear();
477
0
            end_scan_keys.clear();
478
0
            return true;
479
0
        }
480
94.1k
    }
481
94.1k
    return false;
482
94.1k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE22convert_to_close_rangeERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_
Line
Count
Source
448
1.82k
        bool& begin_include, bool& end_include) {
449
1.82k
    if constexpr (!_is_reject_split_type) {
450
1.82k
        begin_include = true;
451
1.82k
        end_include = true;
452
453
1.82k
        bool is_empty = false;
454
455
1.82k
        if (!is_begin_include()) {
456
31
            if (Compare::equal(_low_value, TYPE_MAX)) {
457
0
                is_empty = true;
458
31
            } else {
459
31
                ++_low_value;
460
31
            }
461
31
        }
462
463
1.82k
        if (!is_end_include()) {
464
1
            if (Compare::equal(_high_value, TYPE_MIN)) {
465
0
                is_empty = true;
466
1
            } else {
467
1
                --_high_value;
468
1
            }
469
1
        }
470
471
1.82k
        if (Compare::less(_high_value, _low_value)) {
472
0
            is_empty = true;
473
0
        }
474
475
1.82k
        if (is_empty && !contain_null()) {
476
0
            begin_scan_keys.clear();
477
0
            end_scan_keys.clear();
478
0
            return true;
479
0
        }
480
1.82k
    }
481
1.82k
    return false;
482
1.82k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE22convert_to_close_rangeERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_
Line
Count
Source
448
78
        bool& begin_include, bool& end_include) {
449
78
    if constexpr (!_is_reject_split_type) {
450
78
        begin_include = true;
451
78
        end_include = true;
452
453
78
        bool is_empty = false;
454
455
78
        if (!is_begin_include()) {
456
0
            if (Compare::equal(_low_value, TYPE_MAX)) {
457
0
                is_empty = true;
458
0
            } else {
459
0
                ++_low_value;
460
0
            }
461
0
        }
462
463
78
        if (!is_end_include()) {
464
0
            if (Compare::equal(_high_value, TYPE_MIN)) {
465
0
                is_empty = true;
466
0
            } else {
467
0
                --_high_value;
468
0
            }
469
0
        }
470
471
78
        if (Compare::less(_high_value, _low_value)) {
472
0
            is_empty = true;
473
0
        }
474
475
78
        if (is_empty && !contain_null()) {
476
0
            begin_scan_keys.clear();
477
0
            end_scan_keys.clear();
478
0
            return true;
479
0
        }
480
78
    }
481
78
    return false;
482
78
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE22convert_to_close_rangeERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_
Line
Count
Source
448
61.3k
        bool& begin_include, bool& end_include) {
449
61.3k
    if constexpr (!_is_reject_split_type) {
450
61.3k
        begin_include = true;
451
61.3k
        end_include = true;
452
453
61.3k
        bool is_empty = false;
454
455
61.3k
        if (!is_begin_include()) {
456
540
            if (Compare::equal(_low_value, TYPE_MAX)) {
457
0
                is_empty = true;
458
540
            } else {
459
540
                ++_low_value;
460
540
            }
461
540
        }
462
463
61.3k
        if (!is_end_include()) {
464
618
            if (Compare::equal(_high_value, TYPE_MIN)) {
465
0
                is_empty = true;
466
618
            } else {
467
618
                --_high_value;
468
618
            }
469
618
        }
470
471
61.3k
        if (Compare::less(_high_value, _low_value)) {
472
27
            is_empty = true;
473
27
        }
474
475
61.3k
        if (is_empty && !contain_null()) {
476
0
            begin_scan_keys.clear();
477
0
            end_scan_keys.clear();
478
0
            return true;
479
0
        }
480
61.3k
    }
481
61.3k
    return false;
482
61.3k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE22convert_to_close_rangeERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_
Line
Count
Source
448
28.4k
        bool& begin_include, bool& end_include) {
449
28.4k
    if constexpr (!_is_reject_split_type) {
450
28.4k
        begin_include = true;
451
28.4k
        end_include = true;
452
453
28.4k
        bool is_empty = false;
454
455
28.4k
        if (!is_begin_include()) {
456
1.92k
            if (Compare::equal(_low_value, TYPE_MAX)) {
457
0
                is_empty = true;
458
1.92k
            } else {
459
1.92k
                ++_low_value;
460
1.92k
            }
461
1.92k
        }
462
463
28.4k
        if (!is_end_include()) {
464
8
            if (Compare::equal(_high_value, TYPE_MIN)) {
465
0
                is_empty = true;
466
8
            } else {
467
8
                --_high_value;
468
8
            }
469
8
        }
470
471
28.4k
        if (Compare::less(_high_value, _low_value)) {
472
0
            is_empty = true;
473
0
        }
474
475
28.4k
        if (is_empty && !contain_null()) {
476
0
            begin_scan_keys.clear();
477
0
            end_scan_keys.clear();
478
0
            return true;
479
0
        }
480
28.4k
    }
481
28.4k
    return false;
482
28.4k
}
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
448
1
        bool& begin_include, bool& end_include) {
449
1
    if constexpr (!_is_reject_split_type) {
450
1
        begin_include = true;
451
1
        end_include = true;
452
453
1
        bool is_empty = false;
454
455
1
        if (!is_begin_include()) {
456
0
            if (Compare::equal(_low_value, TYPE_MAX)) {
457
0
                is_empty = true;
458
0
            } else {
459
0
                ++_low_value;
460
0
            }
461
0
        }
462
463
1
        if (!is_end_include()) {
464
0
            if (Compare::equal(_high_value, TYPE_MIN)) {
465
0
                is_empty = true;
466
0
            } else {
467
0
                --_high_value;
468
0
            }
469
0
        }
470
471
1
        if (Compare::less(_high_value, _low_value)) {
472
0
            is_empty = true;
473
0
        }
474
475
1
        if (is_empty && !contain_null()) {
476
0
            begin_scan_keys.clear();
477
0
            end_scan_keys.clear();
478
0
            return true;
479
0
        }
480
1
    }
481
1
    return false;
482
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
448
34
        bool& begin_include, bool& end_include) {
449
34
    if constexpr (!_is_reject_split_type) {
450
34
        begin_include = true;
451
34
        end_include = true;
452
453
34
        bool is_empty = false;
454
455
34
        if (!is_begin_include()) {
456
0
            if (Compare::equal(_low_value, TYPE_MAX)) {
457
0
                is_empty = true;
458
0
            } else {
459
0
                ++_low_value;
460
0
            }
461
0
        }
462
463
34
        if (!is_end_include()) {
464
0
            if (Compare::equal(_high_value, TYPE_MIN)) {
465
0
                is_empty = true;
466
0
            } else {
467
0
                --_high_value;
468
0
            }
469
0
        }
470
471
34
        if (Compare::less(_high_value, _low_value)) {
472
0
            is_empty = true;
473
0
        }
474
475
34
        if (is_empty && !contain_null()) {
476
0
            begin_scan_keys.clear();
477
0
            end_scan_keys.clear();
478
0
            return true;
479
0
        }
480
34
    }
481
34
    return false;
482
34
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE22convert_to_close_rangeERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_
Line
Count
Source
448
2.30k
        bool& begin_include, bool& end_include) {
449
2.30k
    if constexpr (!_is_reject_split_type) {
450
2.30k
        begin_include = true;
451
2.30k
        end_include = true;
452
453
2.30k
        bool is_empty = false;
454
455
2.30k
        if (!is_begin_include()) {
456
10
            if (Compare::equal(_low_value, TYPE_MAX)) {
457
0
                is_empty = true;
458
10
            } else {
459
10
                ++_low_value;
460
10
            }
461
10
        }
462
463
2.30k
        if (!is_end_include()) {
464
159
            if (Compare::equal(_high_value, TYPE_MIN)) {
465
0
                is_empty = true;
466
159
            } else {
467
159
                --_high_value;
468
159
            }
469
159
        }
470
471
2.30k
        if (Compare::less(_high_value, _low_value)) {
472
0
            is_empty = true;
473
0
        }
474
475
2.30k
        if (is_empty && !contain_null()) {
476
0
            begin_scan_keys.clear();
477
0
            end_scan_keys.clear();
478
0
            return true;
479
0
        }
480
2.30k
    }
481
2.30k
    return false;
482
2.30k
}
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_
483
484
// The return value indicates whether the split result is range or fixed value.
485
template <PrimitiveType primitive_type>
486
bool ColumnValueRange<primitive_type>::convert_to_avg_range_value(
487
        std::vector<OlapTuple>& begin_scan_keys, std::vector<OlapTuple>& end_scan_keys,
488
93.6k
        bool& begin_include, bool& end_include, int32_t max_scan_key_num) {
489
93.6k
    if constexpr (!_is_reject_split_type) {
490
93.6k
        CppType min_value = get_range_min_value();
491
93.6k
        CppType max_value = get_range_max_value();
492
93.6k
        if constexpr (primitive_type == PrimitiveType::TYPE_DATE) {
493
34
            min_value.set_type(TimeType::TIME_DATE);
494
34
            max_value.set_type(TimeType::TIME_DATE);
495
34
        }
496
93.6k
        auto empty_range_only_null = Compare::greater(min_value, max_value);
497
93.6k
        if (empty_range_only_null) {
498
            // Not contain null will be disposed in `convert_to_close_range`, return eos.
499
27
            DCHECK(contain_null());
500
27
        }
501
502
93.6k
        auto no_split = [&]() -> bool {
503
88.2k
            begin_scan_keys.emplace_back();
504
88.2k
            if (contain_null()) {
505
64.2k
                begin_scan_keys.back().add_null();
506
64.2k
            } else {
507
24.0k
                begin_scan_keys.back().add_field(
508
24.0k
                        Field::create_field<primitive_type>(get_range_min_value()));
509
24.0k
            }
510
88.2k
            end_scan_keys.emplace_back();
511
88.2k
            if (empty_range_only_null) {
512
27
                end_scan_keys.back().add_null();
513
88.2k
            } else {
514
88.2k
                end_scan_keys.back().add_field(
515
88.2k
                        Field::create_field<primitive_type>(get_range_max_value()));
516
88.2k
            }
517
88.2k
            return true;
518
88.2k
        };
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
502
60.1k
        auto no_split = [&]() -> bool {
503
60.1k
            begin_scan_keys.emplace_back();
504
60.1k
            if (contain_null()) {
505
44.0k
                begin_scan_keys.back().add_null();
506
44.0k
            } else {
507
16.1k
                begin_scan_keys.back().add_field(
508
16.1k
                        Field::create_field<primitive_type>(get_range_min_value()));
509
16.1k
            }
510
60.1k
            end_scan_keys.emplace_back();
511
60.1k
            if (empty_range_only_null) {
512
27
                end_scan_keys.back().add_null();
513
60.1k
            } else {
514
60.1k
                end_scan_keys.back().add_field(
515
60.1k
                        Field::create_field<primitive_type>(get_range_max_value()));
516
60.1k
            }
517
60.1k
            return true;
518
60.1k
        };
_ZZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_iENKUlvE_clEv
Line
Count
Source
502
28.1k
        auto no_split = [&]() -> bool {
503
28.1k
            begin_scan_keys.emplace_back();
504
28.1k
            if (contain_null()) {
505
20.2k
                begin_scan_keys.back().add_null();
506
20.2k
            } else {
507
7.88k
                begin_scan_keys.back().add_field(
508
7.88k
                        Field::create_field<primitive_type>(get_range_min_value()));
509
7.88k
            }
510
28.1k
            end_scan_keys.emplace_back();
511
28.1k
            if (empty_range_only_null) {
512
0
                end_scan_keys.back().add_null();
513
28.1k
            } else {
514
28.1k
                end_scan_keys.back().add_field(
515
28.1k
                        Field::create_field<primitive_type>(get_range_max_value()));
516
28.1k
            }
517
28.1k
            return true;
518
28.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
502
1
        auto no_split = [&]() -> bool {
503
1
            begin_scan_keys.emplace_back();
504
1
            if (contain_null()) {
505
1
                begin_scan_keys.back().add_null();
506
1
            } else {
507
0
                begin_scan_keys.back().add_field(
508
0
                        Field::create_field<primitive_type>(get_range_min_value()));
509
0
            }
510
1
            end_scan_keys.emplace_back();
511
1
            if (empty_range_only_null) {
512
0
                end_scan_keys.back().add_null();
513
1
            } else {
514
1
                end_scan_keys.back().add_field(
515
1
                        Field::create_field<primitive_type>(get_range_max_value()));
516
1
            }
517
1
            return true;
518
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
519
93.6k
        if (empty_range_only_null || max_scan_key_num == 1) {
520
27
            return no_split();
521
27
        }
522
523
297k
        auto cast = [](const CppType& value) {
524
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
525
110k
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
526
110k
                return value;
527
186k
            } else {
528
186k
                return (int128_t)value;
529
186k
            }
530
297k
        };
_ZZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_iENKUlRKaE_clESA_
Line
Count
Source
523
80.6k
        auto cast = [](const CppType& value) {
524
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
525
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
526
                return value;
527
80.6k
            } else {
528
80.6k
                return (int128_t)value;
529
80.6k
            }
530
80.6k
        };
_ZZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_iENKUlRKsE_clESA_
Line
Count
Source
523
3.80k
        auto cast = [](const CppType& value) {
524
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
525
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
526
                return value;
527
3.80k
            } else {
528
3.80k
                return (int128_t)value;
529
3.80k
            }
530
3.80k
        };
_ZZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_iENKUlRKiE_clESA_
Line
Count
Source
523
72.0k
        auto cast = [](const CppType& value) {
524
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
525
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
526
                return value;
527
72.0k
            } else {
528
72.0k
                return (int128_t)value;
529
72.0k
            }
530
72.0k
        };
_ZZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_iENKUlRKlE_clESA_
Line
Count
Source
523
29.8k
        auto cast = [](const CppType& value) {
524
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
525
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
526
                return value;
527
29.8k
            } else {
528
29.8k
                return (int128_t)value;
529
29.8k
            }
530
29.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
523
1
        auto cast = [](const CppType& value) {
524
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
525
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
526
                return value;
527
1
            } else {
528
1
                return (int128_t)value;
529
1
            }
530
1
        };
_ZZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_iENKUlRKNS_16VecDateTimeValueEE_clESB_
Line
Count
Source
523
1.64k
        auto cast = [](const CppType& value) {
524
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
525
1.64k
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
526
1.64k
                return value;
527
            } else {
528
                return (int128_t)value;
529
            }
530
1.64k
        };
_ZZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_iENKUlRKNS_11DateV2ValueINS_15DateV2ValueTypeEEEE_clESD_
Line
Count
Source
523
109k
        auto cast = [](const CppType& value) {
524
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
525
109k
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
526
109k
                return value;
527
            } else {
528
                return (int128_t)value;
529
            }
530
109k
        };
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_
531
532
        // When CppType is date, we can not convert it to integer number and calculate distance.
533
        // In other case, we convert element to int128 to avoit overflow.
534
93.6k
        int128_t step_size_may_overflow = (cast(max_value) - min_value) / max_scan_key_num;
535
536
93.6k
        constexpr size_t MAX_STEP_SIZE = 1 << 20;
537
        // When the step size is too large, the range is easy to not really contain data.
538
93.6k
        if (step_size_may_overflow > MAX_STEP_SIZE) {
539
89.1k
            return no_split();
540
89.1k
        }
541
4.45k
        int step_size = cast_set<int>(step_size_may_overflow);
542
4.45k
        int real_step_size = 0;
543
544
        // Add null key if contain null, must do after no_split check
545
4.45k
        if (contain_null()) {
546
2.56k
            begin_scan_keys.emplace_back();
547
2.56k
            begin_scan_keys.back().add_null();
548
2.56k
            end_scan_keys.emplace_back();
549
2.56k
            end_scan_keys.back().add_null();
550
2.56k
        }
551
202k
        while (true) {
552
202k
            begin_scan_keys.emplace_back();
553
202k
            begin_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
554
555
202k
            if (cast(max_value) - min_value < step_size) {
556
4.29k
                min_value = max_value;
557
198k
            } else {
558
198k
                min_value += step_size;
559
198k
            }
560
561
202k
            end_scan_keys.emplace_back();
562
202k
            end_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
563
564
202k
            if (Compare::equal(min_value, max_value)) {
565
5.53k
                break;
566
5.53k
            }
567
197k
            ++min_value;
568
197k
            ++real_step_size;
569
197k
            if (real_step_size > MAX_STEP_SIZE) {
570
0
                throw Exception(Status::InternalError(
571
0
                        "convert_to_avg_range_value meet error. type={}, step_size={}",
572
0
                        int(primitive_type), step_size));
573
0
            }
574
197k
        }
575
576
4.45k
        return step_size != 0;
577
4.45k
    }
578
0
    return false;
579
93.6k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_i
Line
Count
Source
488
1.80k
        bool& begin_include, bool& end_include, int32_t max_scan_key_num) {
489
1.80k
    if constexpr (!_is_reject_split_type) {
490
1.80k
        CppType min_value = get_range_min_value();
491
1.80k
        CppType max_value = get_range_max_value();
492
        if constexpr (primitive_type == PrimitiveType::TYPE_DATE) {
493
            min_value.set_type(TimeType::TIME_DATE);
494
            max_value.set_type(TimeType::TIME_DATE);
495
        }
496
1.80k
        auto empty_range_only_null = Compare::greater(min_value, max_value);
497
1.80k
        if (empty_range_only_null) {
498
            // Not contain null will be disposed in `convert_to_close_range`, return eos.
499
0
            DCHECK(contain_null());
500
0
        }
501
502
1.80k
        auto no_split = [&]() -> bool {
503
1.80k
            begin_scan_keys.emplace_back();
504
1.80k
            if (contain_null()) {
505
1.80k
                begin_scan_keys.back().add_null();
506
1.80k
            } else {
507
1.80k
                begin_scan_keys.back().add_field(
508
1.80k
                        Field::create_field<primitive_type>(get_range_min_value()));
509
1.80k
            }
510
1.80k
            end_scan_keys.emplace_back();
511
1.80k
            if (empty_range_only_null) {
512
1.80k
                end_scan_keys.back().add_null();
513
1.80k
            } else {
514
1.80k
                end_scan_keys.back().add_field(
515
1.80k
                        Field::create_field<primitive_type>(get_range_max_value()));
516
1.80k
            }
517
1.80k
            return true;
518
1.80k
        };
519
1.80k
        if (empty_range_only_null || max_scan_key_num == 1) {
520
0
            return no_split();
521
0
        }
522
523
1.80k
        auto cast = [](const CppType& value) {
524
1.80k
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
525
1.80k
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
526
1.80k
                return value;
527
1.80k
            } else {
528
1.80k
                return (int128_t)value;
529
1.80k
            }
530
1.80k
        };
531
532
        // When CppType is date, we can not convert it to integer number and calculate distance.
533
        // In other case, we convert element to int128 to avoit overflow.
534
1.80k
        int128_t step_size_may_overflow = (cast(max_value) - min_value) / max_scan_key_num;
535
536
1.80k
        constexpr size_t MAX_STEP_SIZE = 1 << 20;
537
        // When the step size is too large, the range is easy to not really contain data.
538
1.80k
        if (step_size_may_overflow > MAX_STEP_SIZE) {
539
0
            return no_split();
540
0
        }
541
1.80k
        int step_size = cast_set<int>(step_size_may_overflow);
542
1.80k
        int real_step_size = 0;
543
544
        // Add null key if contain null, must do after no_split check
545
1.80k
        if (contain_null()) {
546
1.50k
            begin_scan_keys.emplace_back();
547
1.50k
            begin_scan_keys.back().add_null();
548
1.50k
            end_scan_keys.emplace_back();
549
1.50k
            end_scan_keys.back().add_null();
550
1.50k
        }
551
78.7k
        while (true) {
552
78.7k
            begin_scan_keys.emplace_back();
553
78.7k
            begin_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
554
555
78.7k
            if (cast(max_value) - min_value < step_size) {
556
1.83k
                min_value = max_value;
557
76.9k
            } else {
558
76.9k
                min_value += step_size;
559
76.9k
            }
560
561
78.7k
            end_scan_keys.emplace_back();
562
78.7k
            end_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
563
564
78.7k
            if (Compare::equal(min_value, max_value)) {
565
1.85k
                break;
566
1.85k
            }
567
76.9k
            ++min_value;
568
76.9k
            ++real_step_size;
569
76.9k
            if (real_step_size > MAX_STEP_SIZE) {
570
0
                throw Exception(Status::InternalError(
571
0
                        "convert_to_avg_range_value meet error. type={}, step_size={}",
572
0
                        int(primitive_type), step_size));
573
0
            }
574
76.9k
        }
575
576
1.80k
        return step_size != 0;
577
1.80k
    }
578
0
    return false;
579
1.80k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_i
Line
Count
Source
488
78
        bool& begin_include, bool& end_include, int32_t max_scan_key_num) {
489
78
    if constexpr (!_is_reject_split_type) {
490
78
        CppType min_value = get_range_min_value();
491
78
        CppType max_value = get_range_max_value();
492
        if constexpr (primitive_type == PrimitiveType::TYPE_DATE) {
493
            min_value.set_type(TimeType::TIME_DATE);
494
            max_value.set_type(TimeType::TIME_DATE);
495
        }
496
78
        auto empty_range_only_null = Compare::greater(min_value, max_value);
497
78
        if (empty_range_only_null) {
498
            // Not contain null will be disposed in `convert_to_close_range`, return eos.
499
0
            DCHECK(contain_null());
500
0
        }
501
502
78
        auto no_split = [&]() -> bool {
503
78
            begin_scan_keys.emplace_back();
504
78
            if (contain_null()) {
505
78
                begin_scan_keys.back().add_null();
506
78
            } else {
507
78
                begin_scan_keys.back().add_field(
508
78
                        Field::create_field<primitive_type>(get_range_min_value()));
509
78
            }
510
78
            end_scan_keys.emplace_back();
511
78
            if (empty_range_only_null) {
512
78
                end_scan_keys.back().add_null();
513
78
            } else {
514
78
                end_scan_keys.back().add_field(
515
78
                        Field::create_field<primitive_type>(get_range_max_value()));
516
78
            }
517
78
            return true;
518
78
        };
519
78
        if (empty_range_only_null || max_scan_key_num == 1) {
520
0
            return no_split();
521
0
        }
522
523
78
        auto cast = [](const CppType& value) {
524
78
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
525
78
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
526
78
                return value;
527
78
            } else {
528
78
                return (int128_t)value;
529
78
            }
530
78
        };
531
532
        // When CppType is date, we can not convert it to integer number and calculate distance.
533
        // In other case, we convert element to int128 to avoit overflow.
534
78
        int128_t step_size_may_overflow = (cast(max_value) - min_value) / max_scan_key_num;
535
536
78
        constexpr size_t MAX_STEP_SIZE = 1 << 20;
537
        // When the step size is too large, the range is easy to not really contain data.
538
78
        if (step_size_may_overflow > MAX_STEP_SIZE) {
539
0
            return no_split();
540
0
        }
541
78
        int step_size = cast_set<int>(step_size_may_overflow);
542
78
        int real_step_size = 0;
543
544
        // Add null key if contain null, must do after no_split check
545
78
        if (contain_null()) {
546
69
            begin_scan_keys.emplace_back();
547
69
            begin_scan_keys.back().add_null();
548
69
            end_scan_keys.emplace_back();
549
69
            end_scan_keys.back().add_null();
550
69
        }
551
3.73k
        while (true) {
552
3.73k
            begin_scan_keys.emplace_back();
553
3.73k
            begin_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
554
555
3.73k
            if (cast(max_value) - min_value < step_size) {
556
78
                min_value = max_value;
557
3.65k
            } else {
558
3.65k
                min_value += step_size;
559
3.65k
            }
560
561
3.73k
            end_scan_keys.emplace_back();
562
3.73k
            end_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
563
564
3.73k
            if (Compare::equal(min_value, max_value)) {
565
78
                break;
566
78
            }
567
3.65k
            ++min_value;
568
3.65k
            ++real_step_size;
569
3.65k
            if (real_step_size > MAX_STEP_SIZE) {
570
0
                throw Exception(Status::InternalError(
571
0
                        "convert_to_avg_range_value meet error. type={}, step_size={}",
572
0
                        int(primitive_type), step_size));
573
0
            }
574
3.65k
        }
575
576
78
        return step_size != 0;
577
78
    }
578
0
    return false;
579
78
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_i
Line
Count
Source
488
60.9k
        bool& begin_include, bool& end_include, int32_t max_scan_key_num) {
489
60.9k
    if constexpr (!_is_reject_split_type) {
490
60.9k
        CppType min_value = get_range_min_value();
491
60.9k
        CppType max_value = get_range_max_value();
492
        if constexpr (primitive_type == PrimitiveType::TYPE_DATE) {
493
            min_value.set_type(TimeType::TIME_DATE);
494
            max_value.set_type(TimeType::TIME_DATE);
495
        }
496
60.9k
        auto empty_range_only_null = Compare::greater(min_value, max_value);
497
60.9k
        if (empty_range_only_null) {
498
            // Not contain null will be disposed in `convert_to_close_range`, return eos.
499
27
            DCHECK(contain_null());
500
27
        }
501
502
60.9k
        auto no_split = [&]() -> bool {
503
60.9k
            begin_scan_keys.emplace_back();
504
60.9k
            if (contain_null()) {
505
60.9k
                begin_scan_keys.back().add_null();
506
60.9k
            } else {
507
60.9k
                begin_scan_keys.back().add_field(
508
60.9k
                        Field::create_field<primitive_type>(get_range_min_value()));
509
60.9k
            }
510
60.9k
            end_scan_keys.emplace_back();
511
60.9k
            if (empty_range_only_null) {
512
60.9k
                end_scan_keys.back().add_null();
513
60.9k
            } else {
514
60.9k
                end_scan_keys.back().add_field(
515
60.9k
                        Field::create_field<primitive_type>(get_range_max_value()));
516
60.9k
            }
517
60.9k
            return true;
518
60.9k
        };
519
60.9k
        if (empty_range_only_null || max_scan_key_num == 1) {
520
27
            return no_split();
521
27
        }
522
523
60.8k
        auto cast = [](const CppType& value) {
524
60.8k
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
525
60.8k
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
526
60.8k
                return value;
527
60.8k
            } else {
528
60.8k
                return (int128_t)value;
529
60.8k
            }
530
60.8k
        };
531
532
        // When CppType is date, we can not convert it to integer number and calculate distance.
533
        // In other case, we convert element to int128 to avoit overflow.
534
60.8k
        int128_t step_size_may_overflow = (cast(max_value) - min_value) / max_scan_key_num;
535
536
60.8k
        constexpr size_t MAX_STEP_SIZE = 1 << 20;
537
        // When the step size is too large, the range is easy to not really contain data.
538
61.0k
        if (step_size_may_overflow > MAX_STEP_SIZE) {
539
61.0k
            return no_split();
540
61.0k
        }
541
18.4E
        int step_size = cast_set<int>(step_size_may_overflow);
542
18.4E
        int real_step_size = 0;
543
544
        // Add null key if contain null, must do after no_split check
545
18.4E
        if (contain_null()) {
546
0
            begin_scan_keys.emplace_back();
547
0
            begin_scan_keys.back().add_null();
548
0
            end_scan_keys.emplace_back();
549
0
            end_scan_keys.back().add_null();
550
0
        }
551
18.4E
        while (true) {
552
10.9k
            begin_scan_keys.emplace_back();
553
10.9k
            begin_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
554
555
10.9k
            if (cast(max_value) - min_value < step_size) {
556
153
                min_value = max_value;
557
10.8k
            } else {
558
10.8k
                min_value += step_size;
559
10.8k
            }
560
561
10.9k
            end_scan_keys.emplace_back();
562
10.9k
            end_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
563
564
10.9k
            if (Compare::equal(min_value, max_value)) {
565
939
                break;
566
939
            }
567
10.0k
            ++min_value;
568
10.0k
            ++real_step_size;
569
10.0k
            if (real_step_size > MAX_STEP_SIZE) {
570
0
                throw Exception(Status::InternalError(
571
0
                        "convert_to_avg_range_value meet error. type={}, step_size={}",
572
0
                        int(primitive_type), step_size));
573
0
            }
574
10.0k
        }
575
576
18.4E
        return step_size != 0;
577
18.4E
    }
578
0
    return false;
579
60.9k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_i
Line
Count
Source
488
28.5k
        bool& begin_include, bool& end_include, int32_t max_scan_key_num) {
489
28.5k
    if constexpr (!_is_reject_split_type) {
490
28.5k
        CppType min_value = get_range_min_value();
491
28.5k
        CppType max_value = get_range_max_value();
492
        if constexpr (primitive_type == PrimitiveType::TYPE_DATE) {
493
            min_value.set_type(TimeType::TIME_DATE);
494
            max_value.set_type(TimeType::TIME_DATE);
495
        }
496
28.5k
        auto empty_range_only_null = Compare::greater(min_value, max_value);
497
28.5k
        if (empty_range_only_null) {
498
            // Not contain null will be disposed in `convert_to_close_range`, return eos.
499
0
            DCHECK(contain_null());
500
0
        }
501
502
28.5k
        auto no_split = [&]() -> bool {
503
28.5k
            begin_scan_keys.emplace_back();
504
28.5k
            if (contain_null()) {
505
28.5k
                begin_scan_keys.back().add_null();
506
28.5k
            } else {
507
28.5k
                begin_scan_keys.back().add_field(
508
28.5k
                        Field::create_field<primitive_type>(get_range_min_value()));
509
28.5k
            }
510
28.5k
            end_scan_keys.emplace_back();
511
28.5k
            if (empty_range_only_null) {
512
28.5k
                end_scan_keys.back().add_null();
513
28.5k
            } else {
514
28.5k
                end_scan_keys.back().add_field(
515
28.5k
                        Field::create_field<primitive_type>(get_range_max_value()));
516
28.5k
            }
517
28.5k
            return true;
518
28.5k
        };
519
28.5k
        if (empty_range_only_null || max_scan_key_num == 1) {
520
0
            return no_split();
521
0
        }
522
523
28.5k
        auto cast = [](const CppType& value) {
524
28.5k
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
525
28.5k
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
526
28.5k
                return value;
527
28.5k
            } else {
528
28.5k
                return (int128_t)value;
529
28.5k
            }
530
28.5k
        };
531
532
        // When CppType is date, we can not convert it to integer number and calculate distance.
533
        // In other case, we convert element to int128 to avoit overflow.
534
28.5k
        int128_t step_size_may_overflow = (cast(max_value) - min_value) / max_scan_key_num;
535
536
28.5k
        constexpr size_t MAX_STEP_SIZE = 1 << 20;
537
        // When the step size is too large, the range is easy to not really contain data.
538
28.5k
        if (step_size_may_overflow > MAX_STEP_SIZE) {
539
28.1k
            return no_split();
540
28.1k
        }
541
330
        int step_size = cast_set<int>(step_size_may_overflow);
542
330
        int real_step_size = 0;
543
544
        // Add null key if contain null, must do after no_split check
545
330
        if (contain_null()) {
546
0
            begin_scan_keys.emplace_back();
547
0
            begin_scan_keys.back().add_null();
548
0
            end_scan_keys.emplace_back();
549
0
            end_scan_keys.back().add_null();
550
0
        }
551
1.36k
        while (true) {
552
1.32k
            begin_scan_keys.emplace_back();
553
1.32k
            begin_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
554
555
1.32k
            if (cast(max_value) - min_value < step_size) {
556
5
                min_value = max_value;
557
1.32k
            } else {
558
1.32k
                min_value += step_size;
559
1.32k
            }
560
561
1.32k
            end_scan_keys.emplace_back();
562
1.32k
            end_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
563
564
1.32k
            if (Compare::equal(min_value, max_value)) {
565
293
                break;
566
293
            }
567
1.03k
            ++min_value;
568
1.03k
            ++real_step_size;
569
1.03k
            if (real_step_size > MAX_STEP_SIZE) {
570
0
                throw Exception(Status::InternalError(
571
0
                        "convert_to_avg_range_value meet error. type={}, step_size={}",
572
0
                        int(primitive_type), step_size));
573
0
            }
574
1.03k
        }
575
576
330
        return step_size != 0;
577
330
    }
578
0
    return false;
579
28.5k
}
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
488
1
        bool& begin_include, bool& end_include, int32_t max_scan_key_num) {
489
1
    if constexpr (!_is_reject_split_type) {
490
1
        CppType min_value = get_range_min_value();
491
1
        CppType max_value = get_range_max_value();
492
        if constexpr (primitive_type == PrimitiveType::TYPE_DATE) {
493
            min_value.set_type(TimeType::TIME_DATE);
494
            max_value.set_type(TimeType::TIME_DATE);
495
        }
496
1
        auto empty_range_only_null = Compare::greater(min_value, max_value);
497
1
        if (empty_range_only_null) {
498
            // Not contain null will be disposed in `convert_to_close_range`, return eos.
499
0
            DCHECK(contain_null());
500
0
        }
501
502
1
        auto no_split = [&]() -> bool {
503
1
            begin_scan_keys.emplace_back();
504
1
            if (contain_null()) {
505
1
                begin_scan_keys.back().add_null();
506
1
            } else {
507
1
                begin_scan_keys.back().add_field(
508
1
                        Field::create_field<primitive_type>(get_range_min_value()));
509
1
            }
510
1
            end_scan_keys.emplace_back();
511
1
            if (empty_range_only_null) {
512
1
                end_scan_keys.back().add_null();
513
1
            } else {
514
1
                end_scan_keys.back().add_field(
515
1
                        Field::create_field<primitive_type>(get_range_max_value()));
516
1
            }
517
1
            return true;
518
1
        };
519
1
        if (empty_range_only_null || max_scan_key_num == 1) {
520
0
            return no_split();
521
0
        }
522
523
1
        auto cast = [](const CppType& value) {
524
1
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
525
1
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
526
1
                return value;
527
1
            } else {
528
1
                return (int128_t)value;
529
1
            }
530
1
        };
531
532
        // When CppType is date, we can not convert it to integer number and calculate distance.
533
        // In other case, we convert element to int128 to avoit overflow.
534
1
        int128_t step_size_may_overflow = (cast(max_value) - min_value) / max_scan_key_num;
535
536
1
        constexpr size_t MAX_STEP_SIZE = 1 << 20;
537
        // When the step size is too large, the range is easy to not really contain data.
538
1
        if (step_size_may_overflow > MAX_STEP_SIZE) {
539
1
            return no_split();
540
1
        }
541
0
        int step_size = cast_set<int>(step_size_may_overflow);
542
0
        int real_step_size = 0;
543
544
        // Add null key if contain null, must do after no_split check
545
0
        if (contain_null()) {
546
0
            begin_scan_keys.emplace_back();
547
0
            begin_scan_keys.back().add_null();
548
0
            end_scan_keys.emplace_back();
549
0
            end_scan_keys.back().add_null();
550
0
        }
551
0
        while (true) {
552
0
            begin_scan_keys.emplace_back();
553
0
            begin_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
554
555
0
            if (cast(max_value) - min_value < step_size) {
556
0
                min_value = max_value;
557
0
            } else {
558
0
                min_value += step_size;
559
0
            }
560
561
0
            end_scan_keys.emplace_back();
562
0
            end_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
563
564
0
            if (Compare::equal(min_value, max_value)) {
565
0
                break;
566
0
            }
567
0
            ++min_value;
568
0
            ++real_step_size;
569
0
            if (real_step_size > MAX_STEP_SIZE) {
570
0
                throw Exception(Status::InternalError(
571
0
                        "convert_to_avg_range_value meet error. type={}, step_size={}",
572
0
                        int(primitive_type), step_size));
573
0
            }
574
0
        }
575
576
0
        return step_size != 0;
577
0
    }
578
0
    return false;
579
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
488
34
        bool& begin_include, bool& end_include, int32_t max_scan_key_num) {
489
34
    if constexpr (!_is_reject_split_type) {
490
34
        CppType min_value = get_range_min_value();
491
34
        CppType max_value = get_range_max_value();
492
34
        if constexpr (primitive_type == PrimitiveType::TYPE_DATE) {
493
34
            min_value.set_type(TimeType::TIME_DATE);
494
34
            max_value.set_type(TimeType::TIME_DATE);
495
34
        }
496
34
        auto empty_range_only_null = Compare::greater(min_value, max_value);
497
34
        if (empty_range_only_null) {
498
            // Not contain null will be disposed in `convert_to_close_range`, return eos.
499
0
            DCHECK(contain_null());
500
0
        }
501
502
34
        auto no_split = [&]() -> bool {
503
34
            begin_scan_keys.emplace_back();
504
34
            if (contain_null()) {
505
34
                begin_scan_keys.back().add_null();
506
34
            } else {
507
34
                begin_scan_keys.back().add_field(
508
34
                        Field::create_field<primitive_type>(get_range_min_value()));
509
34
            }
510
34
            end_scan_keys.emplace_back();
511
34
            if (empty_range_only_null) {
512
34
                end_scan_keys.back().add_null();
513
34
            } else {
514
34
                end_scan_keys.back().add_field(
515
34
                        Field::create_field<primitive_type>(get_range_max_value()));
516
34
            }
517
34
            return true;
518
34
        };
519
34
        if (empty_range_only_null || max_scan_key_num == 1) {
520
0
            return no_split();
521
0
        }
522
523
34
        auto cast = [](const CppType& value) {
524
34
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
525
34
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
526
34
                return value;
527
34
            } else {
528
34
                return (int128_t)value;
529
34
            }
530
34
        };
531
532
        // When CppType is date, we can not convert it to integer number and calculate distance.
533
        // In other case, we convert element to int128 to avoit overflow.
534
34
        int128_t step_size_may_overflow = (cast(max_value) - min_value) / max_scan_key_num;
535
536
34
        constexpr size_t MAX_STEP_SIZE = 1 << 20;
537
        // When the step size is too large, the range is easy to not really contain data.
538
34
        if (step_size_may_overflow > MAX_STEP_SIZE) {
539
0
            return no_split();
540
0
        }
541
34
        int step_size = cast_set<int>(step_size_may_overflow);
542
34
        int real_step_size = 0;
543
544
        // Add null key if contain null, must do after no_split check
545
34
        if (contain_null()) {
546
31
            begin_scan_keys.emplace_back();
547
31
            begin_scan_keys.back().add_null();
548
31
            end_scan_keys.emplace_back();
549
31
            end_scan_keys.back().add_null();
550
31
        }
551
1.61k
        while (true) {
552
1.61k
            begin_scan_keys.emplace_back();
553
1.61k
            begin_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
554
555
1.61k
            if (cast(max_value) - min_value < step_size) {
556
34
                min_value = max_value;
557
1.58k
            } else {
558
1.58k
                min_value += step_size;
559
1.58k
            }
560
561
1.61k
            end_scan_keys.emplace_back();
562
1.61k
            end_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
563
564
1.61k
            if (Compare::equal(min_value, max_value)) {
565
34
                break;
566
34
            }
567
1.58k
            ++min_value;
568
1.58k
            ++real_step_size;
569
1.58k
            if (real_step_size > MAX_STEP_SIZE) {
570
0
                throw Exception(Status::InternalError(
571
0
                        "convert_to_avg_range_value meet error. type={}, step_size={}",
572
0
                        int(primitive_type), step_size));
573
0
            }
574
1.58k
        }
575
576
34
        return step_size != 0;
577
34
    }
578
0
    return false;
579
34
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE26convert_to_avg_range_valueERSt6vectorINS_9OlapTupleESaIS4_EES7_RbS8_i
Line
Count
Source
488
2.31k
        bool& begin_include, bool& end_include, int32_t max_scan_key_num) {
489
2.31k
    if constexpr (!_is_reject_split_type) {
490
2.31k
        CppType min_value = get_range_min_value();
491
2.31k
        CppType max_value = get_range_max_value();
492
        if constexpr (primitive_type == PrimitiveType::TYPE_DATE) {
493
            min_value.set_type(TimeType::TIME_DATE);
494
            max_value.set_type(TimeType::TIME_DATE);
495
        }
496
2.31k
        auto empty_range_only_null = Compare::greater(min_value, max_value);
497
2.31k
        if (empty_range_only_null) {
498
            // Not contain null will be disposed in `convert_to_close_range`, return eos.
499
0
            DCHECK(contain_null());
500
0
        }
501
502
2.31k
        auto no_split = [&]() -> bool {
503
2.31k
            begin_scan_keys.emplace_back();
504
2.31k
            if (contain_null()) {
505
2.31k
                begin_scan_keys.back().add_null();
506
2.31k
            } else {
507
2.31k
                begin_scan_keys.back().add_field(
508
2.31k
                        Field::create_field<primitive_type>(get_range_min_value()));
509
2.31k
            }
510
2.31k
            end_scan_keys.emplace_back();
511
2.31k
            if (empty_range_only_null) {
512
2.31k
                end_scan_keys.back().add_null();
513
2.31k
            } else {
514
2.31k
                end_scan_keys.back().add_field(
515
2.31k
                        Field::create_field<primitive_type>(get_range_max_value()));
516
2.31k
            }
517
2.31k
            return true;
518
2.31k
        };
519
2.31k
        if (empty_range_only_null || max_scan_key_num == 1) {
520
0
            return no_split();
521
0
        }
522
523
2.31k
        auto cast = [](const CppType& value) {
524
2.31k
            if constexpr (primitive_type == PrimitiveType::TYPE_DATE ||
525
2.31k
                          primitive_type == PrimitiveType::TYPE_DATEV2) {
526
2.31k
                return value;
527
2.31k
            } else {
528
2.31k
                return (int128_t)value;
529
2.31k
            }
530
2.31k
        };
531
532
        // When CppType is date, we can not convert it to integer number and calculate distance.
533
        // In other case, we convert element to int128 to avoit overflow.
534
2.31k
        int128_t step_size_may_overflow = (cast(max_value) - min_value) / max_scan_key_num;
535
536
2.31k
        constexpr size_t MAX_STEP_SIZE = 1 << 20;
537
        // When the step size is too large, the range is easy to not really contain data.
538
2.31k
        if (step_size_may_overflow > MAX_STEP_SIZE) {
539
0
            return no_split();
540
0
        }
541
2.31k
        int step_size = cast_set<int>(step_size_may_overflow);
542
2.31k
        int real_step_size = 0;
543
544
        // Add null key if contain null, must do after no_split check
545
2.31k
        if (contain_null()) {
546
960
            begin_scan_keys.emplace_back();
547
960
            begin_scan_keys.back().add_null();
548
960
            end_scan_keys.emplace_back();
549
960
            end_scan_keys.back().add_null();
550
960
        }
551
106k
        while (true) {
552
106k
            begin_scan_keys.emplace_back();
553
106k
            begin_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
554
555
106k
            if (cast(max_value) - min_value < step_size) {
556
2.18k
                min_value = max_value;
557
104k
            } else {
558
104k
                min_value += step_size;
559
104k
            }
560
561
106k
            end_scan_keys.emplace_back();
562
106k
            end_scan_keys.back().add_field(Field::create_field<primitive_type>(min_value));
563
564
106k
            if (Compare::equal(min_value, max_value)) {
565
2.33k
                break;
566
2.33k
            }
567
104k
            ++min_value;
568
104k
            ++real_step_size;
569
104k
            if (real_step_size > MAX_STEP_SIZE) {
570
0
                throw Exception(Status::InternalError(
571
0
                        "convert_to_avg_range_value meet error. type={}, step_size={}",
572
0
                        int(primitive_type), step_size));
573
0
            }
574
104k
        }
575
576
2.31k
        return step_size != 0;
577
2.31k
    }
578
0
    return false;
579
2.31k
}
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
580
581
template <PrimitiveType primitive_type>
582
54
void ColumnValueRange<primitive_type>::convert_to_range_value() {
583
54
    if (!is_range_value_convertible()) {
584
0
        return;
585
0
    }
586
587
54
    if (!_fixed_values.empty()) {
588
54
        _low_value = *_fixed_values.begin();
589
54
        _low_op = FILTER_LARGER_OR_EQUAL;
590
54
        _high_value = *_fixed_values.rbegin();
591
54
        _high_op = FILTER_LESS_OR_EQUAL;
592
54
        _fixed_values.clear();
593
54
    }
594
54
}
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE22convert_to_range_valueEv
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE22convert_to_range_valueEv
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE22convert_to_range_valueEv
Line
Count
Source
582
53
void ColumnValueRange<primitive_type>::convert_to_range_value() {
583
53
    if (!is_range_value_convertible()) {
584
0
        return;
585
0
    }
586
587
53
    if (!_fixed_values.empty()) {
588
53
        _low_value = *_fixed_values.begin();
589
53
        _low_op = FILTER_LARGER_OR_EQUAL;
590
53
        _high_value = *_fixed_values.rbegin();
591
53
        _high_op = FILTER_LESS_OR_EQUAL;
592
53
        _fixed_values.clear();
593
53
    }
594
53
}
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
582
1
void ColumnValueRange<primitive_type>::convert_to_range_value() {
583
1
    if (!is_range_value_convertible()) {
584
0
        return;
585
0
    }
586
587
1
    if (!_fixed_values.empty()) {
588
1
        _low_value = *_fixed_values.begin();
589
1
        _low_op = FILTER_LARGER_OR_EQUAL;
590
1
        _high_value = *_fixed_values.rbegin();
591
1
        _high_op = FILTER_LESS_OR_EQUAL;
592
1
        _fixed_values.clear();
593
1
    }
594
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
595
596
template <PrimitiveType primitive_type>
597
24.3k
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
598
24.3k
    if (INVALID_TYPE == _column_type) {
599
0
        return Status::InternalError("AddRange failed, Invalid type");
600
0
    }
601
602
    // add range means range should not contain null
603
24.3k
    _contain_null = false;
604
605
24.3k
    if (is_fixed_value_range()) {
606
754
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
607
608
754
        switch (op) {
609
0
        case FILTER_LARGER: {
610
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
611
0
            break;
612
0
        }
613
614
510
        case FILTER_LARGER_OR_EQUAL: {
615
510
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
616
510
            break;
617
0
        }
618
619
0
        case FILTER_LESS: {
620
0
            if (bound_pair.first == _fixed_values.find(value)) {
621
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
622
0
            } else {
623
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
624
0
            }
625
626
0
            break;
627
0
        }
628
629
245
        case FILTER_LESS_OR_EQUAL: {
630
245
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
631
245
            break;
632
0
        }
633
634
0
        default: {
635
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
636
0
        }
637
754
        }
638
639
754
        _high_value = TYPE_MIN;
640
754
        _low_value = TYPE_MAX;
641
23.6k
    } else {
642
23.6k
        if (Compare::greater(_high_value, _low_value)) {
643
22.7k
            switch (op) {
644
7.48k
            case FILTER_LARGER: {
645
7.48k
                if (Compare::greater_equal(value, _low_value)) {
646
7.46k
                    _low_value = value;
647
7.46k
                    _low_op = op;
648
7.46k
                }
649
650
7.48k
                break;
651
0
            }
652
653
6.92k
            case FILTER_LARGER_OR_EQUAL: {
654
6.92k
                if (Compare::greater(value, _low_value)) {
655
5.50k
                    _low_value = value;
656
5.50k
                    _low_op = op;
657
5.50k
                }
658
659
6.92k
                break;
660
0
            }
661
662
2.86k
            case FILTER_LESS: {
663
2.86k
                if (Compare::less_equal(value, _high_value)) {
664
2.85k
                    _high_value = value;
665
2.85k
                    _high_op = op;
666
2.85k
                }
667
668
2.86k
                break;
669
0
            }
670
671
5.49k
            case FILTER_LESS_OR_EQUAL: {
672
5.49k
                if (Compare::less(value, _high_value)) {
673
4.21k
                    _high_value = value;
674
4.21k
                    _high_op = op;
675
4.21k
                }
676
677
5.49k
                break;
678
0
            }
679
680
0
            default: {
681
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
682
0
            }
683
22.7k
            }
684
22.7k
        }
685
686
23.5k
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
687
23.5k
            Compare::equal(_high_value, _low_value)) {
688
868
            RETURN_IF_ERROR(add_fixed_value(_high_value));
689
868
            _high_value = TYPE_MIN;
690
868
            _low_value = TYPE_MAX;
691
868
        }
692
23.5k
    }
693
694
24.2k
    return Status::OK();
695
24.3k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE9add_rangeENS_11SQLFilterOpEa
Line
Count
Source
597
1.04k
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
598
1.04k
    if (INVALID_TYPE == _column_type) {
599
0
        return Status::InternalError("AddRange failed, Invalid type");
600
0
    }
601
602
    // add range means range should not contain null
603
1.04k
    _contain_null = false;
604
605
1.04k
    if (is_fixed_value_range()) {
606
178
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
607
608
178
        switch (op) {
609
0
        case FILTER_LARGER: {
610
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
611
0
            break;
612
0
        }
613
614
90
        case FILTER_LARGER_OR_EQUAL: {
615
90
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
616
90
            break;
617
0
        }
618
619
0
        case FILTER_LESS: {
620
0
            if (bound_pair.first == _fixed_values.find(value)) {
621
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
622
0
            } else {
623
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
624
0
            }
625
626
0
            break;
627
0
        }
628
629
88
        case FILTER_LESS_OR_EQUAL: {
630
88
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
631
88
            break;
632
0
        }
633
634
0
        default: {
635
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
636
0
        }
637
178
        }
638
639
178
        _high_value = TYPE_MIN;
640
178
        _low_value = TYPE_MAX;
641
870
    } else {
642
870
        if (Compare::greater(_high_value, _low_value)) {
643
816
            switch (op) {
644
166
            case FILTER_LARGER: {
645
167
                if (Compare::greater_equal(value, _low_value)) {
646
167
                    _low_value = value;
647
167
                    _low_op = op;
648
167
                }
649
650
166
                break;
651
0
            }
652
653
261
            case FILTER_LARGER_OR_EQUAL: {
654
261
                if (Compare::greater(value, _low_value)) {
655
143
                    _low_value = value;
656
143
                    _low_op = op;
657
143
                }
658
659
261
                break;
660
0
            }
661
662
169
            case FILTER_LESS: {
663
169
                if (Compare::less_equal(value, _high_value)) {
664
169
                    _high_value = value;
665
169
                    _high_op = op;
666
169
                }
667
668
169
                break;
669
0
            }
670
671
223
            case FILTER_LESS_OR_EQUAL: {
672
223
                if (Compare::less(value, _high_value)) {
673
104
                    _high_value = value;
674
104
                    _high_op = op;
675
104
                }
676
677
223
                break;
678
0
            }
679
680
0
            default: {
681
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
682
0
            }
683
816
            }
684
816
        }
685
686
874
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
687
874
            Compare::equal(_high_value, _low_value)) {
688
10
            RETURN_IF_ERROR(add_fixed_value(_high_value));
689
10
            _high_value = TYPE_MIN;
690
10
            _low_value = TYPE_MAX;
691
10
        }
692
874
    }
693
694
1.05k
    return Status::OK();
695
1.04k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE9add_rangeENS_11SQLFilterOpEs
Line
Count
Source
597
1.23k
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
598
1.23k
    if (INVALID_TYPE == _column_type) {
599
0
        return Status::InternalError("AddRange failed, Invalid type");
600
0
    }
601
602
    // add range means range should not contain null
603
1.23k
    _contain_null = false;
604
605
1.23k
    if (is_fixed_value_range()) {
606
52
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
607
608
52
        switch (op) {
609
0
        case FILTER_LARGER: {
610
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
611
0
            break;
612
0
        }
613
614
26
        case FILTER_LARGER_OR_EQUAL: {
615
26
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
616
26
            break;
617
0
        }
618
619
0
        case FILTER_LESS: {
620
0
            if (bound_pair.first == _fixed_values.find(value)) {
621
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
622
0
            } else {
623
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
624
0
            }
625
626
0
            break;
627
0
        }
628
629
26
        case FILTER_LESS_OR_EQUAL: {
630
26
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
631
26
            break;
632
0
        }
633
634
0
        default: {
635
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
636
0
        }
637
52
        }
638
639
52
        _high_value = TYPE_MIN;
640
52
        _low_value = TYPE_MAX;
641
1.18k
    } else {
642
1.18k
        if (Compare::greater(_high_value, _low_value)) {
643
1.15k
            switch (op) {
644
919
            case FILTER_LARGER: {
645
919
                if (Compare::greater_equal(value, _low_value)) {
646
918
                    _low_value = value;
647
918
                    _low_op = op;
648
918
                }
649
650
919
                break;
651
0
            }
652
653
138
            case FILTER_LARGER_OR_EQUAL: {
654
138
                if (Compare::greater(value, _low_value)) {
655
116
                    _low_value = value;
656
116
                    _low_op = op;
657
116
                }
658
659
138
                break;
660
0
            }
661
662
9
            case FILTER_LESS: {
663
9
                if (Compare::less_equal(value, _high_value)) {
664
9
                    _high_value = value;
665
9
                    _high_op = op;
666
9
                }
667
668
9
                break;
669
0
            }
670
671
87
            case FILTER_LESS_OR_EQUAL: {
672
87
                if (Compare::less(value, _high_value)) {
673
52
                    _high_value = value;
674
52
                    _high_op = op;
675
52
                }
676
677
87
                break;
678
0
            }
679
680
0
            default: {
681
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
682
0
            }
683
1.15k
            }
684
1.15k
        }
685
686
1.18k
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
687
1.18k
            Compare::equal(_high_value, _low_value)) {
688
0
            RETURN_IF_ERROR(add_fixed_value(_high_value));
689
0
            _high_value = TYPE_MIN;
690
0
            _low_value = TYPE_MAX;
691
0
        }
692
1.18k
    }
693
694
1.23k
    return Status::OK();
695
1.23k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE9add_rangeENS_11SQLFilterOpEi
Line
Count
Source
597
8.09k
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
598
8.09k
    if (INVALID_TYPE == _column_type) {
599
0
        return Status::InternalError("AddRange failed, Invalid type");
600
0
    }
601
602
    // add range means range should not contain null
603
8.09k
    _contain_null = false;
604
605
8.09k
    if (is_fixed_value_range()) {
606
328
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
607
608
328
        switch (op) {
609
0
        case FILTER_LARGER: {
610
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
611
0
            break;
612
0
        }
613
614
248
        case FILTER_LARGER_OR_EQUAL: {
615
248
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
616
248
            break;
617
0
        }
618
619
0
        case FILTER_LESS: {
620
0
            if (bound_pair.first == _fixed_values.find(value)) {
621
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
622
0
            } else {
623
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
624
0
            }
625
626
0
            break;
627
0
        }
628
629
80
        case FILTER_LESS_OR_EQUAL: {
630
80
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
631
80
            break;
632
0
        }
633
634
0
        default: {
635
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
636
0
        }
637
328
        }
638
639
328
        _high_value = TYPE_MIN;
640
328
        _low_value = TYPE_MAX;
641
7.76k
    } else {
642
7.76k
        if (Compare::greater(_high_value, _low_value)) {
643
7.37k
            switch (op) {
644
1.09k
            case FILTER_LARGER: {
645
1.09k
                if (Compare::greater_equal(value, _low_value)) {
646
1.09k
                    _low_value = value;
647
1.09k
                    _low_op = op;
648
1.09k
                }
649
650
1.09k
                break;
651
0
            }
652
653
2.66k
            case FILTER_LARGER_OR_EQUAL: {
654
2.66k
                if (Compare::greater(value, _low_value)) {
655
2.27k
                    _low_value = value;
656
2.27k
                    _low_op = op;
657
2.27k
                }
658
659
2.66k
                break;
660
0
            }
661
662
914
            case FILTER_LESS: {
663
914
                if (Compare::less_equal(value, _high_value)) {
664
904
                    _high_value = value;
665
904
                    _high_op = op;
666
904
                }
667
668
914
                break;
669
0
            }
670
671
2.71k
            case FILTER_LESS_OR_EQUAL: {
672
2.71k
                if (Compare::less(value, _high_value)) {
673
2.32k
                    _high_value = value;
674
2.32k
                    _high_op = op;
675
2.32k
                }
676
677
2.71k
                break;
678
0
            }
679
680
0
            default: {
681
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
682
0
            }
683
7.37k
            }
684
7.37k
        }
685
686
7.73k
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
687
7.73k
            Compare::equal(_high_value, _low_value)) {
688
422
            RETURN_IF_ERROR(add_fixed_value(_high_value));
689
422
            _high_value = TYPE_MIN;
690
422
            _low_value = TYPE_MAX;
691
422
        }
692
7.73k
    }
693
694
8.06k
    return Status::OK();
695
8.09k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE9add_rangeENS_11SQLFilterOpEl
Line
Count
Source
597
4.97k
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
598
4.97k
    if (INVALID_TYPE == _column_type) {
599
0
        return Status::InternalError("AddRange failed, Invalid type");
600
0
    }
601
602
    // add range means range should not contain null
603
4.97k
    _contain_null = false;
604
605
4.97k
    if (is_fixed_value_range()) {
606
156
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
607
608
156
        switch (op) {
609
0
        case FILTER_LARGER: {
610
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
611
0
            break;
612
0
        }
613
614
117
        case FILTER_LARGER_OR_EQUAL: {
615
117
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
616
117
            break;
617
0
        }
618
619
0
        case FILTER_LESS: {
620
0
            if (bound_pair.first == _fixed_values.find(value)) {
621
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
622
0
            } else {
623
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
624
0
            }
625
626
0
            break;
627
0
        }
628
629
40
        case FILTER_LESS_OR_EQUAL: {
630
40
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
631
40
            break;
632
0
        }
633
634
0
        default: {
635
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
636
0
        }
637
156
        }
638
639
157
        _high_value = TYPE_MIN;
640
157
        _low_value = TYPE_MAX;
641
4.81k
    } else {
642
4.81k
        if (Compare::greater(_high_value, _low_value)) {
643
4.48k
            switch (op) {
644
2.09k
            case FILTER_LARGER: {
645
2.09k
                if (Compare::greater_equal(value, _low_value)) {
646
2.09k
                    _low_value = value;
647
2.09k
                    _low_op = op;
648
2.09k
                }
649
650
2.09k
                break;
651
0
            }
652
653
1.23k
            case FILTER_LARGER_OR_EQUAL: {
654
1.23k
                if (Compare::greater(value, _low_value)) {
655
830
                    _low_value = value;
656
830
                    _low_op = op;
657
830
                }
658
659
1.23k
                break;
660
0
            }
661
662
39
            case FILTER_LESS: {
663
39
                if (Compare::less_equal(value, _high_value)) {
664
39
                    _high_value = value;
665
39
                    _high_op = op;
666
39
                }
667
668
39
                break;
669
0
            }
670
671
1.12k
            case FILTER_LESS_OR_EQUAL: {
672
1.12k
                if (Compare::less(value, _high_value)) {
673
717
                    _high_value = value;
674
717
                    _high_op = op;
675
717
                }
676
677
1.12k
                break;
678
0
            }
679
680
0
            default: {
681
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
682
0
            }
683
4.48k
            }
684
4.48k
        }
685
686
4.81k
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
687
4.81k
            Compare::equal(_high_value, _low_value)) {
688
261
            RETURN_IF_ERROR(add_fixed_value(_high_value));
689
261
            _high_value = TYPE_MIN;
690
261
            _low_value = TYPE_MAX;
691
261
        }
692
4.81k
    }
693
694
4.97k
    return Status::OK();
695
4.97k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE9add_rangeENS_11SQLFilterOpEn
Line
Count
Source
597
164
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
598
164
    if (INVALID_TYPE == _column_type) {
599
0
        return Status::InternalError("AddRange failed, Invalid type");
600
0
    }
601
602
    // add range means range should not contain null
603
164
    _contain_null = false;
604
605
164
    if (is_fixed_value_range()) {
606
0
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
607
608
0
        switch (op) {
609
0
        case FILTER_LARGER: {
610
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
611
0
            break;
612
0
        }
613
614
0
        case FILTER_LARGER_OR_EQUAL: {
615
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
616
0
            break;
617
0
        }
618
619
0
        case FILTER_LESS: {
620
0
            if (bound_pair.first == _fixed_values.find(value)) {
621
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
622
0
            } else {
623
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
624
0
            }
625
626
0
            break;
627
0
        }
628
629
0
        case FILTER_LESS_OR_EQUAL: {
630
0
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
631
0
            break;
632
0
        }
633
634
0
        default: {
635
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
636
0
        }
637
0
        }
638
639
0
        _high_value = TYPE_MIN;
640
0
        _low_value = TYPE_MAX;
641
164
    } else {
642
164
        if (Compare::greater(_high_value, _low_value)) {
643
161
            switch (op) {
644
64
            case FILTER_LARGER: {
645
64
                if (Compare::greater_equal(value, _low_value)) {
646
61
                    _low_value = value;
647
61
                    _low_op = op;
648
61
                }
649
650
64
                break;
651
0
            }
652
653
36
            case FILTER_LARGER_OR_EQUAL: {
654
36
                if (Compare::greater(value, _low_value)) {
655
33
                    _low_value = value;
656
33
                    _low_op = op;
657
33
                }
658
659
36
                break;
660
0
            }
661
662
8
            case FILTER_LESS: {
663
8
                if (Compare::less_equal(value, _high_value)) {
664
8
                    _high_value = value;
665
8
                    _high_op = op;
666
8
                }
667
668
8
                break;
669
0
            }
670
671
55
            case FILTER_LESS_OR_EQUAL: {
672
55
                if (Compare::less(value, _high_value)) {
673
50
                    _high_value = value;
674
50
                    _high_op = op;
675
50
                }
676
677
55
                break;
678
0
            }
679
680
0
            default: {
681
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
682
0
            }
683
161
            }
684
161
        }
685
686
162
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
687
162
            Compare::equal(_high_value, _low_value)) {
688
9
            RETURN_IF_ERROR(add_fixed_value(_high_value));
689
9
            _high_value = TYPE_MIN;
690
9
            _low_value = TYPE_MAX;
691
9
        }
692
162
    }
693
694
162
    return Status::OK();
695
164
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE9add_rangeENS_11SQLFilterOpEf
Line
Count
Source
597
74
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
598
74
    if (INVALID_TYPE == _column_type) {
599
0
        return Status::InternalError("AddRange failed, Invalid type");
600
0
    }
601
602
    // add range means range should not contain null
603
74
    _contain_null = false;
604
605
74
    if (is_fixed_value_range()) {
606
0
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
607
608
0
        switch (op) {
609
0
        case FILTER_LARGER: {
610
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
611
0
            break;
612
0
        }
613
614
0
        case FILTER_LARGER_OR_EQUAL: {
615
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
616
0
            break;
617
0
        }
618
619
0
        case FILTER_LESS: {
620
0
            if (bound_pair.first == _fixed_values.find(value)) {
621
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
622
0
            } else {
623
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
624
0
            }
625
626
0
            break;
627
0
        }
628
629
0
        case FILTER_LESS_OR_EQUAL: {
630
0
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
631
0
            break;
632
0
        }
633
634
0
        default: {
635
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
636
0
        }
637
0
        }
638
639
0
        _high_value = TYPE_MIN;
640
0
        _low_value = TYPE_MAX;
641
74
    } else {
642
74
        if (Compare::greater(_high_value, _low_value)) {
643
72
            switch (op) {
644
15
            case FILTER_LARGER: {
645
15
                if (Compare::greater_equal(value, _low_value)) {
646
15
                    _low_value = value;
647
15
                    _low_op = op;
648
15
                }
649
650
15
                break;
651
0
            }
652
653
26
            case FILTER_LARGER_OR_EQUAL: {
654
26
                if (Compare::greater(value, _low_value)) {
655
18
                    _low_value = value;
656
18
                    _low_op = op;
657
18
                }
658
659
26
                break;
660
0
            }
661
662
12
            case FILTER_LESS: {
663
12
                if (Compare::less_equal(value, _high_value)) {
664
12
                    _high_value = value;
665
12
                    _high_op = op;
666
12
                }
667
668
12
                break;
669
0
            }
670
671
19
            case FILTER_LESS_OR_EQUAL: {
672
19
                if (Compare::less(value, _high_value)) {
673
11
                    _high_value = value;
674
11
                    _high_op = op;
675
11
                }
676
677
19
                break;
678
0
            }
679
680
0
            default: {
681
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
682
0
            }
683
72
            }
684
72
        }
685
686
73
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
687
73
            Compare::equal(_high_value, _low_value)) {
688
0
            RETURN_IF_ERROR(add_fixed_value(_high_value));
689
0
            _high_value = TYPE_MIN;
690
0
            _low_value = TYPE_MAX;
691
0
        }
692
73
    }
693
694
73
    return Status::OK();
695
74
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE9add_rangeENS_11SQLFilterOpEd
Line
Count
Source
597
279
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
598
279
    if (INVALID_TYPE == _column_type) {
599
0
        return Status::InternalError("AddRange failed, Invalid type");
600
0
    }
601
602
    // add range means range should not contain null
603
279
    _contain_null = false;
604
605
279
    if (is_fixed_value_range()) {
606
0
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
607
608
0
        switch (op) {
609
0
        case FILTER_LARGER: {
610
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
611
0
            break;
612
0
        }
613
614
0
        case FILTER_LARGER_OR_EQUAL: {
615
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
616
0
            break;
617
0
        }
618
619
0
        case FILTER_LESS: {
620
0
            if (bound_pair.first == _fixed_values.find(value)) {
621
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
622
0
            } else {
623
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
624
0
            }
625
626
0
            break;
627
0
        }
628
629
0
        case FILTER_LESS_OR_EQUAL: {
630
0
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
631
0
            break;
632
0
        }
633
634
0
        default: {
635
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
636
0
        }
637
0
        }
638
639
0
        _high_value = TYPE_MIN;
640
0
        _low_value = TYPE_MAX;
641
279
    } else {
642
279
        if (Compare::greater(_high_value, _low_value)) {
643
277
            switch (op) {
644
43
            case FILTER_LARGER: {
645
43
                if (Compare::greater_equal(value, _low_value)) {
646
43
                    _low_value = value;
647
43
                    _low_op = op;
648
43
                }
649
650
43
                break;
651
0
            }
652
653
100
            case FILTER_LARGER_OR_EQUAL: {
654
100
                if (Compare::greater(value, _low_value)) {
655
46
                    _low_value = value;
656
46
                    _low_op = op;
657
46
                }
658
659
100
                break;
660
0
            }
661
662
44
            case FILTER_LESS: {
663
44
                if (Compare::less_equal(value, _high_value)) {
664
43
                    _high_value = value;
665
43
                    _high_op = op;
666
43
                }
667
668
44
                break;
669
0
            }
670
671
93
            case FILTER_LESS_OR_EQUAL: {
672
93
                if (Compare::less(value, _high_value)) {
673
39
                    _high_value = value;
674
39
                    _high_op = op;
675
39
                }
676
677
93
                break;
678
0
            }
679
680
0
            default: {
681
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
682
0
            }
683
277
            }
684
277
        }
685
686
279
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
687
279
            Compare::equal(_high_value, _low_value)) {
688
14
            RETURN_IF_ERROR(add_fixed_value(_high_value));
689
14
            _high_value = TYPE_MIN;
690
14
            _low_value = TYPE_MAX;
691
14
        }
692
279
    }
693
694
279
    return Status::OK();
695
279
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE9add_rangeENS_11SQLFilterOpEj
Line
Count
Source
597
26
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
598
26
    if (INVALID_TYPE == _column_type) {
599
0
        return Status::InternalError("AddRange failed, Invalid type");
600
0
    }
601
602
    // add range means range should not contain null
603
26
    _contain_null = false;
604
605
26
    if (is_fixed_value_range()) {
606
0
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
607
608
0
        switch (op) {
609
0
        case FILTER_LARGER: {
610
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
611
0
            break;
612
0
        }
613
614
0
        case FILTER_LARGER_OR_EQUAL: {
615
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
616
0
            break;
617
0
        }
618
619
0
        case FILTER_LESS: {
620
0
            if (bound_pair.first == _fixed_values.find(value)) {
621
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
622
0
            } else {
623
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
624
0
            }
625
626
0
            break;
627
0
        }
628
629
0
        case FILTER_LESS_OR_EQUAL: {
630
0
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
631
0
            break;
632
0
        }
633
634
0
        default: {
635
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
636
0
        }
637
0
        }
638
639
0
        _high_value = TYPE_MIN;
640
0
        _low_value = TYPE_MAX;
641
26
    } else {
642
26
        if (Compare::greater(_high_value, _low_value)) {
643
26
            switch (op) {
644
0
            case FILTER_LARGER: {
645
0
                if (Compare::greater_equal(value, _low_value)) {
646
0
                    _low_value = value;
647
0
                    _low_op = op;
648
0
                }
649
650
0
                break;
651
0
            }
652
653
13
            case FILTER_LARGER_OR_EQUAL: {
654
13
                if (Compare::greater(value, _low_value)) {
655
2
                    _low_value = value;
656
2
                    _low_op = op;
657
2
                }
658
659
13
                break;
660
0
            }
661
662
2
            case FILTER_LESS: {
663
2
                if (Compare::less_equal(value, _high_value)) {
664
2
                    _high_value = value;
665
2
                    _high_op = op;
666
2
                }
667
668
2
                break;
669
0
            }
670
671
11
            case FILTER_LESS_OR_EQUAL: {
672
11
                if (Compare::less(value, _high_value)) {
673
0
                    _high_value = value;
674
0
                    _high_op = op;
675
0
                }
676
677
11
                break;
678
0
            }
679
680
0
            default: {
681
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
682
0
            }
683
26
            }
684
26
        }
685
686
26
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
687
26
            Compare::equal(_high_value, _low_value)) {
688
0
            RETURN_IF_ERROR(add_fixed_value(_high_value));
689
0
            _high_value = TYPE_MIN;
690
0
            _low_value = TYPE_MAX;
691
0
        }
692
26
    }
693
694
26
    return Status::OK();
695
26
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE9add_rangeENS_11SQLFilterOpEo
Line
Count
Source
597
21
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
598
21
    if (INVALID_TYPE == _column_type) {
599
0
        return Status::InternalError("AddRange failed, Invalid type");
600
0
    }
601
602
    // add range means range should not contain null
603
21
    _contain_null = false;
604
605
21
    if (is_fixed_value_range()) {
606
0
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
607
608
0
        switch (op) {
609
0
        case FILTER_LARGER: {
610
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
611
0
            break;
612
0
        }
613
614
0
        case FILTER_LARGER_OR_EQUAL: {
615
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
616
0
            break;
617
0
        }
618
619
0
        case FILTER_LESS: {
620
0
            if (bound_pair.first == _fixed_values.find(value)) {
621
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
622
0
            } else {
623
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
624
0
            }
625
626
0
            break;
627
0
        }
628
629
0
        case FILTER_LESS_OR_EQUAL: {
630
0
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
631
0
            break;
632
0
        }
633
634
0
        default: {
635
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
636
0
        }
637
0
        }
638
639
0
        _high_value = TYPE_MIN;
640
0
        _low_value = TYPE_MAX;
641
21
    } else {
642
22
        if (Compare::greater(_high_value, _low_value)) {
643
22
            switch (op) {
644
0
            case FILTER_LARGER: {
645
0
                if (Compare::greater_equal(value, _low_value)) {
646
0
                    _low_value = value;
647
0
                    _low_op = op;
648
0
                }
649
650
0
                break;
651
0
            }
652
653
11
            case FILTER_LARGER_OR_EQUAL: {
654
11
                if (Compare::greater(value, _low_value)) {
655
2
                    _low_value = value;
656
2
                    _low_op = op;
657
2
                }
658
659
11
                break;
660
0
            }
661
662
2
            case FILTER_LESS: {
663
2
                if (Compare::less_equal(value, _high_value)) {
664
2
                    _high_value = value;
665
2
                    _high_op = op;
666
2
                }
667
668
2
                break;
669
0
            }
670
671
9
            case FILTER_LESS_OR_EQUAL: {
672
9
                if (Compare::less(value, _high_value)) {
673
0
                    _high_value = value;
674
0
                    _high_op = op;
675
0
                }
676
677
9
                break;
678
0
            }
679
680
0
            default: {
681
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
682
0
            }
683
22
            }
684
22
        }
685
686
22
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
687
21
            Compare::equal(_high_value, _low_value)) {
688
0
            RETURN_IF_ERROR(add_fixed_value(_high_value));
689
0
            _high_value = TYPE_MIN;
690
0
            _low_value = TYPE_MAX;
691
0
        }
692
21
    }
693
694
21
    return Status::OK();
695
21
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE9add_rangeENS_11SQLFilterOpENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
597
537
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
598
537
    if (INVALID_TYPE == _column_type) {
599
0
        return Status::InternalError("AddRange failed, Invalid type");
600
0
    }
601
602
    // add range means range should not contain null
603
537
    _contain_null = false;
604
605
537
    if (is_fixed_value_range()) {
606
0
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
607
608
0
        switch (op) {
609
0
        case FILTER_LARGER: {
610
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
611
0
            break;
612
0
        }
613
614
0
        case FILTER_LARGER_OR_EQUAL: {
615
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
616
0
            break;
617
0
        }
618
619
0
        case FILTER_LESS: {
620
0
            if (bound_pair.first == _fixed_values.find(value)) {
621
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
622
0
            } else {
623
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
624
0
            }
625
626
0
            break;
627
0
        }
628
629
0
        case FILTER_LESS_OR_EQUAL: {
630
0
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
631
0
            break;
632
0
        }
633
634
0
        default: {
635
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
636
0
        }
637
0
        }
638
639
0
        _high_value = TYPE_MIN;
640
0
        _low_value = TYPE_MAX;
641
537
    } else {
642
538
        if (Compare::greater(_high_value, _low_value)) {
643
538
            switch (op) {
644
419
            case FILTER_LARGER: {
645
419
                if (Compare::greater_equal(value, _low_value)) {
646
418
                    _low_value = value;
647
418
                    _low_op = op;
648
418
                }
649
650
419
                break;
651
0
            }
652
653
44
            case FILTER_LARGER_OR_EQUAL: {
654
44
                if (Compare::greater(value, _low_value)) {
655
15
                    _low_value = value;
656
15
                    _low_op = op;
657
15
                }
658
659
44
                break;
660
0
            }
661
662
36
            case FILTER_LESS: {
663
38
                if (Compare::less_equal(value, _high_value)) {
664
38
                    _high_value = value;
665
38
                    _high_op = op;
666
38
                }
667
668
36
                break;
669
0
            }
670
671
41
            case FILTER_LESS_OR_EQUAL: {
672
41
                if (Compare::less(value, _high_value)) {
673
31
                    _high_value = value;
674
31
                    _high_op = op;
675
31
                }
676
677
41
                break;
678
0
            }
679
680
0
            default: {
681
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
682
0
            }
683
538
            }
684
538
        }
685
686
539
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
687
539
            Compare::equal(_high_value, _low_value)) {
688
5
            RETURN_IF_ERROR(add_fixed_value(_high_value));
689
5
            _high_value = TYPE_MIN;
690
5
            _low_value = TYPE_MAX;
691
5
        }
692
539
    }
693
694
539
    return Status::OK();
695
537
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE9add_rangeENS_11SQLFilterOpENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
597
1.62k
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
598
1.62k
    if (INVALID_TYPE == _column_type) {
599
0
        return Status::InternalError("AddRange failed, Invalid type");
600
0
    }
601
602
    // add range means range should not contain null
603
1.62k
    _contain_null = false;
604
605
1.62k
    if (is_fixed_value_range()) {
606
6
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
607
608
6
        switch (op) {
609
0
        case FILTER_LARGER: {
610
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
611
0
            break;
612
0
        }
613
614
4
        case FILTER_LARGER_OR_EQUAL: {
615
4
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
616
4
            break;
617
0
        }
618
619
0
        case FILTER_LESS: {
620
0
            if (bound_pair.first == _fixed_values.find(value)) {
621
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
622
0
            } else {
623
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
624
0
            }
625
626
0
            break;
627
0
        }
628
629
2
        case FILTER_LESS_OR_EQUAL: {
630
2
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
631
2
            break;
632
0
        }
633
634
0
        default: {
635
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
636
0
        }
637
6
        }
638
639
6
        _high_value = TYPE_MIN;
640
6
        _low_value = TYPE_MAX;
641
1.61k
    } else {
642
1.61k
        if (Compare::greater(_high_value, _low_value)) {
643
1.60k
            switch (op) {
644
961
            case FILTER_LARGER: {
645
962
                if (Compare::greater_equal(value, _low_value)) {
646
962
                    _low_value = value;
647
962
                    _low_op = op;
648
962
                }
649
650
961
                break;
651
0
            }
652
653
265
            case FILTER_LARGER_OR_EQUAL: {
654
265
                if (Compare::greater(value, _low_value)) {
655
165
                    _low_value = value;
656
165
                    _low_op = op;
657
165
                }
658
659
265
                break;
660
0
            }
661
662
85
            case FILTER_LESS: {
663
85
                if (Compare::less_equal(value, _high_value)) {
664
83
                    _high_value = value;
665
83
                    _high_op = op;
666
83
                }
667
668
85
                break;
669
0
            }
670
671
291
            case FILTER_LESS_OR_EQUAL: {
672
291
                if (Compare::less(value, _high_value)) {
673
241
                    _high_value = value;
674
241
                    _high_op = op;
675
241
                }
676
677
291
                break;
678
0
            }
679
680
0
            default: {
681
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
682
0
            }
683
1.60k
            }
684
1.60k
        }
685
686
1.61k
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
687
1.61k
            Compare::equal(_high_value, _low_value)) {
688
32
            RETURN_IF_ERROR(add_fixed_value(_high_value));
689
32
            _high_value = TYPE_MIN;
690
32
            _low_value = TYPE_MAX;
691
32
        }
692
1.61k
    }
693
694
1.62k
    return Status::OK();
695
1.62k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE9add_rangeENS_11SQLFilterOpENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
597
374
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
598
374
    if (INVALID_TYPE == _column_type) {
599
0
        return Status::InternalError("AddRange failed, Invalid type");
600
0
    }
601
602
    // add range means range should not contain null
603
374
    _contain_null = false;
604
605
374
    if (is_fixed_value_range()) {
606
0
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
607
608
0
        switch (op) {
609
0
        case FILTER_LARGER: {
610
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
611
0
            break;
612
0
        }
613
614
0
        case FILTER_LARGER_OR_EQUAL: {
615
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
616
0
            break;
617
0
        }
618
619
0
        case FILTER_LESS: {
620
0
            if (bound_pair.first == _fixed_values.find(value)) {
621
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
622
0
            } else {
623
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
624
0
            }
625
626
0
            break;
627
0
        }
628
629
0
        case FILTER_LESS_OR_EQUAL: {
630
0
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
631
0
            break;
632
0
        }
633
634
0
        default: {
635
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
636
0
        }
637
0
        }
638
639
0
        _high_value = TYPE_MIN;
640
0
        _low_value = TYPE_MAX;
641
374
    } else {
642
374
        if (Compare::greater(_high_value, _low_value)) {
643
370
            switch (op) {
644
17
            case FILTER_LARGER: {
645
17
                if (Compare::greater_equal(value, _low_value)) {
646
17
                    _low_value = value;
647
17
                    _low_op = op;
648
17
                }
649
650
17
                break;
651
0
            }
652
653
146
            case FILTER_LARGER_OR_EQUAL: {
654
146
                if (Compare::greater(value, _low_value)) {
655
76
                    _low_value = value;
656
76
                    _low_op = op;
657
76
                }
658
659
146
                break;
660
0
            }
661
662
54
            case FILTER_LESS: {
663
56
                if (Compare::less_equal(value, _high_value)) {
664
56
                    _high_value = value;
665
56
                    _high_op = op;
666
56
                }
667
668
54
                break;
669
0
            }
670
671
152
            case FILTER_LESS_OR_EQUAL: {
672
152
                if (Compare::less(value, _high_value)) {
673
113
                    _high_value = value;
674
113
                    _high_op = op;
675
113
                }
676
677
152
                break;
678
0
            }
679
680
0
            default: {
681
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
682
0
            }
683
370
            }
684
370
        }
685
686
369
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
687
369
            Compare::equal(_high_value, _low_value)) {
688
11
            RETURN_IF_ERROR(add_fixed_value(_high_value));
689
11
            _high_value = TYPE_MIN;
690
11
            _low_value = TYPE_MAX;
691
11
        }
692
369
    }
693
694
369
    return Status::OK();
695
374
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE9add_rangeENS_11SQLFilterOpENS_16VecDateTimeValueE
Line
Count
Source
597
6
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
598
6
    if (INVALID_TYPE == _column_type) {
599
0
        return Status::InternalError("AddRange failed, Invalid type");
600
0
    }
601
602
    // add range means range should not contain null
603
6
    _contain_null = false;
604
605
6
    if (is_fixed_value_range()) {
606
0
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
607
608
0
        switch (op) {
609
0
        case FILTER_LARGER: {
610
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
611
0
            break;
612
0
        }
613
614
0
        case FILTER_LARGER_OR_EQUAL: {
615
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
616
0
            break;
617
0
        }
618
619
0
        case FILTER_LESS: {
620
0
            if (bound_pair.first == _fixed_values.find(value)) {
621
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
622
0
            } else {
623
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
624
0
            }
625
626
0
            break;
627
0
        }
628
629
0
        case FILTER_LESS_OR_EQUAL: {
630
0
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
631
0
            break;
632
0
        }
633
634
0
        default: {
635
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
636
0
        }
637
0
        }
638
639
0
        _high_value = TYPE_MIN;
640
0
        _low_value = TYPE_MAX;
641
6
    } else {
642
6
        if (Compare::greater(_high_value, _low_value)) {
643
6
            switch (op) {
644
0
            case FILTER_LARGER: {
645
0
                if (Compare::greater_equal(value, _low_value)) {
646
0
                    _low_value = value;
647
0
                    _low_op = op;
648
0
                }
649
650
0
                break;
651
0
            }
652
653
3
            case FILTER_LARGER_OR_EQUAL: {
654
3
                if (Compare::greater(value, _low_value)) {
655
3
                    _low_value = value;
656
3
                    _low_op = op;
657
3
                }
658
659
3
                break;
660
0
            }
661
662
0
            case FILTER_LESS: {
663
0
                if (Compare::less_equal(value, _high_value)) {
664
0
                    _high_value = value;
665
0
                    _high_op = op;
666
0
                }
667
668
0
                break;
669
0
            }
670
671
3
            case FILTER_LESS_OR_EQUAL: {
672
3
                if (Compare::less(value, _high_value)) {
673
3
                    _high_value = value;
674
3
                    _high_op = op;
675
3
                }
676
677
3
                break;
678
0
            }
679
680
0
            default: {
681
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
682
0
            }
683
6
            }
684
6
        }
685
686
6
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
687
6
            Compare::equal(_high_value, _low_value)) {
688
0
            RETURN_IF_ERROR(add_fixed_value(_high_value));
689
0
            _high_value = TYPE_MIN;
690
0
            _low_value = TYPE_MAX;
691
0
        }
692
6
    }
693
694
6
    return Status::OK();
695
6
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE9add_rangeENS_11SQLFilterOpENS_11DateV2ValueINS_15DateV2ValueTypeEEE
Line
Count
Source
597
3.47k
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
598
3.47k
    if (INVALID_TYPE == _column_type) {
599
0
        return Status::InternalError("AddRange failed, Invalid type");
600
0
    }
601
602
    // add range means range should not contain null
603
3.47k
    _contain_null = false;
604
605
3.47k
    if (is_fixed_value_range()) {
606
22
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
607
608
22
        switch (op) {
609
0
        case FILTER_LARGER: {
610
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
611
0
            break;
612
0
        }
613
614
19
        case FILTER_LARGER_OR_EQUAL: {
615
19
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
616
19
            break;
617
0
        }
618
619
0
        case FILTER_LESS: {
620
0
            if (bound_pair.first == _fixed_values.find(value)) {
621
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
622
0
            } else {
623
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
624
0
            }
625
626
0
            break;
627
0
        }
628
629
3
        case FILTER_LESS_OR_EQUAL: {
630
3
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
631
3
            break;
632
0
        }
633
634
0
        default: {
635
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
636
0
        }
637
22
        }
638
639
21
        _high_value = TYPE_MIN;
640
21
        _low_value = TYPE_MAX;
641
3.45k
    } else {
642
3.45k
        if (Compare::greater(_high_value, _low_value)) {
643
3.41k
            switch (op) {
644
1.20k
            case FILTER_LARGER: {
645
1.20k
                if (Compare::greater_equal(value, _low_value)) {
646
1.20k
                    _low_value = value;
647
1.20k
                    _low_op = op;
648
1.20k
                }
649
650
1.20k
                break;
651
0
            }
652
653
1.13k
            case FILTER_LARGER_OR_EQUAL: {
654
1.13k
                if (Compare::greater(value, _low_value)) {
655
1.10k
                    _low_value = value;
656
1.10k
                    _low_op = op;
657
1.10k
                }
658
659
1.13k
                break;
660
0
            }
661
662
854
            case FILTER_LESS: {
663
854
                if (Compare::less_equal(value, _high_value)) {
664
850
                    _high_value = value;
665
850
                    _high_op = op;
666
850
                }
667
668
854
                break;
669
0
            }
670
671
225
            case FILTER_LESS_OR_EQUAL: {
672
225
                if (Compare::less(value, _high_value)) {
673
198
                    _high_value = value;
674
198
                    _high_op = op;
675
198
                }
676
677
225
                break;
678
0
            }
679
680
0
            default: {
681
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
682
0
            }
683
3.41k
            }
684
3.41k
        }
685
686
3.43k
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
687
3.43k
            Compare::equal(_high_value, _low_value)) {
688
35
            RETURN_IF_ERROR(add_fixed_value(_high_value));
689
35
            _high_value = TYPE_MIN;
690
35
            _low_value = TYPE_MAX;
691
35
        }
692
3.43k
    }
693
694
3.45k
    return Status::OK();
695
3.47k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE9add_rangeENS_11SQLFilterOpENS_16VecDateTimeValueE
Line
Count
Source
597
25
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
598
25
    if (INVALID_TYPE == _column_type) {
599
0
        return Status::InternalError("AddRange failed, Invalid type");
600
0
    }
601
602
    // add range means range should not contain null
603
25
    _contain_null = false;
604
605
25
    if (is_fixed_value_range()) {
606
0
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
607
608
0
        switch (op) {
609
0
        case FILTER_LARGER: {
610
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
611
0
            break;
612
0
        }
613
614
0
        case FILTER_LARGER_OR_EQUAL: {
615
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
616
0
            break;
617
0
        }
618
619
0
        case FILTER_LESS: {
620
0
            if (bound_pair.first == _fixed_values.find(value)) {
621
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
622
0
            } else {
623
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
624
0
            }
625
626
0
            break;
627
0
        }
628
629
0
        case FILTER_LESS_OR_EQUAL: {
630
0
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
631
0
            break;
632
0
        }
633
634
0
        default: {
635
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
636
0
        }
637
0
        }
638
639
0
        _high_value = TYPE_MIN;
640
0
        _low_value = TYPE_MAX;
641
25
    } else {
642
27
        if (Compare::greater(_high_value, _low_value)) {
643
27
            switch (op) {
644
0
            case FILTER_LARGER: {
645
0
                if (Compare::greater_equal(value, _low_value)) {
646
0
                    _low_value = value;
647
0
                    _low_op = op;
648
0
                }
649
650
0
                break;
651
0
            }
652
653
14
            case FILTER_LARGER_OR_EQUAL: {
654
14
                if (Compare::greater(value, _low_value)) {
655
13
                    _low_value = value;
656
13
                    _low_op = op;
657
13
                }
658
659
14
                break;
660
0
            }
661
662
0
            case FILTER_LESS: {
663
0
                if (Compare::less_equal(value, _high_value)) {
664
0
                    _high_value = value;
665
0
                    _high_op = op;
666
0
                }
667
668
0
                break;
669
0
            }
670
671
13
            case FILTER_LESS_OR_EQUAL: {
672
13
                if (Compare::less(value, _high_value)) {
673
12
                    _high_value = value;
674
12
                    _high_op = op;
675
12
                }
676
677
13
                break;
678
0
            }
679
680
0
            default: {
681
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
682
0
            }
683
27
            }
684
27
        }
685
686
24
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
687
24
            Compare::equal(_high_value, _low_value)) {
688
0
            RETURN_IF_ERROR(add_fixed_value(_high_value));
689
0
            _high_value = TYPE_MIN;
690
0
            _low_value = TYPE_MAX;
691
0
        }
692
23
    }
693
694
23
    return Status::OK();
695
25
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE9add_rangeENS_11SQLFilterOpENS_11DateV2ValueINS_19DateTimeV2ValueTypeEEE
Line
Count
Source
597
1.35k
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
598
1.35k
    if (INVALID_TYPE == _column_type) {
599
0
        return Status::InternalError("AddRange failed, Invalid type");
600
0
    }
601
602
    // add range means range should not contain null
603
1.35k
    _contain_null = false;
604
605
1.35k
    if (is_fixed_value_range()) {
606
12
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
607
608
12
        switch (op) {
609
0
        case FILTER_LARGER: {
610
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
611
0
            break;
612
0
        }
613
614
6
        case FILTER_LARGER_OR_EQUAL: {
615
6
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
616
6
            break;
617
0
        }
618
619
0
        case FILTER_LESS: {
620
0
            if (bound_pair.first == _fixed_values.find(value)) {
621
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
622
0
            } else {
623
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
624
0
            }
625
626
0
            break;
627
0
        }
628
629
6
        case FILTER_LESS_OR_EQUAL: {
630
6
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
631
6
            break;
632
0
        }
633
634
0
        default: {
635
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
636
0
        }
637
12
        }
638
639
12
        _high_value = TYPE_MIN;
640
12
        _low_value = TYPE_MAX;
641
1.34k
    } else {
642
1.34k
        if (Compare::greater(_high_value, _low_value)) {
643
1.32k
            switch (op) {
644
218
            case FILTER_LARGER: {
645
218
                if (Compare::greater_equal(value, _low_value)) {
646
217
                    _low_value = value;
647
217
                    _low_op = op;
648
217
                }
649
650
218
                break;
651
0
            }
652
653
531
            case FILTER_LARGER_OR_EQUAL: {
654
531
                if (Compare::greater(value, _low_value)) {
655
490
                    _low_value = value;
656
490
                    _low_op = op;
657
490
                }
658
659
531
                break;
660
0
            }
661
662
449
            case FILTER_LESS: {
663
449
                if (Compare::less_equal(value, _high_value)) {
664
449
                    _high_value = value;
665
449
                    _high_op = op;
666
449
                }
667
668
449
                break;
669
0
            }
670
671
129
            case FILTER_LESS_OR_EQUAL: {
672
129
                if (Compare::less(value, _high_value)) {
673
96
                    _high_value = value;
674
96
                    _high_op = op;
675
96
                }
676
677
129
                break;
678
0
            }
679
680
0
            default: {
681
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
682
0
            }
683
1.32k
            }
684
1.32k
        }
685
686
1.33k
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
687
1.33k
            Compare::equal(_high_value, _low_value)) {
688
13
            RETURN_IF_ERROR(add_fixed_value(_high_value));
689
13
            _high_value = TYPE_MIN;
690
13
            _low_value = TYPE_MAX;
691
13
        }
692
1.33k
    }
693
694
1.34k
    return Status::OK();
695
1.35k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE9add_rangeENS_11SQLFilterOpENS_16TimestampTzValueE
Line
Count
Source
597
586
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
598
586
    if (INVALID_TYPE == _column_type) {
599
0
        return Status::InternalError("AddRange failed, Invalid type");
600
0
    }
601
602
    // add range means range should not contain null
603
586
    _contain_null = false;
604
605
586
    if (is_fixed_value_range()) {
606
0
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
607
608
0
        switch (op) {
609
0
        case FILTER_LARGER: {
610
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
611
0
            break;
612
0
        }
613
614
0
        case FILTER_LARGER_OR_EQUAL: {
615
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
616
0
            break;
617
0
        }
618
619
0
        case FILTER_LESS: {
620
0
            if (bound_pair.first == _fixed_values.find(value)) {
621
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
622
0
            } else {
623
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
624
0
            }
625
626
0
            break;
627
0
        }
628
629
0
        case FILTER_LESS_OR_EQUAL: {
630
0
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
631
0
            break;
632
0
        }
633
634
0
        default: {
635
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
636
0
        }
637
0
        }
638
639
0
        _high_value = TYPE_MIN;
640
0
        _low_value = TYPE_MAX;
641
586
    } else {
642
586
        if (Compare::greater(_high_value, _low_value)) {
643
583
            switch (op) {
644
133
            case FILTER_LARGER: {
645
134
                if (Compare::greater_equal(value, _low_value)) {
646
134
                    _low_value = value;
647
134
                    _low_op = op;
648
134
                }
649
650
133
                break;
651
0
            }
652
653
174
            case FILTER_LARGER_OR_EQUAL: {
654
174
                if (Compare::greater(value, _low_value)) {
655
81
                    _low_value = value;
656
81
                    _low_op = op;
657
81
                }
658
659
174
                break;
660
0
            }
661
662
102
            case FILTER_LESS: {
663
102
                if (Compare::less_equal(value, _high_value)) {
664
100
                    _high_value = value;
665
100
                    _high_op = op;
666
100
                }
667
668
102
                break;
669
0
            }
670
671
178
            case FILTER_LESS_OR_EQUAL: {
672
178
                if (Compare::less(value, _high_value)) {
673
129
                    _high_value = value;
674
129
                    _high_op = op;
675
129
                }
676
677
178
                break;
678
0
            }
679
680
0
            default: {
681
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
682
0
            }
683
583
            }
684
583
        }
685
686
585
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
687
585
            Compare::equal(_high_value, _low_value)) {
688
56
            RETURN_IF_ERROR(add_fixed_value(_high_value));
689
56
            _high_value = TYPE_MIN;
690
56
            _low_value = TYPE_MAX;
691
56
        }
692
585
    }
693
694
585
    return Status::OK();
695
586
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE9add_rangeENS_11SQLFilterOpENS_14DecimalV2ValueE
Line
Count
Source
597
12
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
598
12
    if (INVALID_TYPE == _column_type) {
599
0
        return Status::InternalError("AddRange failed, Invalid type");
600
0
    }
601
602
    // add range means range should not contain null
603
12
    _contain_null = false;
604
605
12
    if (is_fixed_value_range()) {
606
0
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
607
608
0
        switch (op) {
609
0
        case FILTER_LARGER: {
610
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
611
0
            break;
612
0
        }
613
614
0
        case FILTER_LARGER_OR_EQUAL: {
615
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
616
0
            break;
617
0
        }
618
619
0
        case FILTER_LESS: {
620
0
            if (bound_pair.first == _fixed_values.find(value)) {
621
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
622
0
            } else {
623
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
624
0
            }
625
626
0
            break;
627
0
        }
628
629
0
        case FILTER_LESS_OR_EQUAL: {
630
0
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
631
0
            break;
632
0
        }
633
634
0
        default: {
635
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
636
0
        }
637
0
        }
638
639
0
        _high_value = TYPE_MIN;
640
0
        _low_value = TYPE_MAX;
641
12
    } else {
642
12
        if (Compare::greater(_high_value, _low_value)) {
643
12
            switch (op) {
644
0
            case FILTER_LARGER: {
645
0
                if (Compare::greater_equal(value, _low_value)) {
646
0
                    _low_value = value;
647
0
                    _low_op = op;
648
0
                }
649
650
0
                break;
651
0
            }
652
653
6
            case FILTER_LARGER_OR_EQUAL: {
654
6
                if (Compare::greater(value, _low_value)) {
655
6
                    _low_value = value;
656
6
                    _low_op = op;
657
6
                }
658
659
6
                break;
660
0
            }
661
662
0
            case FILTER_LESS: {
663
0
                if (Compare::less_equal(value, _high_value)) {
664
0
                    _high_value = value;
665
0
                    _high_op = op;
666
0
                }
667
668
0
                break;
669
0
            }
670
671
6
            case FILTER_LESS_OR_EQUAL: {
672
6
                if (Compare::less(value, _high_value)) {
673
6
                    _high_value = value;
674
6
                    _high_op = op;
675
6
                }
676
677
6
                break;
678
0
            }
679
680
0
            default: {
681
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
682
0
            }
683
12
            }
684
12
        }
685
686
12
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
687
12
            Compare::equal(_high_value, _low_value)) {
688
0
            RETURN_IF_ERROR(add_fixed_value(_high_value));
689
0
            _high_value = TYPE_MIN;
690
0
            _low_value = TYPE_MAX;
691
0
        }
692
12
    }
693
694
12
    return Status::OK();
695
12
}
Unexecuted instantiation: _ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE9add_rangeENS_11SQLFilterOpEh
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE9add_rangeENS_11SQLFilterOpENS_7DecimalIiEE
Line
Count
Source
597
99
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
598
99
    if (INVALID_TYPE == _column_type) {
599
0
        return Status::InternalError("AddRange failed, Invalid type");
600
0
    }
601
602
    // add range means range should not contain null
603
99
    _contain_null = false;
604
605
99
    if (is_fixed_value_range()) {
606
0
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
607
608
0
        switch (op) {
609
0
        case FILTER_LARGER: {
610
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
611
0
            break;
612
0
        }
613
614
0
        case FILTER_LARGER_OR_EQUAL: {
615
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
616
0
            break;
617
0
        }
618
619
0
        case FILTER_LESS: {
620
0
            if (bound_pair.first == _fixed_values.find(value)) {
621
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
622
0
            } else {
623
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
624
0
            }
625
626
0
            break;
627
0
        }
628
629
0
        case FILTER_LESS_OR_EQUAL: {
630
0
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
631
0
            break;
632
0
        }
633
634
0
        default: {
635
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
636
0
        }
637
0
        }
638
639
0
        _high_value = TYPE_MIN;
640
0
        _low_value = TYPE_MAX;
641
99
    } else {
642
99
        if (Compare::greater(_high_value, _low_value)) {
643
98
            switch (op) {
644
10
            case FILTER_LARGER: {
645
10
                if (Compare::greater_equal(value, _low_value)) {
646
9
                    _low_value = value;
647
9
                    _low_op = op;
648
9
                }
649
650
10
                break;
651
0
            }
652
653
33
            case FILTER_LARGER_OR_EQUAL: {
654
33
                if (Compare::greater(value, _low_value)) {
655
18
                    _low_value = value;
656
18
                    _low_op = op;
657
18
                }
658
659
33
                break;
660
0
            }
661
662
24
            case FILTER_LESS: {
663
24
                if (Compare::less_equal(value, _high_value)) {
664
24
                    _high_value = value;
665
24
                    _high_op = op;
666
24
                }
667
668
24
                break;
669
0
            }
670
671
32
            case FILTER_LESS_OR_EQUAL: {
672
32
                if (Compare::less(value, _high_value)) {
673
18
                    _high_value = value;
674
18
                    _high_op = op;
675
18
                }
676
677
32
                break;
678
0
            }
679
680
0
            default: {
681
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
682
0
            }
683
98
            }
684
98
        }
685
686
98
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
687
98
            Compare::equal(_high_value, _low_value)) {
688
0
            RETURN_IF_ERROR(add_fixed_value(_high_value));
689
0
            _high_value = TYPE_MIN;
690
0
            _low_value = TYPE_MAX;
691
0
        }
692
98
    }
693
694
98
    return Status::OK();
695
99
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE9add_rangeENS_11SQLFilterOpENS_7DecimalIlEE
Line
Count
Source
597
121
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
598
121
    if (INVALID_TYPE == _column_type) {
599
0
        return Status::InternalError("AddRange failed, Invalid type");
600
0
    }
601
602
    // add range means range should not contain null
603
121
    _contain_null = false;
604
605
121
    if (is_fixed_value_range()) {
606
0
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
607
608
0
        switch (op) {
609
0
        case FILTER_LARGER: {
610
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
611
0
            break;
612
0
        }
613
614
0
        case FILTER_LARGER_OR_EQUAL: {
615
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
616
0
            break;
617
0
        }
618
619
0
        case FILTER_LESS: {
620
0
            if (bound_pair.first == _fixed_values.find(value)) {
621
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
622
0
            } else {
623
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
624
0
            }
625
626
0
            break;
627
0
        }
628
629
0
        case FILTER_LESS_OR_EQUAL: {
630
0
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
631
0
            break;
632
0
        }
633
634
0
        default: {
635
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
636
0
        }
637
0
        }
638
639
0
        _high_value = TYPE_MIN;
640
0
        _low_value = TYPE_MAX;
641
121
    } else {
642
121
        if (Compare::greater(_high_value, _low_value)) {
643
120
            switch (op) {
644
26
            case FILTER_LARGER: {
645
26
                if (Compare::greater_equal(value, _low_value)) {
646
26
                    _low_value = value;
647
26
                    _low_op = op;
648
26
                }
649
650
26
                break;
651
0
            }
652
653
31
            case FILTER_LARGER_OR_EQUAL: {
654
31
                if (Compare::greater(value, _low_value)) {
655
29
                    _low_value = value;
656
29
                    _low_op = op;
657
29
                }
658
659
31
                break;
660
0
            }
661
662
32
            case FILTER_LESS: {
663
32
                if (Compare::less_equal(value, _high_value)) {
664
32
                    _high_value = value;
665
32
                    _high_op = op;
666
32
                }
667
668
32
                break;
669
0
            }
670
671
30
            case FILTER_LESS_OR_EQUAL: {
672
30
                if (Compare::less(value, _high_value)) {
673
29
                    _high_value = value;
674
29
                    _high_op = op;
675
29
                }
676
677
30
                break;
678
0
            }
679
680
0
            default: {
681
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
682
0
            }
683
120
            }
684
120
        }
685
686
122
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
687
122
            Compare::equal(_high_value, _low_value)) {
688
0
            RETURN_IF_ERROR(add_fixed_value(_high_value));
689
0
            _high_value = TYPE_MIN;
690
0
            _low_value = TYPE_MAX;
691
0
        }
692
122
    }
693
694
122
    return Status::OK();
695
121
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE9add_rangeENS_11SQLFilterOpENS_12Decimal128V3E
Line
Count
Source
597
99
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
598
99
    if (INVALID_TYPE == _column_type) {
599
0
        return Status::InternalError("AddRange failed, Invalid type");
600
0
    }
601
602
    // add range means range should not contain null
603
99
    _contain_null = false;
604
605
99
    if (is_fixed_value_range()) {
606
0
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
607
608
0
        switch (op) {
609
0
        case FILTER_LARGER: {
610
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
611
0
            break;
612
0
        }
613
614
0
        case FILTER_LARGER_OR_EQUAL: {
615
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
616
0
            break;
617
0
        }
618
619
0
        case FILTER_LESS: {
620
0
            if (bound_pair.first == _fixed_values.find(value)) {
621
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
622
0
            } else {
623
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
624
0
            }
625
626
0
            break;
627
0
        }
628
629
0
        case FILTER_LESS_OR_EQUAL: {
630
0
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
631
0
            break;
632
0
        }
633
634
0
        default: {
635
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
636
0
        }
637
0
        }
638
639
0
        _high_value = TYPE_MIN;
640
0
        _low_value = TYPE_MAX;
641
99
    } else {
642
99
        if (Compare::greater(_high_value, _low_value)) {
643
98
            switch (op) {
644
67
            case FILTER_LARGER: {
645
67
                if (Compare::greater_equal(value, _low_value)) {
646
65
                    _low_value = value;
647
65
                    _low_op = op;
648
65
                }
649
650
67
                break;
651
0
            }
652
653
16
            case FILTER_LARGER_OR_EQUAL: {
654
16
                if (Compare::greater(value, _low_value)) {
655
16
                    _low_value = value;
656
16
                    _low_op = op;
657
16
                }
658
659
16
                break;
660
0
            }
661
662
2
            case FILTER_LESS: {
663
2
                if (Compare::less_equal(value, _high_value)) {
664
2
                    _high_value = value;
665
2
                    _high_op = op;
666
2
                }
667
668
2
                break;
669
0
            }
670
671
13
            case FILTER_LESS_OR_EQUAL: {
672
13
                if (Compare::less(value, _high_value)) {
673
13
                    _high_value = value;
674
13
                    _high_op = op;
675
13
                }
676
677
13
                break;
678
0
            }
679
680
0
            default: {
681
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
682
0
            }
683
98
            }
684
98
        }
685
686
98
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
687
98
            Compare::equal(_high_value, _low_value)) {
688
0
            RETURN_IF_ERROR(add_fixed_value(_high_value));
689
0
            _high_value = TYPE_MIN;
690
0
            _low_value = TYPE_MAX;
691
0
        }
692
98
    }
693
694
98
    return Status::OK();
695
99
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE9add_rangeENS_11SQLFilterOpENS_7DecimalIN4wide7integerILm256EiEEEE
Line
Count
Source
597
141
Status ColumnValueRange<primitive_type>::add_range(SQLFilterOp op, const CppType value) {
598
141
    if (INVALID_TYPE == _column_type) {
599
0
        return Status::InternalError("AddRange failed, Invalid type");
600
0
    }
601
602
    // add range means range should not contain null
603
141
    _contain_null = false;
604
605
141
    if (is_fixed_value_range()) {
606
0
        std::pair<IteratorType, IteratorType> bound_pair = _fixed_values.equal_range(value);
607
608
0
        switch (op) {
609
0
        case FILTER_LARGER: {
610
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.second);
611
0
            break;
612
0
        }
613
614
0
        case FILTER_LARGER_OR_EQUAL: {
615
0
            _fixed_values.erase(_fixed_values.begin(), bound_pair.first);
616
0
            break;
617
0
        }
618
619
0
        case FILTER_LESS: {
620
0
            if (bound_pair.first == _fixed_values.find(value)) {
621
0
                _fixed_values.erase(bound_pair.first, _fixed_values.end());
622
0
            } else {
623
0
                _fixed_values.erase(bound_pair.second, _fixed_values.end());
624
0
            }
625
626
0
            break;
627
0
        }
628
629
0
        case FILTER_LESS_OR_EQUAL: {
630
0
            _fixed_values.erase(bound_pair.second, _fixed_values.end());
631
0
            break;
632
0
        }
633
634
0
        default: {
635
0
            return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
636
0
        }
637
0
        }
638
639
0
        _high_value = TYPE_MIN;
640
0
        _low_value = TYPE_MAX;
641
141
    } else {
642
143
        if (Compare::greater(_high_value, _low_value)) {
643
143
            switch (op) {
644
32
            case FILTER_LARGER: {
645
32
                if (Compare::greater_equal(value, _low_value)) {
646
32
                    _low_value = value;
647
32
                    _low_op = op;
648
32
                }
649
650
32
                break;
651
0
            }
652
653
40
            case FILTER_LARGER_OR_EQUAL: {
654
40
                if (Compare::greater(value, _low_value)) {
655
24
                    _low_value = value;
656
24
                    _low_op = op;
657
24
                }
658
659
40
                break;
660
0
            }
661
662
29
            case FILTER_LESS: {
663
30
                if (Compare::less_equal(value, _high_value)) {
664
30
                    _high_value = value;
665
30
                    _high_op = op;
666
30
                }
667
668
29
                break;
669
0
            }
670
671
41
            case FILTER_LESS_OR_EQUAL: {
672
41
                if (Compare::less(value, _high_value)) {
673
25
                    _high_value = value;
674
25
                    _high_op = op;
675
25
                }
676
677
41
                break;
678
0
            }
679
680
0
            default: {
681
0
                return Status::InternalError("Add Range fail! Unsupported SQLFilterOp.");
682
0
            }
683
143
            }
684
143
        }
685
686
141
        if (FILTER_LARGER_OR_EQUAL == _low_op && FILTER_LESS_OR_EQUAL == _high_op &&
687
141
            Compare::equal(_high_value, _low_value)) {
688
0
            RETURN_IF_ERROR(add_fixed_value(_high_value));
689
0
            _high_value = TYPE_MIN;
690
0
            _low_value = TYPE_MAX;
691
0
        }
692
141
    }
693
694
141
    return Status::OK();
695
141
}
696
697
template <PrimitiveType primitive_type>
698
306k
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
699
306k
    switch (_high_op) {
700
24
    case FILTER_LESS: {
701
24
        switch (_low_op) {
702
0
        case FILTER_LARGER: {
703
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
704
0
        }
705
706
24
        case FILTER_LARGER_OR_EQUAL: {
707
24
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
708
0
        }
709
710
0
        default: {
711
0
            DCHECK(false);
712
0
        }
713
24
        }
714
715
0
        break;
716
24
    }
717
718
306k
    case FILTER_LESS_OR_EQUAL: {
719
306k
        switch (_low_op) {
720
33
        case FILTER_LARGER: {
721
33
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
722
0
        }
723
724
306k
        case FILTER_LARGER_OR_EQUAL: {
725
306k
            return Compare::less_equal(value, _high_value) &&
726
307k
                   Compare::greater_equal(value, _low_value);
727
0
        }
728
729
0
        default: {
730
0
            DCHECK(false);
731
0
        }
732
306k
        }
733
306k
    }
734
735
0
    default: {
736
0
        DCHECK(false);
737
0
    }
738
306k
    }
739
740
0
    return false;
741
306k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE11is_in_rangeERKa
Line
Count
Source
698
73.6k
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
699
73.6k
    switch (_high_op) {
700
0
    case FILTER_LESS: {
701
0
        switch (_low_op) {
702
0
        case FILTER_LARGER: {
703
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
704
0
        }
705
706
0
        case FILTER_LARGER_OR_EQUAL: {
707
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
708
0
        }
709
710
0
        default: {
711
0
            DCHECK(false);
712
0
        }
713
0
        }
714
715
0
        break;
716
0
    }
717
718
73.7k
    case FILTER_LESS_OR_EQUAL: {
719
73.7k
        switch (_low_op) {
720
0
        case FILTER_LARGER: {
721
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
722
0
        }
723
724
73.7k
        case FILTER_LARGER_OR_EQUAL: {
725
73.7k
            return Compare::less_equal(value, _high_value) &&
726
73.7k
                   Compare::greater_equal(value, _low_value);
727
0
        }
728
729
0
        default: {
730
0
            DCHECK(false);
731
0
        }
732
73.7k
        }
733
73.7k
    }
734
735
0
    default: {
736
0
        DCHECK(false);
737
0
    }
738
73.6k
    }
739
740
0
    return false;
741
73.6k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE11is_in_rangeERKs
Line
Count
Source
698
237
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
699
237
    switch (_high_op) {
700
0
    case FILTER_LESS: {
701
0
        switch (_low_op) {
702
0
        case FILTER_LARGER: {
703
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
704
0
        }
705
706
0
        case FILTER_LARGER_OR_EQUAL: {
707
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
708
0
        }
709
710
0
        default: {
711
0
            DCHECK(false);
712
0
        }
713
0
        }
714
715
0
        break;
716
0
    }
717
718
237
    case FILTER_LESS_OR_EQUAL: {
719
237
        switch (_low_op) {
720
0
        case FILTER_LARGER: {
721
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
722
0
        }
723
724
237
        case FILTER_LARGER_OR_EQUAL: {
725
237
            return Compare::less_equal(value, _high_value) &&
726
237
                   Compare::greater_equal(value, _low_value);
727
0
        }
728
729
0
        default: {
730
0
            DCHECK(false);
731
0
        }
732
237
        }
733
237
    }
734
735
0
    default: {
736
0
        DCHECK(false);
737
0
    }
738
237
    }
739
740
0
    return false;
741
237
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE11is_in_rangeERKi
Line
Count
Source
698
68.9k
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
699
68.9k
    switch (_high_op) {
700
0
    case FILTER_LESS: {
701
0
        switch (_low_op) {
702
0
        case FILTER_LARGER: {
703
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
704
0
        }
705
706
0
        case FILTER_LARGER_OR_EQUAL: {
707
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
708
0
        }
709
710
0
        default: {
711
0
            DCHECK(false);
712
0
        }
713
0
        }
714
715
0
        break;
716
0
    }
717
718
69.0k
    case FILTER_LESS_OR_EQUAL: {
719
69.0k
        switch (_low_op) {
720
22
        case FILTER_LARGER: {
721
22
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
722
0
        }
723
724
69.0k
        case FILTER_LARGER_OR_EQUAL: {
725
69.0k
            return Compare::less_equal(value, _high_value) &&
726
69.0k
                   Compare::greater_equal(value, _low_value);
727
0
        }
728
729
0
        default: {
730
0
            DCHECK(false);
731
0
        }
732
69.0k
        }
733
69.0k
    }
734
735
0
    default: {
736
0
        DCHECK(false);
737
0
    }
738
68.9k
    }
739
740
0
    return false;
741
68.9k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE11is_in_rangeERKl
Line
Count
Source
698
967
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
699
967
    switch (_high_op) {
700
0
    case FILTER_LESS: {
701
0
        switch (_low_op) {
702
0
        case FILTER_LARGER: {
703
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
704
0
        }
705
706
0
        case FILTER_LARGER_OR_EQUAL: {
707
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
708
0
        }
709
710
0
        default: {
711
0
            DCHECK(false);
712
0
        }
713
0
        }
714
715
0
        break;
716
0
    }
717
718
967
    case FILTER_LESS_OR_EQUAL: {
719
967
        switch (_low_op) {
720
6
        case FILTER_LARGER: {
721
6
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
722
0
        }
723
724
959
        case FILTER_LARGER_OR_EQUAL: {
725
959
            return Compare::less_equal(value, _high_value) &&
726
964
                   Compare::greater_equal(value, _low_value);
727
0
        }
728
729
0
        default: {
730
0
            DCHECK(false);
731
0
        }
732
967
        }
733
967
    }
734
735
0
    default: {
736
0
        DCHECK(false);
737
0
    }
738
967
    }
739
740
0
    return false;
741
967
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE11is_in_rangeERKn
Line
Count
Source
698
191
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
699
191
    switch (_high_op) {
700
0
    case FILTER_LESS: {
701
0
        switch (_low_op) {
702
0
        case FILTER_LARGER: {
703
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
704
0
        }
705
706
0
        case FILTER_LARGER_OR_EQUAL: {
707
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
708
0
        }
709
710
0
        default: {
711
0
            DCHECK(false);
712
0
        }
713
0
        }
714
715
0
        break;
716
0
    }
717
718
191
    case FILTER_LESS_OR_EQUAL: {
719
191
        switch (_low_op) {
720
0
        case FILTER_LARGER: {
721
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
722
0
        }
723
724
191
        case FILTER_LARGER_OR_EQUAL: {
725
191
            return Compare::less_equal(value, _high_value) &&
726
191
                   Compare::greater_equal(value, _low_value);
727
0
        }
728
729
0
        default: {
730
0
            DCHECK(false);
731
0
        }
732
191
        }
733
191
    }
734
735
0
    default: {
736
0
        DCHECK(false);
737
0
    }
738
191
    }
739
740
0
    return false;
741
191
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE11is_in_rangeERKf
Line
Count
Source
698
32
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
699
32
    switch (_high_op) {
700
0
    case FILTER_LESS: {
701
0
        switch (_low_op) {
702
0
        case FILTER_LARGER: {
703
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
704
0
        }
705
706
0
        case FILTER_LARGER_OR_EQUAL: {
707
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
708
0
        }
709
710
0
        default: {
711
0
            DCHECK(false);
712
0
        }
713
0
        }
714
715
0
        break;
716
0
    }
717
718
31
    case FILTER_LESS_OR_EQUAL: {
719
31
        switch (_low_op) {
720
0
        case FILTER_LARGER: {
721
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
722
0
        }
723
724
32
        case FILTER_LARGER_OR_EQUAL: {
725
32
            return Compare::less_equal(value, _high_value) &&
726
32
                   Compare::greater_equal(value, _low_value);
727
0
        }
728
729
0
        default: {
730
0
            DCHECK(false);
731
0
        }
732
31
        }
733
31
    }
734
735
0
    default: {
736
0
        DCHECK(false);
737
0
    }
738
32
    }
739
740
0
    return false;
741
32
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE11is_in_rangeERKd
Line
Count
Source
698
153
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
699
153
    switch (_high_op) {
700
0
    case FILTER_LESS: {
701
0
        switch (_low_op) {
702
0
        case FILTER_LARGER: {
703
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
704
0
        }
705
706
0
        case FILTER_LARGER_OR_EQUAL: {
707
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
708
0
        }
709
710
0
        default: {
711
0
            DCHECK(false);
712
0
        }
713
0
        }
714
715
0
        break;
716
0
    }
717
718
154
    case FILTER_LESS_OR_EQUAL: {
719
154
        switch (_low_op) {
720
0
        case FILTER_LARGER: {
721
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
722
0
        }
723
724
156
        case FILTER_LARGER_OR_EQUAL: {
725
156
            return Compare::less_equal(value, _high_value) &&
726
156
                   Compare::greater_equal(value, _low_value);
727
0
        }
728
729
0
        default: {
730
0
            DCHECK(false);
731
0
        }
732
154
        }
733
154
    }
734
735
0
    default: {
736
0
        DCHECK(false);
737
0
    }
738
153
    }
739
740
0
    return false;
741
153
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE11is_in_rangeERKj
Line
Count
Source
698
24
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
699
24
    switch (_high_op) {
700
0
    case FILTER_LESS: {
701
0
        switch (_low_op) {
702
0
        case FILTER_LARGER: {
703
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
704
0
        }
705
706
0
        case FILTER_LARGER_OR_EQUAL: {
707
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
708
0
        }
709
710
0
        default: {
711
0
            DCHECK(false);
712
0
        }
713
0
        }
714
715
0
        break;
716
0
    }
717
718
24
    case FILTER_LESS_OR_EQUAL: {
719
24
        switch (_low_op) {
720
0
        case FILTER_LARGER: {
721
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
722
0
        }
723
724
24
        case FILTER_LARGER_OR_EQUAL: {
725
24
            return Compare::less_equal(value, _high_value) &&
726
24
                   Compare::greater_equal(value, _low_value);
727
0
        }
728
729
0
        default: {
730
0
            DCHECK(false);
731
0
        }
732
24
        }
733
24
    }
734
735
0
    default: {
736
0
        DCHECK(false);
737
0
    }
738
24
    }
739
740
0
    return false;
741
24
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE11is_in_rangeERKo
Line
Count
Source
698
27
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
699
27
    switch (_high_op) {
700
0
    case FILTER_LESS: {
701
0
        switch (_low_op) {
702
0
        case FILTER_LARGER: {
703
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
704
0
        }
705
706
0
        case FILTER_LARGER_OR_EQUAL: {
707
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
708
0
        }
709
710
0
        default: {
711
0
            DCHECK(false);
712
0
        }
713
0
        }
714
715
0
        break;
716
0
    }
717
718
27
    case FILTER_LESS_OR_EQUAL: {
719
27
        switch (_low_op) {
720
0
        case FILTER_LARGER: {
721
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
722
0
        }
723
724
27
        case FILTER_LARGER_OR_EQUAL: {
725
27
            return Compare::less_equal(value, _high_value) &&
726
27
                   Compare::greater_equal(value, _low_value);
727
0
        }
728
729
0
        default: {
730
0
            DCHECK(false);
731
0
        }
732
27
        }
733
27
    }
734
735
0
    default: {
736
0
        DCHECK(false);
737
0
    }
738
27
    }
739
740
0
    return false;
741
27
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE11is_in_rangeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
698
400
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
699
400
    switch (_high_op) {
700
0
    case FILTER_LESS: {
701
0
        switch (_low_op) {
702
0
        case FILTER_LARGER: {
703
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
704
0
        }
705
706
0
        case FILTER_LARGER_OR_EQUAL: {
707
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
708
0
        }
709
710
0
        default: {
711
0
            DCHECK(false);
712
0
        }
713
0
        }
714
715
0
        break;
716
0
    }
717
718
402
    case FILTER_LESS_OR_EQUAL: {
719
402
        switch (_low_op) {
720
0
        case FILTER_LARGER: {
721
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
722
0
        }
723
724
402
        case FILTER_LARGER_OR_EQUAL: {
725
402
            return Compare::less_equal(value, _high_value) &&
726
403
                   Compare::greater_equal(value, _low_value);
727
0
        }
728
729
0
        default: {
730
0
            DCHECK(false);
731
0
        }
732
402
        }
733
402
    }
734
735
0
    default: {
736
0
        DCHECK(false);
737
0
    }
738
400
    }
739
740
0
    return false;
741
400
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE11is_in_rangeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
698
159k
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
699
159k
    switch (_high_op) {
700
0
    case FILTER_LESS: {
701
0
        switch (_low_op) {
702
0
        case FILTER_LARGER: {
703
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
704
0
        }
705
706
0
        case FILTER_LARGER_OR_EQUAL: {
707
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
708
0
        }
709
710
0
        default: {
711
0
            DCHECK(false);
712
0
        }
713
0
        }
714
715
0
        break;
716
0
    }
717
718
159k
    case FILTER_LESS_OR_EQUAL: {
719
159k
        switch (_low_op) {
720
0
        case FILTER_LARGER: {
721
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
722
0
        }
723
724
159k
        case FILTER_LARGER_OR_EQUAL: {
725
159k
            return Compare::less_equal(value, _high_value) &&
726
160k
                   Compare::greater_equal(value, _low_value);
727
0
        }
728
729
0
        default: {
730
0
            DCHECK(false);
731
0
        }
732
159k
        }
733
159k
    }
734
735
0
    default: {
736
0
        DCHECK(false);
737
0
    }
738
159k
    }
739
740
0
    return false;
741
159k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE11is_in_rangeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
698
304
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
699
304
    switch (_high_op) {
700
0
    case FILTER_LESS: {
701
0
        switch (_low_op) {
702
0
        case FILTER_LARGER: {
703
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
704
0
        }
705
706
0
        case FILTER_LARGER_OR_EQUAL: {
707
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
708
0
        }
709
710
0
        default: {
711
0
            DCHECK(false);
712
0
        }
713
0
        }
714
715
0
        break;
716
0
    }
717
718
304
    case FILTER_LESS_OR_EQUAL: {
719
304
        switch (_low_op) {
720
0
        case FILTER_LARGER: {
721
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
722
0
        }
723
724
304
        case FILTER_LARGER_OR_EQUAL: {
725
304
            return Compare::less_equal(value, _high_value) &&
726
307
                   Compare::greater_equal(value, _low_value);
727
0
        }
728
729
0
        default: {
730
0
            DCHECK(false);
731
0
        }
732
304
        }
733
304
    }
734
735
0
    default: {
736
0
        DCHECK(false);
737
0
    }
738
304
    }
739
740
0
    return false;
741
304
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE11is_in_rangeERKNS_16VecDateTimeValueE
Line
Count
Source
698
59
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
699
59
    switch (_high_op) {
700
0
    case FILTER_LESS: {
701
0
        switch (_low_op) {
702
0
        case FILTER_LARGER: {
703
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
704
0
        }
705
706
0
        case FILTER_LARGER_OR_EQUAL: {
707
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
708
0
        }
709
710
0
        default: {
711
0
            DCHECK(false);
712
0
        }
713
0
        }
714
715
0
        break;
716
0
    }
717
718
59
    case FILTER_LESS_OR_EQUAL: {
719
59
        switch (_low_op) {
720
0
        case FILTER_LARGER: {
721
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
722
0
        }
723
724
59
        case FILTER_LARGER_OR_EQUAL: {
725
59
            return Compare::less_equal(value, _high_value) &&
726
59
                   Compare::greater_equal(value, _low_value);
727
0
        }
728
729
0
        default: {
730
0
            DCHECK(false);
731
0
        }
732
59
        }
733
59
    }
734
735
0
    default: {
736
0
        DCHECK(false);
737
0
    }
738
59
    }
739
740
0
    return false;
741
59
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE11is_in_rangeERKNS_11DateV2ValueINS_15DateV2ValueTypeEEE
Line
Count
Source
698
880
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
699
880
    switch (_high_op) {
700
12
    case FILTER_LESS: {
701
12
        switch (_low_op) {
702
0
        case FILTER_LARGER: {
703
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
704
0
        }
705
706
12
        case FILTER_LARGER_OR_EQUAL: {
707
12
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
708
0
        }
709
710
0
        default: {
711
0
            DCHECK(false);
712
0
        }
713
12
        }
714
715
0
        break;
716
12
    }
717
718
866
    case FILTER_LESS_OR_EQUAL: {
719
866
        switch (_low_op) {
720
5
        case FILTER_LARGER: {
721
5
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
722
0
        }
723
724
863
        case FILTER_LARGER_OR_EQUAL: {
725
863
            return Compare::less_equal(value, _high_value) &&
726
864
                   Compare::greater_equal(value, _low_value);
727
0
        }
728
729
0
        default: {
730
0
            DCHECK(false);
731
0
        }
732
866
        }
733
866
    }
734
735
0
    default: {
736
0
        DCHECK(false);
737
0
    }
738
880
    }
739
740
0
    return false;
741
880
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE11is_in_rangeERKNS_16VecDateTimeValueE
Line
Count
Source
698
110
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
699
110
    switch (_high_op) {
700
0
    case FILTER_LESS: {
701
0
        switch (_low_op) {
702
0
        case FILTER_LARGER: {
703
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
704
0
        }
705
706
0
        case FILTER_LARGER_OR_EQUAL: {
707
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
708
0
        }
709
710
0
        default: {
711
0
            DCHECK(false);
712
0
        }
713
0
        }
714
715
0
        break;
716
0
    }
717
718
110
    case FILTER_LESS_OR_EQUAL: {
719
110
        switch (_low_op) {
720
0
        case FILTER_LARGER: {
721
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
722
0
        }
723
724
110
        case FILTER_LARGER_OR_EQUAL: {
725
110
            return Compare::less_equal(value, _high_value) &&
726
110
                   Compare::greater_equal(value, _low_value);
727
0
        }
728
729
0
        default: {
730
0
            DCHECK(false);
731
0
        }
732
110
        }
733
110
    }
734
735
0
    default: {
736
0
        DCHECK(false);
737
0
    }
738
110
    }
739
740
0
    return false;
741
110
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE11is_in_rangeERKNS_11DateV2ValueINS_19DateTimeV2ValueTypeEEE
Line
Count
Source
698
297
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
699
297
    switch (_high_op) {
700
12
    case FILTER_LESS: {
701
12
        switch (_low_op) {
702
0
        case FILTER_LARGER: {
703
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
704
0
        }
705
706
12
        case FILTER_LARGER_OR_EQUAL: {
707
12
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
708
0
        }
709
710
0
        default: {
711
0
            DCHECK(false);
712
0
        }
713
12
        }
714
715
0
        break;
716
12
    }
717
718
286
    case FILTER_LESS_OR_EQUAL: {
719
286
        switch (_low_op) {
720
0
        case FILTER_LARGER: {
721
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
722
0
        }
723
724
286
        case FILTER_LARGER_OR_EQUAL: {
725
286
            return Compare::less_equal(value, _high_value) &&
726
286
                   Compare::greater_equal(value, _low_value);
727
0
        }
728
729
0
        default: {
730
0
            DCHECK(false);
731
0
        }
732
286
        }
733
286
    }
734
735
0
    default: {
736
0
        DCHECK(false);
737
0
    }
738
297
    }
739
740
0
    return false;
741
297
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE11is_in_rangeERKNS_16TimestampTzValueE
Line
Count
Source
698
204
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
699
204
    switch (_high_op) {
700
0
    case FILTER_LESS: {
701
0
        switch (_low_op) {
702
0
        case FILTER_LARGER: {
703
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
704
0
        }
705
706
0
        case FILTER_LARGER_OR_EQUAL: {
707
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
708
0
        }
709
710
0
        default: {
711
0
            DCHECK(false);
712
0
        }
713
0
        }
714
715
0
        break;
716
0
    }
717
718
204
    case FILTER_LESS_OR_EQUAL: {
719
204
        switch (_low_op) {
720
0
        case FILTER_LARGER: {
721
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
722
0
        }
723
724
204
        case FILTER_LARGER_OR_EQUAL: {
725
204
            return Compare::less_equal(value, _high_value) &&
726
204
                   Compare::greater_equal(value, _low_value);
727
0
        }
728
729
0
        default: {
730
0
            DCHECK(false);
731
0
        }
732
204
        }
733
204
    }
734
735
0
    default: {
736
0
        DCHECK(false);
737
0
    }
738
204
    }
739
740
0
    return false;
741
204
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE11is_in_rangeERKNS_14DecimalV2ValueE
Line
Count
Source
698
36
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
699
36
    switch (_high_op) {
700
0
    case FILTER_LESS: {
701
0
        switch (_low_op) {
702
0
        case FILTER_LARGER: {
703
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
704
0
        }
705
706
0
        case FILTER_LARGER_OR_EQUAL: {
707
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
708
0
        }
709
710
0
        default: {
711
0
            DCHECK(false);
712
0
        }
713
0
        }
714
715
0
        break;
716
0
    }
717
718
36
    case FILTER_LESS_OR_EQUAL: {
719
36
        switch (_low_op) {
720
0
        case FILTER_LARGER: {
721
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
722
0
        }
723
724
36
        case FILTER_LARGER_OR_EQUAL: {
725
36
            return Compare::less_equal(value, _high_value) &&
726
36
                   Compare::greater_equal(value, _low_value);
727
0
        }
728
729
0
        default: {
730
0
            DCHECK(false);
731
0
        }
732
36
        }
733
36
    }
734
735
0
    default: {
736
0
        DCHECK(false);
737
0
    }
738
36
    }
739
740
0
    return false;
741
36
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE11is_in_rangeERKh
Line
Count
Source
698
98
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
699
98
    switch (_high_op) {
700
0
    case FILTER_LESS: {
701
0
        switch (_low_op) {
702
0
        case FILTER_LARGER: {
703
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
704
0
        }
705
706
0
        case FILTER_LARGER_OR_EQUAL: {
707
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
708
0
        }
709
710
0
        default: {
711
0
            DCHECK(false);
712
0
        }
713
0
        }
714
715
0
        break;
716
0
    }
717
718
98
    case FILTER_LESS_OR_EQUAL: {
719
98
        switch (_low_op) {
720
0
        case FILTER_LARGER: {
721
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
722
0
        }
723
724
98
        case FILTER_LARGER_OR_EQUAL: {
725
98
            return Compare::less_equal(value, _high_value) &&
726
98
                   Compare::greater_equal(value, _low_value);
727
0
        }
728
729
0
        default: {
730
0
            DCHECK(false);
731
0
        }
732
98
        }
733
98
    }
734
735
0
    default: {
736
0
        DCHECK(false);
737
0
    }
738
98
    }
739
740
0
    return false;
741
98
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE11is_in_rangeERKNS_7DecimalIiEE
Line
Count
Source
698
52
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
699
52
    switch (_high_op) {
700
0
    case FILTER_LESS: {
701
0
        switch (_low_op) {
702
0
        case FILTER_LARGER: {
703
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
704
0
        }
705
706
0
        case FILTER_LARGER_OR_EQUAL: {
707
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
708
0
        }
709
710
0
        default: {
711
0
            DCHECK(false);
712
0
        }
713
0
        }
714
715
0
        break;
716
0
    }
717
718
52
    case FILTER_LESS_OR_EQUAL: {
719
52
        switch (_low_op) {
720
0
        case FILTER_LARGER: {
721
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
722
0
        }
723
724
52
        case FILTER_LARGER_OR_EQUAL: {
725
52
            return Compare::less_equal(value, _high_value) &&
726
52
                   Compare::greater_equal(value, _low_value);
727
0
        }
728
729
0
        default: {
730
0
            DCHECK(false);
731
0
        }
732
52
        }
733
52
    }
734
735
0
    default: {
736
0
        DCHECK(false);
737
0
    }
738
52
    }
739
740
0
    return false;
741
52
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE11is_in_rangeERKNS_7DecimalIlEE
Line
Count
Source
698
120
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
699
120
    switch (_high_op) {
700
0
    case FILTER_LESS: {
701
0
        switch (_low_op) {
702
0
        case FILTER_LARGER: {
703
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
704
0
        }
705
706
0
        case FILTER_LARGER_OR_EQUAL: {
707
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
708
0
        }
709
710
0
        default: {
711
0
            DCHECK(false);
712
0
        }
713
0
        }
714
715
0
        break;
716
0
    }
717
718
120
    case FILTER_LESS_OR_EQUAL: {
719
120
        switch (_low_op) {
720
0
        case FILTER_LARGER: {
721
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
722
0
        }
723
724
120
        case FILTER_LARGER_OR_EQUAL: {
725
120
            return Compare::less_equal(value, _high_value) &&
726
120
                   Compare::greater_equal(value, _low_value);
727
0
        }
728
729
0
        default: {
730
0
            DCHECK(false);
731
0
        }
732
120
        }
733
120
    }
734
735
0
    default: {
736
0
        DCHECK(false);
737
0
    }
738
120
    }
739
740
0
    return false;
741
120
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE11is_in_rangeERKNS_12Decimal128V3E
Line
Count
Source
698
140
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
699
140
    switch (_high_op) {
700
0
    case FILTER_LESS: {
701
0
        switch (_low_op) {
702
0
        case FILTER_LARGER: {
703
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
704
0
        }
705
706
0
        case FILTER_LARGER_OR_EQUAL: {
707
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
708
0
        }
709
710
0
        default: {
711
0
            DCHECK(false);
712
0
        }
713
0
        }
714
715
0
        break;
716
0
    }
717
718
141
    case FILTER_LESS_OR_EQUAL: {
719
141
        switch (_low_op) {
720
0
        case FILTER_LARGER: {
721
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
722
0
        }
723
724
141
        case FILTER_LARGER_OR_EQUAL: {
725
141
            return Compare::less_equal(value, _high_value) &&
726
141
                   Compare::greater_equal(value, _low_value);
727
0
        }
728
729
0
        default: {
730
0
            DCHECK(false);
731
0
        }
732
141
        }
733
141
    }
734
735
0
    default: {
736
0
        DCHECK(false);
737
0
    }
738
140
    }
739
740
0
    return false;
741
140
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE11is_in_rangeERKNS_7DecimalIN4wide7integerILm256EiEEEE
Line
Count
Source
698
47
bool ColumnValueRange<primitive_type>::is_in_range(const CppType& value) {
699
47
    switch (_high_op) {
700
0
    case FILTER_LESS: {
701
0
        switch (_low_op) {
702
0
        case FILTER_LARGER: {
703
0
            return Compare::less(value, _high_value) && Compare::greater(value, _low_value);
704
0
        }
705
706
0
        case FILTER_LARGER_OR_EQUAL: {
707
0
            return Compare::less(value, _high_value) && Compare::greater_equal(value, _low_value);
708
0
        }
709
710
0
        default: {
711
0
            DCHECK(false);
712
0
        }
713
0
        }
714
715
0
        break;
716
0
    }
717
718
47
    case FILTER_LESS_OR_EQUAL: {
719
47
        switch (_low_op) {
720
0
        case FILTER_LARGER: {
721
0
            return Compare::less_equal(value, _high_value) && Compare::greater(value, _low_value);
722
0
        }
723
724
47
        case FILTER_LARGER_OR_EQUAL: {
725
47
            return Compare::less_equal(value, _high_value) &&
726
47
                   Compare::greater_equal(value, _low_value);
727
0
        }
728
729
0
        default: {
730
0
            DCHECK(false);
731
0
        }
732
47
        }
733
47
    }
734
735
0
    default: {
736
0
        DCHECK(false);
737
0
    }
738
47
    }
739
740
0
    return false;
741
47
}
742
743
template <PrimitiveType primitive_type>
744
241k
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
745
    // 1. clear if column type not match
746
241k
    if (_column_type != range._column_type) {
747
0
        set_empty_value_range();
748
0
    }
749
750
    // 2. clear if any range is empty
751
241k
    if (is_empty_value_range() || range.is_empty_value_range()) {
752
310
        set_empty_value_range();
753
310
    }
754
755
241k
    SetType result_values;
756
    // 3. fixed_value intersection, fixed value range do not contain null
757
241k
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
758
238k
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
759
102
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
760
102
                             range._fixed_values.begin(), range._fixed_values.end(),
761
102
                             std::inserter(result_values, result_values.begin()));
762
238k
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
763
11
            IteratorType iter = _fixed_values.begin();
764
765
41
            while (iter != _fixed_values.end()) {
766
30
                if (range.is_in_range(*iter)) {
767
29
                    result_values.insert(*iter);
768
29
                }
769
30
                ++iter;
770
30
            }
771
238k
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
772
238k
            IteratorType iter = range._fixed_values.begin();
773
544k
            while (iter != range._fixed_values.end()) {
774
306k
                if (this->is_in_range(*iter)) {
775
306k
                    result_values.insert(*iter);
776
306k
                }
777
306k
                ++iter;
778
306k
            }
779
238k
        }
780
781
240k
        if (!result_values.empty()) {
782
240k
            _fixed_values = std::move(result_values);
783
240k
            _contain_null = false;
784
240k
            _high_value = TYPE_MIN;
785
240k
            _low_value = TYPE_MAX;
786
18.4E
        } else {
787
18.4E
            set_empty_value_range();
788
18.4E
        }
789
238k
    } else {
790
3.49k
        if (contain_null() && range.contain_null()) {
791
            // if both is_whole_range to keep the same, else set_contain_null
792
289
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
793
287
                set_contain_null(true);
794
287
            }
795
3.20k
        } else {
796
3.20k
            static_cast<void>(add_range(range._high_op, range._high_value));
797
3.20k
            static_cast<void>(add_range(range._low_op, range._low_value));
798
3.20k
        }
799
3.49k
    }
800
241k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE3EE12intersectionERS2_
Line
Count
Source
744
73.8k
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
745
    // 1. clear if column type not match
746
73.8k
    if (_column_type != range._column_type) {
747
0
        set_empty_value_range();
748
0
    }
749
750
    // 2. clear if any range is empty
751
73.8k
    if (is_empty_value_range() || range.is_empty_value_range()) {
752
12
        set_empty_value_range();
753
12
    }
754
755
73.8k
    SetType result_values;
756
    // 3. fixed_value intersection, fixed value range do not contain null
757
73.8k
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
758
72.8k
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
759
8
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
760
8
                             range._fixed_values.begin(), range._fixed_values.end(),
761
8
                             std::inserter(result_values, result_values.begin()));
762
72.8k
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
763
0
            IteratorType iter = _fixed_values.begin();
764
765
0
            while (iter != _fixed_values.end()) {
766
0
                if (range.is_in_range(*iter)) {
767
0
                    result_values.insert(*iter);
768
0
                }
769
0
                ++iter;
770
0
            }
771
72.8k
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
772
72.7k
            IteratorType iter = range._fixed_values.begin();
773
145k
            while (iter != range._fixed_values.end()) {
774
73.5k
                if (this->is_in_range(*iter)) {
775
73.5k
                    result_values.insert(*iter);
776
73.5k
                }
777
72.9k
                ++iter;
778
72.9k
            }
779
72.7k
        }
780
781
73.5k
        if (!result_values.empty()) {
782
73.5k
            _fixed_values = std::move(result_values);
783
73.5k
            _contain_null = false;
784
73.5k
            _high_value = TYPE_MIN;
785
73.5k
            _low_value = TYPE_MAX;
786
18.4E
        } else {
787
18.4E
            set_empty_value_range();
788
18.4E
        }
789
72.8k
    } else {
790
1.00k
        if (contain_null() && range.contain_null()) {
791
            // if both is_whole_range to keep the same, else set_contain_null
792
0
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
793
0
                set_contain_null(true);
794
0
            }
795
1.00k
        } else {
796
1.00k
            static_cast<void>(add_range(range._high_op, range._high_value));
797
1.00k
            static_cast<void>(add_range(range._low_op, range._low_value));
798
1.00k
        }
799
1.00k
    }
800
73.8k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE4EE12intersectionERS2_
Line
Count
Source
744
113
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
745
    // 1. clear if column type not match
746
113
    if (_column_type != range._column_type) {
747
0
        set_empty_value_range();
748
0
    }
749
750
    // 2. clear if any range is empty
751
113
    if (is_empty_value_range() || range.is_empty_value_range()) {
752
8
        set_empty_value_range();
753
8
    }
754
755
113
    SetType result_values;
756
    // 3. fixed_value intersection, fixed value range do not contain null
757
113
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
758
83
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
759
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
760
0
                             range._fixed_values.begin(), range._fixed_values.end(),
761
0
                             std::inserter(result_values, result_values.begin()));
762
83
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
763
0
            IteratorType iter = _fixed_values.begin();
764
765
0
            while (iter != _fixed_values.end()) {
766
0
                if (range.is_in_range(*iter)) {
767
0
                    result_values.insert(*iter);
768
0
                }
769
0
                ++iter;
770
0
            }
771
84
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
772
84
            IteratorType iter = range._fixed_values.begin();
773
319
            while (iter != range._fixed_values.end()) {
774
236
                if (this->is_in_range(*iter)) {
775
236
                    result_values.insert(*iter);
776
236
                }
777
235
                ++iter;
778
235
            }
779
84
        }
780
781
87
        if (!result_values.empty()) {
782
87
            _fixed_values = std::move(result_values);
783
87
            _contain_null = false;
784
87
            _high_value = TYPE_MIN;
785
87
            _low_value = TYPE_MAX;
786
18.4E
        } else {
787
18.4E
            set_empty_value_range();
788
18.4E
        }
789
83
    } else {
790
30
        if (contain_null() && range.contain_null()) {
791
            // if both is_whole_range to keep the same, else set_contain_null
792
1
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
793
1
                set_contain_null(true);
794
1
            }
795
29
        } else {
796
29
            static_cast<void>(add_range(range._high_op, range._high_value));
797
29
            static_cast<void>(add_range(range._low_op, range._low_value));
798
29
        }
799
30
    }
800
113
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE5EE12intersectionERS2_
Line
Count
Source
744
4.17k
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
745
    // 1. clear if column type not match
746
4.17k
    if (_column_type != range._column_type) {
747
0
        set_empty_value_range();
748
0
    }
749
750
    // 2. clear if any range is empty
751
4.17k
    if (is_empty_value_range() || range.is_empty_value_range()) {
752
144
        set_empty_value_range();
753
144
    }
754
755
4.17k
    SetType result_values;
756
    // 3. fixed_value intersection, fixed value range do not contain null
757
4.17k
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
758
3.57k
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
759
66
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
760
66
                             range._fixed_values.begin(), range._fixed_values.end(),
761
66
                             std::inserter(result_values, result_values.begin()));
762
3.50k
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
763
0
            IteratorType iter = _fixed_values.begin();
764
765
0
            while (iter != _fixed_values.end()) {
766
0
                if (range.is_in_range(*iter)) {
767
0
                    result_values.insert(*iter);
768
0
                }
769
0
                ++iter;
770
0
            }
771
3.50k
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
772
3.50k
            IteratorType iter = range._fixed_values.begin();
773
73.2k
            while (iter != range._fixed_values.end()) {
774
69.7k
                if (this->is_in_range(*iter)) {
775
68.8k
                    result_values.insert(*iter);
776
68.8k
                }
777
69.7k
                ++iter;
778
69.7k
            }
779
3.50k
        }
780
781
3.61k
        if (!result_values.empty()) {
782
3.61k
            _fixed_values = std::move(result_values);
783
3.61k
            _contain_null = false;
784
3.61k
            _high_value = TYPE_MIN;
785
3.61k
            _low_value = TYPE_MAX;
786
18.4E
        } else {
787
18.4E
            set_empty_value_range();
788
18.4E
        }
789
3.57k
    } else {
790
602
        if (contain_null() && range.contain_null()) {
791
            // if both is_whole_range to keep the same, else set_contain_null
792
57
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
793
57
                set_contain_null(true);
794
57
            }
795
545
        } else {
796
545
            static_cast<void>(add_range(range._high_op, range._high_value));
797
545
            static_cast<void>(add_range(range._low_op, range._low_value));
798
545
        }
799
602
    }
800
4.17k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE6EE12intersectionERS2_
Line
Count
Source
744
1.05k
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
745
    // 1. clear if column type not match
746
1.05k
    if (_column_type != range._column_type) {
747
0
        set_empty_value_range();
748
0
    }
749
750
    // 2. clear if any range is empty
751
1.05k
    if (is_empty_value_range() || range.is_empty_value_range()) {
752
137
        set_empty_value_range();
753
137
    }
754
755
1.05k
    SetType result_values;
756
    // 3. fixed_value intersection, fixed value range do not contain null
757
1.05k
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
758
519
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
759
22
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
760
22
                             range._fixed_values.begin(), range._fixed_values.end(),
761
22
                             std::inserter(result_values, result_values.begin()));
762
497
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
763
11
            IteratorType iter = _fixed_values.begin();
764
765
41
            while (iter != _fixed_values.end()) {
766
30
                if (range.is_in_range(*iter)) {
767
29
                    result_values.insert(*iter);
768
29
                }
769
30
                ++iter;
770
30
            }
771
486
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
772
485
            IteratorType iter = range._fixed_values.begin();
773
1.42k
            while (iter != range._fixed_values.end()) {
774
940
                if (this->is_in_range(*iter)) {
775
940
                    result_values.insert(*iter);
776
940
                }
777
939
                ++iter;
778
939
            }
779
485
        }
780
781
525
        if (!result_values.empty()) {
782
525
            _fixed_values = std::move(result_values);
783
525
            _contain_null = false;
784
525
            _high_value = TYPE_MIN;
785
525
            _low_value = TYPE_MAX;
786
18.4E
        } else {
787
18.4E
            set_empty_value_range();
788
18.4E
        }
789
540
    } else {
790
540
        if (contain_null() && range.contain_null()) {
791
            // if both is_whole_range to keep the same, else set_contain_null
792
0
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
793
0
                set_contain_null(true);
794
0
            }
795
540
        } else {
796
540
            static_cast<void>(add_range(range._high_op, range._high_value));
797
540
            static_cast<void>(add_range(range._low_op, range._low_value));
798
540
        }
799
540
    }
800
1.05k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE7EE12intersectionERS2_
Line
Count
Source
744
198
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
745
    // 1. clear if column type not match
746
198
    if (_column_type != range._column_type) {
747
0
        set_empty_value_range();
748
0
    }
749
750
    // 2. clear if any range is empty
751
199
    if (is_empty_value_range() || range.is_empty_value_range()) {
752
0
        set_empty_value_range();
753
0
    }
754
755
198
    SetType result_values;
756
    // 3. fixed_value intersection, fixed value range do not contain null
757
198
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
758
186
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
759
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
760
0
                             range._fixed_values.begin(), range._fixed_values.end(),
761
0
                             std::inserter(result_values, result_values.begin()));
762
186
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
763
0
            IteratorType iter = _fixed_values.begin();
764
765
0
            while (iter != _fixed_values.end()) {
766
0
                if (range.is_in_range(*iter)) {
767
0
                    result_values.insert(*iter);
768
0
                }
769
0
                ++iter;
770
0
            }
771
186
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
772
185
            IteratorType iter = range._fixed_values.begin();
773
374
            while (iter != range._fixed_values.end()) {
774
191
                if (this->is_in_range(*iter)) {
775
191
                    result_values.insert(*iter);
776
191
                }
777
189
                ++iter;
778
189
            }
779
185
        }
780
781
186
        if (!result_values.empty()) {
782
186
            _fixed_values = std::move(result_values);
783
186
            _contain_null = false;
784
186
            _high_value = TYPE_MIN;
785
186
            _low_value = TYPE_MAX;
786
186
        } else {
787
0
            set_empty_value_range();
788
0
        }
789
186
    } else {
790
12
        if (contain_null() && range.contain_null()) {
791
            // if both is_whole_range to keep the same, else set_contain_null
792
9
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
793
9
                set_contain_null(true);
794
9
            }
795
9
        } else {
796
3
            static_cast<void>(add_range(range._high_op, range._high_value));
797
3
            static_cast<void>(add_range(range._low_op, range._low_value));
798
3
        }
799
12
    }
800
198
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE8EE12intersectionERS2_
Line
Count
Source
744
44
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
745
    // 1. clear if column type not match
746
44
    if (_column_type != range._column_type) {
747
0
        set_empty_value_range();
748
0
    }
749
750
    // 2. clear if any range is empty
751
44
    if (is_empty_value_range() || range.is_empty_value_range()) {
752
0
        set_empty_value_range();
753
0
    }
754
755
44
    SetType result_values;
756
    // 3. fixed_value intersection, fixed value range do not contain null
757
44
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
758
25
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
759
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
760
0
                             range._fixed_values.begin(), range._fixed_values.end(),
761
0
                             std::inserter(result_values, result_values.begin()));
762
25
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
763
0
            IteratorType iter = _fixed_values.begin();
764
765
0
            while (iter != _fixed_values.end()) {
766
0
                if (range.is_in_range(*iter)) {
767
0
                    result_values.insert(*iter);
768
0
                }
769
0
                ++iter;
770
0
            }
771
25
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
772
24
            IteratorType iter = range._fixed_values.begin();
773
53
            while (iter != range._fixed_values.end()) {
774
30
                if (this->is_in_range(*iter)) {
775
30
                    result_values.insert(*iter);
776
30
                }
777
29
                ++iter;
778
29
            }
779
24
        }
780
781
28
        if (!result_values.empty()) {
782
28
            _fixed_values = std::move(result_values);
783
28
            _contain_null = false;
784
28
            _high_value = TYPE_MIN;
785
28
            _low_value = TYPE_MAX;
786
18.4E
        } else {
787
18.4E
            set_empty_value_range();
788
18.4E
        }
789
25
    } else {
790
19
        if (contain_null() && range.contain_null()) {
791
            // if both is_whole_range to keep the same, else set_contain_null
792
8
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
793
8
                set_contain_null(true);
794
8
            }
795
11
        } else {
796
11
            static_cast<void>(add_range(range._high_op, range._high_value));
797
11
            static_cast<void>(add_range(range._low_op, range._low_value));
798
11
        }
799
19
    }
800
44
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE9EE12intersectionERS2_
Line
Count
Source
744
174
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
745
    // 1. clear if column type not match
746
174
    if (_column_type != range._column_type) {
747
0
        set_empty_value_range();
748
0
    }
749
750
    // 2. clear if any range is empty
751
174
    if (is_empty_value_range() || range.is_empty_value_range()) {
752
0
        set_empty_value_range();
753
0
    }
754
755
174
    SetType result_values;
756
    // 3. fixed_value intersection, fixed value range do not contain null
757
174
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
758
103
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
759
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
760
0
                             range._fixed_values.begin(), range._fixed_values.end(),
761
0
                             std::inserter(result_values, result_values.begin()));
762
103
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
763
0
            IteratorType iter = _fixed_values.begin();
764
765
0
            while (iter != _fixed_values.end()) {
766
0
                if (range.is_in_range(*iter)) {
767
0
                    result_values.insert(*iter);
768
0
                }
769
0
                ++iter;
770
0
            }
771
104
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
772
104
            IteratorType iter = range._fixed_values.begin();
773
256
            while (iter != range._fixed_values.end()) {
774
154
                if (this->is_in_range(*iter)) {
775
154
                    result_values.insert(*iter);
776
154
                }
777
152
                ++iter;
778
152
            }
779
104
        }
780
781
113
        if (!result_values.empty()) {
782
113
            _fixed_values = std::move(result_values);
783
113
            _contain_null = false;
784
113
            _high_value = TYPE_MIN;
785
113
            _low_value = TYPE_MAX;
786
18.4E
        } else {
787
18.4E
            set_empty_value_range();
788
18.4E
        }
789
103
    } else {
790
71
        if (contain_null() && range.contain_null()) {
791
            // if both is_whole_range to keep the same, else set_contain_null
792
16
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
793
15
                set_contain_null(true);
794
15
            }
795
56
        } else {
796
56
            static_cast<void>(add_range(range._high_op, range._high_value));
797
56
            static_cast<void>(add_range(range._low_op, range._low_value));
798
56
        }
799
71
    }
800
174
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE36EE12intersectionERS2_
Line
Count
Source
744
22
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
745
    // 1. clear if column type not match
746
22
    if (_column_type != range._column_type) {
747
0
        set_empty_value_range();
748
0
    }
749
750
    // 2. clear if any range is empty
751
22
    if (is_empty_value_range() || range.is_empty_value_range()) {
752
0
        set_empty_value_range();
753
0
    }
754
755
22
    SetType result_values;
756
    // 3. fixed_value intersection, fixed value range do not contain null
757
22
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
758
19
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
759
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
760
0
                             range._fixed_values.begin(), range._fixed_values.end(),
761
0
                             std::inserter(result_values, result_values.begin()));
762
19
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
763
0
            IteratorType iter = _fixed_values.begin();
764
765
0
            while (iter != _fixed_values.end()) {
766
0
                if (range.is_in_range(*iter)) {
767
0
                    result_values.insert(*iter);
768
0
                }
769
0
                ++iter;
770
0
            }
771
19
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
772
19
            IteratorType iter = range._fixed_values.begin();
773
43
            while (iter != range._fixed_values.end()) {
774
24
                if (this->is_in_range(*iter)) {
775
24
                    result_values.insert(*iter);
776
24
                }
777
24
                ++iter;
778
24
            }
779
19
        }
780
781
19
        if (!result_values.empty()) {
782
19
            _fixed_values = std::move(result_values);
783
19
            _contain_null = false;
784
19
            _high_value = TYPE_MIN;
785
19
            _low_value = TYPE_MAX;
786
19
        } else {
787
0
            set_empty_value_range();
788
0
        }
789
19
    } else {
790
3
        if (contain_null() && range.contain_null()) {
791
            // if both is_whole_range to keep the same, else set_contain_null
792
0
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
793
0
                set_contain_null(true);
794
0
            }
795
3
        } else {
796
3
            static_cast<void>(add_range(range._high_op, range._high_value));
797
3
            static_cast<void>(add_range(range._low_op, range._low_value));
798
3
        }
799
3
    }
800
22
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE37EE12intersectionERS2_
Line
Count
Source
744
23
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
745
    // 1. clear if column type not match
746
23
    if (_column_type != range._column_type) {
747
0
        set_empty_value_range();
748
0
    }
749
750
    // 2. clear if any range is empty
751
23
    if (is_empty_value_range() || range.is_empty_value_range()) {
752
0
        set_empty_value_range();
753
0
    }
754
755
23
    SetType result_values;
756
    // 3. fixed_value intersection, fixed value range do not contain null
757
23
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
758
22
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
759
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
760
0
                             range._fixed_values.begin(), range._fixed_values.end(),
761
0
                             std::inserter(result_values, result_values.begin()));
762
22
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
763
0
            IteratorType iter = _fixed_values.begin();
764
765
0
            while (iter != _fixed_values.end()) {
766
0
                if (range.is_in_range(*iter)) {
767
0
                    result_values.insert(*iter);
768
0
                }
769
0
                ++iter;
770
0
            }
771
22
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
772
22
            IteratorType iter = range._fixed_values.begin();
773
49
            while (iter != range._fixed_values.end()) {
774
27
                if (this->is_in_range(*iter)) {
775
27
                    result_values.insert(*iter);
776
27
                }
777
27
                ++iter;
778
27
            }
779
22
        }
780
781
22
        if (!result_values.empty()) {
782
22
            _fixed_values = std::move(result_values);
783
22
            _contain_null = false;
784
22
            _high_value = TYPE_MIN;
785
22
            _low_value = TYPE_MAX;
786
22
        } else {
787
0
            set_empty_value_range();
788
0
        }
789
22
    } else {
790
1
        if (contain_null() && range.contain_null()) {
791
            // if both is_whole_range to keep the same, else set_contain_null
792
0
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
793
0
                set_contain_null(true);
794
0
            }
795
1
        } else {
796
1
            static_cast<void>(add_range(range._high_op, range._high_value));
797
1
            static_cast<void>(add_range(range._low_op, range._low_value));
798
1
        }
799
1
    }
800
23
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE15EE12intersectionERS2_
Line
Count
Source
744
298
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
745
    // 1. clear if column type not match
746
298
    if (_column_type != range._column_type) {
747
0
        set_empty_value_range();
748
0
    }
749
750
    // 2. clear if any range is empty
751
298
    if (is_empty_value_range() || range.is_empty_value_range()) {
752
0
        set_empty_value_range();
753
0
    }
754
755
298
    SetType result_values;
756
    // 3. fixed_value intersection, fixed value range do not contain null
757
298
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
758
281
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
759
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
760
0
                             range._fixed_values.begin(), range._fixed_values.end(),
761
0
                             std::inserter(result_values, result_values.begin()));
762
281
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
763
0
            IteratorType iter = _fixed_values.begin();
764
765
0
            while (iter != _fixed_values.end()) {
766
0
                if (range.is_in_range(*iter)) {
767
0
                    result_values.insert(*iter);
768
0
                }
769
0
                ++iter;
770
0
            }
771
281
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
772
281
            IteratorType iter = range._fixed_values.begin();
773
683
            while (iter != range._fixed_values.end()) {
774
404
                if (this->is_in_range(*iter)) {
775
404
                    result_values.insert(*iter);
776
404
                }
777
402
                ++iter;
778
402
            }
779
281
        }
780
781
284
        if (!result_values.empty()) {
782
284
            _fixed_values = std::move(result_values);
783
284
            _contain_null = false;
784
284
            _high_value = TYPE_MIN;
785
284
            _low_value = TYPE_MAX;
786
18.4E
        } else {
787
18.4E
            set_empty_value_range();
788
18.4E
        }
789
281
    } else {
790
17
        if (contain_null() && range.contain_null()) {
791
            // if both is_whole_range to keep the same, else set_contain_null
792
2
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
793
2
                set_contain_null(true);
794
2
            }
795
15
        } else {
796
15
            static_cast<void>(add_range(range._high_op, range._high_value));
797
15
            static_cast<void>(add_range(range._low_op, range._low_value));
798
15
        }
799
17
    }
800
298
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE10EE12intersectionERS2_
Line
Count
Source
744
159k
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
745
    // 1. clear if column type not match
746
159k
    if (_column_type != range._column_type) {
747
0
        set_empty_value_range();
748
0
    }
749
750
    // 2. clear if any range is empty
751
159k
    if (is_empty_value_range() || range.is_empty_value_range()) {
752
2
        set_empty_value_range();
753
2
    }
754
755
159k
    SetType result_values;
756
    // 3. fixed_value intersection, fixed value range do not contain null
757
159k
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
758
158k
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
759
6
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
760
6
                             range._fixed_values.begin(), range._fixed_values.end(),
761
6
                             std::inserter(result_values, result_values.begin()));
762
158k
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
763
0
            IteratorType iter = _fixed_values.begin();
764
765
0
            while (iter != _fixed_values.end()) {
766
0
                if (range.is_in_range(*iter)) {
767
0
                    result_values.insert(*iter);
768
0
                }
769
0
                ++iter;
770
0
            }
771
158k
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
772
158k
            IteratorType iter = range._fixed_values.begin();
773
317k
            while (iter != range._fixed_values.end()) {
774
160k
                if (this->is_in_range(*iter)) {
775
160k
                    result_values.insert(*iter);
776
160k
                }
777
159k
                ++iter;
778
159k
            }
779
158k
        }
780
781
159k
        if (!result_values.empty()) {
782
159k
            _fixed_values = std::move(result_values);
783
159k
            _contain_null = false;
784
159k
            _high_value = TYPE_MIN;
785
159k
            _low_value = TYPE_MAX;
786
18.4E
        } else {
787
18.4E
            set_empty_value_range();
788
18.4E
        }
789
158k
    } else {
790
920
        if (contain_null() && range.contain_null()) {
791
            // if both is_whole_range to keep the same, else set_contain_null
792
128
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
793
128
                set_contain_null(true);
794
128
            }
795
792
        } else {
796
792
            static_cast<void>(add_range(range._high_op, range._high_value));
797
792
            static_cast<void>(add_range(range._low_op, range._low_value));
798
792
        }
799
920
    }
800
159k
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE23EE12intersectionERS2_
Line
Count
Source
744
329
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
745
    // 1. clear if column type not match
746
329
    if (_column_type != range._column_type) {
747
0
        set_empty_value_range();
748
0
    }
749
750
    // 2. clear if any range is empty
751
329
    if (is_empty_value_range() || range.is_empty_value_range()) {
752
0
        set_empty_value_range();
753
0
    }
754
755
329
    SetType result_values;
756
    // 3. fixed_value intersection, fixed value range do not contain null
757
329
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
758
250
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
759
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
760
0
                             range._fixed_values.begin(), range._fixed_values.end(),
761
0
                             std::inserter(result_values, result_values.begin()));
762
250
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
763
0
            IteratorType iter = _fixed_values.begin();
764
765
0
            while (iter != _fixed_values.end()) {
766
0
                if (range.is_in_range(*iter)) {
767
0
                    result_values.insert(*iter);
768
0
                }
769
0
                ++iter;
770
0
            }
771
251
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
772
248
            IteratorType iter = range._fixed_values.begin();
773
544
            while (iter != range._fixed_values.end()) {
774
301
                if (this->is_in_range(*iter)) {
775
301
                    result_values.insert(*iter);
776
301
                }
777
296
                ++iter;
778
296
            }
779
248
        }
780
781
261
        if (!result_values.empty()) {
782
261
            _fixed_values = std::move(result_values);
783
261
            _contain_null = false;
784
261
            _high_value = TYPE_MIN;
785
261
            _low_value = TYPE_MAX;
786
18.4E
        } else {
787
18.4E
            set_empty_value_range();
788
18.4E
        }
789
250
    } else {
790
79
        if (contain_null() && range.contain_null()) {
791
            // if both is_whole_range to keep the same, else set_contain_null
792
32
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
793
32
                set_contain_null(true);
794
32
            }
795
49
        } else {
796
49
            static_cast<void>(add_range(range._high_op, range._high_value));
797
49
            static_cast<void>(add_range(range._low_op, range._low_value));
798
49
        }
799
79
    }
800
329
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE11EE12intersectionERS2_
Line
Count
Source
744
29
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
745
    // 1. clear if column type not match
746
29
    if (_column_type != range._column_type) {
747
0
        set_empty_value_range();
748
0
    }
749
750
    // 2. clear if any range is empty
751
29
    if (is_empty_value_range() || range.is_empty_value_range()) {
752
0
        set_empty_value_range();
753
0
    }
754
755
29
    SetType result_values;
756
    // 3. fixed_value intersection, fixed value range do not contain null
757
29
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
758
29
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
759
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
760
0
                             range._fixed_values.begin(), range._fixed_values.end(),
761
0
                             std::inserter(result_values, result_values.begin()));
762
29
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
763
0
            IteratorType iter = _fixed_values.begin();
764
765
0
            while (iter != _fixed_values.end()) {
766
0
                if (range.is_in_range(*iter)) {
767
0
                    result_values.insert(*iter);
768
0
                }
769
0
                ++iter;
770
0
            }
771
29
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
772
29
            IteratorType iter = range._fixed_values.begin();
773
88
            while (iter != range._fixed_values.end()) {
774
59
                if (this->is_in_range(*iter)) {
775
59
                    result_values.insert(*iter);
776
59
                }
777
59
                ++iter;
778
59
            }
779
29
        }
780
781
29
        if (!result_values.empty()) {
782
29
            _fixed_values = std::move(result_values);
783
29
            _contain_null = false;
784
29
            _high_value = TYPE_MIN;
785
29
            _low_value = TYPE_MAX;
786
29
        } else {
787
0
            set_empty_value_range();
788
0
        }
789
29
    } else {
790
0
        if (contain_null() && range.contain_null()) {
791
            // if both is_whole_range to keep the same, else set_contain_null
792
0
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
793
0
                set_contain_null(true);
794
0
            }
795
0
        } else {
796
0
            static_cast<void>(add_range(range._high_op, range._high_value));
797
0
            static_cast<void>(add_range(range._low_op, range._low_value));
798
0
        }
799
0
    }
800
29
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE25EE12intersectionERS2_
Line
Count
Source
744
822
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
745
    // 1. clear if column type not match
746
822
    if (_column_type != range._column_type) {
747
0
        set_empty_value_range();
748
0
    }
749
750
    // 2. clear if any range is empty
751
822
    if (is_empty_value_range() || range.is_empty_value_range()) {
752
6
        set_empty_value_range();
753
6
    }
754
755
822
    SetType result_values;
756
    // 3. fixed_value intersection, fixed value range do not contain null
757
822
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
758
775
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
759
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
760
0
                             range._fixed_values.begin(), range._fixed_values.end(),
761
0
                             std::inserter(result_values, result_values.begin()));
762
775
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
763
0
            IteratorType iter = _fixed_values.begin();
764
765
0
            while (iter != _fixed_values.end()) {
766
0
                if (range.is_in_range(*iter)) {
767
0
                    result_values.insert(*iter);
768
0
                }
769
0
                ++iter;
770
0
            }
771
776
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
772
774
            IteratorType iter = range._fixed_values.begin();
773
1.64k
            while (iter != range._fixed_values.end()) {
774
884
                if (this->is_in_range(*iter)) {
775
884
                    result_values.insert(*iter);
776
884
                }
777
872
                ++iter;
778
872
            }
779
774
        }
780
781
788
        if (!result_values.empty()) {
782
788
            _fixed_values = std::move(result_values);
783
788
            _contain_null = false;
784
788
            _high_value = TYPE_MIN;
785
788
            _low_value = TYPE_MAX;
786
18.4E
        } else {
787
18.4E
            set_empty_value_range();
788
18.4E
        }
789
775
    } else {
790
47
        if (contain_null() && range.contain_null()) {
791
            // if both is_whole_range to keep the same, else set_contain_null
792
15
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
793
15
                set_contain_null(true);
794
15
            }
795
32
        } else {
796
32
            static_cast<void>(add_range(range._high_op, range._high_value));
797
32
            static_cast<void>(add_range(range._low_op, range._low_value));
798
32
        }
799
47
    }
800
822
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE12EE12intersectionERS2_
Line
Count
Source
744
54
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
745
    // 1. clear if column type not match
746
54
    if (_column_type != range._column_type) {
747
0
        set_empty_value_range();
748
0
    }
749
750
    // 2. clear if any range is empty
751
54
    if (is_empty_value_range() || range.is_empty_value_range()) {
752
0
        set_empty_value_range();
753
0
    }
754
755
54
    SetType result_values;
756
    // 3. fixed_value intersection, fixed value range do not contain null
757
54
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
758
54
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
759
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
760
0
                             range._fixed_values.begin(), range._fixed_values.end(),
761
0
                             std::inserter(result_values, result_values.begin()));
762
54
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
763
0
            IteratorType iter = _fixed_values.begin();
764
765
0
            while (iter != _fixed_values.end()) {
766
0
                if (range.is_in_range(*iter)) {
767
0
                    result_values.insert(*iter);
768
0
                }
769
0
                ++iter;
770
0
            }
771
54
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
772
54
            IteratorType iter = range._fixed_values.begin();
773
164
            while (iter != range._fixed_values.end()) {
774
110
                if (this->is_in_range(*iter)) {
775
108
                    result_values.insert(*iter);
776
108
                }
777
110
                ++iter;
778
110
            }
779
54
        }
780
781
54
        if (!result_values.empty()) {
782
54
            _fixed_values = std::move(result_values);
783
54
            _contain_null = false;
784
54
            _high_value = TYPE_MIN;
785
54
            _low_value = TYPE_MAX;
786
54
        } else {
787
0
            set_empty_value_range();
788
0
        }
789
54
    } else {
790
0
        if (contain_null() && range.contain_null()) {
791
            // if both is_whole_range to keep the same, else set_contain_null
792
0
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
793
0
                set_contain_null(true);
794
0
            }
795
0
        } else {
796
0
            static_cast<void>(add_range(range._high_op, range._high_value));
797
0
            static_cast<void>(add_range(range._low_op, range._low_value));
798
0
        }
799
0
    }
800
54
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE26EE12intersectionERS2_
Line
Count
Source
744
321
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
745
    // 1. clear if column type not match
746
321
    if (_column_type != range._column_type) {
747
0
        set_empty_value_range();
748
0
    }
749
750
    // 2. clear if any range is empty
751
321
    if (is_empty_value_range() || range.is_empty_value_range()) {
752
0
        set_empty_value_range();
753
0
    }
754
755
321
    SetType result_values;
756
    // 3. fixed_value intersection, fixed value range do not contain null
757
321
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
758
270
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
759
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
760
0
                             range._fixed_values.begin(), range._fixed_values.end(),
761
0
                             std::inserter(result_values, result_values.begin()));
762
270
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
763
0
            IteratorType iter = _fixed_values.begin();
764
765
0
            while (iter != _fixed_values.end()) {
766
0
                if (range.is_in_range(*iter)) {
767
0
                    result_values.insert(*iter);
768
0
                }
769
0
                ++iter;
770
0
            }
771
270
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
772
266
            IteratorType iter = range._fixed_values.begin();
773
552
            while (iter != range._fixed_values.end()) {
774
296
                if (this->is_in_range(*iter)) {
775
296
                    result_values.insert(*iter);
776
296
                }
777
286
                ++iter;
778
286
            }
779
266
        }
780
781
288
        if (!result_values.empty()) {
782
288
            _fixed_values = std::move(result_values);
783
288
            _contain_null = false;
784
288
            _high_value = TYPE_MIN;
785
288
            _low_value = TYPE_MAX;
786
18.4E
        } else {
787
18.4E
            set_empty_value_range();
788
18.4E
        }
789
270
    } else {
790
51
        if (contain_null() && range.contain_null()) {
791
            // if both is_whole_range to keep the same, else set_contain_null
792
6
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
793
5
                set_contain_null(true);
794
5
            }
795
46
        } else {
796
46
            static_cast<void>(add_range(range._high_op, range._high_value));
797
46
            static_cast<void>(add_range(range._low_op, range._low_value));
798
46
        }
799
51
    }
800
321
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE42EE12intersectionERS2_
Line
Count
Source
744
155
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
745
    // 1. clear if column type not match
746
155
    if (_column_type != range._column_type) {
747
0
        set_empty_value_range();
748
0
    }
749
750
    // 2. clear if any range is empty
751
155
    if (is_empty_value_range() || range.is_empty_value_range()) {
752
0
        set_empty_value_range();
753
0
    }
754
755
155
    SetType result_values;
756
    // 3. fixed_value intersection, fixed value range do not contain null
757
155
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
758
103
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
759
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
760
0
                             range._fixed_values.begin(), range._fixed_values.end(),
761
0
                             std::inserter(result_values, result_values.begin()));
762
103
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
763
0
            IteratorType iter = _fixed_values.begin();
764
765
0
            while (iter != _fixed_values.end()) {
766
0
                if (range.is_in_range(*iter)) {
767
0
                    result_values.insert(*iter);
768
0
                }
769
0
                ++iter;
770
0
            }
771
103
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
772
103
            IteratorType iter = range._fixed_values.begin();
773
307
            while (iter != range._fixed_values.end()) {
774
204
                if (this->is_in_range(*iter)) {
775
204
                    result_values.insert(*iter);
776
204
                }
777
204
                ++iter;
778
204
            }
779
103
        }
780
781
103
        if (!result_values.empty()) {
782
103
            _fixed_values = std::move(result_values);
783
103
            _contain_null = false;
784
103
            _high_value = TYPE_MIN;
785
103
            _low_value = TYPE_MAX;
786
103
        } else {
787
0
            set_empty_value_range();
788
0
        }
789
103
    } else {
790
52
        if (contain_null() && range.contain_null()) {
791
            // if both is_whole_range to keep the same, else set_contain_null
792
9
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
793
9
                set_contain_null(true);
794
9
            }
795
43
        } else {
796
43
            static_cast<void>(add_range(range._high_op, range._high_value));
797
43
            static_cast<void>(add_range(range._low_op, range._low_value));
798
43
        }
799
52
    }
800
155
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE20EE12intersectionERS2_
Line
Count
Source
744
13
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
745
    // 1. clear if column type not match
746
13
    if (_column_type != range._column_type) {
747
0
        set_empty_value_range();
748
0
    }
749
750
    // 2. clear if any range is empty
751
13
    if (is_empty_value_range() || range.is_empty_value_range()) {
752
0
        set_empty_value_range();
753
0
    }
754
755
13
    SetType result_values;
756
    // 3. fixed_value intersection, fixed value range do not contain null
757
13
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
758
12
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
759
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
760
0
                             range._fixed_values.begin(), range._fixed_values.end(),
761
0
                             std::inserter(result_values, result_values.begin()));
762
12
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
763
0
            IteratorType iter = _fixed_values.begin();
764
765
0
            while (iter != _fixed_values.end()) {
766
0
                if (range.is_in_range(*iter)) {
767
0
                    result_values.insert(*iter);
768
0
                }
769
0
                ++iter;
770
0
            }
771
12
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
772
12
            IteratorType iter = range._fixed_values.begin();
773
48
            while (iter != range._fixed_values.end()) {
774
36
                if (this->is_in_range(*iter)) {
775
35
                    result_values.insert(*iter);
776
35
                }
777
36
                ++iter;
778
36
            }
779
12
        }
780
781
13
        if (!result_values.empty()) {
782
13
            _fixed_values = std::move(result_values);
783
13
            _contain_null = false;
784
13
            _high_value = TYPE_MIN;
785
13
            _low_value = TYPE_MAX;
786
18.4E
        } else {
787
18.4E
            set_empty_value_range();
788
18.4E
        }
789
12
    } else {
790
1
        if (contain_null() && range.contain_null()) {
791
            // if both is_whole_range to keep the same, else set_contain_null
792
0
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
793
0
                set_contain_null(true);
794
0
            }
795
1
        } else {
796
1
            static_cast<void>(add_range(range._high_op, range._high_value));
797
1
            static_cast<void>(add_range(range._low_op, range._low_value));
798
1
        }
799
1
    }
800
13
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE2EE12intersectionERS2_
Line
Count
Source
744
97
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
745
    // 1. clear if column type not match
746
97
    if (_column_type != range._column_type) {
747
0
        set_empty_value_range();
748
0
    }
749
750
    // 2. clear if any range is empty
751
97
    if (is_empty_value_range() || range.is_empty_value_range()) {
752
0
        set_empty_value_range();
753
0
    }
754
755
97
    SetType result_values;
756
    // 3. fixed_value intersection, fixed value range do not contain null
757
97
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
758
94
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
759
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
760
0
                             range._fixed_values.begin(), range._fixed_values.end(),
761
0
                             std::inserter(result_values, result_values.begin()));
762
94
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
763
0
            IteratorType iter = _fixed_values.begin();
764
765
0
            while (iter != _fixed_values.end()) {
766
0
                if (range.is_in_range(*iter)) {
767
0
                    result_values.insert(*iter);
768
0
                }
769
0
                ++iter;
770
0
            }
771
94
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
772
94
            IteratorType iter = range._fixed_values.begin();
773
192
            while (iter != range._fixed_values.end()) {
774
98
                if (this->is_in_range(*iter)) {
775
98
                    result_values.insert(*iter);
776
98
                }
777
98
                ++iter;
778
98
            }
779
94
        }
780
781
94
        if (!result_values.empty()) {
782
94
            _fixed_values = std::move(result_values);
783
94
            _contain_null = false;
784
94
            _high_value = TYPE_MIN;
785
94
            _low_value = TYPE_MAX;
786
94
        } else {
787
0
            set_empty_value_range();
788
0
        }
789
94
    } else {
790
3
        if (contain_null() && range.contain_null()) {
791
            // if both is_whole_range to keep the same, else set_contain_null
792
3
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
793
3
                set_contain_null(true);
794
3
            }
795
3
        } else {
796
0
            static_cast<void>(add_range(range._high_op, range._high_value));
797
0
            static_cast<void>(add_range(range._low_op, range._low_value));
798
0
        }
799
3
    }
800
97
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE28EE12intersectionERS2_
Line
Count
Source
744
56
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
745
    // 1. clear if column type not match
746
56
    if (_column_type != range._column_type) {
747
0
        set_empty_value_range();
748
0
    }
749
750
    // 2. clear if any range is empty
751
56
    if (is_empty_value_range() || range.is_empty_value_range()) {
752
1
        set_empty_value_range();
753
1
    }
754
755
56
    SetType result_values;
756
    // 3. fixed_value intersection, fixed value range do not contain null
757
56
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
758
39
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
759
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
760
0
                             range._fixed_values.begin(), range._fixed_values.end(),
761
0
                             std::inserter(result_values, result_values.begin()));
762
39
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
763
0
            IteratorType iter = _fixed_values.begin();
764
765
0
            while (iter != _fixed_values.end()) {
766
0
                if (range.is_in_range(*iter)) {
767
0
                    result_values.insert(*iter);
768
0
                }
769
0
                ++iter;
770
0
            }
771
39
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
772
39
            IteratorType iter = range._fixed_values.begin();
773
89
            while (iter != range._fixed_values.end()) {
774
52
                if (this->is_in_range(*iter)) {
775
52
                    result_values.insert(*iter);
776
52
                }
777
50
                ++iter;
778
50
            }
779
39
        }
780
781
41
        if (!result_values.empty()) {
782
41
            _fixed_values = std::move(result_values);
783
41
            _contain_null = false;
784
41
            _high_value = TYPE_MIN;
785
41
            _low_value = TYPE_MAX;
786
18.4E
        } else {
787
18.4E
            set_empty_value_range();
788
18.4E
        }
789
39
    } else {
790
17
        if (contain_null() && range.contain_null()) {
791
            // if both is_whole_range to keep the same, else set_contain_null
792
0
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
793
0
                set_contain_null(true);
794
0
            }
795
17
        } else {
796
17
            static_cast<void>(add_range(range._high_op, range._high_value));
797
17
            static_cast<void>(add_range(range._low_op, range._low_value));
798
17
        }
799
17
    }
800
56
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE29EE12intersectionERS2_
Line
Count
Source
744
103
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
745
    // 1. clear if column type not match
746
103
    if (_column_type != range._column_type) {
747
0
        set_empty_value_range();
748
0
    }
749
750
    // 2. clear if any range is empty
751
103
    if (is_empty_value_range() || range.is_empty_value_range()) {
752
0
        set_empty_value_range();
753
0
    }
754
755
103
    SetType result_values;
756
    // 3. fixed_value intersection, fixed value range do not contain null
757
103
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
758
99
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
759
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
760
0
                             range._fixed_values.begin(), range._fixed_values.end(),
761
0
                             std::inserter(result_values, result_values.begin()));
762
99
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
763
0
            IteratorType iter = _fixed_values.begin();
764
765
0
            while (iter != _fixed_values.end()) {
766
0
                if (range.is_in_range(*iter)) {
767
0
                    result_values.insert(*iter);
768
0
                }
769
0
                ++iter;
770
0
            }
771
99
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
772
98
            IteratorType iter = range._fixed_values.begin();
773
217
            while (iter != range._fixed_values.end()) {
774
120
                if (this->is_in_range(*iter)) {
775
120
                    result_values.insert(*iter);
776
120
                }
777
119
                ++iter;
778
119
            }
779
98
        }
780
781
99
        if (!result_values.empty()) {
782
99
            _fixed_values = std::move(result_values);
783
99
            _contain_null = false;
784
99
            _high_value = TYPE_MIN;
785
99
            _low_value = TYPE_MAX;
786
99
        } else {
787
0
            set_empty_value_range();
788
0
        }
789
99
    } else {
790
4
        if (contain_null() && range.contain_null()) {
791
            // if both is_whole_range to keep the same, else set_contain_null
792
2
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
793
2
                set_contain_null(true);
794
2
            }
795
2
        } else {
796
2
            static_cast<void>(add_range(range._high_op, range._high_value));
797
2
            static_cast<void>(add_range(range._low_op, range._low_value));
798
2
        }
799
4
    }
800
103
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE30EE12intersectionERS2_
Line
Count
Source
744
130
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
745
    // 1. clear if column type not match
746
130
    if (_column_type != range._column_type) {
747
0
        set_empty_value_range();
748
0
    }
749
750
    // 2. clear if any range is empty
751
130
    if (is_empty_value_range() || range.is_empty_value_range()) {
752
0
        set_empty_value_range();
753
0
    }
754
755
130
    SetType result_values;
756
    // 3. fixed_value intersection, fixed value range do not contain null
757
130
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
758
125
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
759
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
760
0
                             range._fixed_values.begin(), range._fixed_values.end(),
761
0
                             std::inserter(result_values, result_values.begin()));
762
125
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
763
0
            IteratorType iter = _fixed_values.begin();
764
765
0
            while (iter != _fixed_values.end()) {
766
0
                if (range.is_in_range(*iter)) {
767
0
                    result_values.insert(*iter);
768
0
                }
769
0
                ++iter;
770
0
            }
771
126
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
772
125
            IteratorType iter = range._fixed_values.begin();
773
261
            while (iter != range._fixed_values.end()) {
774
140
                if (this->is_in_range(*iter)) {
775
140
                    result_values.insert(*iter);
776
140
                }
777
136
                ++iter;
778
136
            }
779
125
        }
780
781
132
        if (!result_values.empty()) {
782
132
            _fixed_values = std::move(result_values);
783
132
            _contain_null = false;
784
132
            _high_value = TYPE_MIN;
785
132
            _low_value = TYPE_MAX;
786
18.4E
        } else {
787
18.4E
            set_empty_value_range();
788
18.4E
        }
789
125
    } else {
790
5
        if (contain_null() && range.contain_null()) {
791
            // if both is_whole_range to keep the same, else set_contain_null
792
0
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
793
0
                set_contain_null(true);
794
0
            }
795
5
        } else {
796
5
            static_cast<void>(add_range(range._high_op, range._high_value));
797
5
            static_cast<void>(add_range(range._low_op, range._low_value));
798
5
        }
799
5
    }
800
130
}
_ZN5doris16ColumnValueRangeILNS_13PrimitiveTypeE35EE12intersectionERS2_
Line
Count
Source
744
59
void ColumnValueRange<primitive_type>::intersection(ColumnValueRange<primitive_type>& range) {
745
    // 1. clear if column type not match
746
59
    if (_column_type != range._column_type) {
747
0
        set_empty_value_range();
748
0
    }
749
750
    // 2. clear if any range is empty
751
59
    if (is_empty_value_range() || range.is_empty_value_range()) {
752
0
        set_empty_value_range();
753
0
    }
754
755
59
    SetType result_values;
756
    // 3. fixed_value intersection, fixed value range do not contain null
757
59
    if (is_fixed_value_range() || range.is_fixed_value_range()) {
758
41
        if (is_fixed_value_range() && range.is_fixed_value_range()) {
759
0
            set_intersection(_fixed_values.begin(), _fixed_values.end(),
760
0
                             range._fixed_values.begin(), range._fixed_values.end(),
761
0
                             std::inserter(result_values, result_values.begin()));
762
41
        } else if (is_fixed_value_range() && !range.is_fixed_value_range()) {
763
0
            IteratorType iter = _fixed_values.begin();
764
765
0
            while (iter != _fixed_values.end()) {
766
0
                if (range.is_in_range(*iter)) {
767
0
                    result_values.insert(*iter);
768
0
                }
769
0
                ++iter;
770
0
            }
771
41
        } else if (!is_fixed_value_range() && range.is_fixed_value_range()) {
772
41
            IteratorType iter = range._fixed_values.begin();
773
88
            while (iter != range._fixed_values.end()) {
774
48
                if (this->is_in_range(*iter)) {
775
48
                    result_values.insert(*iter);
776
48
                }
777
47
                ++iter;
778
47
            }
779
41
        }
780
781
42
        if (!result_values.empty()) {
782
42
            _fixed_values = std::move(result_values);
783
42
            _contain_null = false;
784
42
            _high_value = TYPE_MIN;
785
42
            _low_value = TYPE_MAX;
786
18.4E
        } else {
787
18.4E
            set_empty_value_range();
788
18.4E
        }
789
41
    } else {
790
18
        if (contain_null() && range.contain_null()) {
791
            // if both is_whole_range to keep the same, else set_contain_null
792
1
            if (!is_whole_value_range() || !range.is_whole_value_range()) {
793
1
                set_contain_null(true);
794
1
            }
795
17
        } else {
796
17
            static_cast<void>(add_range(range._high_op, range._high_value));
797
17
            static_cast<void>(add_range(range._low_op, range._low_value));
798
17
        }
799
18
    }
800
59
}
801
802
/// Extend the accumulated scan key pairs (_begin_scan_keys / _end_scan_keys) by appending
803
/// one more key column's ColumnValueRange.
804
///
805
/// Called once per key column in schema order by _build_key_ranges_and_filters().
806
/// The function handles two kinds of ColumnValueRange:
807
///   (A) Fixed values  — from IN / = predicates  (begin == end for each value, point lookup)
808
///   (B) Scope range   — from > / >= / < / <= predicates  (begin = min, end = max)
809
///
810
/// ======== Example 1: Two fixed-value columns (IN + =) ========
811
/// Table t(k1 INT, k2 INT, v INT), key columns = (k1, k2).
812
/// WHERE k1 IN (1, 2) AND k2 = 10
813
///
814
///   Call 1: extend_scan_key(k1's range {fixed_values={1,2}})
815
///     _begin_scan_keys was empty, so create one pair per fixed value:
816
///       _begin = [(1), (2)]    _end = [(1), (2)]    include=[true, true]
817
///
818
///   Call 2: extend_scan_key(k2's range {fixed_values={10}})
819
///     _begin is non-empty, so do Cartesian product (existing keys × new fixed values):
820
///       _begin = [(1,10), (2,10)]    _end = [(1,10), (2,10)]    include=[true, true]
821
///
822
/// ======== Example 2: Fixed + range (IN + between) ========
823
/// WHERE k1 IN (1, 2) AND k2 >= 5 AND k2 < 10
824
///
825
///   Call 1: extend_scan_key(k1's range {fixed_values={1,2}})
826
///       _begin = [(1), (2)]    _end = [(1), (2)]
827
///
828
///   Call 2: extend_scan_key(k2's range {scope [5, 10)})
829
///     k2 is a scope range, so append min=5 to all begin keys, max=10 to all end keys:
830
///       _begin = [(1,5), (2,5)]    _end = [(1,10), (2,10)]
831
///       _begin_include = true (>=)    _end_include = false (<)
832
///     Set _has_range_value = true → no further columns can be appended.
833
///
834
/// ======== Example 3: Single range column ========
835
/// WHERE k1 >= 100 AND k1 <= 200
836
///
837
///   Call 1: extend_scan_key(k1's range {scope [100, 200]})
838
///     _begin was empty, so create one pair:
839
///       _begin = [(100)]    _end = [(200)]    include=[true, true]
840
///     Set _has_range_value = true.
841
///
842
/// ======== Example 4: Too many fixed values (exceeds max_scan_key_num) ========
843
/// WHERE k1 IN (1, 2, ..., 10000) — exceeds limit
844
///
845
///   If is_range_value_convertible(): convert fixed set {1..10000} to scope [1, 10000],
846
///   then extend as a range (same as Example 3), and set *exact_value = false
847
///   (the predicate must be kept for residual filtering).
848
///
849
///   If NOT convertible (e.g. BOOLEAN/NULL type): set *should_break = true, stop extending.
850
///
851
/// ======== Example 5: Range splitting (convert_to_avg_range_value) ========
852
/// WHERE k1 >= 1 AND k1 <= 100, with max_scan_key_num = 4
853
/// If k1 is an integer type that supports splitting:
854
///   convert_to_close_range: adjust to closed range [1, 100]
855
///   convert_to_avg_range_value: split into ~4 sub-ranges:
856
///       _begin = [(1), (26), (51), (76)]    _end = [(25), (50), (75), (100)]
857
///   Set _has_range_value = true.
858
///
859
/// @param range           [in/out] The next key column's ColumnValueRange (may be mutated
860
///                                  if fixed values must be converted to a range).
861
/// @param max_scan_key_num [in]    Upper limit on total number of scan key pairs.
862
/// @param exact_value      [out]   Set to true if the column's predicate is fully captured
863
///                                  by scan keys (can be erased from residual filters).
864
/// @param eos              [out]   Set to true if the range is provably empty.
865
/// @param should_break     [out]   Set to true if extending must stop (un-convertible overflow).
866
template <PrimitiveType primitive_type>
867
Status OlapScanKeys::extend_scan_key(ColumnValueRange<primitive_type>& range,
868
                                     int32_t max_scan_key_num, bool* exact_value, bool* eos,
869
323k
                                     bool* should_break) {
870
323k
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
871
872
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
873
    //    clear all accumulated keys — no rows can match.
874
323k
    if (range.is_empty_value_range()) {
875
0
        _begin_scan_keys.clear();
876
0
        _end_scan_keys.clear();
877
0
        return Status::OK();
878
0
    }
879
880
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
881
    //    because the begin/end keys would have different semantics per pair.
882
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
883
323k
    if (_has_range_value) {
884
0
        return Status::OK();
885
0
    }
886
887
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
888
    //    Cartesian product would be too large.
889
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
890
    //      set *exact_value = false (keep predicate as residual filter).
891
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
892
323k
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
893
323k
    if (range.is_fixed_value_range()) {
894
155k
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
895
55
            if (range.is_range_value_convertible()) {
896
54
                range.convert_to_range_value();
897
54
                *exact_value = false;
898
54
            } else {
899
1
                *should_break = true;
900
1
                return Status::OK();
901
1
            }
902
55
        }
903
168k
    } else {
904
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
905
        //    range on a splittable integer type, try to split [low, high] into multiple
906
        //    sub-ranges for parallel / pipelined scanning.
907
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
908
168k
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
909
168k
            !range.is_reject_split_type()) {
910
94.1k
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
911
94.1k
                                                 _end_include);
912
913
94.1k
            if (!(*eos) &&
914
94.3k
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
915
94.3k
                                                 _end_include, max_scan_key_num)) {
916
93.7k
                _has_range_value = true;
917
93.7k
            }
918
94.1k
            return Status::OK();
919
94.1k
        }
920
168k
    }
921
922
    // ====================================================================
923
    // 5. Actually extend scan keys with this column's values.
924
    // ====================================================================
925
926
229k
    if (range.is_fixed_value_range()) {
927
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
928
155k
        if (_begin_scan_keys.empty()) {
929
            // First column: create one key pair per fixed value.
930
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
931
53.9k
            auto fixed_value_set = range.get_fixed_value_set();
932
53.9k
            ConstIterator iter = fixed_value_set.begin();
933
934
109k
            for (; iter != fixed_value_set.end(); ++iter) {
935
55.5k
                _begin_scan_keys.emplace_back();
936
55.5k
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
937
55.5k
                _end_scan_keys.emplace_back();
938
55.5k
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
55.5k
            }
940
941
53.9k
            if (range.contain_null()) {
942
0
                _begin_scan_keys.emplace_back();
943
0
                _begin_scan_keys.back().add_null();
944
0
                _end_scan_keys.emplace_back();
945
0
                _end_scan_keys.back().add_null();
946
0
            }
947
101k
        } else {
948
            // Subsequent column: Cartesian product of existing keys × new fixed values.
949
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
950
            //     → [(1,10),(1,20),(2,10),(2,20)]
951
101k
            auto fixed_value_set = range.get_fixed_value_set();
952
101k
            size_t original_key_range_size = _begin_scan_keys.size();
953
954
203k
            for (int i = 0; i < original_key_range_size; ++i) {
955
101k
                OlapTuple start_base_key_range = _begin_scan_keys[i];
956
101k
                OlapTuple end_base_key_range = _end_scan_keys[i];
957
958
101k
                ConstIterator iter = fixed_value_set.begin();
959
960
203k
                for (; iter != fixed_value_set.end(); ++iter) {
961
                    // Reuse i-th slot for the first value, append new slots for the rest.
962
101k
                    if (iter == fixed_value_set.begin()) {
963
101k
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
964
101k
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
965
101k
                    } else {
966
468
                        _begin_scan_keys.push_back(start_base_key_range);
967
468
                        _begin_scan_keys.back().add_field(
968
468
                                Field::create_field<primitive_type>(*iter));
969
468
                        _end_scan_keys.push_back(end_base_key_range);
970
468
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
971
468
                    }
972
101k
                }
973
974
101k
                if (range.contain_null()) {
975
0
                    _begin_scan_keys.push_back(start_base_key_range);
976
0
                    _begin_scan_keys.back().add_null();
977
0
                    _end_scan_keys.push_back(end_base_key_range);
978
0
                    _end_scan_keys.back().add_null();
979
0
                }
980
101k
            }
981
101k
        }
982
983
        // Fixed values are always closed intervals (begin == end, point lookup).
984
155k
        _begin_include = true;
985
155k
        _end_include = true;
986
155k
    } else {
987
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
988
        // After this, no more columns can be appended (_has_range_value = true),
989
        // because the range semantics only apply to the last appended column.
990
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
991
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
992
        //     → begin_include=true, end_include=false
993
74.4k
        _has_range_value = true;
994
995
        // Special case: max < min means the range itself is empty,
996
        // but contain_null() is true, so only null values match this column.
997
74.4k
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
998
16
            CHECK(range.contain_null());
999
16
            if (_begin_scan_keys.empty()) {
1000
16
                _begin_scan_keys.emplace_back();
1001
16
                _begin_scan_keys.back().add_null();
1002
16
                _end_scan_keys.emplace_back();
1003
16
                _end_scan_keys.back().add_null();
1004
16
            } else {
1005
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1006
0
                    _begin_scan_keys[i].add_null();
1007
0
                    _end_scan_keys[i].add_null();
1008
0
                }
1009
0
            }
1010
74.4k
        } else if (_begin_scan_keys.empty()) {
1011
            // First column as a range:
1012
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1013
23.0k
            _begin_scan_keys.emplace_back();
1014
23.0k
            if (range.contain_null()) {
1015
12.9k
                _begin_scan_keys.back().add_null();
1016
12.9k
            } else {
1017
10.0k
                _begin_scan_keys.back().add_field(
1018
10.0k
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1019
10.0k
            }
1020
23.0k
            _end_scan_keys.emplace_back();
1021
23.0k
            _end_scan_keys.back().add_field(
1022
23.0k
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1023
51.4k
        } else {
1024
            // Subsequent column as a range: append min/max to every existing key pair.
1025
106k
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1026
55.2k
                if (range.contain_null()) {
1027
2.20k
                    _begin_scan_keys[i].add_null();
1028
53.0k
                } else {
1029
53.0k
                    _begin_scan_keys[i].add_field(
1030
53.0k
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1031
53.0k
                }
1032
55.2k
            }
1033
1034
106k
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1035
55.2k
                _end_scan_keys[i].add_field(
1036
55.2k
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1037
55.2k
            }
1038
51.4k
        }
1039
74.4k
        _begin_include = range.is_begin_include();
1040
74.4k
        _end_include = range.is_end_include();
1041
74.4k
    }
1042
1043
229k
    return Status::OK();
1044
323k
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE3EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
869
1.84k
                                     bool* should_break) {
870
1.84k
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
871
872
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
873
    //    clear all accumulated keys — no rows can match.
874
1.84k
    if (range.is_empty_value_range()) {
875
0
        _begin_scan_keys.clear();
876
0
        _end_scan_keys.clear();
877
0
        return Status::OK();
878
0
    }
879
880
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
881
    //    because the begin/end keys would have different semantics per pair.
882
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
883
1.84k
    if (_has_range_value) {
884
0
        return Status::OK();
885
0
    }
886
887
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
888
    //    Cartesian product would be too large.
889
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
890
    //      set *exact_value = false (keep predicate as residual filter).
891
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
892
1.84k
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
893
1.84k
    if (range.is_fixed_value_range()) {
894
13
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
895
0
            if (range.is_range_value_convertible()) {
896
0
                range.convert_to_range_value();
897
0
                *exact_value = false;
898
0
            } else {
899
0
                *should_break = true;
900
0
                return Status::OK();
901
0
            }
902
0
        }
903
1.83k
    } else {
904
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
905
        //    range on a splittable integer type, try to split [low, high] into multiple
906
        //    sub-ranges for parallel / pipelined scanning.
907
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
908
1.83k
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
909
1.83k
            !range.is_reject_split_type()) {
910
1.82k
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
911
1.82k
                                                 _end_include);
912
913
1.82k
            if (!(*eos) &&
914
1.82k
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
915
1.84k
                                                 _end_include, max_scan_key_num)) {
916
1.84k
                _has_range_value = true;
917
1.84k
            }
918
1.82k
            return Status::OK();
919
1.82k
        }
920
1.83k
    }
921
922
    // ====================================================================
923
    // 5. Actually extend scan keys with this column's values.
924
    // ====================================================================
925
926
22
    if (range.is_fixed_value_range()) {
927
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
928
13
        if (_begin_scan_keys.empty()) {
929
            // First column: create one key pair per fixed value.
930
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
931
13
            auto fixed_value_set = range.get_fixed_value_set();
932
13
            ConstIterator iter = fixed_value_set.begin();
933
934
28
            for (; iter != fixed_value_set.end(); ++iter) {
935
15
                _begin_scan_keys.emplace_back();
936
15
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
937
15
                _end_scan_keys.emplace_back();
938
15
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
15
            }
940
941
13
            if (range.contain_null()) {
942
0
                _begin_scan_keys.emplace_back();
943
0
                _begin_scan_keys.back().add_null();
944
0
                _end_scan_keys.emplace_back();
945
0
                _end_scan_keys.back().add_null();
946
0
            }
947
13
        } else {
948
            // Subsequent column: Cartesian product of existing keys × new fixed values.
949
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
950
            //     → [(1,10),(1,20),(2,10),(2,20)]
951
0
            auto fixed_value_set = range.get_fixed_value_set();
952
0
            size_t original_key_range_size = _begin_scan_keys.size();
953
954
0
            for (int i = 0; i < original_key_range_size; ++i) {
955
0
                OlapTuple start_base_key_range = _begin_scan_keys[i];
956
0
                OlapTuple end_base_key_range = _end_scan_keys[i];
957
958
0
                ConstIterator iter = fixed_value_set.begin();
959
960
0
                for (; iter != fixed_value_set.end(); ++iter) {
961
                    // Reuse i-th slot for the first value, append new slots for the rest.
962
0
                    if (iter == fixed_value_set.begin()) {
963
0
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
964
0
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
965
0
                    } else {
966
0
                        _begin_scan_keys.push_back(start_base_key_range);
967
0
                        _begin_scan_keys.back().add_field(
968
0
                                Field::create_field<primitive_type>(*iter));
969
0
                        _end_scan_keys.push_back(end_base_key_range);
970
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
971
0
                    }
972
0
                }
973
974
0
                if (range.contain_null()) {
975
0
                    _begin_scan_keys.push_back(start_base_key_range);
976
0
                    _begin_scan_keys.back().add_null();
977
0
                    _end_scan_keys.push_back(end_base_key_range);
978
0
                    _end_scan_keys.back().add_null();
979
0
                }
980
0
            }
981
0
        }
982
983
        // Fixed values are always closed intervals (begin == end, point lookup).
984
13
        _begin_include = true;
985
13
        _end_include = true;
986
13
    } else {
987
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
988
        // After this, no more columns can be appended (_has_range_value = true),
989
        // because the range semantics only apply to the last appended column.
990
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
991
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
992
        //     → begin_include=true, end_include=false
993
9
        _has_range_value = true;
994
995
        // Special case: max < min means the range itself is empty,
996
        // but contain_null() is true, so only null values match this column.
997
9
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
998
0
            CHECK(range.contain_null());
999
0
            if (_begin_scan_keys.empty()) {
1000
0
                _begin_scan_keys.emplace_back();
1001
0
                _begin_scan_keys.back().add_null();
1002
0
                _end_scan_keys.emplace_back();
1003
0
                _end_scan_keys.back().add_null();
1004
0
            } else {
1005
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1006
0
                    _begin_scan_keys[i].add_null();
1007
0
                    _end_scan_keys[i].add_null();
1008
0
                }
1009
0
            }
1010
9
        } else if (_begin_scan_keys.empty()) {
1011
            // First column as a range:
1012
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1013
1
            _begin_scan_keys.emplace_back();
1014
1
            if (range.contain_null()) {
1015
1
                _begin_scan_keys.back().add_null();
1016
1
            } else {
1017
0
                _begin_scan_keys.back().add_field(
1018
0
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1019
0
            }
1020
1
            _end_scan_keys.emplace_back();
1021
1
            _end_scan_keys.back().add_field(
1022
1
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1023
8
        } else {
1024
            // Subsequent column as a range: append min/max to every existing key pair.
1025
42
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1026
34
                if (range.contain_null()) {
1027
34
                    _begin_scan_keys[i].add_null();
1028
34
                } else {
1029
0
                    _begin_scan_keys[i].add_field(
1030
0
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1031
0
                }
1032
34
            }
1033
1034
42
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1035
34
                _end_scan_keys[i].add_field(
1036
34
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1037
34
            }
1038
8
        }
1039
9
        _begin_include = range.is_begin_include();
1040
9
        _end_include = range.is_end_include();
1041
9
    }
1042
1043
22
    return Status::OK();
1044
1.84k
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE4EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
869
126
                                     bool* should_break) {
870
126
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
871
872
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
873
    //    clear all accumulated keys — no rows can match.
874
126
    if (range.is_empty_value_range()) {
875
0
        _begin_scan_keys.clear();
876
0
        _end_scan_keys.clear();
877
0
        return Status::OK();
878
0
    }
879
880
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
881
    //    because the begin/end keys would have different semantics per pair.
882
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
883
126
    if (_has_range_value) {
884
0
        return Status::OK();
885
0
    }
886
887
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
888
    //    Cartesian product would be too large.
889
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
890
    //      set *exact_value = false (keep predicate as residual filter).
891
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
892
126
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
893
126
    if (range.is_fixed_value_range()) {
894
3
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
895
0
            if (range.is_range_value_convertible()) {
896
0
                range.convert_to_range_value();
897
0
                *exact_value = false;
898
0
            } else {
899
0
                *should_break = true;
900
0
                return Status::OK();
901
0
            }
902
0
        }
903
123
    } else {
904
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
905
        //    range on a splittable integer type, try to split [low, high] into multiple
906
        //    sub-ranges for parallel / pipelined scanning.
907
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
908
123
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
909
123
            !range.is_reject_split_type()) {
910
78
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
911
78
                                                 _end_include);
912
913
78
            if (!(*eos) &&
914
78
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
915
78
                                                 _end_include, max_scan_key_num)) {
916
78
                _has_range_value = true;
917
78
            }
918
78
            return Status::OK();
919
78
        }
920
123
    }
921
922
    // ====================================================================
923
    // 5. Actually extend scan keys with this column's values.
924
    // ====================================================================
925
926
48
    if (range.is_fixed_value_range()) {
927
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
928
3
        if (_begin_scan_keys.empty()) {
929
            // First column: create one key pair per fixed value.
930
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
931
2
            auto fixed_value_set = range.get_fixed_value_set();
932
2
            ConstIterator iter = fixed_value_set.begin();
933
934
5
            for (; iter != fixed_value_set.end(); ++iter) {
935
3
                _begin_scan_keys.emplace_back();
936
3
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
937
3
                _end_scan_keys.emplace_back();
938
3
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
3
            }
940
941
2
            if (range.contain_null()) {
942
0
                _begin_scan_keys.emplace_back();
943
0
                _begin_scan_keys.back().add_null();
944
0
                _end_scan_keys.emplace_back();
945
0
                _end_scan_keys.back().add_null();
946
0
            }
947
2
        } else {
948
            // Subsequent column: Cartesian product of existing keys × new fixed values.
949
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
950
            //     → [(1,10),(1,20),(2,10),(2,20)]
951
1
            auto fixed_value_set = range.get_fixed_value_set();
952
1
            size_t original_key_range_size = _begin_scan_keys.size();
953
954
3
            for (int i = 0; i < original_key_range_size; ++i) {
955
2
                OlapTuple start_base_key_range = _begin_scan_keys[i];
956
2
                OlapTuple end_base_key_range = _end_scan_keys[i];
957
958
2
                ConstIterator iter = fixed_value_set.begin();
959
960
4
                for (; iter != fixed_value_set.end(); ++iter) {
961
                    // Reuse i-th slot for the first value, append new slots for the rest.
962
2
                    if (iter == fixed_value_set.begin()) {
963
2
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
964
2
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
965
2
                    } else {
966
0
                        _begin_scan_keys.push_back(start_base_key_range);
967
0
                        _begin_scan_keys.back().add_field(
968
0
                                Field::create_field<primitive_type>(*iter));
969
0
                        _end_scan_keys.push_back(end_base_key_range);
970
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
971
0
                    }
972
2
                }
973
974
2
                if (range.contain_null()) {
975
0
                    _begin_scan_keys.push_back(start_base_key_range);
976
0
                    _begin_scan_keys.back().add_null();
977
0
                    _end_scan_keys.push_back(end_base_key_range);
978
0
                    _end_scan_keys.back().add_null();
979
0
                }
980
2
            }
981
1
        }
982
983
        // Fixed values are always closed intervals (begin == end, point lookup).
984
3
        _begin_include = true;
985
3
        _end_include = true;
986
45
    } else {
987
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
988
        // After this, no more columns can be appended (_has_range_value = true),
989
        // because the range semantics only apply to the last appended column.
990
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
991
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
992
        //     → begin_include=true, end_include=false
993
45
        _has_range_value = true;
994
995
        // Special case: max < min means the range itself is empty,
996
        // but contain_null() is true, so only null values match this column.
997
45
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
998
0
            CHECK(range.contain_null());
999
0
            if (_begin_scan_keys.empty()) {
1000
0
                _begin_scan_keys.emplace_back();
1001
0
                _begin_scan_keys.back().add_null();
1002
0
                _end_scan_keys.emplace_back();
1003
0
                _end_scan_keys.back().add_null();
1004
0
            } else {
1005
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1006
0
                    _begin_scan_keys[i].add_null();
1007
0
                    _end_scan_keys[i].add_null();
1008
0
                }
1009
0
            }
1010
45
        } else if (_begin_scan_keys.empty()) {
1011
            // First column as a range:
1012
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1013
0
            _begin_scan_keys.emplace_back();
1014
0
            if (range.contain_null()) {
1015
0
                _begin_scan_keys.back().add_null();
1016
0
            } else {
1017
0
                _begin_scan_keys.back().add_field(
1018
0
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1019
0
            }
1020
0
            _end_scan_keys.emplace_back();
1021
0
            _end_scan_keys.back().add_field(
1022
0
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1023
45
        } else {
1024
            // Subsequent column as a range: append min/max to every existing key pair.
1025
248
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1026
203
                if (range.contain_null()) {
1027
41
                    _begin_scan_keys[i].add_null();
1028
162
                } else {
1029
162
                    _begin_scan_keys[i].add_field(
1030
162
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1031
162
                }
1032
203
            }
1033
1034
248
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1035
203
                _end_scan_keys[i].add_field(
1036
203
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1037
203
            }
1038
45
        }
1039
45
        _begin_include = range.is_begin_include();
1040
45
        _end_include = range.is_end_include();
1041
45
    }
1042
1043
48
    return Status::OK();
1044
126
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE5EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
869
63.4k
                                     bool* should_break) {
870
63.4k
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
871
872
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
873
    //    clear all accumulated keys — no rows can match.
874
63.4k
    if (range.is_empty_value_range()) {
875
0
        _begin_scan_keys.clear();
876
0
        _end_scan_keys.clear();
877
0
        return Status::OK();
878
0
    }
879
880
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
881
    //    because the begin/end keys would have different semantics per pair.
882
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
883
63.4k
    if (_has_range_value) {
884
0
        return Status::OK();
885
0
    }
886
887
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
888
    //    Cartesian product would be too large.
889
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
890
    //      set *exact_value = false (keep predicate as residual filter).
891
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
892
18.4E
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
893
63.4k
    if (range.is_fixed_value_range()) {
894
2.26k
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
895
53
            if (range.is_range_value_convertible()) {
896
53
                range.convert_to_range_value();
897
53
                *exact_value = false;
898
53
            } else {
899
0
                *should_break = true;
900
0
                return Status::OK();
901
0
            }
902
53
        }
903
61.1k
    } else {
904
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
905
        //    range on a splittable integer type, try to split [low, high] into multiple
906
        //    sub-ranges for parallel / pipelined scanning.
907
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
908
62.0k
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
909
61.4k
            !range.is_reject_split_type()) {
910
61.4k
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
911
61.4k
                                                 _end_include);
912
913
61.4k
            if (!(*eos) &&
914
61.5k
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
915
61.5k
                                                 _end_include, max_scan_key_num)) {
916
61.3k
                _has_range_value = true;
917
61.3k
            }
918
61.4k
            return Status::OK();
919
61.4k
        }
920
61.1k
    }
921
922
    // ====================================================================
923
    // 5. Actually extend scan keys with this column's values.
924
    // ====================================================================
925
926
2.21k
    if (range.is_fixed_value_range()) {
927
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
928
2.21k
        if (_begin_scan_keys.empty()) {
929
            // First column: create one key pair per fixed value.
930
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
931
2.17k
            auto fixed_value_set = range.get_fixed_value_set();
932
2.17k
            ConstIterator iter = fixed_value_set.begin();
933
934
5.17k
            for (; iter != fixed_value_set.end(); ++iter) {
935
3.00k
                _begin_scan_keys.emplace_back();
936
3.00k
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
937
3.00k
                _end_scan_keys.emplace_back();
938
3.00k
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
3.00k
            }
940
941
2.17k
            if (range.contain_null()) {
942
0
                _begin_scan_keys.emplace_back();
943
0
                _begin_scan_keys.back().add_null();
944
0
                _end_scan_keys.emplace_back();
945
0
                _end_scan_keys.back().add_null();
946
0
            }
947
2.17k
        } else {
948
            // Subsequent column: Cartesian product of existing keys × new fixed values.
949
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
950
            //     → [(1,10),(1,20),(2,10),(2,20)]
951
41
            auto fixed_value_set = range.get_fixed_value_set();
952
41
            size_t original_key_range_size = _begin_scan_keys.size();
953
954
88
            for (int i = 0; i < original_key_range_size; ++i) {
955
47
                OlapTuple start_base_key_range = _begin_scan_keys[i];
956
47
                OlapTuple end_base_key_range = _end_scan_keys[i];
957
958
47
                ConstIterator iter = fixed_value_set.begin();
959
960
95
                for (; iter != fixed_value_set.end(); ++iter) {
961
                    // Reuse i-th slot for the first value, append new slots for the rest.
962
48
                    if (iter == fixed_value_set.begin()) {
963
48
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
964
48
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
965
48
                    } else {
966
0
                        _begin_scan_keys.push_back(start_base_key_range);
967
0
                        _begin_scan_keys.back().add_field(
968
0
                                Field::create_field<primitive_type>(*iter));
969
0
                        _end_scan_keys.push_back(end_base_key_range);
970
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
971
0
                    }
972
48
                }
973
974
47
                if (range.contain_null()) {
975
0
                    _begin_scan_keys.push_back(start_base_key_range);
976
0
                    _begin_scan_keys.back().add_null();
977
0
                    _end_scan_keys.push_back(end_base_key_range);
978
0
                    _end_scan_keys.back().add_null();
979
0
                }
980
47
            }
981
41
        }
982
983
        // Fixed values are always closed intervals (begin == end, point lookup).
984
2.21k
        _begin_include = true;
985
2.21k
        _end_include = true;
986
18.4E
    } else {
987
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
988
        // After this, no more columns can be appended (_has_range_value = true),
989
        // because the range semantics only apply to the last appended column.
990
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
991
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
992
        //     → begin_include=true, end_include=false
993
18.4E
        _has_range_value = true;
994
995
        // Special case: max < min means the range itself is empty,
996
        // but contain_null() is true, so only null values match this column.
997
18.4E
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
998
0
            CHECK(range.contain_null());
999
0
            if (_begin_scan_keys.empty()) {
1000
0
                _begin_scan_keys.emplace_back();
1001
0
                _begin_scan_keys.back().add_null();
1002
0
                _end_scan_keys.emplace_back();
1003
0
                _end_scan_keys.back().add_null();
1004
0
            } else {
1005
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1006
0
                    _begin_scan_keys[i].add_null();
1007
0
                    _end_scan_keys[i].add_null();
1008
0
                }
1009
0
            }
1010
18.4E
        } else if (_begin_scan_keys.empty()) {
1011
            // First column as a range:
1012
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1013
178
            _begin_scan_keys.emplace_back();
1014
178
            if (range.contain_null()) {
1015
46
                _begin_scan_keys.back().add_null();
1016
132
            } else {
1017
132
                _begin_scan_keys.back().add_field(
1018
132
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1019
132
            }
1020
178
            _end_scan_keys.emplace_back();
1021
178
            _end_scan_keys.back().add_field(
1022
178
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1023
18.4E
        } else {
1024
            // Subsequent column as a range: append min/max to every existing key pair.
1025
18.4E
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1026
1.93k
                if (range.contain_null()) {
1027
465
                    _begin_scan_keys[i].add_null();
1028
1.47k
                } else {
1029
1.47k
                    _begin_scan_keys[i].add_field(
1030
1.47k
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1031
1.47k
                }
1032
1.93k
            }
1033
1034
18.4E
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1035
1.94k
                _end_scan_keys[i].add_field(
1036
1.94k
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1037
1.94k
            }
1038
18.4E
        }
1039
18.4E
        _begin_include = range.is_begin_include();
1040
18.4E
        _end_include = range.is_end_include();
1041
18.4E
    }
1042
1043
1.99k
    return Status::OK();
1044
63.4k
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE6EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
869
29.2k
                                     bool* should_break) {
870
29.2k
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
871
872
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
873
    //    clear all accumulated keys — no rows can match.
874
29.2k
    if (range.is_empty_value_range()) {
875
0
        _begin_scan_keys.clear();
876
0
        _end_scan_keys.clear();
877
0
        return Status::OK();
878
0
    }
879
880
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
881
    //    because the begin/end keys would have different semantics per pair.
882
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
883
29.2k
    if (_has_range_value) {
884
0
        return Status::OK();
885
0
    }
886
887
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
888
    //    Cartesian product would be too large.
889
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
890
    //      set *exact_value = false (keep predicate as residual filter).
891
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
892
29.2k
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
893
29.2k
    if (range.is_fixed_value_range()) {
894
530
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
895
0
            if (range.is_range_value_convertible()) {
896
0
                range.convert_to_range_value();
897
0
                *exact_value = false;
898
0
            } else {
899
0
                *should_break = true;
900
0
                return Status::OK();
901
0
            }
902
0
        }
903
28.7k
    } else {
904
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
905
        //    range on a splittable integer type, try to split [low, high] into multiple
906
        //    sub-ranges for parallel / pipelined scanning.
907
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
908
28.7k
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
909
28.7k
            !range.is_reject_split_type()) {
910
28.4k
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
911
28.4k
                                                 _end_include);
912
913
28.4k
            if (!(*eos) &&
914
28.4k
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
915
28.4k
                                                 _end_include, max_scan_key_num)) {
916
28.2k
                _has_range_value = true;
917
28.2k
            }
918
28.4k
            return Status::OK();
919
28.4k
        }
920
28.7k
    }
921
922
    // ====================================================================
923
    // 5. Actually extend scan keys with this column's values.
924
    // ====================================================================
925
926
807
    if (range.is_fixed_value_range()) {
927
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
928
530
        if (_begin_scan_keys.empty()) {
929
            // First column: create one key pair per fixed value.
930
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
931
530
            auto fixed_value_set = range.get_fixed_value_set();
932
530
            ConstIterator iter = fixed_value_set.begin();
933
934
1.37k
            for (; iter != fixed_value_set.end(); ++iter) {
935
840
                _begin_scan_keys.emplace_back();
936
840
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
937
840
                _end_scan_keys.emplace_back();
938
840
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
840
            }
940
941
530
            if (range.contain_null()) {
942
0
                _begin_scan_keys.emplace_back();
943
0
                _begin_scan_keys.back().add_null();
944
0
                _end_scan_keys.emplace_back();
945
0
                _end_scan_keys.back().add_null();
946
0
            }
947
18.4E
        } else {
948
            // Subsequent column: Cartesian product of existing keys × new fixed values.
949
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
950
            //     → [(1,10),(1,20),(2,10),(2,20)]
951
18.4E
            auto fixed_value_set = range.get_fixed_value_set();
952
18.4E
            size_t original_key_range_size = _begin_scan_keys.size();
953
954
18.4E
            for (int i = 0; i < original_key_range_size; ++i) {
955
0
                OlapTuple start_base_key_range = _begin_scan_keys[i];
956
0
                OlapTuple end_base_key_range = _end_scan_keys[i];
957
958
0
                ConstIterator iter = fixed_value_set.begin();
959
960
0
                for (; iter != fixed_value_set.end(); ++iter) {
961
                    // Reuse i-th slot for the first value, append new slots for the rest.
962
0
                    if (iter == fixed_value_set.begin()) {
963
0
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
964
0
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
965
0
                    } else {
966
0
                        _begin_scan_keys.push_back(start_base_key_range);
967
0
                        _begin_scan_keys.back().add_field(
968
0
                                Field::create_field<primitive_type>(*iter));
969
0
                        _end_scan_keys.push_back(end_base_key_range);
970
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
971
0
                    }
972
0
                }
973
974
0
                if (range.contain_null()) {
975
0
                    _begin_scan_keys.push_back(start_base_key_range);
976
0
                    _begin_scan_keys.back().add_null();
977
0
                    _end_scan_keys.push_back(end_base_key_range);
978
0
                    _end_scan_keys.back().add_null();
979
0
                }
980
0
            }
981
18.4E
        }
982
983
        // Fixed values are always closed intervals (begin == end, point lookup).
984
528
        _begin_include = true;
985
528
        _end_include = true;
986
528
    } else {
987
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
988
        // After this, no more columns can be appended (_has_range_value = true),
989
        // because the range semantics only apply to the last appended column.
990
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
991
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
992
        //     → begin_include=true, end_include=false
993
279
        _has_range_value = true;
994
995
        // Special case: max < min means the range itself is empty,
996
        // but contain_null() is true, so only null values match this column.
997
279
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
998
0
            CHECK(range.contain_null());
999
0
            if (_begin_scan_keys.empty()) {
1000
0
                _begin_scan_keys.emplace_back();
1001
0
                _begin_scan_keys.back().add_null();
1002
0
                _end_scan_keys.emplace_back();
1003
0
                _end_scan_keys.back().add_null();
1004
0
            } else {
1005
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1006
0
                    _begin_scan_keys[i].add_null();
1007
0
                    _end_scan_keys[i].add_null();
1008
0
                }
1009
0
            }
1010
279
        } else if (_begin_scan_keys.empty()) {
1011
            // First column as a range:
1012
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1013
22
            _begin_scan_keys.emplace_back();
1014
22
            if (range.contain_null()) {
1015
21
                _begin_scan_keys.back().add_null();
1016
21
            } else {
1017
1
                _begin_scan_keys.back().add_field(
1018
1
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1019
1
            }
1020
22
            _end_scan_keys.emplace_back();
1021
22
            _end_scan_keys.back().add_field(
1022
22
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1023
257
        } else {
1024
            // Subsequent column as a range: append min/max to every existing key pair.
1025
982
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1026
725
                if (range.contain_null()) {
1027
716
                    _begin_scan_keys[i].add_null();
1028
716
                } else {
1029
9
                    _begin_scan_keys[i].add_field(
1030
9
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1031
9
                }
1032
725
            }
1033
1034
983
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1035
726
                _end_scan_keys[i].add_field(
1036
726
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1037
726
            }
1038
257
        }
1039
279
        _begin_include = range.is_begin_include();
1040
279
        _end_include = range.is_end_include();
1041
279
    }
1042
1043
807
    return Status::OK();
1044
29.2k
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE7EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
869
4.39k
                                     bool* should_break) {
870
4.39k
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
871
872
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
873
    //    clear all accumulated keys — no rows can match.
874
4.39k
    if (range.is_empty_value_range()) {
875
0
        _begin_scan_keys.clear();
876
0
        _end_scan_keys.clear();
877
0
        return Status::OK();
878
0
    }
879
880
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
881
    //    because the begin/end keys would have different semantics per pair.
882
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
883
4.39k
    if (_has_range_value) {
884
0
        return Status::OK();
885
0
    }
886
887
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
888
    //    Cartesian product would be too large.
889
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
890
    //      set *exact_value = false (keep predicate as residual filter).
891
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
892
18.4E
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
893
4.39k
    if (range.is_fixed_value_range()) {
894
136
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
895
0
            if (range.is_range_value_convertible()) {
896
0
                range.convert_to_range_value();
897
0
                *exact_value = false;
898
0
            } else {
899
0
                *should_break = true;
900
0
                return Status::OK();
901
0
            }
902
0
        }
903
4.26k
    } else {
904
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
905
        //    range on a splittable integer type, try to split [low, high] into multiple
906
        //    sub-ranges for parallel / pipelined scanning.
907
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
908
4.36k
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
909
4.37k
            !range.is_reject_split_type()) {
910
0
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
911
0
                                                 _end_include);
912
913
0
            if (!(*eos) &&
914
0
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
915
0
                                                 _end_include, max_scan_key_num)) {
916
0
                _has_range_value = true;
917
0
            }
918
0
            return Status::OK();
919
0
        }
920
4.26k
    }
921
922
    // ====================================================================
923
    // 5. Actually extend scan keys with this column's values.
924
    // ====================================================================
925
926
4.39k
    if (range.is_fixed_value_range()) {
927
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
928
136
        if (_begin_scan_keys.empty()) {
929
            // First column: create one key pair per fixed value.
930
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
931
136
            auto fixed_value_set = range.get_fixed_value_set();
932
136
            ConstIterator iter = fixed_value_set.begin();
933
934
276
            for (; iter != fixed_value_set.end(); ++iter) {
935
140
                _begin_scan_keys.emplace_back();
936
140
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
937
140
                _end_scan_keys.emplace_back();
938
140
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
140
            }
940
941
136
            if (range.contain_null()) {
942
0
                _begin_scan_keys.emplace_back();
943
0
                _begin_scan_keys.back().add_null();
944
0
                _end_scan_keys.emplace_back();
945
0
                _end_scan_keys.back().add_null();
946
0
            }
947
136
        } else {
948
            // Subsequent column: Cartesian product of existing keys × new fixed values.
949
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
950
            //     → [(1,10),(1,20),(2,10),(2,20)]
951
0
            auto fixed_value_set = range.get_fixed_value_set();
952
0
            size_t original_key_range_size = _begin_scan_keys.size();
953
954
0
            for (int i = 0; i < original_key_range_size; ++i) {
955
0
                OlapTuple start_base_key_range = _begin_scan_keys[i];
956
0
                OlapTuple end_base_key_range = _end_scan_keys[i];
957
958
0
                ConstIterator iter = fixed_value_set.begin();
959
960
0
                for (; iter != fixed_value_set.end(); ++iter) {
961
                    // Reuse i-th slot for the first value, append new slots for the rest.
962
0
                    if (iter == fixed_value_set.begin()) {
963
0
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
964
0
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
965
0
                    } else {
966
0
                        _begin_scan_keys.push_back(start_base_key_range);
967
0
                        _begin_scan_keys.back().add_field(
968
0
                                Field::create_field<primitive_type>(*iter));
969
0
                        _end_scan_keys.push_back(end_base_key_range);
970
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
971
0
                    }
972
0
                }
973
974
0
                if (range.contain_null()) {
975
0
                    _begin_scan_keys.push_back(start_base_key_range);
976
0
                    _begin_scan_keys.back().add_null();
977
0
                    _end_scan_keys.push_back(end_base_key_range);
978
0
                    _end_scan_keys.back().add_null();
979
0
                }
980
0
            }
981
0
        }
982
983
        // Fixed values are always closed intervals (begin == end, point lookup).
984
136
        _begin_include = true;
985
136
        _end_include = true;
986
4.26k
    } else {
987
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
988
        // After this, no more columns can be appended (_has_range_value = true),
989
        // because the range semantics only apply to the last appended column.
990
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
991
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
992
        //     → begin_include=true, end_include=false
993
4.26k
        _has_range_value = true;
994
995
        // Special case: max < min means the range itself is empty,
996
        // but contain_null() is true, so only null values match this column.
997
4.26k
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
998
1
            CHECK(range.contain_null());
999
1
            if (_begin_scan_keys.empty()) {
1000
1
                _begin_scan_keys.emplace_back();
1001
1
                _begin_scan_keys.back().add_null();
1002
1
                _end_scan_keys.emplace_back();
1003
1
                _end_scan_keys.back().add_null();
1004
1
            } else {
1005
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1006
0
                    _begin_scan_keys[i].add_null();
1007
0
                    _end_scan_keys[i].add_null();
1008
0
                }
1009
0
            }
1010
4.36k
        } else if (_begin_scan_keys.empty()) {
1011
            // First column as a range:
1012
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1013
4.36k
            _begin_scan_keys.emplace_back();
1014
4.36k
            if (range.contain_null()) {
1015
166
                _begin_scan_keys.back().add_null();
1016
4.19k
            } else {
1017
4.19k
                _begin_scan_keys.back().add_field(
1018
4.19k
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1019
4.19k
            }
1020
4.36k
            _end_scan_keys.emplace_back();
1021
4.36k
            _end_scan_keys.back().add_field(
1022
4.36k
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1023
18.4E
        } else {
1024
            // Subsequent column as a range: append min/max to every existing key pair.
1025
18.4E
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1026
56
                if (range.contain_null()) {
1027
56
                    _begin_scan_keys[i].add_null();
1028
56
                } else {
1029
0
                    _begin_scan_keys[i].add_field(
1030
0
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1031
0
                }
1032
56
            }
1033
1034
18.4E
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1035
56
                _end_scan_keys[i].add_field(
1036
56
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1037
56
            }
1038
18.4E
        }
1039
4.26k
        _begin_include = range.is_begin_include();
1040
4.26k
        _end_include = range.is_end_include();
1041
4.26k
    }
1042
1043
4.39k
    return Status::OK();
1044
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
869
2
                                     bool* should_break) {
870
2
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
871
872
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
873
    //    clear all accumulated keys — no rows can match.
874
2
    if (range.is_empty_value_range()) {
875
0
        _begin_scan_keys.clear();
876
0
        _end_scan_keys.clear();
877
0
        return Status::OK();
878
0
    }
879
880
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
881
    //    because the begin/end keys would have different semantics per pair.
882
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
883
2
    if (_has_range_value) {
884
0
        return Status::OK();
885
0
    }
886
887
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
888
    //    Cartesian product would be too large.
889
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
890
    //      set *exact_value = false (keep predicate as residual filter).
891
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
892
2
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
893
2
    if (range.is_fixed_value_range()) {
894
0
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
895
0
            if (range.is_range_value_convertible()) {
896
0
                range.convert_to_range_value();
897
0
                *exact_value = false;
898
0
            } else {
899
0
                *should_break = true;
900
0
                return Status::OK();
901
0
            }
902
0
        }
903
2
    } else {
904
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
905
        //    range on a splittable integer type, try to split [low, high] into multiple
906
        //    sub-ranges for parallel / pipelined scanning.
907
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
908
2
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
909
2
            !range.is_reject_split_type()) {
910
1
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
911
1
                                                 _end_include);
912
913
1
            if (!(*eos) &&
914
1
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
915
1
                                                 _end_include, max_scan_key_num)) {
916
1
                _has_range_value = true;
917
1
            }
918
1
            return Status::OK();
919
1
        }
920
2
    }
921
922
    // ====================================================================
923
    // 5. Actually extend scan keys with this column's values.
924
    // ====================================================================
925
926
1
    if (range.is_fixed_value_range()) {
927
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
928
0
        if (_begin_scan_keys.empty()) {
929
            // First column: create one key pair per fixed value.
930
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
931
0
            auto fixed_value_set = range.get_fixed_value_set();
932
0
            ConstIterator iter = fixed_value_set.begin();
933
934
0
            for (; iter != fixed_value_set.end(); ++iter) {
935
0
                _begin_scan_keys.emplace_back();
936
0
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
937
0
                _end_scan_keys.emplace_back();
938
0
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
0
            }
940
941
0
            if (range.contain_null()) {
942
0
                _begin_scan_keys.emplace_back();
943
0
                _begin_scan_keys.back().add_null();
944
0
                _end_scan_keys.emplace_back();
945
0
                _end_scan_keys.back().add_null();
946
0
            }
947
0
        } else {
948
            // Subsequent column: Cartesian product of existing keys × new fixed values.
949
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
950
            //     → [(1,10),(1,20),(2,10),(2,20)]
951
0
            auto fixed_value_set = range.get_fixed_value_set();
952
0
            size_t original_key_range_size = _begin_scan_keys.size();
953
954
0
            for (int i = 0; i < original_key_range_size; ++i) {
955
0
                OlapTuple start_base_key_range = _begin_scan_keys[i];
956
0
                OlapTuple end_base_key_range = _end_scan_keys[i];
957
958
0
                ConstIterator iter = fixed_value_set.begin();
959
960
0
                for (; iter != fixed_value_set.end(); ++iter) {
961
                    // Reuse i-th slot for the first value, append new slots for the rest.
962
0
                    if (iter == fixed_value_set.begin()) {
963
0
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
964
0
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
965
0
                    } else {
966
0
                        _begin_scan_keys.push_back(start_base_key_range);
967
0
                        _begin_scan_keys.back().add_field(
968
0
                                Field::create_field<primitive_type>(*iter));
969
0
                        _end_scan_keys.push_back(end_base_key_range);
970
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
971
0
                    }
972
0
                }
973
974
0
                if (range.contain_null()) {
975
0
                    _begin_scan_keys.push_back(start_base_key_range);
976
0
                    _begin_scan_keys.back().add_null();
977
0
                    _end_scan_keys.push_back(end_base_key_range);
978
0
                    _end_scan_keys.back().add_null();
979
0
                }
980
0
            }
981
0
        }
982
983
        // Fixed values are always closed intervals (begin == end, point lookup).
984
0
        _begin_include = true;
985
0
        _end_include = true;
986
1
    } else {
987
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
988
        // After this, no more columns can be appended (_has_range_value = true),
989
        // because the range semantics only apply to the last appended column.
990
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
991
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
992
        //     → begin_include=true, end_include=false
993
1
        _has_range_value = true;
994
995
        // Special case: max < min means the range itself is empty,
996
        // but contain_null() is true, so only null values match this column.
997
1
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
998
0
            CHECK(range.contain_null());
999
0
            if (_begin_scan_keys.empty()) {
1000
0
                _begin_scan_keys.emplace_back();
1001
0
                _begin_scan_keys.back().add_null();
1002
0
                _end_scan_keys.emplace_back();
1003
0
                _end_scan_keys.back().add_null();
1004
0
            } else {
1005
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1006
0
                    _begin_scan_keys[i].add_null();
1007
0
                    _end_scan_keys[i].add_null();
1008
0
                }
1009
0
            }
1010
1
        } else if (_begin_scan_keys.empty()) {
1011
            // First column as a range:
1012
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1013
0
            _begin_scan_keys.emplace_back();
1014
0
            if (range.contain_null()) {
1015
0
                _begin_scan_keys.back().add_null();
1016
0
            } else {
1017
0
                _begin_scan_keys.back().add_field(
1018
0
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1019
0
            }
1020
0
            _end_scan_keys.emplace_back();
1021
0
            _end_scan_keys.back().add_field(
1022
0
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1023
1
        } else {
1024
            // Subsequent column as a range: append min/max to every existing key pair.
1025
2
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1026
1
                if (range.contain_null()) {
1027
1
                    _begin_scan_keys[i].add_null();
1028
1
                } else {
1029
0
                    _begin_scan_keys[i].add_field(
1030
0
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1031
0
                }
1032
1
            }
1033
1034
2
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1035
1
                _end_scan_keys[i].add_field(
1036
1
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1037
1
            }
1038
1
        }
1039
1
        _begin_include = range.is_begin_include();
1040
1
        _end_include = range.is_end_include();
1041
1
    }
1042
1043
1
    return Status::OK();
1044
2
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE15EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
869
380
                                     bool* should_break) {
870
380
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
871
872
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
873
    //    clear all accumulated keys — no rows can match.
874
380
    if (range.is_empty_value_range()) {
875
0
        _begin_scan_keys.clear();
876
0
        _end_scan_keys.clear();
877
0
        return Status::OK();
878
0
    }
879
880
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
881
    //    because the begin/end keys would have different semantics per pair.
882
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
883
380
    if (_has_range_value) {
884
0
        return Status::OK();
885
0
    }
886
887
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
888
    //    Cartesian product would be too large.
889
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
890
    //      set *exact_value = false (keep predicate as residual filter).
891
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
892
380
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
893
380
    if (range.is_fixed_value_range()) {
894
13
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
895
1
            if (range.is_range_value_convertible()) {
896
1
                range.convert_to_range_value();
897
1
                *exact_value = false;
898
1
            } else {
899
0
                *should_break = true;
900
0
                return Status::OK();
901
0
            }
902
1
        }
903
367
    } else {
904
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
905
        //    range on a splittable integer type, try to split [low, high] into multiple
906
        //    sub-ranges for parallel / pipelined scanning.
907
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
908
367
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
909
367
            !range.is_reject_split_type()) {
910
0
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
911
0
                                                 _end_include);
912
913
0
            if (!(*eos) &&
914
0
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
915
0
                                                 _end_include, max_scan_key_num)) {
916
0
                _has_range_value = true;
917
0
            }
918
0
            return Status::OK();
919
0
        }
920
367
    }
921
922
    // ====================================================================
923
    // 5. Actually extend scan keys with this column's values.
924
    // ====================================================================
925
926
380
    if (range.is_fixed_value_range()) {
927
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
928
12
        if (_begin_scan_keys.empty()) {
929
            // First column: create one key pair per fixed value.
930
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
931
11
            auto fixed_value_set = range.get_fixed_value_set();
932
11
            ConstIterator iter = fixed_value_set.begin();
933
934
30
            for (; iter != fixed_value_set.end(); ++iter) {
935
19
                _begin_scan_keys.emplace_back();
936
19
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
937
19
                _end_scan_keys.emplace_back();
938
19
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
19
            }
940
941
11
            if (range.contain_null()) {
942
0
                _begin_scan_keys.emplace_back();
943
0
                _begin_scan_keys.back().add_null();
944
0
                _end_scan_keys.emplace_back();
945
0
                _end_scan_keys.back().add_null();
946
0
            }
947
11
        } else {
948
            // Subsequent column: Cartesian product of existing keys × new fixed values.
949
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
950
            //     → [(1,10),(1,20),(2,10),(2,20)]
951
1
            auto fixed_value_set = range.get_fixed_value_set();
952
1
            size_t original_key_range_size = _begin_scan_keys.size();
953
954
2
            for (int i = 0; i < original_key_range_size; ++i) {
955
1
                OlapTuple start_base_key_range = _begin_scan_keys[i];
956
1
                OlapTuple end_base_key_range = _end_scan_keys[i];
957
958
1
                ConstIterator iter = fixed_value_set.begin();
959
960
2
                for (; iter != fixed_value_set.end(); ++iter) {
961
                    // Reuse i-th slot for the first value, append new slots for the rest.
962
1
                    if (iter == fixed_value_set.begin()) {
963
1
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
964
1
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
965
1
                    } else {
966
0
                        _begin_scan_keys.push_back(start_base_key_range);
967
0
                        _begin_scan_keys.back().add_field(
968
0
                                Field::create_field<primitive_type>(*iter));
969
0
                        _end_scan_keys.push_back(end_base_key_range);
970
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
971
0
                    }
972
1
                }
973
974
1
                if (range.contain_null()) {
975
0
                    _begin_scan_keys.push_back(start_base_key_range);
976
0
                    _begin_scan_keys.back().add_null();
977
0
                    _end_scan_keys.push_back(end_base_key_range);
978
0
                    _end_scan_keys.back().add_null();
979
0
                }
980
1
            }
981
1
        }
982
983
        // Fixed values are always closed intervals (begin == end, point lookup).
984
12
        _begin_include = true;
985
12
        _end_include = true;
986
368
    } else {
987
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
988
        // After this, no more columns can be appended (_has_range_value = true),
989
        // because the range semantics only apply to the last appended column.
990
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
991
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
992
        //     → begin_include=true, end_include=false
993
368
        _has_range_value = true;
994
995
        // Special case: max < min means the range itself is empty,
996
        // but contain_null() is true, so only null values match this column.
997
368
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
998
1
            CHECK(range.contain_null());
999
1
            if (_begin_scan_keys.empty()) {
1000
1
                _begin_scan_keys.emplace_back();
1001
1
                _begin_scan_keys.back().add_null();
1002
1
                _end_scan_keys.emplace_back();
1003
1
                _end_scan_keys.back().add_null();
1004
1
            } else {
1005
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1006
0
                    _begin_scan_keys[i].add_null();
1007
0
                    _end_scan_keys[i].add_null();
1008
0
                }
1009
0
            }
1010
367
        } else if (_begin_scan_keys.empty()) {
1011
            // First column as a range:
1012
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1013
360
            _begin_scan_keys.emplace_back();
1014
360
            if (range.contain_null()) {
1015
167
                _begin_scan_keys.back().add_null();
1016
193
            } else {
1017
193
                _begin_scan_keys.back().add_field(
1018
193
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1019
193
            }
1020
360
            _end_scan_keys.emplace_back();
1021
360
            _end_scan_keys.back().add_field(
1022
360
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1023
360
        } else {
1024
            // Subsequent column as a range: append min/max to every existing key pair.
1025
105
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1026
98
                if (range.contain_null()) {
1027
0
                    _begin_scan_keys[i].add_null();
1028
98
                } else {
1029
98
                    _begin_scan_keys[i].add_field(
1030
98
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1031
98
                }
1032
98
            }
1033
1034
105
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1035
98
                _end_scan_keys[i].add_field(
1036
98
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1037
98
            }
1038
7
        }
1039
368
        _begin_include = range.is_begin_include();
1040
368
        _end_include = range.is_end_include();
1041
368
    }
1042
1043
380
    return Status::OK();
1044
380
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE10EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
869
211k
                                     bool* should_break) {
870
211k
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
871
872
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
873
    //    clear all accumulated keys — no rows can match.
874
211k
    if (range.is_empty_value_range()) {
875
0
        _begin_scan_keys.clear();
876
0
        _end_scan_keys.clear();
877
0
        return Status::OK();
878
0
    }
879
880
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
881
    //    because the begin/end keys would have different semantics per pair.
882
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
883
211k
    if (_has_range_value) {
884
0
        return Status::OK();
885
0
    }
886
887
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
888
    //    Cartesian product would be too large.
889
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
890
    //      set *exact_value = false (keep predicate as residual filter).
891
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
892
211k
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
893
211k
    if (range.is_fixed_value_range()) {
894
152k
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
895
0
            if (range.is_range_value_convertible()) {
896
0
                range.convert_to_range_value();
897
0
                *exact_value = false;
898
0
            } else {
899
0
                *should_break = true;
900
0
                return Status::OK();
901
0
            }
902
0
        }
903
152k
    } else {
904
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
905
        //    range on a splittable integer type, try to split [low, high] into multiple
906
        //    sub-ranges for parallel / pipelined scanning.
907
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
908
59.9k
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
909
59.9k
            !range.is_reject_split_type()) {
910
0
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
911
0
                                                 _end_include);
912
913
0
            if (!(*eos) &&
914
0
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
915
0
                                                 _end_include, max_scan_key_num)) {
916
0
                _has_range_value = true;
917
0
            }
918
0
            return Status::OK();
919
0
        }
920
59.9k
    }
921
922
    // ====================================================================
923
    // 5. Actually extend scan keys with this column's values.
924
    // ====================================================================
925
926
211k
    if (range.is_fixed_value_range()) {
927
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
928
151k
        if (_begin_scan_keys.empty()) {
929
            // First column: create one key pair per fixed value.
930
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
931
50.5k
            auto fixed_value_set = range.get_fixed_value_set();
932
50.5k
            ConstIterator iter = fixed_value_set.begin();
933
934
101k
            for (; iter != fixed_value_set.end(); ++iter) {
935
50.8k
                _begin_scan_keys.emplace_back();
936
50.8k
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
937
50.8k
                _end_scan_keys.emplace_back();
938
50.8k
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
50.8k
            }
940
941
50.5k
            if (range.contain_null()) {
942
0
                _begin_scan_keys.emplace_back();
943
0
                _begin_scan_keys.back().add_null();
944
0
                _end_scan_keys.emplace_back();
945
0
                _end_scan_keys.back().add_null();
946
0
            }
947
101k
        } else {
948
            // Subsequent column: Cartesian product of existing keys × new fixed values.
949
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
950
            //     → [(1,10),(1,20),(2,10),(2,20)]
951
101k
            auto fixed_value_set = range.get_fixed_value_set();
952
101k
            size_t original_key_range_size = _begin_scan_keys.size();
953
954
202k
            for (int i = 0; i < original_key_range_size; ++i) {
955
101k
                OlapTuple start_base_key_range = _begin_scan_keys[i];
956
101k
                OlapTuple end_base_key_range = _end_scan_keys[i];
957
958
101k
                ConstIterator iter = fixed_value_set.begin();
959
960
203k
                for (; iter != fixed_value_set.end(); ++iter) {
961
                    // Reuse i-th slot for the first value, append new slots for the rest.
962
101k
                    if (iter == fixed_value_set.begin()) {
963
101k
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
964
101k
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
965
101k
                    } else {
966
468
                        _begin_scan_keys.push_back(start_base_key_range);
967
468
                        _begin_scan_keys.back().add_field(
968
468
                                Field::create_field<primitive_type>(*iter));
969
468
                        _end_scan_keys.push_back(end_base_key_range);
970
468
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
971
468
                    }
972
101k
                }
973
974
101k
                if (range.contain_null()) {
975
0
                    _begin_scan_keys.push_back(start_base_key_range);
976
0
                    _begin_scan_keys.back().add_null();
977
0
                    _end_scan_keys.push_back(end_base_key_range);
978
0
                    _end_scan_keys.back().add_null();
979
0
                }
980
101k
            }
981
101k
        }
982
983
        // Fixed values are always closed intervals (begin == end, point lookup).
984
151k
        _begin_include = true;
985
151k
        _end_include = true;
986
151k
    } else {
987
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
988
        // After this, no more columns can be appended (_has_range_value = true),
989
        // because the range semantics only apply to the last appended column.
990
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
991
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
992
        //     → begin_include=true, end_include=false
993
60.0k
        _has_range_value = true;
994
995
        // Special case: max < min means the range itself is empty,
996
        // but contain_null() is true, so only null values match this column.
997
60.0k
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
998
1
            CHECK(range.contain_null());
999
1
            if (_begin_scan_keys.empty()) {
1000
1
                _begin_scan_keys.emplace_back();
1001
1
                _begin_scan_keys.back().add_null();
1002
1
                _end_scan_keys.emplace_back();
1003
1
                _end_scan_keys.back().add_null();
1004
1
            } else {
1005
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1006
0
                    _begin_scan_keys[i].add_null();
1007
0
                    _end_scan_keys[i].add_null();
1008
0
                }
1009
0
            }
1010
60.0k
        } else if (_begin_scan_keys.empty()) {
1011
            // First column as a range:
1012
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1013
8.56k
            _begin_scan_keys.emplace_back();
1014
8.56k
            if (range.contain_null()) {
1015
5.24k
                _begin_scan_keys.back().add_null();
1016
5.24k
            } else {
1017
3.32k
                _begin_scan_keys.back().add_field(
1018
3.32k
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1019
3.32k
            }
1020
8.56k
            _end_scan_keys.emplace_back();
1021
8.56k
            _end_scan_keys.back().add_field(
1022
8.56k
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1023
51.4k
        } else {
1024
            // Subsequent column as a range: append min/max to every existing key pair.
1025
103k
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1026
51.8k
                if (range.contain_null()) {
1027
655
                    _begin_scan_keys[i].add_null();
1028
51.1k
                } else {
1029
51.1k
                    _begin_scan_keys[i].add_field(
1030
51.1k
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1031
51.1k
                }
1032
51.8k
            }
1033
1034
103k
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1035
51.8k
                _end_scan_keys[i].add_field(
1036
51.8k
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1037
51.8k
            }
1038
51.4k
        }
1039
60.0k
        _begin_include = range.is_begin_include();
1040
60.0k
        _end_include = range.is_end_include();
1041
60.0k
    }
1042
1043
211k
    return Status::OK();
1044
211k
}
Unexecuted instantiation: _ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE23EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE11EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
869
37
                                     bool* should_break) {
870
37
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
871
872
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
873
    //    clear all accumulated keys — no rows can match.
874
37
    if (range.is_empty_value_range()) {
875
0
        _begin_scan_keys.clear();
876
0
        _end_scan_keys.clear();
877
0
        return Status::OK();
878
0
    }
879
880
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
881
    //    because the begin/end keys would have different semantics per pair.
882
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
883
37
    if (_has_range_value) {
884
0
        return Status::OK();
885
0
    }
886
887
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
888
    //    Cartesian product would be too large.
889
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
890
    //      set *exact_value = false (keep predicate as residual filter).
891
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
892
37
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
893
37
    if (range.is_fixed_value_range()) {
894
3
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
895
0
            if (range.is_range_value_convertible()) {
896
0
                range.convert_to_range_value();
897
0
                *exact_value = false;
898
0
            } else {
899
0
                *should_break = true;
900
0
                return Status::OK();
901
0
            }
902
0
        }
903
34
    } else {
904
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
905
        //    range on a splittable integer type, try to split [low, high] into multiple
906
        //    sub-ranges for parallel / pipelined scanning.
907
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
908
34
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
909
34
            !range.is_reject_split_type()) {
910
34
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
911
34
                                                 _end_include);
912
913
34
            if (!(*eos) &&
914
34
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
915
34
                                                 _end_include, max_scan_key_num)) {
916
34
                _has_range_value = true;
917
34
            }
918
34
            return Status::OK();
919
34
        }
920
34
    }
921
922
    // ====================================================================
923
    // 5. Actually extend scan keys with this column's values.
924
    // ====================================================================
925
926
3
    if (range.is_fixed_value_range()) {
927
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
928
3
        if (_begin_scan_keys.empty()) {
929
            // First column: create one key pair per fixed value.
930
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
931
3
            auto fixed_value_set = range.get_fixed_value_set();
932
3
            ConstIterator iter = fixed_value_set.begin();
933
934
10
            for (; iter != fixed_value_set.end(); ++iter) {
935
7
                _begin_scan_keys.emplace_back();
936
7
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
937
7
                _end_scan_keys.emplace_back();
938
7
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
7
            }
940
941
3
            if (range.contain_null()) {
942
0
                _begin_scan_keys.emplace_back();
943
0
                _begin_scan_keys.back().add_null();
944
0
                _end_scan_keys.emplace_back();
945
0
                _end_scan_keys.back().add_null();
946
0
            }
947
3
        } else {
948
            // Subsequent column: Cartesian product of existing keys × new fixed values.
949
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
950
            //     → [(1,10),(1,20),(2,10),(2,20)]
951
0
            auto fixed_value_set = range.get_fixed_value_set();
952
0
            size_t original_key_range_size = _begin_scan_keys.size();
953
954
0
            for (int i = 0; i < original_key_range_size; ++i) {
955
0
                OlapTuple start_base_key_range = _begin_scan_keys[i];
956
0
                OlapTuple end_base_key_range = _end_scan_keys[i];
957
958
0
                ConstIterator iter = fixed_value_set.begin();
959
960
0
                for (; iter != fixed_value_set.end(); ++iter) {
961
                    // Reuse i-th slot for the first value, append new slots for the rest.
962
0
                    if (iter == fixed_value_set.begin()) {
963
0
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
964
0
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
965
0
                    } else {
966
0
                        _begin_scan_keys.push_back(start_base_key_range);
967
0
                        _begin_scan_keys.back().add_field(
968
0
                                Field::create_field<primitive_type>(*iter));
969
0
                        _end_scan_keys.push_back(end_base_key_range);
970
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
971
0
                    }
972
0
                }
973
974
0
                if (range.contain_null()) {
975
0
                    _begin_scan_keys.push_back(start_base_key_range);
976
0
                    _begin_scan_keys.back().add_null();
977
0
                    _end_scan_keys.push_back(end_base_key_range);
978
0
                    _end_scan_keys.back().add_null();
979
0
                }
980
0
            }
981
0
        }
982
983
        // Fixed values are always closed intervals (begin == end, point lookup).
984
3
        _begin_include = true;
985
3
        _end_include = true;
986
3
    } else {
987
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
988
        // After this, no more columns can be appended (_has_range_value = true),
989
        // because the range semantics only apply to the last appended column.
990
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
991
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
992
        //     → begin_include=true, end_include=false
993
0
        _has_range_value = true;
994
995
        // Special case: max < min means the range itself is empty,
996
        // but contain_null() is true, so only null values match this column.
997
0
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
998
0
            CHECK(range.contain_null());
999
0
            if (_begin_scan_keys.empty()) {
1000
0
                _begin_scan_keys.emplace_back();
1001
0
                _begin_scan_keys.back().add_null();
1002
0
                _end_scan_keys.emplace_back();
1003
0
                _end_scan_keys.back().add_null();
1004
0
            } else {
1005
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1006
0
                    _begin_scan_keys[i].add_null();
1007
0
                    _end_scan_keys[i].add_null();
1008
0
                }
1009
0
            }
1010
0
        } else if (_begin_scan_keys.empty()) {
1011
            // First column as a range:
1012
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1013
0
            _begin_scan_keys.emplace_back();
1014
0
            if (range.contain_null()) {
1015
0
                _begin_scan_keys.back().add_null();
1016
0
            } else {
1017
0
                _begin_scan_keys.back().add_field(
1018
0
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1019
0
            }
1020
0
            _end_scan_keys.emplace_back();
1021
0
            _end_scan_keys.back().add_field(
1022
0
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1023
0
        } else {
1024
            // Subsequent column as a range: append min/max to every existing key pair.
1025
0
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1026
0
                if (range.contain_null()) {
1027
0
                    _begin_scan_keys[i].add_null();
1028
0
                } else {
1029
0
                    _begin_scan_keys[i].add_field(
1030
0
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1031
0
                }
1032
0
            }
1033
1034
0
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1035
0
                _end_scan_keys[i].add_field(
1036
0
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1037
0
            }
1038
0
        }
1039
0
        _begin_include = range.is_begin_include();
1040
0
        _end_include = range.is_end_include();
1041
0
    }
1042
1043
3
    return Status::OK();
1044
37
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE25EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
869
2.60k
                                     bool* should_break) {
870
2.60k
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
871
872
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
873
    //    clear all accumulated keys — no rows can match.
874
2.60k
    if (range.is_empty_value_range()) {
875
0
        _begin_scan_keys.clear();
876
0
        _end_scan_keys.clear();
877
0
        return Status::OK();
878
0
    }
879
880
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
881
    //    because the begin/end keys would have different semantics per pair.
882
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
883
2.60k
    if (_has_range_value) {
884
0
        return Status::OK();
885
0
    }
886
887
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
888
    //    Cartesian product would be too large.
889
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
890
    //      set *exact_value = false (keep predicate as residual filter).
891
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
892
2.60k
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
893
2.60k
    if (range.is_fixed_value_range()) {
894
226
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
895
0
            if (range.is_range_value_convertible()) {
896
0
                range.convert_to_range_value();
897
0
                *exact_value = false;
898
0
            } else {
899
0
                *should_break = true;
900
0
                return Status::OK();
901
0
            }
902
0
        }
903
2.38k
    } else {
904
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
905
        //    range on a splittable integer type, try to split [low, high] into multiple
906
        //    sub-ranges for parallel / pipelined scanning.
907
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
908
2.38k
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
909
2.38k
            !range.is_reject_split_type()) {
910
2.31k
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
911
2.31k
                                                 _end_include);
912
913
2.31k
            if (!(*eos) &&
914
2.31k
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
915
2.31k
                                                 _end_include, max_scan_key_num)) {
916
2.18k
                _has_range_value = true;
917
2.18k
            }
918
2.31k
            return Status::OK();
919
2.31k
        }
920
2.38k
    }
921
922
    // ====================================================================
923
    // 5. Actually extend scan keys with this column's values.
924
    // ====================================================================
925
926
294
    if (range.is_fixed_value_range()) {
927
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
928
226
        if (_begin_scan_keys.empty()) {
929
            // First column: create one key pair per fixed value.
930
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
931
225
            auto fixed_value_set = range.get_fixed_value_set();
932
225
            ConstIterator iter = fixed_value_set.begin();
933
934
483
            for (; iter != fixed_value_set.end(); ++iter) {
935
258
                _begin_scan_keys.emplace_back();
936
258
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
937
258
                _end_scan_keys.emplace_back();
938
258
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
258
            }
940
941
225
            if (range.contain_null()) {
942
0
                _begin_scan_keys.emplace_back();
943
0
                _begin_scan_keys.back().add_null();
944
0
                _end_scan_keys.emplace_back();
945
0
                _end_scan_keys.back().add_null();
946
0
            }
947
225
        } else {
948
            // Subsequent column: Cartesian product of existing keys × new fixed values.
949
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
950
            //     → [(1,10),(1,20),(2,10),(2,20)]
951
1
            auto fixed_value_set = range.get_fixed_value_set();
952
1
            size_t original_key_range_size = _begin_scan_keys.size();
953
954
3
            for (int i = 0; i < original_key_range_size; ++i) {
955
2
                OlapTuple start_base_key_range = _begin_scan_keys[i];
956
2
                OlapTuple end_base_key_range = _end_scan_keys[i];
957
958
2
                ConstIterator iter = fixed_value_set.begin();
959
960
4
                for (; iter != fixed_value_set.end(); ++iter) {
961
                    // Reuse i-th slot for the first value, append new slots for the rest.
962
2
                    if (iter == fixed_value_set.begin()) {
963
2
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
964
2
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
965
2
                    } else {
966
0
                        _begin_scan_keys.push_back(start_base_key_range);
967
0
                        _begin_scan_keys.back().add_field(
968
0
                                Field::create_field<primitive_type>(*iter));
969
0
                        _end_scan_keys.push_back(end_base_key_range);
970
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
971
0
                    }
972
2
                }
973
974
2
                if (range.contain_null()) {
975
0
                    _begin_scan_keys.push_back(start_base_key_range);
976
0
                    _begin_scan_keys.back().add_null();
977
0
                    _end_scan_keys.push_back(end_base_key_range);
978
0
                    _end_scan_keys.back().add_null();
979
0
                }
980
2
            }
981
1
        }
982
983
        // Fixed values are always closed intervals (begin == end, point lookup).
984
226
        _begin_include = true;
985
226
        _end_include = true;
986
226
    } else {
987
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
988
        // After this, no more columns can be appended (_has_range_value = true),
989
        // because the range semantics only apply to the last appended column.
990
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
991
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
992
        //     → begin_include=true, end_include=false
993
68
        _has_range_value = true;
994
995
        // Special case: max < min means the range itself is empty,
996
        // but contain_null() is true, so only null values match this column.
997
68
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
998
0
            CHECK(range.contain_null());
999
0
            if (_begin_scan_keys.empty()) {
1000
0
                _begin_scan_keys.emplace_back();
1001
0
                _begin_scan_keys.back().add_null();
1002
0
                _end_scan_keys.emplace_back();
1003
0
                _end_scan_keys.back().add_null();
1004
0
            } else {
1005
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1006
0
                    _begin_scan_keys[i].add_null();
1007
0
                    _end_scan_keys[i].add_null();
1008
0
                }
1009
0
            }
1010
68
        } else if (_begin_scan_keys.empty()) {
1011
            // First column as a range:
1012
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1013
0
            _begin_scan_keys.emplace_back();
1014
0
            if (range.contain_null()) {
1015
0
                _begin_scan_keys.back().add_null();
1016
0
            } else {
1017
0
                _begin_scan_keys.back().add_field(
1018
0
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1019
0
            }
1020
0
            _end_scan_keys.emplace_back();
1021
0
            _end_scan_keys.back().add_field(
1022
0
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1023
68
        } else {
1024
            // Subsequent column as a range: append min/max to every existing key pair.
1025
170
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1026
102
                if (range.contain_null()) {
1027
24
                    _begin_scan_keys[i].add_null();
1028
78
                } else {
1029
78
                    _begin_scan_keys[i].add_field(
1030
78
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1031
78
                }
1032
102
            }
1033
1034
169
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1035
101
                _end_scan_keys[i].add_field(
1036
101
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1037
101
            }
1038
68
        }
1039
68
        _begin_include = range.is_begin_include();
1040
68
        _end_include = range.is_end_include();
1041
68
    }
1042
1043
294
    return Status::OK();
1044
2.60k
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE12EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
869
42
                                     bool* should_break) {
870
42
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
871
872
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
873
    //    clear all accumulated keys — no rows can match.
874
42
    if (range.is_empty_value_range()) {
875
0
        _begin_scan_keys.clear();
876
0
        _end_scan_keys.clear();
877
0
        return Status::OK();
878
0
    }
879
880
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
881
    //    because the begin/end keys would have different semantics per pair.
882
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
883
42
    if (_has_range_value) {
884
0
        return Status::OK();
885
0
    }
886
887
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
888
    //    Cartesian product would be too large.
889
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
890
    //      set *exact_value = false (keep predicate as residual filter).
891
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
892
42
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
893
42
    if (range.is_fixed_value_range()) {
894
6
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
895
0
            if (range.is_range_value_convertible()) {
896
0
                range.convert_to_range_value();
897
0
                *exact_value = false;
898
0
            } else {
899
0
                *should_break = true;
900
0
                return Status::OK();
901
0
            }
902
0
        }
903
36
    } else {
904
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
905
        //    range on a splittable integer type, try to split [low, high] into multiple
906
        //    sub-ranges for parallel / pipelined scanning.
907
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
908
36
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
909
36
            !range.is_reject_split_type()) {
910
0
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
911
0
                                                 _end_include);
912
913
0
            if (!(*eos) &&
914
0
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
915
0
                                                 _end_include, max_scan_key_num)) {
916
0
                _has_range_value = true;
917
0
            }
918
0
            return Status::OK();
919
0
        }
920
36
    }
921
922
    // ====================================================================
923
    // 5. Actually extend scan keys with this column's values.
924
    // ====================================================================
925
926
42
    if (range.is_fixed_value_range()) {
927
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
928
6
        if (_begin_scan_keys.empty()) {
929
            // First column: create one key pair per fixed value.
930
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
931
6
            auto fixed_value_set = range.get_fixed_value_set();
932
6
            ConstIterator iter = fixed_value_set.begin();
933
934
20
            for (; iter != fixed_value_set.end(); ++iter) {
935
14
                _begin_scan_keys.emplace_back();
936
14
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
937
14
                _end_scan_keys.emplace_back();
938
14
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
14
            }
940
941
6
            if (range.contain_null()) {
942
0
                _begin_scan_keys.emplace_back();
943
0
                _begin_scan_keys.back().add_null();
944
0
                _end_scan_keys.emplace_back();
945
0
                _end_scan_keys.back().add_null();
946
0
            }
947
6
        } else {
948
            // Subsequent column: Cartesian product of existing keys × new fixed values.
949
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
950
            //     → [(1,10),(1,20),(2,10),(2,20)]
951
0
            auto fixed_value_set = range.get_fixed_value_set();
952
0
            size_t original_key_range_size = _begin_scan_keys.size();
953
954
0
            for (int i = 0; i < original_key_range_size; ++i) {
955
0
                OlapTuple start_base_key_range = _begin_scan_keys[i];
956
0
                OlapTuple end_base_key_range = _end_scan_keys[i];
957
958
0
                ConstIterator iter = fixed_value_set.begin();
959
960
0
                for (; iter != fixed_value_set.end(); ++iter) {
961
                    // Reuse i-th slot for the first value, append new slots for the rest.
962
0
                    if (iter == fixed_value_set.begin()) {
963
0
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
964
0
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
965
0
                    } else {
966
0
                        _begin_scan_keys.push_back(start_base_key_range);
967
0
                        _begin_scan_keys.back().add_field(
968
0
                                Field::create_field<primitive_type>(*iter));
969
0
                        _end_scan_keys.push_back(end_base_key_range);
970
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
971
0
                    }
972
0
                }
973
974
0
                if (range.contain_null()) {
975
0
                    _begin_scan_keys.push_back(start_base_key_range);
976
0
                    _begin_scan_keys.back().add_null();
977
0
                    _end_scan_keys.push_back(end_base_key_range);
978
0
                    _end_scan_keys.back().add_null();
979
0
                }
980
0
            }
981
0
        }
982
983
        // Fixed values are always closed intervals (begin == end, point lookup).
984
6
        _begin_include = true;
985
6
        _end_include = true;
986
36
    } else {
987
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
988
        // After this, no more columns can be appended (_has_range_value = true),
989
        // because the range semantics only apply to the last appended column.
990
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
991
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
992
        //     → begin_include=true, end_include=false
993
36
        _has_range_value = true;
994
995
        // Special case: max < min means the range itself is empty,
996
        // but contain_null() is true, so only null values match this column.
997
36
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
998
0
            CHECK(range.contain_null());
999
0
            if (_begin_scan_keys.empty()) {
1000
0
                _begin_scan_keys.emplace_back();
1001
0
                _begin_scan_keys.back().add_null();
1002
0
                _end_scan_keys.emplace_back();
1003
0
                _end_scan_keys.back().add_null();
1004
0
            } else {
1005
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1006
0
                    _begin_scan_keys[i].add_null();
1007
0
                    _end_scan_keys[i].add_null();
1008
0
                }
1009
0
            }
1010
36
        } else if (_begin_scan_keys.empty()) {
1011
            // First column as a range:
1012
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1013
36
            _begin_scan_keys.emplace_back();
1014
36
            if (range.contain_null()) {
1015
30
                _begin_scan_keys.back().add_null();
1016
30
            } else {
1017
6
                _begin_scan_keys.back().add_field(
1018
6
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1019
6
            }
1020
36
            _end_scan_keys.emplace_back();
1021
36
            _end_scan_keys.back().add_field(
1022
36
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1023
36
        } else {
1024
            // Subsequent column as a range: append min/max to every existing key pair.
1025
0
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1026
0
                if (range.contain_null()) {
1027
0
                    _begin_scan_keys[i].add_null();
1028
0
                } else {
1029
0
                    _begin_scan_keys[i].add_field(
1030
0
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1031
0
                }
1032
0
            }
1033
1034
0
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1035
0
                _end_scan_keys[i].add_field(
1036
0
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1037
0
            }
1038
0
        }
1039
36
        _begin_include = range.is_begin_include();
1040
36
        _end_include = range.is_end_include();
1041
36
    }
1042
1043
42
    return Status::OK();
1044
42
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE26EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
869
2.50k
                                     bool* should_break) {
870
2.50k
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
871
872
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
873
    //    clear all accumulated keys — no rows can match.
874
2.50k
    if (range.is_empty_value_range()) {
875
0
        _begin_scan_keys.clear();
876
0
        _end_scan_keys.clear();
877
0
        return Status::OK();
878
0
    }
879
880
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
881
    //    because the begin/end keys would have different semantics per pair.
882
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
883
2.50k
    if (_has_range_value) {
884
0
        return Status::OK();
885
0
    }
886
887
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
888
    //    Cartesian product would be too large.
889
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
890
    //      set *exact_value = false (keep predicate as residual filter).
891
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
892
18.4E
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
893
2.50k
    if (range.is_fixed_value_range()) {
894
67
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
895
0
            if (range.is_range_value_convertible()) {
896
0
                range.convert_to_range_value();
897
0
                *exact_value = false;
898
0
            } else {
899
0
                *should_break = true;
900
0
                return Status::OK();
901
0
            }
902
0
        }
903
2.44k
    } else {
904
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
905
        //    range on a splittable integer type, try to split [low, high] into multiple
906
        //    sub-ranges for parallel / pipelined scanning.
907
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
908
2.45k
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
909
2.44k
            !range.is_reject_split_type()) {
910
0
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
911
0
                                                 _end_include);
912
913
0
            if (!(*eos) &&
914
0
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
915
0
                                                 _end_include, max_scan_key_num)) {
916
0
                _has_range_value = true;
917
0
            }
918
0
            return Status::OK();
919
0
        }
920
2.44k
    }
921
922
    // ====================================================================
923
    // 5. Actually extend scan keys with this column's values.
924
    // ====================================================================
925
926
2.50k
    if (range.is_fixed_value_range()) {
927
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
928
67
        if (_begin_scan_keys.empty()) {
929
            // First column: create one key pair per fixed value.
930
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
931
65
            auto fixed_value_set = range.get_fixed_value_set();
932
65
            ConstIterator iter = fixed_value_set.begin();
933
934
136
            for (; iter != fixed_value_set.end(); ++iter) {
935
71
                _begin_scan_keys.emplace_back();
936
71
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
937
71
                _end_scan_keys.emplace_back();
938
71
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
71
            }
940
941
65
            if (range.contain_null()) {
942
0
                _begin_scan_keys.emplace_back();
943
0
                _begin_scan_keys.back().add_null();
944
0
                _end_scan_keys.emplace_back();
945
0
                _end_scan_keys.back().add_null();
946
0
            }
947
65
        } else {
948
            // Subsequent column: Cartesian product of existing keys × new fixed values.
949
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
950
            //     → [(1,10),(1,20),(2,10),(2,20)]
951
2
            auto fixed_value_set = range.get_fixed_value_set();
952
2
            size_t original_key_range_size = _begin_scan_keys.size();
953
954
6
            for (int i = 0; i < original_key_range_size; ++i) {
955
4
                OlapTuple start_base_key_range = _begin_scan_keys[i];
956
4
                OlapTuple end_base_key_range = _end_scan_keys[i];
957
958
4
                ConstIterator iter = fixed_value_set.begin();
959
960
8
                for (; iter != fixed_value_set.end(); ++iter) {
961
                    // Reuse i-th slot for the first value, append new slots for the rest.
962
4
                    if (iter == fixed_value_set.begin()) {
963
4
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
964
4
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
965
4
                    } else {
966
0
                        _begin_scan_keys.push_back(start_base_key_range);
967
0
                        _begin_scan_keys.back().add_field(
968
0
                                Field::create_field<primitive_type>(*iter));
969
0
                        _end_scan_keys.push_back(end_base_key_range);
970
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
971
0
                    }
972
4
                }
973
974
4
                if (range.contain_null()) {
975
0
                    _begin_scan_keys.push_back(start_base_key_range);
976
0
                    _begin_scan_keys.back().add_null();
977
0
                    _end_scan_keys.push_back(end_base_key_range);
978
0
                    _end_scan_keys.back().add_null();
979
0
                }
980
4
            }
981
2
        }
982
983
        // Fixed values are always closed intervals (begin == end, point lookup).
984
67
        _begin_include = true;
985
67
        _end_include = true;
986
2.44k
    } else {
987
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
988
        // After this, no more columns can be appended (_has_range_value = true),
989
        // because the range semantics only apply to the last appended column.
990
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
991
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
992
        //     → begin_include=true, end_include=false
993
2.44k
        _has_range_value = true;
994
995
        // Special case: max < min means the range itself is empty,
996
        // but contain_null() is true, so only null values match this column.
997
2.44k
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
998
0
            CHECK(range.contain_null());
999
0
            if (_begin_scan_keys.empty()) {
1000
0
                _begin_scan_keys.emplace_back();
1001
0
                _begin_scan_keys.back().add_null();
1002
0
                _end_scan_keys.emplace_back();
1003
0
                _end_scan_keys.back().add_null();
1004
0
            } else {
1005
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1006
0
                    _begin_scan_keys[i].add_null();
1007
0
                    _end_scan_keys[i].add_null();
1008
0
                }
1009
0
            }
1010
2.44k
        } else if (_begin_scan_keys.empty()) {
1011
            // First column as a range:
1012
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1013
2.44k
            _begin_scan_keys.emplace_back();
1014
2.44k
            if (range.contain_null()) {
1015
1.04k
                _begin_scan_keys.back().add_null();
1016
1.40k
            } else {
1017
1.40k
                _begin_scan_keys.back().add_field(
1018
1.40k
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1019
1.40k
            }
1020
2.44k
            _end_scan_keys.emplace_back();
1021
2.44k
            _end_scan_keys.back().add_field(
1022
2.44k
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1023
18.4E
        } else {
1024
            // Subsequent column as a range: append min/max to every existing key pair.
1025
18.4E
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1026
2
                if (range.contain_null()) {
1027
0
                    _begin_scan_keys[i].add_null();
1028
2
                } else {
1029
2
                    _begin_scan_keys[i].add_field(
1030
2
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1031
2
                }
1032
2
            }
1033
1034
18.4E
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1035
2
                _end_scan_keys[i].add_field(
1036
2
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1037
2
            }
1038
18.4E
        }
1039
2.44k
        _begin_include = range.is_begin_include();
1040
2.44k
        _end_include = range.is_end_include();
1041
2.44k
    }
1042
1043
2.50k
    return Status::OK();
1044
2.50k
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE42EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
869
2.62k
                                     bool* should_break) {
870
2.62k
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
871
872
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
873
    //    clear all accumulated keys — no rows can match.
874
2.62k
    if (range.is_empty_value_range()) {
875
0
        _begin_scan_keys.clear();
876
0
        _end_scan_keys.clear();
877
0
        return Status::OK();
878
0
    }
879
880
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
881
    //    because the begin/end keys would have different semantics per pair.
882
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
883
2.62k
    if (_has_range_value) {
884
0
        return Status::OK();
885
0
    }
886
887
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
888
    //    Cartesian product would be too large.
889
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
890
    //      set *exact_value = false (keep predicate as residual filter).
891
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
892
18.4E
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
893
2.62k
    if (range.is_fixed_value_range()) {
894
127
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
895
0
            if (range.is_range_value_convertible()) {
896
0
                range.convert_to_range_value();
897
0
                *exact_value = false;
898
0
            } else {
899
0
                *should_break = true;
900
0
                return Status::OK();
901
0
            }
902
0
        }
903
2.49k
    } else {
904
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
905
        //    range on a splittable integer type, try to split [low, high] into multiple
906
        //    sub-ranges for parallel / pipelined scanning.
907
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
908
2.54k
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
909
2.49k
            !range.is_reject_split_type()) {
910
0
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
911
0
                                                 _end_include);
912
913
0
            if (!(*eos) &&
914
0
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
915
0
                                                 _end_include, max_scan_key_num)) {
916
0
                _has_range_value = true;
917
0
            }
918
0
            return Status::OK();
919
0
        }
920
2.49k
    }
921
922
    // ====================================================================
923
    // 5. Actually extend scan keys with this column's values.
924
    // ====================================================================
925
926
2.62k
    if (range.is_fixed_value_range()) {
927
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
928
127
        if (_begin_scan_keys.empty()) {
929
            // First column: create one key pair per fixed value.
930
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
931
127
            auto fixed_value_set = range.get_fixed_value_set();
932
127
            ConstIterator iter = fixed_value_set.begin();
933
934
337
            for (; iter != fixed_value_set.end(); ++iter) {
935
210
                _begin_scan_keys.emplace_back();
936
210
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
937
210
                _end_scan_keys.emplace_back();
938
210
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
210
            }
940
941
127
            if (range.contain_null()) {
942
0
                _begin_scan_keys.emplace_back();
943
0
                _begin_scan_keys.back().add_null();
944
0
                _end_scan_keys.emplace_back();
945
0
                _end_scan_keys.back().add_null();
946
0
            }
947
18.4E
        } else {
948
            // Subsequent column: Cartesian product of existing keys × new fixed values.
949
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
950
            //     → [(1,10),(1,20),(2,10),(2,20)]
951
18.4E
            auto fixed_value_set = range.get_fixed_value_set();
952
18.4E
            size_t original_key_range_size = _begin_scan_keys.size();
953
954
18.4E
            for (int i = 0; i < original_key_range_size; ++i) {
955
0
                OlapTuple start_base_key_range = _begin_scan_keys[i];
956
0
                OlapTuple end_base_key_range = _end_scan_keys[i];
957
958
0
                ConstIterator iter = fixed_value_set.begin();
959
960
0
                for (; iter != fixed_value_set.end(); ++iter) {
961
                    // Reuse i-th slot for the first value, append new slots for the rest.
962
0
                    if (iter == fixed_value_set.begin()) {
963
0
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
964
0
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
965
0
                    } else {
966
0
                        _begin_scan_keys.push_back(start_base_key_range);
967
0
                        _begin_scan_keys.back().add_field(
968
0
                                Field::create_field<primitive_type>(*iter));
969
0
                        _end_scan_keys.push_back(end_base_key_range);
970
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
971
0
                    }
972
0
                }
973
974
0
                if (range.contain_null()) {
975
0
                    _begin_scan_keys.push_back(start_base_key_range);
976
0
                    _begin_scan_keys.back().add_null();
977
0
                    _end_scan_keys.push_back(end_base_key_range);
978
0
                    _end_scan_keys.back().add_null();
979
0
                }
980
0
            }
981
18.4E
        }
982
983
        // Fixed values are always closed intervals (begin == end, point lookup).
984
126
        _begin_include = true;
985
126
        _end_include = true;
986
2.50k
    } else {
987
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
988
        // After this, no more columns can be appended (_has_range_value = true),
989
        // because the range semantics only apply to the last appended column.
990
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
991
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
992
        //     → begin_include=true, end_include=false
993
2.50k
        _has_range_value = true;
994
995
        // Special case: max < min means the range itself is empty,
996
        // but contain_null() is true, so only null values match this column.
997
2.50k
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
998
9
            CHECK(range.contain_null());
999
9
            if (_begin_scan_keys.empty()) {
1000
9
                _begin_scan_keys.emplace_back();
1001
9
                _begin_scan_keys.back().add_null();
1002
9
                _end_scan_keys.emplace_back();
1003
9
                _end_scan_keys.back().add_null();
1004
9
            } else {
1005
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1006
0
                    _begin_scan_keys[i].add_null();
1007
0
                    _end_scan_keys[i].add_null();
1008
0
                }
1009
0
            }
1010
2.53k
        } else if (_begin_scan_keys.empty()) {
1011
            // First column as a range:
1012
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1013
2.53k
            _begin_scan_keys.emplace_back();
1014
2.53k
            if (range.contain_null()) {
1015
2.10k
                _begin_scan_keys.back().add_null();
1016
2.10k
            } else {
1017
432
                _begin_scan_keys.back().add_field(
1018
432
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1019
432
            }
1020
2.53k
            _end_scan_keys.emplace_back();
1021
2.53k
            _end_scan_keys.back().add_field(
1022
2.53k
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1023
18.4E
        } else {
1024
            // Subsequent column as a range: append min/max to every existing key pair.
1025
18.4E
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1026
0
                if (range.contain_null()) {
1027
0
                    _begin_scan_keys[i].add_null();
1028
0
                } else {
1029
0
                    _begin_scan_keys[i].add_field(
1030
0
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1031
0
                }
1032
0
            }
1033
1034
18.4E
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1035
0
                _end_scan_keys[i].add_field(
1036
0
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1037
0
            }
1038
18.4E
        }
1039
2.50k
        _begin_include = range.is_begin_include();
1040
2.50k
        _end_include = range.is_end_include();
1041
2.50k
    }
1042
1043
2.62k
    return Status::OK();
1044
2.62k
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE20EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
869
199
                                     bool* should_break) {
870
199
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
871
872
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
873
    //    clear all accumulated keys — no rows can match.
874
199
    if (range.is_empty_value_range()) {
875
0
        _begin_scan_keys.clear();
876
0
        _end_scan_keys.clear();
877
0
        return Status::OK();
878
0
    }
879
880
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
881
    //    because the begin/end keys would have different semantics per pair.
882
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
883
199
    if (_has_range_value) {
884
0
        return Status::OK();
885
0
    }
886
887
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
888
    //    Cartesian product would be too large.
889
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
890
    //      set *exact_value = false (keep predicate as residual filter).
891
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
892
18.4E
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
893
199
    if (range.is_fixed_value_range()) {
894
1
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
895
0
            if (range.is_range_value_convertible()) {
896
0
                range.convert_to_range_value();
897
0
                *exact_value = false;
898
0
            } else {
899
0
                *should_break = true;
900
0
                return Status::OK();
901
0
            }
902
0
        }
903
198
    } else {
904
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
905
        //    range on a splittable integer type, try to split [low, high] into multiple
906
        //    sub-ranges for parallel / pipelined scanning.
907
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
908
199
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
909
198
            !range.is_reject_split_type()) {
910
0
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
911
0
                                                 _end_include);
912
913
0
            if (!(*eos) &&
914
0
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
915
0
                                                 _end_include, max_scan_key_num)) {
916
0
                _has_range_value = true;
917
0
            }
918
0
            return Status::OK();
919
0
        }
920
198
    }
921
922
    // ====================================================================
923
    // 5. Actually extend scan keys with this column's values.
924
    // ====================================================================
925
926
199
    if (range.is_fixed_value_range()) {
927
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
928
1
        if (_begin_scan_keys.empty()) {
929
            // First column: create one key pair per fixed value.
930
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
931
1
            auto fixed_value_set = range.get_fixed_value_set();
932
1
            ConstIterator iter = fixed_value_set.begin();
933
934
2
            for (; iter != fixed_value_set.end(); ++iter) {
935
1
                _begin_scan_keys.emplace_back();
936
1
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
937
1
                _end_scan_keys.emplace_back();
938
1
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
1
            }
940
941
1
            if (range.contain_null()) {
942
0
                _begin_scan_keys.emplace_back();
943
0
                _begin_scan_keys.back().add_null();
944
0
                _end_scan_keys.emplace_back();
945
0
                _end_scan_keys.back().add_null();
946
0
            }
947
1
        } else {
948
            // Subsequent column: Cartesian product of existing keys × new fixed values.
949
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
950
            //     → [(1,10),(1,20),(2,10),(2,20)]
951
0
            auto fixed_value_set = range.get_fixed_value_set();
952
0
            size_t original_key_range_size = _begin_scan_keys.size();
953
954
0
            for (int i = 0; i < original_key_range_size; ++i) {
955
0
                OlapTuple start_base_key_range = _begin_scan_keys[i];
956
0
                OlapTuple end_base_key_range = _end_scan_keys[i];
957
958
0
                ConstIterator iter = fixed_value_set.begin();
959
960
0
                for (; iter != fixed_value_set.end(); ++iter) {
961
                    // Reuse i-th slot for the first value, append new slots for the rest.
962
0
                    if (iter == fixed_value_set.begin()) {
963
0
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
964
0
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
965
0
                    } else {
966
0
                        _begin_scan_keys.push_back(start_base_key_range);
967
0
                        _begin_scan_keys.back().add_field(
968
0
                                Field::create_field<primitive_type>(*iter));
969
0
                        _end_scan_keys.push_back(end_base_key_range);
970
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
971
0
                    }
972
0
                }
973
974
0
                if (range.contain_null()) {
975
0
                    _begin_scan_keys.push_back(start_base_key_range);
976
0
                    _begin_scan_keys.back().add_null();
977
0
                    _end_scan_keys.push_back(end_base_key_range);
978
0
                    _end_scan_keys.back().add_null();
979
0
                }
980
0
            }
981
0
        }
982
983
        // Fixed values are always closed intervals (begin == end, point lookup).
984
1
        _begin_include = true;
985
1
        _end_include = true;
986
198
    } else {
987
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
988
        // After this, no more columns can be appended (_has_range_value = true),
989
        // because the range semantics only apply to the last appended column.
990
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
991
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
992
        //     → begin_include=true, end_include=false
993
198
        _has_range_value = true;
994
995
        // Special case: max < min means the range itself is empty,
996
        // but contain_null() is true, so only null values match this column.
997
198
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
998
0
            CHECK(range.contain_null());
999
0
            if (_begin_scan_keys.empty()) {
1000
0
                _begin_scan_keys.emplace_back();
1001
0
                _begin_scan_keys.back().add_null();
1002
0
                _end_scan_keys.emplace_back();
1003
0
                _end_scan_keys.back().add_null();
1004
0
            } else {
1005
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1006
0
                    _begin_scan_keys[i].add_null();
1007
0
                    _end_scan_keys[i].add_null();
1008
0
                }
1009
0
            }
1010
198
        } else if (_begin_scan_keys.empty()) {
1011
            // First column as a range:
1012
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1013
198
            _begin_scan_keys.emplace_back();
1014
201
            if (range.contain_null()) {
1015
201
                _begin_scan_keys.back().add_null();
1016
18.4E
            } else {
1017
18.4E
                _begin_scan_keys.back().add_field(
1018
18.4E
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1019
18.4E
            }
1020
198
            _end_scan_keys.emplace_back();
1021
198
            _end_scan_keys.back().add_field(
1022
198
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1023
198
        } else {
1024
            // Subsequent column as a range: append min/max to every existing key pair.
1025
1
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1026
1
                if (range.contain_null()) {
1027
1
                    _begin_scan_keys[i].add_null();
1028
1
                } else {
1029
0
                    _begin_scan_keys[i].add_field(
1030
0
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1031
0
                }
1032
1
            }
1033
1034
1
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1035
1
                _end_scan_keys[i].add_field(
1036
1
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1037
1
            }
1038
0
        }
1039
198
        _begin_include = range.is_begin_include();
1040
198
        _end_include = range.is_end_include();
1041
198
    }
1042
1043
199
    return Status::OK();
1044
199
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE2EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
869
1.22k
                                     bool* should_break) {
870
1.22k
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
871
872
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
873
    //    clear all accumulated keys — no rows can match.
874
1.22k
    if (range.is_empty_value_range()) {
875
0
        _begin_scan_keys.clear();
876
0
        _end_scan_keys.clear();
877
0
        return Status::OK();
878
0
    }
879
880
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
881
    //    because the begin/end keys would have different semantics per pair.
882
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
883
1.22k
    if (_has_range_value) {
884
0
        return Status::OK();
885
0
    }
886
887
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
888
    //    Cartesian product would be too large.
889
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
890
    //      set *exact_value = false (keep predicate as residual filter).
891
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
892
18.4E
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
893
1.22k
    if (range.is_fixed_value_range()) {
894
6
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
895
1
            if (range.is_range_value_convertible()) {
896
0
                range.convert_to_range_value();
897
0
                *exact_value = false;
898
1
            } else {
899
1
                *should_break = true;
900
1
                return Status::OK();
901
1
            }
902
1
        }
903
1.21k
    } else {
904
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
905
        //    range on a splittable integer type, try to split [low, high] into multiple
906
        //    sub-ranges for parallel / pipelined scanning.
907
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
908
1.23k
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
909
1.21k
            !range.is_reject_split_type()) {
910
0
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
911
0
                                                 _end_include);
912
913
0
            if (!(*eos) &&
914
0
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
915
0
                                                 _end_include, max_scan_key_num)) {
916
0
                _has_range_value = true;
917
0
            }
918
0
            return Status::OK();
919
0
        }
920
1.21k
    }
921
922
    // ====================================================================
923
    // 5. Actually extend scan keys with this column's values.
924
    // ====================================================================
925
926
1.21k
    if (range.is_fixed_value_range()) {
927
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
928
5
        if (_begin_scan_keys.empty()) {
929
            // First column: create one key pair per fixed value.
930
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
931
5
            auto fixed_value_set = range.get_fixed_value_set();
932
5
            ConstIterator iter = fixed_value_set.begin();
933
934
13
            for (; iter != fixed_value_set.end(); ++iter) {
935
8
                _begin_scan_keys.emplace_back();
936
8
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
937
8
                _end_scan_keys.emplace_back();
938
8
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
8
            }
940
941
5
            if (range.contain_null()) {
942
0
                _begin_scan_keys.emplace_back();
943
0
                _begin_scan_keys.back().add_null();
944
0
                _end_scan_keys.emplace_back();
945
0
                _end_scan_keys.back().add_null();
946
0
            }
947
5
        } else {
948
            // Subsequent column: Cartesian product of existing keys × new fixed values.
949
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
950
            //     → [(1,10),(1,20),(2,10),(2,20)]
951
0
            auto fixed_value_set = range.get_fixed_value_set();
952
0
            size_t original_key_range_size = _begin_scan_keys.size();
953
954
0
            for (int i = 0; i < original_key_range_size; ++i) {
955
0
                OlapTuple start_base_key_range = _begin_scan_keys[i];
956
0
                OlapTuple end_base_key_range = _end_scan_keys[i];
957
958
0
                ConstIterator iter = fixed_value_set.begin();
959
960
0
                for (; iter != fixed_value_set.end(); ++iter) {
961
                    // Reuse i-th slot for the first value, append new slots for the rest.
962
0
                    if (iter == fixed_value_set.begin()) {
963
0
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
964
0
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
965
0
                    } else {
966
0
                        _begin_scan_keys.push_back(start_base_key_range);
967
0
                        _begin_scan_keys.back().add_field(
968
0
                                Field::create_field<primitive_type>(*iter));
969
0
                        _end_scan_keys.push_back(end_base_key_range);
970
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
971
0
                    }
972
0
                }
973
974
0
                if (range.contain_null()) {
975
0
                    _begin_scan_keys.push_back(start_base_key_range);
976
0
                    _begin_scan_keys.back().add_null();
977
0
                    _end_scan_keys.push_back(end_base_key_range);
978
0
                    _end_scan_keys.back().add_null();
979
0
                }
980
0
            }
981
0
        }
982
983
        // Fixed values are always closed intervals (begin == end, point lookup).
984
5
        _begin_include = true;
985
5
        _end_include = true;
986
1.21k
    } else {
987
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
988
        // After this, no more columns can be appended (_has_range_value = true),
989
        // because the range semantics only apply to the last appended column.
990
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
991
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
992
        //     → begin_include=true, end_include=false
993
1.21k
        _has_range_value = true;
994
995
        // Special case: max < min means the range itself is empty,
996
        // but contain_null() is true, so only null values match this column.
997
1.21k
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
998
3
            CHECK(range.contain_null());
999
3
            if (_begin_scan_keys.empty()) {
1000
3
                _begin_scan_keys.emplace_back();
1001
3
                _begin_scan_keys.back().add_null();
1002
3
                _end_scan_keys.emplace_back();
1003
3
                _end_scan_keys.back().add_null();
1004
3
            } else {
1005
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1006
0
                    _begin_scan_keys[i].add_null();
1007
0
                    _end_scan_keys[i].add_null();
1008
0
                }
1009
0
            }
1010
1.23k
        } else if (_begin_scan_keys.empty()) {
1011
            // First column as a range:
1012
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1013
1.23k
            _begin_scan_keys.emplace_back();
1014
1.23k
            if (range.contain_null()) {
1015
1.06k
                _begin_scan_keys.back().add_null();
1016
1.06k
            } else {
1017
167
                _begin_scan_keys.back().add_field(
1018
167
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1019
167
            }
1020
1.23k
            _end_scan_keys.emplace_back();
1021
1.23k
            _end_scan_keys.back().add_field(
1022
1.23k
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1023
18.4E
        } else {
1024
            // Subsequent column as a range: append min/max to every existing key pair.
1025
18.4E
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1026
30
                if (range.contain_null()) {
1027
1
                    _begin_scan_keys[i].add_null();
1028
29
                } else {
1029
29
                    _begin_scan_keys[i].add_field(
1030
29
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1031
29
                }
1032
30
            }
1033
1034
18.4E
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1035
30
                _end_scan_keys[i].add_field(
1036
30
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1037
30
            }
1038
18.4E
        }
1039
1.21k
        _begin_include = range.is_begin_include();
1040
1.21k
        _end_include = range.is_end_include();
1041
1.21k
    }
1042
1043
1.21k
    return Status::OK();
1044
1.22k
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE28EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
869
554
                                     bool* should_break) {
870
554
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
871
872
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
873
    //    clear all accumulated keys — no rows can match.
874
554
    if (range.is_empty_value_range()) {
875
0
        _begin_scan_keys.clear();
876
0
        _end_scan_keys.clear();
877
0
        return Status::OK();
878
0
    }
879
880
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
881
    //    because the begin/end keys would have different semantics per pair.
882
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
883
554
    if (_has_range_value) {
884
0
        return Status::OK();
885
0
    }
886
887
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
888
    //    Cartesian product would be too large.
889
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
890
    //      set *exact_value = false (keep predicate as residual filter).
891
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
892
18.4E
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
893
554
    if (range.is_fixed_value_range()) {
894
24
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
895
0
            if (range.is_range_value_convertible()) {
896
0
                range.convert_to_range_value();
897
0
                *exact_value = false;
898
0
            } else {
899
0
                *should_break = true;
900
0
                return Status::OK();
901
0
            }
902
0
        }
903
530
    } else {
904
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
905
        //    range on a splittable integer type, try to split [low, high] into multiple
906
        //    sub-ranges for parallel / pipelined scanning.
907
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
908
534
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
909
530
            !range.is_reject_split_type()) {
910
0
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
911
0
                                                 _end_include);
912
913
0
            if (!(*eos) &&
914
0
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
915
0
                                                 _end_include, max_scan_key_num)) {
916
0
                _has_range_value = true;
917
0
            }
918
0
            return Status::OK();
919
0
        }
920
530
    }
921
922
    // ====================================================================
923
    // 5. Actually extend scan keys with this column's values.
924
    // ====================================================================
925
926
554
    if (range.is_fixed_value_range()) {
927
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
928
24
        if (_begin_scan_keys.empty()) {
929
            // First column: create one key pair per fixed value.
930
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
931
22
            auto fixed_value_set = range.get_fixed_value_set();
932
22
            ConstIterator iter = fixed_value_set.begin();
933
934
55
            for (; iter != fixed_value_set.end(); ++iter) {
935
33
                _begin_scan_keys.emplace_back();
936
33
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
937
33
                _end_scan_keys.emplace_back();
938
33
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
33
            }
940
941
22
            if (range.contain_null()) {
942
0
                _begin_scan_keys.emplace_back();
943
0
                _begin_scan_keys.back().add_null();
944
0
                _end_scan_keys.emplace_back();
945
0
                _end_scan_keys.back().add_null();
946
0
            }
947
22
        } else {
948
            // Subsequent column: Cartesian product of existing keys × new fixed values.
949
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
950
            //     → [(1,10),(1,20),(2,10),(2,20)]
951
2
            auto fixed_value_set = range.get_fixed_value_set();
952
2
            size_t original_key_range_size = _begin_scan_keys.size();
953
954
4
            for (int i = 0; i < original_key_range_size; ++i) {
955
2
                OlapTuple start_base_key_range = _begin_scan_keys[i];
956
2
                OlapTuple end_base_key_range = _end_scan_keys[i];
957
958
2
                ConstIterator iter = fixed_value_set.begin();
959
960
4
                for (; iter != fixed_value_set.end(); ++iter) {
961
                    // Reuse i-th slot for the first value, append new slots for the rest.
962
2
                    if (iter == fixed_value_set.begin()) {
963
2
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
964
2
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
965
2
                    } else {
966
0
                        _begin_scan_keys.push_back(start_base_key_range);
967
0
                        _begin_scan_keys.back().add_field(
968
0
                                Field::create_field<primitive_type>(*iter));
969
0
                        _end_scan_keys.push_back(end_base_key_range);
970
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
971
0
                    }
972
2
                }
973
974
2
                if (range.contain_null()) {
975
0
                    _begin_scan_keys.push_back(start_base_key_range);
976
0
                    _begin_scan_keys.back().add_null();
977
0
                    _end_scan_keys.push_back(end_base_key_range);
978
0
                    _end_scan_keys.back().add_null();
979
0
                }
980
2
            }
981
2
        }
982
983
        // Fixed values are always closed intervals (begin == end, point lookup).
984
24
        _begin_include = true;
985
24
        _end_include = true;
986
530
    } else {
987
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
988
        // After this, no more columns can be appended (_has_range_value = true),
989
        // because the range semantics only apply to the last appended column.
990
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
991
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
992
        //     → begin_include=true, end_include=false
993
530
        _has_range_value = true;
994
995
        // Special case: max < min means the range itself is empty,
996
        // but contain_null() is true, so only null values match this column.
997
530
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
998
0
            CHECK(range.contain_null());
999
0
            if (_begin_scan_keys.empty()) {
1000
0
                _begin_scan_keys.emplace_back();
1001
0
                _begin_scan_keys.back().add_null();
1002
0
                _end_scan_keys.emplace_back();
1003
0
                _end_scan_keys.back().add_null();
1004
0
            } else {
1005
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1006
0
                    _begin_scan_keys[i].add_null();
1007
0
                    _end_scan_keys[i].add_null();
1008
0
                }
1009
0
            }
1010
536
        } else if (_begin_scan_keys.empty()) {
1011
            // First column as a range:
1012
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1013
536
            _begin_scan_keys.emplace_back();
1014
536
            if (range.contain_null()) {
1015
512
                _begin_scan_keys.back().add_null();
1016
512
            } else {
1017
24
                _begin_scan_keys.back().add_field(
1018
24
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1019
24
            }
1020
536
            _end_scan_keys.emplace_back();
1021
536
            _end_scan_keys.back().add_field(
1022
536
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1023
18.4E
        } else {
1024
            // Subsequent column as a range: append min/max to every existing key pair.
1025
18.4E
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1026
1
                if (range.contain_null()) {
1027
1
                    _begin_scan_keys[i].add_null();
1028
1
                } else {
1029
0
                    _begin_scan_keys[i].add_field(
1030
0
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1031
0
                }
1032
1
            }
1033
1034
18.4E
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1035
1
                _end_scan_keys[i].add_field(
1036
1
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1037
1
            }
1038
18.4E
        }
1039
530
        _begin_include = range.is_begin_include();
1040
530
        _end_include = range.is_end_include();
1041
530
    }
1042
1043
554
    return Status::OK();
1044
554
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE29EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
869
834
                                     bool* should_break) {
870
834
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
871
872
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
873
    //    clear all accumulated keys — no rows can match.
874
834
    if (range.is_empty_value_range()) {
875
0
        _begin_scan_keys.clear();
876
0
        _end_scan_keys.clear();
877
0
        return Status::OK();
878
0
    }
879
880
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
881
    //    because the begin/end keys would have different semantics per pair.
882
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
883
834
    if (_has_range_value) {
884
0
        return Status::OK();
885
0
    }
886
887
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
888
    //    Cartesian product would be too large.
889
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
890
    //      set *exact_value = false (keep predicate as residual filter).
891
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
892
834
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
893
834
    if (range.is_fixed_value_range()) {
894
20
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
895
0
            if (range.is_range_value_convertible()) {
896
0
                range.convert_to_range_value();
897
0
                *exact_value = false;
898
0
            } else {
899
0
                *should_break = true;
900
0
                return Status::OK();
901
0
            }
902
0
        }
903
814
    } else {
904
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
905
        //    range on a splittable integer type, try to split [low, high] into multiple
906
        //    sub-ranges for parallel / pipelined scanning.
907
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
908
814
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
909
814
            !range.is_reject_split_type()) {
910
0
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
911
0
                                                 _end_include);
912
913
0
            if (!(*eos) &&
914
0
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
915
0
                                                 _end_include, max_scan_key_num)) {
916
0
                _has_range_value = true;
917
0
            }
918
0
            return Status::OK();
919
0
        }
920
814
    }
921
922
    // ====================================================================
923
    // 5. Actually extend scan keys with this column's values.
924
    // ====================================================================
925
926
834
    if (range.is_fixed_value_range()) {
927
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
928
20
        if (_begin_scan_keys.empty()) {
929
            // First column: create one key pair per fixed value.
930
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
931
19
            auto fixed_value_set = range.get_fixed_value_set();
932
19
            ConstIterator iter = fixed_value_set.begin();
933
934
38
            for (; iter != fixed_value_set.end(); ++iter) {
935
19
                _begin_scan_keys.emplace_back();
936
19
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
937
19
                _end_scan_keys.emplace_back();
938
19
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
19
            }
940
941
19
            if (range.contain_null()) {
942
0
                _begin_scan_keys.emplace_back();
943
0
                _begin_scan_keys.back().add_null();
944
0
                _end_scan_keys.emplace_back();
945
0
                _end_scan_keys.back().add_null();
946
0
            }
947
19
        } else {
948
            // Subsequent column: Cartesian product of existing keys × new fixed values.
949
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
950
            //     → [(1,10),(1,20),(2,10),(2,20)]
951
1
            auto fixed_value_set = range.get_fixed_value_set();
952
1
            size_t original_key_range_size = _begin_scan_keys.size();
953
954
2
            for (int i = 0; i < original_key_range_size; ++i) {
955
1
                OlapTuple start_base_key_range = _begin_scan_keys[i];
956
1
                OlapTuple end_base_key_range = _end_scan_keys[i];
957
958
1
                ConstIterator iter = fixed_value_set.begin();
959
960
2
                for (; iter != fixed_value_set.end(); ++iter) {
961
                    // Reuse i-th slot for the first value, append new slots for the rest.
962
1
                    if (iter == fixed_value_set.begin()) {
963
1
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
964
1
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
965
1
                    } else {
966
0
                        _begin_scan_keys.push_back(start_base_key_range);
967
0
                        _begin_scan_keys.back().add_field(
968
0
                                Field::create_field<primitive_type>(*iter));
969
0
                        _end_scan_keys.push_back(end_base_key_range);
970
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
971
0
                    }
972
1
                }
973
974
1
                if (range.contain_null()) {
975
0
                    _begin_scan_keys.push_back(start_base_key_range);
976
0
                    _begin_scan_keys.back().add_null();
977
0
                    _end_scan_keys.push_back(end_base_key_range);
978
0
                    _end_scan_keys.back().add_null();
979
0
                }
980
1
            }
981
1
        }
982
983
        // Fixed values are always closed intervals (begin == end, point lookup).
984
20
        _begin_include = true;
985
20
        _end_include = true;
986
814
    } else {
987
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
988
        // After this, no more columns can be appended (_has_range_value = true),
989
        // because the range semantics only apply to the last appended column.
990
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
991
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
992
        //     → begin_include=true, end_include=false
993
814
        _has_range_value = true;
994
995
        // Special case: max < min means the range itself is empty,
996
        // but contain_null() is true, so only null values match this column.
997
814
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
998
0
            CHECK(range.contain_null());
999
0
            if (_begin_scan_keys.empty()) {
1000
0
                _begin_scan_keys.emplace_back();
1001
0
                _begin_scan_keys.back().add_null();
1002
0
                _end_scan_keys.emplace_back();
1003
0
                _end_scan_keys.back().add_null();
1004
0
            } else {
1005
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1006
0
                    _begin_scan_keys[i].add_null();
1007
0
                    _end_scan_keys[i].add_null();
1008
0
                }
1009
0
            }
1010
814
        } else if (_begin_scan_keys.empty()) {
1011
            // First column as a range:
1012
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1013
796
            _begin_scan_keys.emplace_back();
1014
796
            if (range.contain_null()) {
1015
762
                _begin_scan_keys.back().add_null();
1016
762
            } else {
1017
34
                _begin_scan_keys.back().add_field(
1018
34
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1019
34
            }
1020
796
            _end_scan_keys.emplace_back();
1021
796
            _end_scan_keys.back().add_field(
1022
796
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1023
796
        } else {
1024
            // Subsequent column as a range: append min/max to every existing key pair.
1025
58
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1026
40
                if (range.contain_null()) {
1027
37
                    _begin_scan_keys[i].add_null();
1028
37
                } else {
1029
3
                    _begin_scan_keys[i].add_field(
1030
3
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1031
3
                }
1032
40
            }
1033
1034
58
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1035
40
                _end_scan_keys[i].add_field(
1036
40
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1037
40
            }
1038
18
        }
1039
814
        _begin_include = range.is_begin_include();
1040
814
        _end_include = range.is_end_include();
1041
814
    }
1042
1043
834
    return Status::OK();
1044
834
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE30EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
869
1.39k
                                     bool* should_break) {
870
1.39k
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
871
872
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
873
    //    clear all accumulated keys — no rows can match.
874
1.39k
    if (range.is_empty_value_range()) {
875
0
        _begin_scan_keys.clear();
876
0
        _end_scan_keys.clear();
877
0
        return Status::OK();
878
0
    }
879
880
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
881
    //    because the begin/end keys would have different semantics per pair.
882
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
883
1.39k
    if (_has_range_value) {
884
0
        return Status::OK();
885
0
    }
886
887
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
888
    //    Cartesian product would be too large.
889
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
890
    //      set *exact_value = false (keep predicate as residual filter).
891
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
892
1.39k
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
893
1.39k
    if (range.is_fixed_value_range()) {
894
6
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
895
0
            if (range.is_range_value_convertible()) {
896
0
                range.convert_to_range_value();
897
0
                *exact_value = false;
898
0
            } else {
899
0
                *should_break = true;
900
0
                return Status::OK();
901
0
            }
902
0
        }
903
1.38k
    } else {
904
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
905
        //    range on a splittable integer type, try to split [low, high] into multiple
906
        //    sub-ranges for parallel / pipelined scanning.
907
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
908
1.38k
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
909
1.38k
            !range.is_reject_split_type()) {
910
0
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
911
0
                                                 _end_include);
912
913
0
            if (!(*eos) &&
914
0
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
915
0
                                                 _end_include, max_scan_key_num)) {
916
0
                _has_range_value = true;
917
0
            }
918
0
            return Status::OK();
919
0
        }
920
1.38k
    }
921
922
    // ====================================================================
923
    // 5. Actually extend scan keys with this column's values.
924
    // ====================================================================
925
926
1.39k
    if (range.is_fixed_value_range()) {
927
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
928
6
        if (_begin_scan_keys.empty()) {
929
            // First column: create one key pair per fixed value.
930
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
931
6
            auto fixed_value_set = range.get_fixed_value_set();
932
6
            ConstIterator iter = fixed_value_set.begin();
933
934
12
            for (; iter != fixed_value_set.end(); ++iter) {
935
6
                _begin_scan_keys.emplace_back();
936
6
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
937
6
                _end_scan_keys.emplace_back();
938
6
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
6
            }
940
941
6
            if (range.contain_null()) {
942
0
                _begin_scan_keys.emplace_back();
943
0
                _begin_scan_keys.back().add_null();
944
0
                _end_scan_keys.emplace_back();
945
0
                _end_scan_keys.back().add_null();
946
0
            }
947
6
        } else {
948
            // Subsequent column: Cartesian product of existing keys × new fixed values.
949
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
950
            //     → [(1,10),(1,20),(2,10),(2,20)]
951
0
            auto fixed_value_set = range.get_fixed_value_set();
952
0
            size_t original_key_range_size = _begin_scan_keys.size();
953
954
0
            for (int i = 0; i < original_key_range_size; ++i) {
955
0
                OlapTuple start_base_key_range = _begin_scan_keys[i];
956
0
                OlapTuple end_base_key_range = _end_scan_keys[i];
957
958
0
                ConstIterator iter = fixed_value_set.begin();
959
960
0
                for (; iter != fixed_value_set.end(); ++iter) {
961
                    // Reuse i-th slot for the first value, append new slots for the rest.
962
0
                    if (iter == fixed_value_set.begin()) {
963
0
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
964
0
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
965
0
                    } else {
966
0
                        _begin_scan_keys.push_back(start_base_key_range);
967
0
                        _begin_scan_keys.back().add_field(
968
0
                                Field::create_field<primitive_type>(*iter));
969
0
                        _end_scan_keys.push_back(end_base_key_range);
970
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
971
0
                    }
972
0
                }
973
974
0
                if (range.contain_null()) {
975
0
                    _begin_scan_keys.push_back(start_base_key_range);
976
0
                    _begin_scan_keys.back().add_null();
977
0
                    _end_scan_keys.push_back(end_base_key_range);
978
0
                    _end_scan_keys.back().add_null();
979
0
                }
980
0
            }
981
0
        }
982
983
        // Fixed values are always closed intervals (begin == end, point lookup).
984
6
        _begin_include = true;
985
6
        _end_include = true;
986
1.38k
    } else {
987
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
988
        // After this, no more columns can be appended (_has_range_value = true),
989
        // because the range semantics only apply to the last appended column.
990
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
991
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
992
        //     → begin_include=true, end_include=false
993
1.38k
        _has_range_value = true;
994
995
        // Special case: max < min means the range itself is empty,
996
        // but contain_null() is true, so only null values match this column.
997
1.38k
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
998
0
            CHECK(range.contain_null());
999
0
            if (_begin_scan_keys.empty()) {
1000
0
                _begin_scan_keys.emplace_back();
1001
0
                _begin_scan_keys.back().add_null();
1002
0
                _end_scan_keys.emplace_back();
1003
0
                _end_scan_keys.back().add_null();
1004
0
            } else {
1005
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1006
0
                    _begin_scan_keys[i].add_null();
1007
0
                    _end_scan_keys[i].add_null();
1008
0
                }
1009
0
            }
1010
1.38k
        } else if (_begin_scan_keys.empty()) {
1011
            // First column as a range:
1012
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1013
1.28k
            _begin_scan_keys.emplace_back();
1014
1.28k
            if (range.contain_null()) {
1015
1.20k
                _begin_scan_keys.back().add_null();
1016
1.20k
            } else {
1017
74
                _begin_scan_keys.back().add_field(
1018
74
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1019
74
            }
1020
1.28k
            _end_scan_keys.emplace_back();
1021
1.28k
            _end_scan_keys.back().add_field(
1022
1.28k
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1023
1.28k
        } else {
1024
            // Subsequent column as a range: append min/max to every existing key pair.
1025
213
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1026
108
                if (range.contain_null()) {
1027
108
                    _begin_scan_keys[i].add_null();
1028
108
                } else {
1029
0
                    _begin_scan_keys[i].add_field(
1030
0
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1031
0
                }
1032
108
            }
1033
1034
213
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1035
108
                _end_scan_keys[i].add_field(
1036
108
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1037
108
            }
1038
105
        }
1039
1.38k
        _begin_include = range.is_begin_include();
1040
1.38k
        _end_include = range.is_end_include();
1041
1.38k
    }
1042
1043
1.39k
    return Status::OK();
1044
1.39k
}
_ZN5doris12OlapScanKeys15extend_scan_keyILNS_13PrimitiveTypeE35EEENS_6StatusERNS_16ColumnValueRangeIXT_EEEiPbS7_S7_
Line
Count
Source
869
533
                                     bool* should_break) {
870
533
    using ConstIterator = typename ColumnValueRange<primitive_type>::SetType::const_iterator;
871
872
    // 1. If the column's value range is empty (contradictory predicates, e.g. k1 > 10 AND k1 < 5),
873
    //    clear all accumulated keys — no rows can match.
874
533
    if (range.is_empty_value_range()) {
875
0
        _begin_scan_keys.clear();
876
0
        _end_scan_keys.clear();
877
0
        return Status::OK();
878
0
    }
879
880
    // 2. Once a previous column was extended as a scope range, we cannot append more columns,
881
    //    because the begin/end keys would have different semantics per pair.
882
    //    e.g. after k1 in [5, 10), appending k2 values is meaningless for short-key index.
883
533
    if (_has_range_value) {
884
0
        return Status::OK();
885
0
    }
886
887
    // 3. Overflow check: if fixed_value_count × existing_key_count > max_scan_key_num,
888
    //    Cartesian product would be too large.
889
    //    - If convertible: degrade fixed values {v1,v2,...} to scope [min(v), max(v)],
890
    //      set *exact_value = false (keep predicate as residual filter).
891
    //    - If not convertible (BOOLEAN etc.): stop extending (*should_break = true).
892
533
    auto scan_keys_size = _begin_scan_keys.empty() ? 1 : _begin_scan_keys.size();
893
533
    if (range.is_fixed_value_range()) {
894
16
        if (range.get_fixed_value_size() > max_scan_key_num / scan_keys_size) {
895
0
            if (range.is_range_value_convertible()) {
896
0
                range.convert_to_range_value();
897
0
                *exact_value = false;
898
0
            } else {
899
0
                *should_break = true;
900
0
                return Status::OK();
901
0
            }
902
0
        }
903
517
    } else {
904
        // 4. Range-splitting optimization: if this is the FIRST key column and it's a scope
905
        //    range on a splittable integer type, try to split [low, high] into multiple
906
        //    sub-ranges for parallel / pipelined scanning.
907
        //    e.g. k1 in [1, 100] with max_scan_key_num=4 → [(1,25), (26,50), (51,75), (76,100)]
908
517
        if (_begin_scan_keys.empty() && range.is_fixed_value_convertible() && _is_convertible &&
909
517
            !range.is_reject_split_type()) {
910
0
            *eos |= range.convert_to_close_range(_begin_scan_keys, _end_scan_keys, _begin_include,
911
0
                                                 _end_include);
912
913
0
            if (!(*eos) &&
914
0
                range.convert_to_avg_range_value(_begin_scan_keys, _end_scan_keys, _begin_include,
915
0
                                                 _end_include, max_scan_key_num)) {
916
0
                _has_range_value = true;
917
0
            }
918
0
            return Status::OK();
919
0
        }
920
517
    }
921
922
    // ====================================================================
923
    // 5. Actually extend scan keys with this column's values.
924
    // ====================================================================
925
926
533
    if (range.is_fixed_value_range()) {
927
        // ---- 5a. Fixed values (IN / =): point lookup, begin == end per value. ----
928
16
        if (_begin_scan_keys.empty()) {
929
            // First column: create one key pair per fixed value.
930
            //   e.g. k1 IN (1, 2) → _begin=[(1),(2)]  _end=[(1),(2)]
931
16
            auto fixed_value_set = range.get_fixed_value_set();
932
16
            ConstIterator iter = fixed_value_set.begin();
933
934
36
            for (; iter != fixed_value_set.end(); ++iter) {
935
20
                _begin_scan_keys.emplace_back();
936
20
                _begin_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
937
20
                _end_scan_keys.emplace_back();
938
20
                _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
939
20
            }
940
941
16
            if (range.contain_null()) {
942
0
                _begin_scan_keys.emplace_back();
943
0
                _begin_scan_keys.back().add_null();
944
0
                _end_scan_keys.emplace_back();
945
0
                _end_scan_keys.back().add_null();
946
0
            }
947
16
        } else {
948
            // Subsequent column: Cartesian product of existing keys × new fixed values.
949
            //   e.g. existing = [(1),(2)], k2 IN (10, 20)
950
            //     → [(1,10),(1,20),(2,10),(2,20)]
951
0
            auto fixed_value_set = range.get_fixed_value_set();
952
0
            size_t original_key_range_size = _begin_scan_keys.size();
953
954
0
            for (int i = 0; i < original_key_range_size; ++i) {
955
0
                OlapTuple start_base_key_range = _begin_scan_keys[i];
956
0
                OlapTuple end_base_key_range = _end_scan_keys[i];
957
958
0
                ConstIterator iter = fixed_value_set.begin();
959
960
0
                for (; iter != fixed_value_set.end(); ++iter) {
961
                    // Reuse i-th slot for the first value, append new slots for the rest.
962
0
                    if (iter == fixed_value_set.begin()) {
963
0
                        _begin_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
964
0
                        _end_scan_keys[i].add_field(Field::create_field<primitive_type>(*iter));
965
0
                    } else {
966
0
                        _begin_scan_keys.push_back(start_base_key_range);
967
0
                        _begin_scan_keys.back().add_field(
968
0
                                Field::create_field<primitive_type>(*iter));
969
0
                        _end_scan_keys.push_back(end_base_key_range);
970
0
                        _end_scan_keys.back().add_field(Field::create_field<primitive_type>(*iter));
971
0
                    }
972
0
                }
973
974
0
                if (range.contain_null()) {
975
0
                    _begin_scan_keys.push_back(start_base_key_range);
976
0
                    _begin_scan_keys.back().add_null();
977
0
                    _end_scan_keys.push_back(end_base_key_range);
978
0
                    _end_scan_keys.back().add_null();
979
0
                }
980
0
            }
981
0
        }
982
983
        // Fixed values are always closed intervals (begin == end, point lookup).
984
16
        _begin_include = true;
985
16
        _end_include = true;
986
517
    } else {
987
        // ---- 5b. Scope range (> / >= / < / <=): append min to begin, max to end. ----
988
        // After this, no more columns can be appended (_has_range_value = true),
989
        // because the range semantics only apply to the last appended column.
990
        //   e.g. existing = [(1),(2)], k2 >= 5 AND k2 < 10
991
        //     → _begin = [(1,5),(2,5)]  _end = [(1,10),(2,10)]
992
        //     → begin_include=true, end_include=false
993
517
        _has_range_value = true;
994
995
        // Special case: max < min means the range itself is empty,
996
        // but contain_null() is true, so only null values match this column.
997
517
        if (Compare::less(range.get_range_max_value(), range.get_range_min_value())) {
998
1
            CHECK(range.contain_null());
999
1
            if (_begin_scan_keys.empty()) {
1000
1
                _begin_scan_keys.emplace_back();
1001
1
                _begin_scan_keys.back().add_null();
1002
1
                _end_scan_keys.emplace_back();
1003
1
                _end_scan_keys.back().add_null();
1004
1
            } else {
1005
0
                for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1006
0
                    _begin_scan_keys[i].add_null();
1007
0
                    _end_scan_keys[i].add_null();
1008
0
                }
1009
0
            }
1010
516
        } else if (_begin_scan_keys.empty()) {
1011
            // First column as a range:
1012
            //   e.g. k1 >= 100 AND k1 <= 200  → _begin=[(100)]  _end=[(200)]
1013
466
            _begin_scan_keys.emplace_back();
1014
466
            if (range.contain_null()) {
1015
389
                _begin_scan_keys.back().add_null();
1016
389
            } else {
1017
77
                _begin_scan_keys.back().add_field(
1018
77
                        Field::create_field<primitive_type>(range.get_range_min_value()));
1019
77
            }
1020
466
            _end_scan_keys.emplace_back();
1021
466
            _end_scan_keys.back().add_field(
1022
466
                    Field::create_field<primitive_type>(range.get_range_max_value()));
1023
466
        } else {
1024
            // Subsequent column as a range: append min/max to every existing key pair.
1025
110
            for (int i = 0; i < _begin_scan_keys.size(); ++i) {
1026
60
                if (range.contain_null()) {
1027
60
                    _begin_scan_keys[i].add_null();
1028
60
                } else {
1029
0
                    _begin_scan_keys[i].add_field(
1030
0
                            Field::create_field<primitive_type>(range.get_range_min_value()));
1031
0
                }
1032
60
            }
1033
1034
110
            for (int i = 0; i < _end_scan_keys.size(); ++i) {
1035
60
                _end_scan_keys[i].add_field(
1036
60
                        Field::create_field<primitive_type>(range.get_range_max_value()));
1037
60
            }
1038
50
        }
1039
517
        _begin_include = range.is_begin_include();
1040
517
        _end_include = range.is_end_include();
1041
517
    }
1042
1043
533
    return Status::OK();
1044
533
}
1045
1046
} // namespace doris