Coverage Report

Created: 2026-03-15 08:11

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
be/src/exprs/function/least_greast.cpp
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
#include <stddef.h>
19
20
#include <algorithm>
21
#include <boost/iterator/iterator_facade.hpp>
22
#include <memory>
23
#include <tuple>
24
#include <type_traits>
25
26
#include "core/accurate_comparison.h"
27
#include "core/assert_cast.h"
28
#include "core/block/block.h"
29
#include "core/block/column_numbers.h"
30
#include "core/block/column_with_type_and_name.h"
31
#include "core/column/column.h"
32
#include "core/column/column_const.h"
33
#include "core/column/column_decimal.h"
34
#include "core/column/column_string.h"
35
#include "core/column/column_vector.h"
36
#include "core/data_type/data_type.h"
37
#include "core/data_type/data_type_number.h"
38
#include "core/data_type/define_primitive_type.h"
39
#include "core/pod_array_fwd.h"
40
#include "core/string_ref.h"
41
#include "core/types.h"
42
#include "exec/common/template_helpers.hpp"
43
#include "exprs/aggregate/aggregate_function.h"
44
#include "exprs/function/function_multi_same_args.h"
45
#include "exprs/function/simple_function_factory.h"
46
47
namespace doris {
48
class DecimalV2Value;
49
} // namespace doris
50
51
namespace doris {
52
53
template <template <PrimitiveType> class Op, typename Impl>
54
struct CompareMultiImpl {
55
    static constexpr auto name = Impl::name;
56
57
2
    static DataTypePtr get_return_type_impl(const DataTypes& arguments) { return arguments[0]; }
_ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE20get_return_type_implERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS8_EE
Line
Count
Source
57
1
    static DataTypePtr get_return_type_impl(const DataTypes& arguments) { return arguments[0]; }
_ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE20get_return_type_implERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS8_EE
Line
Count
Source
57
1
    static DataTypePtr get_return_type_impl(const DataTypes& arguments) { return arguments[0]; }
58
59
    static ColumnPtr execute(Block& block, const ColumnNumbers& arguments,
60
2
                             size_t input_rows_count) {
61
2
        if (arguments.size() == 1) {
62
0
            return block.get_by_position(arguments.back()).column;
63
0
        }
64
65
2
        const auto& data_type = block.get_by_position(arguments.back()).type;
66
2
        MutableColumnPtr result_column = data_type->create_column();
67
68
2
        Columns cols(arguments.size());
69
2
        std::unique_ptr<bool[]> col_const =
70
2
                std::make_unique_for_overwrite<bool[]>(arguments.size());
71
6
        for (int i = 0; i < arguments.size(); ++i) {
72
4
            std::tie(cols[i], col_const[i]) =
73
4
                    unpack_if_const(block.get_by_position(arguments[i]).column);
74
4
        }
75
        // because now the string types does not support random position writing,
76
        // so insert into result data have two methods, one is for string types, one is for others type remaining
77
2
        if (result_column->is_column_string()) {
78
0
            result_column->reserve(input_rows_count);
79
0
            const auto& column_string = reinterpret_cast<const ColumnString&>(*cols[0]);
80
0
            auto& column_res = reinterpret_cast<ColumnString&>(*result_column);
81
82
0
            for (int i = 0; i < input_rows_count; ++i) {
83
0
                auto str_data = column_string.get_data_at(index_check_const(i, col_const[0]));
84
0
                for (int cmp_col = 1; cmp_col < arguments.size(); ++cmp_col) {
85
0
                    auto temp_data = assert_cast<const ColumnString&>(*cols[cmp_col])
86
0
                                             .get_data_at(index_check_const(i, col_const[cmp_col]));
87
0
                    str_data = Op<TYPE_STRING>::apply(temp_data, str_data) ? temp_data : str_data;
88
0
                }
89
0
                column_res.insert_data(str_data.data, str_data.size);
90
0
            }
91
92
2
        } else {
93
2
            if (col_const[0]) {
94
0
                for (int i = 0; i < input_rows_count; ++i) {
95
0
                    result_column->insert_range_from(*(cols[0]), 0, 1);
96
0
                }
97
2
            } else {
98
2
                result_column->insert_range_from(*(cols[0]), 0, input_rows_count);
99
2
            }
100
101
2
            auto call = [&](const auto& type) -> bool {
102
2
                using DispatchType = std::decay_t<decltype(type)>;
103
4
                for (int i = 1; i < arguments.size(); ++i) {
104
2
                    if (col_const[i]) {
105
0
                        insert_result_data<DispatchType::PType, true>(result_column, cols[i],
106
0
                                                                      input_rows_count);
107
2
                    } else {
108
2
                        insert_result_data<DispatchType::PType, false>(result_column, cols[i],
109
2
                                                                       input_rows_count);
110
2
                    }
111
2
                }
112
113
2
                return true;
114
2
            };
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE2EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE3EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE4EEEEEbSD_
_ZZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE5EEEEEbSD_
Line
Count
Source
101
1
            auto call = [&](const auto& type) -> bool {
102
1
                using DispatchType = std::decay_t<decltype(type)>;
103
2
                for (int i = 1; i < arguments.size(); ++i) {
104
1
                    if (col_const[i]) {
105
0
                        insert_result_data<DispatchType::PType, true>(result_column, cols[i],
106
0
                                                                      input_rows_count);
107
1
                    } else {
108
1
                        insert_result_data<DispatchType::PType, false>(result_column, cols[i],
109
1
                                                                       input_rows_count);
110
1
                    }
111
1
                }
112
113
1
                return true;
114
1
            };
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE6EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE7EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE8EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE9EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE28EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE29EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE20EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE30EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE35EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE11EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE25EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE26EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE12EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE27EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE42EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE36EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE37EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE2EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE3EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE4EEEEEbSD_
_ZZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE5EEEEEbSD_
Line
Count
Source
101
1
            auto call = [&](const auto& type) -> bool {
102
1
                using DispatchType = std::decay_t<decltype(type)>;
103
2
                for (int i = 1; i < arguments.size(); ++i) {
104
1
                    if (col_const[i]) {
105
0
                        insert_result_data<DispatchType::PType, true>(result_column, cols[i],
106
0
                                                                      input_rows_count);
107
1
                    } else {
108
1
                        insert_result_data<DispatchType::PType, false>(result_column, cols[i],
109
1
                                                                       input_rows_count);
110
1
                    }
111
1
                }
112
113
1
                return true;
114
1
            };
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE6EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE7EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE8EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE9EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE28EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE29EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE20EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE30EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE35EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE11EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE25EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE26EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE12EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE27EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE42EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE36EEEEEbSD_
Unexecuted instantiation: _ZZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE37EEEEEbSD_
115
116
2
            if (!dispatch_switch_scalar(data_type->get_primitive_type(), call)) {
117
0
                throw doris::Exception(ErrorCode::INTERNAL_ERROR, "not support type {}",
118
0
                                       data_type->get_name());
119
0
            }
120
2
        }
121
2
        return result_column;
122
2
    }
_ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEm
Line
Count
Source
60
1
                             size_t input_rows_count) {
61
1
        if (arguments.size() == 1) {
62
0
            return block.get_by_position(arguments.back()).column;
63
0
        }
64
65
1
        const auto& data_type = block.get_by_position(arguments.back()).type;
66
1
        MutableColumnPtr result_column = data_type->create_column();
67
68
1
        Columns cols(arguments.size());
69
1
        std::unique_ptr<bool[]> col_const =
70
1
                std::make_unique_for_overwrite<bool[]>(arguments.size());
71
3
        for (int i = 0; i < arguments.size(); ++i) {
72
2
            std::tie(cols[i], col_const[i]) =
73
2
                    unpack_if_const(block.get_by_position(arguments[i]).column);
74
2
        }
75
        // because now the string types does not support random position writing,
76
        // so insert into result data have two methods, one is for string types, one is for others type remaining
77
1
        if (result_column->is_column_string()) {
78
0
            result_column->reserve(input_rows_count);
79
0
            const auto& column_string = reinterpret_cast<const ColumnString&>(*cols[0]);
80
0
            auto& column_res = reinterpret_cast<ColumnString&>(*result_column);
81
82
0
            for (int i = 0; i < input_rows_count; ++i) {
83
0
                auto str_data = column_string.get_data_at(index_check_const(i, col_const[0]));
84
0
                for (int cmp_col = 1; cmp_col < arguments.size(); ++cmp_col) {
85
0
                    auto temp_data = assert_cast<const ColumnString&>(*cols[cmp_col])
86
0
                                             .get_data_at(index_check_const(i, col_const[cmp_col]));
87
0
                    str_data = Op<TYPE_STRING>::apply(temp_data, str_data) ? temp_data : str_data;
88
0
                }
89
0
                column_res.insert_data(str_data.data, str_data.size);
90
0
            }
91
92
1
        } else {
93
1
            if (col_const[0]) {
94
0
                for (int i = 0; i < input_rows_count; ++i) {
95
0
                    result_column->insert_range_from(*(cols[0]), 0, 1);
96
0
                }
97
1
            } else {
98
1
                result_column->insert_range_from(*(cols[0]), 0, input_rows_count);
99
1
            }
100
101
1
            auto call = [&](const auto& type) -> bool {
102
1
                using DispatchType = std::decay_t<decltype(type)>;
103
1
                for (int i = 1; i < arguments.size(); ++i) {
104
1
                    if (col_const[i]) {
105
1
                        insert_result_data<DispatchType::PType, true>(result_column, cols[i],
106
1
                                                                      input_rows_count);
107
1
                    } else {
108
1
                        insert_result_data<DispatchType::PType, false>(result_column, cols[i],
109
1
                                                                       input_rows_count);
110
1
                    }
111
1
                }
112
113
1
                return true;
114
1
            };
115
116
1
            if (!dispatch_switch_scalar(data_type->get_primitive_type(), call)) {
117
0
                throw doris::Exception(ErrorCode::INTERNAL_ERROR, "not support type {}",
118
0
                                       data_type->get_name());
119
0
            }
120
1
        }
121
1
        return result_column;
122
1
    }
_ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE7executeERNS_5BlockERKSt6vectorIjSaIjEEm
Line
Count
Source
60
1
                             size_t input_rows_count) {
61
1
        if (arguments.size() == 1) {
62
0
            return block.get_by_position(arguments.back()).column;
63
0
        }
64
65
1
        const auto& data_type = block.get_by_position(arguments.back()).type;
66
1
        MutableColumnPtr result_column = data_type->create_column();
67
68
1
        Columns cols(arguments.size());
69
1
        std::unique_ptr<bool[]> col_const =
70
1
                std::make_unique_for_overwrite<bool[]>(arguments.size());
71
3
        for (int i = 0; i < arguments.size(); ++i) {
72
2
            std::tie(cols[i], col_const[i]) =
73
2
                    unpack_if_const(block.get_by_position(arguments[i]).column);
74
2
        }
75
        // because now the string types does not support random position writing,
76
        // so insert into result data have two methods, one is for string types, one is for others type remaining
77
1
        if (result_column->is_column_string()) {
78
0
            result_column->reserve(input_rows_count);
79
0
            const auto& column_string = reinterpret_cast<const ColumnString&>(*cols[0]);
80
0
            auto& column_res = reinterpret_cast<ColumnString&>(*result_column);
81
82
0
            for (int i = 0; i < input_rows_count; ++i) {
83
0
                auto str_data = column_string.get_data_at(index_check_const(i, col_const[0]));
84
0
                for (int cmp_col = 1; cmp_col < arguments.size(); ++cmp_col) {
85
0
                    auto temp_data = assert_cast<const ColumnString&>(*cols[cmp_col])
86
0
                                             .get_data_at(index_check_const(i, col_const[cmp_col]));
87
0
                    str_data = Op<TYPE_STRING>::apply(temp_data, str_data) ? temp_data : str_data;
88
0
                }
89
0
                column_res.insert_data(str_data.data, str_data.size);
90
0
            }
91
92
1
        } else {
93
1
            if (col_const[0]) {
94
0
                for (int i = 0; i < input_rows_count; ++i) {
95
0
                    result_column->insert_range_from(*(cols[0]), 0, 1);
96
0
                }
97
1
            } else {
98
1
                result_column->insert_range_from(*(cols[0]), 0, input_rows_count);
99
1
            }
100
101
1
            auto call = [&](const auto& type) -> bool {
102
1
                using DispatchType = std::decay_t<decltype(type)>;
103
1
                for (int i = 1; i < arguments.size(); ++i) {
104
1
                    if (col_const[i]) {
105
1
                        insert_result_data<DispatchType::PType, true>(result_column, cols[i],
106
1
                                                                      input_rows_count);
107
1
                    } else {
108
1
                        insert_result_data<DispatchType::PType, false>(result_column, cols[i],
109
1
                                                                       input_rows_count);
110
1
                    }
111
1
                }
112
113
1
                return true;
114
1
            };
115
116
1
            if (!dispatch_switch_scalar(data_type->get_primitive_type(), call)) {
117
0
                throw doris::Exception(ErrorCode::INTERNAL_ERROR, "not support type {}",
118
0
                                       data_type->get_name());
119
0
            }
120
1
        }
121
1
        return result_column;
122
1
    }
123
124
private:
125
    template <PrimitiveType PType, bool ArgConst>
126
    static void insert_result_data(const MutableColumnPtr& result_column,
127
                                   const ColumnPtr& argument_column,
128
2
                                   const size_t input_rows_count) {
129
2
        using ColumnType = typename PrimitiveTypeTraits<PType>::ColumnType;
130
2
        auto* __restrict result_raw_data =
131
2
                reinterpret_cast<ColumnType*>(result_column.get())->get_data().data();
132
2
        auto* __restrict column_raw_data =
133
2
                reinterpret_cast<const ColumnType*>(argument_column.get())->get_data().data();
134
135
2
        if constexpr (std::is_same_v<ColumnType, ColumnDecimal128V2>) {
136
0
            for (size_t i = 0; i < input_rows_count; ++i) {
137
0
                result_raw_data[i] =
138
0
                        Op<TYPE_DECIMALV2>::apply(column_raw_data[index_check_const(i, ArgConst)],
139
0
                                                  result_raw_data[i])
140
0
                                ? column_raw_data[index_check_const(i, ArgConst)]
141
0
                                : result_raw_data[i];
142
0
            }
143
        } else if constexpr (std::is_same_v<ColumnType, ColumnDecimal32> ||
144
                             std::is_same_v<ColumnType, ColumnDecimal64> ||
145
                             std::is_same_v<ColumnType, ColumnDecimal128V3> ||
146
0
                             std::is_same_v<ColumnType, ColumnDecimal256>) {
147
0
            for (size_t i = 0; i < input_rows_count; ++i) {
148
0
                result_raw_data[i] =
149
0
                        Op<PType>::apply(column_raw_data[index_check_const(i, ArgConst)].value,
150
0
                                         result_raw_data[i].value)
151
0
                                ? column_raw_data[index_check_const(i, ArgConst)]
152
0
                                : result_raw_data[i];
153
0
            }
154
2
        } else {
155
12
            for (size_t i = 0; i < input_rows_count; ++i) {
156
10
                result_raw_data[i] =
157
10
                        Op<PType>::apply(column_raw_data[index_check_const(i, ArgConst)],
158
10
                                         result_raw_data[i])
159
10
                                ? column_raw_data[index_check_const(i, ArgConst)]
160
10
                                : result_raw_data[i];
161
10
            }
162
2
        }
163
2
    }
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE2ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE2ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE3ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE3ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE4ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE4ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE5ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
_ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE5ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Line
Count
Source
128
1
                                   const size_t input_rows_count) {
129
1
        using ColumnType = typename PrimitiveTypeTraits<PType>::ColumnType;
130
1
        auto* __restrict result_raw_data =
131
1
                reinterpret_cast<ColumnType*>(result_column.get())->get_data().data();
132
1
        auto* __restrict column_raw_data =
133
1
                reinterpret_cast<const ColumnType*>(argument_column.get())->get_data().data();
134
135
        if constexpr (std::is_same_v<ColumnType, ColumnDecimal128V2>) {
136
            for (size_t i = 0; i < input_rows_count; ++i) {
137
                result_raw_data[i] =
138
                        Op<TYPE_DECIMALV2>::apply(column_raw_data[index_check_const(i, ArgConst)],
139
                                                  result_raw_data[i])
140
                                ? column_raw_data[index_check_const(i, ArgConst)]
141
                                : result_raw_data[i];
142
            }
143
        } else if constexpr (std::is_same_v<ColumnType, ColumnDecimal32> ||
144
                             std::is_same_v<ColumnType, ColumnDecimal64> ||
145
                             std::is_same_v<ColumnType, ColumnDecimal128V3> ||
146
                             std::is_same_v<ColumnType, ColumnDecimal256>) {
147
            for (size_t i = 0; i < input_rows_count; ++i) {
148
                result_raw_data[i] =
149
                        Op<PType>::apply(column_raw_data[index_check_const(i, ArgConst)].value,
150
                                         result_raw_data[i].value)
151
                                ? column_raw_data[index_check_const(i, ArgConst)]
152
                                : result_raw_data[i];
153
            }
154
1
        } else {
155
6
            for (size_t i = 0; i < input_rows_count; ++i) {
156
5
                result_raw_data[i] =
157
5
                        Op<PType>::apply(column_raw_data[index_check_const(i, ArgConst)],
158
5
                                         result_raw_data[i])
159
5
                                ? column_raw_data[index_check_const(i, ArgConst)]
160
5
                                : result_raw_data[i];
161
5
            }
162
1
        }
163
1
    }
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE6ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE6ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE7ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE7ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE8ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE8ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE9ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE9ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE28ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE28ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE29ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE29ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE20ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE20ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE30ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE30ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE35ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE35ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE11ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE11ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE25ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE25ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE26ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE26ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE12ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE12ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE27ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE27ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE42ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE42ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE36ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE36ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE37ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_6LessOpENS_9LeastNameEE18insert_result_dataILNS_13PrimitiveTypeE37ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE2ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE2ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE3ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE3ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE4ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE4ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE5ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
_ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE5ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Line
Count
Source
128
1
                                   const size_t input_rows_count) {
129
1
        using ColumnType = typename PrimitiveTypeTraits<PType>::ColumnType;
130
1
        auto* __restrict result_raw_data =
131
1
                reinterpret_cast<ColumnType*>(result_column.get())->get_data().data();
132
1
        auto* __restrict column_raw_data =
133
1
                reinterpret_cast<const ColumnType*>(argument_column.get())->get_data().data();
134
135
        if constexpr (std::is_same_v<ColumnType, ColumnDecimal128V2>) {
136
            for (size_t i = 0; i < input_rows_count; ++i) {
137
                result_raw_data[i] =
138
                        Op<TYPE_DECIMALV2>::apply(column_raw_data[index_check_const(i, ArgConst)],
139
                                                  result_raw_data[i])
140
                                ? column_raw_data[index_check_const(i, ArgConst)]
141
                                : result_raw_data[i];
142
            }
143
        } else if constexpr (std::is_same_v<ColumnType, ColumnDecimal32> ||
144
                             std::is_same_v<ColumnType, ColumnDecimal64> ||
145
                             std::is_same_v<ColumnType, ColumnDecimal128V3> ||
146
                             std::is_same_v<ColumnType, ColumnDecimal256>) {
147
            for (size_t i = 0; i < input_rows_count; ++i) {
148
                result_raw_data[i] =
149
                        Op<PType>::apply(column_raw_data[index_check_const(i, ArgConst)].value,
150
                                         result_raw_data[i].value)
151
                                ? column_raw_data[index_check_const(i, ArgConst)]
152
                                : result_raw_data[i];
153
            }
154
1
        } else {
155
6
            for (size_t i = 0; i < input_rows_count; ++i) {
156
5
                result_raw_data[i] =
157
5
                        Op<PType>::apply(column_raw_data[index_check_const(i, ArgConst)],
158
5
                                         result_raw_data[i])
159
5
                                ? column_raw_data[index_check_const(i, ArgConst)]
160
5
                                : result_raw_data[i];
161
5
            }
162
1
        }
163
1
    }
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE6ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE6ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE7ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE7ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE8ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE8ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE9ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE9ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE28ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE28ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE29ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE29ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE20ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE20ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE30ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE30ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE35ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE35ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE11ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE11ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE25ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE25ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE26ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE26ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE12ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE12ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE27ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE27ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE42ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE42ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE36ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE36ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE37ELb1EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
Unexecuted instantiation: _ZN5doris16CompareMultiImplINS_9GreaterOpENS_10GreastNameEE18insert_result_dataILNS_13PrimitiveTypeE37ELb0EEEvRKNS_3COWINS_7IColumnEE11mutable_ptrIS7_EERKNS8_13immutable_ptrIS7_EEm
164
};
165
166
struct FunctionFieldImpl {
167
    static constexpr auto name = "field";
168
169
0
    static DataTypePtr get_return_type_impl(const DataTypes& /*arguments*/) {
170
0
        return std::make_shared<DataTypeInt32>();
171
0
    }
172
173
    static ColumnPtr execute(Block& block, const ColumnNumbers& arguments,
174
0
                             size_t input_rows_count) {
175
0
        const auto& data_type = block.get_by_position(arguments[0]).type;
176
0
        auto result_column = ColumnInt32::create(input_rows_count, 0);
177
0
        auto& res_data = static_cast<ColumnInt32*>(result_column.get())->get_data();
178
179
0
        const auto& column_size = arguments.size();
180
0
        std::vector<ColumnPtr> argument_columns(column_size);
181
0
        for (int i = 0; i < column_size; ++i) {
182
0
            argument_columns[i] = block.get_by_position(arguments[i]).column;
183
0
        }
184
185
0
        bool arg_const;
186
0
        std::tie(argument_columns[0], arg_const) = unpack_if_const(argument_columns[0]);
187
0
        DCHECK_EQ(arg_const, false);
188
189
        //TODO: maybe could use hashmap to save column data, not use for loop ervey time to test equals.
190
0
        switch (data_type->get_primitive_type()) {
191
0
        case PrimitiveType::TYPE_STRING:
192
0
        case PrimitiveType::TYPE_CHAR:
193
0
        case PrimitiveType::TYPE_VARCHAR: {
194
0
            const auto& column_string = assert_cast<const ColumnString&>(*argument_columns[0]);
195
0
            for (int row = 0; row < input_rows_count; ++row) {
196
0
                const auto& str_data = column_string.get_data_at(row);
197
0
                for (int col = 1; col < column_size; ++col) {
198
0
                    auto [column, is_const] = unpack_if_const(argument_columns[col]);
199
0
                    const auto& temp_data = assert_cast<const ColumnString&>(*column).get_data_at(
200
0
                            index_check_const(row, is_const));
201
0
                    if (EqualsOp<TYPE_STRING>::apply(temp_data, str_data)) {
202
0
                        res_data[row] = col;
203
0
                        break;
204
0
                    }
205
0
                }
206
0
            }
207
0
            break;
208
0
        }
209
0
        case PrimitiveType::TYPE_TINYINT: {
210
0
            for (int col = 1; col < arguments.size(); ++col) {
211
0
                insert_result_data<TYPE_TINYINT>(res_data, argument_columns[0],
212
0
                                                 argument_columns[col], input_rows_count, col);
213
0
            }
214
0
            break;
215
0
        }
216
0
        case PrimitiveType::TYPE_SMALLINT: {
217
0
            for (int col = 1; col < arguments.size(); ++col) {
218
0
                insert_result_data<TYPE_SMALLINT>(res_data, argument_columns[0],
219
0
                                                  argument_columns[col], input_rows_count, col);
220
0
            }
221
0
            break;
222
0
        }
223
0
        case PrimitiveType::TYPE_INT: {
224
0
            for (int col = 1; col < arguments.size(); ++col) {
225
0
                insert_result_data<TYPE_INT>(res_data, argument_columns[0], argument_columns[col],
226
0
                                             input_rows_count, col);
227
0
            }
228
0
            break;
229
0
        }
230
0
        case PrimitiveType::TYPE_BIGINT: {
231
0
            for (int col = 1; col < arguments.size(); ++col) {
232
0
                insert_result_data<TYPE_BIGINT>(res_data, argument_columns[0],
233
0
                                                argument_columns[col], input_rows_count, col);
234
0
            }
235
0
            break;
236
0
        }
237
0
        case PrimitiveType::TYPE_LARGEINT: {
238
0
            for (int col = 1; col < arguments.size(); ++col) {
239
0
                insert_result_data<TYPE_LARGEINT>(res_data, argument_columns[0],
240
0
                                                  argument_columns[col], input_rows_count, col);
241
0
            }
242
0
            break;
243
0
        }
244
0
        case PrimitiveType::TYPE_FLOAT: {
245
0
            for (int col = 1; col < arguments.size(); ++col) {
246
0
                insert_result_data<TYPE_FLOAT>(res_data, argument_columns[0], argument_columns[col],
247
0
                                               input_rows_count, col);
248
0
            }
249
0
            break;
250
0
        }
251
0
        case PrimitiveType::TYPE_DOUBLE: {
252
0
            for (int col = 1; col < arguments.size(); ++col) {
253
0
                insert_result_data<TYPE_DOUBLE>(res_data, argument_columns[0],
254
0
                                                argument_columns[col], input_rows_count, col);
255
0
            }
256
0
            break;
257
0
        }
258
0
        case PrimitiveType::TYPE_DECIMAL32: {
259
0
            for (int col = 1; col < arguments.size(); ++col) {
260
0
                insert_result_data<TYPE_DECIMAL32>(res_data, argument_columns[0],
261
0
                                                   argument_columns[col], input_rows_count, col);
262
0
            }
263
0
            break;
264
0
        }
265
0
        case PrimitiveType::TYPE_DECIMAL64: {
266
0
            for (int col = 1; col < arguments.size(); ++col) {
267
0
                insert_result_data<TYPE_DECIMAL64>(res_data, argument_columns[0],
268
0
                                                   argument_columns[col], input_rows_count, col);
269
0
            }
270
0
            break;
271
0
        }
272
0
        case PrimitiveType::TYPE_DECIMALV2: {
273
0
            for (int col = 1; col < arguments.size(); ++col) {
274
0
                insert_result_data<TYPE_DECIMALV2>(res_data, argument_columns[0],
275
0
                                                   argument_columns[col], input_rows_count, col);
276
0
            }
277
0
            break;
278
0
        }
279
0
        case PrimitiveType::TYPE_DECIMAL128I: {
280
0
            for (int col = 1; col < arguments.size(); ++col) {
281
0
                insert_result_data<TYPE_DECIMAL128I>(res_data, argument_columns[0],
282
0
                                                     argument_columns[col], input_rows_count, col);
283
0
            }
284
0
            break;
285
0
        }
286
0
        case PrimitiveType::TYPE_DECIMAL256: {
287
0
            for (int col = 1; col < arguments.size(); ++col) {
288
0
                insert_result_data<TYPE_DECIMAL256>(res_data, argument_columns[0],
289
0
                                                    argument_columns[col], input_rows_count, col);
290
0
            }
291
0
            break;
292
0
        }
293
0
        case PrimitiveType::TYPE_DATEV2: {
294
0
            for (int col = 1; col < arguments.size(); ++col) {
295
0
                insert_result_data<TYPE_DATEV2>(res_data, argument_columns[0],
296
0
                                                argument_columns[col], input_rows_count, col);
297
0
            }
298
0
            break;
299
0
        }
300
0
        case PrimitiveType::TYPE_DATETIMEV2: {
301
0
            for (int col = 1; col < arguments.size(); ++col) {
302
0
                insert_result_data<TYPE_DATETIMEV2>(res_data, argument_columns[0],
303
0
                                                    argument_columns[col], input_rows_count, col);
304
0
            }
305
0
            break;
306
0
        }
307
0
        case PrimitiveType::TYPE_TIMESTAMPTZ: {
308
0
            for (int col = 1; col < arguments.size(); ++col) {
309
0
                insert_result_data<TYPE_TIMESTAMPTZ>(res_data, argument_columns[0],
310
0
                                                     argument_columns[col], input_rows_count, col);
311
0
            }
312
0
            break;
313
0
        }
314
0
        default:
315
0
            break;
316
0
        }
317
318
0
        return result_column;
319
0
    }
320
321
private:
322
    template <PrimitiveType PType>
323
    static void insert_result_data(PaddedPODArray<Int32>& __restrict res_data,
324
                                   ColumnPtr first_column, ColumnPtr argument_column,
325
0
                                   const size_t input_rows_count, const int col) {
326
0
        using ColumnType = typename PrimitiveTypeTraits<PType>::ColumnType;
327
0
        auto [first_column_raw, first_column_is_const] = unpack_if_const(first_column);
328
0
        auto* __restrict first_raw_data =
329
0
                assert_cast<const ColumnType*>(first_column_raw.get())->get_data().data();
330
331
0
        auto [argument_column_raw, argument_column_is_const] = unpack_if_const(argument_column);
332
0
        const auto& arg_data =
333
0
                assert_cast<const ColumnType&>(*argument_column_raw).get_data().data()[0];
334
0
        if constexpr (std::is_same_v<ColumnType, ColumnDecimal128V2>) {
335
0
            for (size_t i = 0; i < input_rows_count; ++i) {
336
0
                res_data[i] |=
337
0
                        (!res_data[i] *
338
0
                         (EqualsOp<TYPE_DECIMALV2>::apply(first_raw_data[i], arg_data)) * col);
339
0
            }
340
0
        } else if constexpr (is_decimal(PType)) {
341
0
            for (size_t i = 0; i < input_rows_count; ++i) {
342
0
                res_data[i] |=
343
0
                        (!res_data[i] *
344
0
                         (EqualsOp<PType>::apply(first_raw_data[i].value, arg_data.value)) * col);
345
0
            }
346
0
        } else {
347
0
            for (size_t i = 0; i < input_rows_count; ++i) {
348
0
                res_data[i] |= (!res_data[i] *
349
0
                                (EqualsOp<PType>::apply(first_raw_data[i], arg_data)) * col);
350
0
            }
351
0
        }
352
0
    }
Unexecuted instantiation: _ZN5doris17FunctionFieldImpl18insert_result_dataILNS_13PrimitiveTypeE3EEEvRNS_8PODArrayIiLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb0EEELm16ELm15EEENS_3COWINS_7IColumnEE13immutable_ptrISA_EESD_mi
Unexecuted instantiation: _ZN5doris17FunctionFieldImpl18insert_result_dataILNS_13PrimitiveTypeE4EEEvRNS_8PODArrayIiLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb0EEELm16ELm15EEENS_3COWINS_7IColumnEE13immutable_ptrISA_EESD_mi
Unexecuted instantiation: _ZN5doris17FunctionFieldImpl18insert_result_dataILNS_13PrimitiveTypeE5EEEvRNS_8PODArrayIiLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb0EEELm16ELm15EEENS_3COWINS_7IColumnEE13immutable_ptrISA_EESD_mi
Unexecuted instantiation: _ZN5doris17FunctionFieldImpl18insert_result_dataILNS_13PrimitiveTypeE6EEEvRNS_8PODArrayIiLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb0EEELm16ELm15EEENS_3COWINS_7IColumnEE13immutable_ptrISA_EESD_mi
Unexecuted instantiation: _ZN5doris17FunctionFieldImpl18insert_result_dataILNS_13PrimitiveTypeE7EEEvRNS_8PODArrayIiLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb0EEELm16ELm15EEENS_3COWINS_7IColumnEE13immutable_ptrISA_EESD_mi
Unexecuted instantiation: _ZN5doris17FunctionFieldImpl18insert_result_dataILNS_13PrimitiveTypeE8EEEvRNS_8PODArrayIiLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb0EEELm16ELm15EEENS_3COWINS_7IColumnEE13immutable_ptrISA_EESD_mi
Unexecuted instantiation: _ZN5doris17FunctionFieldImpl18insert_result_dataILNS_13PrimitiveTypeE9EEEvRNS_8PODArrayIiLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb0EEELm16ELm15EEENS_3COWINS_7IColumnEE13immutable_ptrISA_EESD_mi
Unexecuted instantiation: _ZN5doris17FunctionFieldImpl18insert_result_dataILNS_13PrimitiveTypeE28EEEvRNS_8PODArrayIiLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb0EEELm16ELm15EEENS_3COWINS_7IColumnEE13immutable_ptrISA_EESD_mi
Unexecuted instantiation: _ZN5doris17FunctionFieldImpl18insert_result_dataILNS_13PrimitiveTypeE29EEEvRNS_8PODArrayIiLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb0EEELm16ELm15EEENS_3COWINS_7IColumnEE13immutable_ptrISA_EESD_mi
Unexecuted instantiation: _ZN5doris17FunctionFieldImpl18insert_result_dataILNS_13PrimitiveTypeE20EEEvRNS_8PODArrayIiLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb0EEELm16ELm15EEENS_3COWINS_7IColumnEE13immutable_ptrISA_EESD_mi
Unexecuted instantiation: _ZN5doris17FunctionFieldImpl18insert_result_dataILNS_13PrimitiveTypeE30EEEvRNS_8PODArrayIiLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb0EEELm16ELm15EEENS_3COWINS_7IColumnEE13immutable_ptrISA_EESD_mi
Unexecuted instantiation: _ZN5doris17FunctionFieldImpl18insert_result_dataILNS_13PrimitiveTypeE35EEEvRNS_8PODArrayIiLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb0EEELm16ELm15EEENS_3COWINS_7IColumnEE13immutable_ptrISA_EESD_mi
Unexecuted instantiation: _ZN5doris17FunctionFieldImpl18insert_result_dataILNS_13PrimitiveTypeE25EEEvRNS_8PODArrayIiLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb0EEELm16ELm15EEENS_3COWINS_7IColumnEE13immutable_ptrISA_EESD_mi
Unexecuted instantiation: _ZN5doris17FunctionFieldImpl18insert_result_dataILNS_13PrimitiveTypeE26EEEvRNS_8PODArrayIiLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb0EEELm16ELm15EEENS_3COWINS_7IColumnEE13immutable_ptrISA_EESD_mi
Unexecuted instantiation: _ZN5doris17FunctionFieldImpl18insert_result_dataILNS_13PrimitiveTypeE42EEEvRNS_8PODArrayIiLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb0EEELm16ELm15EEENS_3COWINS_7IColumnEE13immutable_ptrISA_EESD_mi
353
};
354
355
struct LeastName {
356
    static constexpr auto name = "least";
357
};
358
struct GreastName {
359
    static constexpr auto name = "greatest";
360
};
361
362
using FunctionLeast = FunctionMultiSameArgs<CompareMultiImpl<LessOp, LeastName>>;
363
using FunctionGreaest = FunctionMultiSameArgs<CompareMultiImpl<GreaterOp, GreastName>>;
364
using FunctionField = FunctionMultiSameArgs<FunctionFieldImpl>;
365
1
void register_function_least_greast(SimpleFunctionFactory& factory) {
366
1
    factory.register_function<FunctionLeast>();
367
1
    factory.register_function<FunctionGreaest>();
368
1
    factory.register_function<FunctionField>();
369
1
}
370
}; // namespace doris