be/src/exprs/function/array/function_array_remove.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 <fmt/format.h> |
21 | | #include <glog/logging.h> |
22 | | |
23 | | #include <memory> |
24 | | #include <ostream> |
25 | | #include <type_traits> |
26 | | #include <utility> |
27 | | |
28 | | #include "common/status.h" |
29 | | #include "core/assert_cast.h" |
30 | | #include "core/block/block.h" |
31 | | #include "core/block/column_numbers.h" |
32 | | #include "core/block/column_with_type_and_name.h" |
33 | | #include "core/block/columns_with_type_and_name.h" |
34 | | #include "core/call_on_type_index.h" |
35 | | #include "core/column/column.h" |
36 | | #include "core/column/column_array.h" |
37 | | #include "core/column/column_array_view.h" |
38 | | #include "core/column/column_decimal.h" |
39 | | #include "core/column/column_nullable.h" |
40 | | #include "core/column/column_string.h" |
41 | | #include "core/column/column_vector.h" |
42 | | #include "core/data_type/data_type.h" |
43 | | #include "core/data_type/data_type_array.h" |
44 | | #include "core/data_type/data_type_nullable.h" |
45 | | #include "core/data_type/primitive_type.h" |
46 | | #include "core/pod_array_fwd.h" |
47 | | #include "core/types.h" |
48 | | #include "exprs/function/function.h" |
49 | | |
50 | | namespace doris { |
51 | | class FunctionContext; |
52 | | } // namespace doris |
53 | | |
54 | | namespace doris { |
55 | | |
56 | | class FunctionArrayRemove : public IFunction { |
57 | | public: |
58 | | static constexpr auto name = "array_remove"; |
59 | 5 | static FunctionPtr create() { return std::make_shared<FunctionArrayRemove>(); } |
60 | | |
61 | | /// Get function name. |
62 | 1 | String get_name() const override { return name; } |
63 | | |
64 | 4 | bool is_variadic() const override { return false; } |
65 | | |
66 | 3 | size_t get_number_of_arguments() const override { return 2; } |
67 | | |
68 | 6 | bool use_default_implementation_for_nulls() const override { return false; } |
69 | | |
70 | 3 | DataTypePtr get_return_type_impl(const DataTypes& arguments) const override { |
71 | 3 | return arguments[0]; |
72 | 3 | } |
73 | | |
74 | | Status execute_impl(FunctionContext* context, Block& block, const ColumnNumbers& arguments, |
75 | 3 | uint32_t result, size_t input_rows_count) const override { |
76 | | // For default implementation of nulls args |
77 | 3 | ColumnsWithTypeAndName args = {block.get_by_position(arguments[0]), |
78 | 3 | block.get_by_position(arguments[1])}; |
79 | | |
80 | 3 | auto res_column = _execute_dispatch(args, input_rows_count); |
81 | 3 | if (!res_column) { |
82 | 0 | return Status::RuntimeError( |
83 | 0 | fmt::format("unsupported types for function {}({}, {})", get_name(), |
84 | 0 | block.get_by_position(arguments[0]).type->get_name(), |
85 | 0 | block.get_by_position(arguments[1]).type->get_name())); |
86 | 0 | } |
87 | 3 | DCHECK_EQ(args[0].column->size(), res_column->size()); |
88 | 3 | block.replace_by_position(result, std::move(res_column)); |
89 | 3 | return Status::OK(); |
90 | 3 | } |
91 | | |
92 | | private: |
93 | | template <PrimitiveType PType> |
94 | | ColumnPtr _execute_view(const IColumn& array_data_column, |
95 | | const ColumnArrayView<PType>& array_view, |
96 | 3 | const ColumnView<PType>& right_view) const { |
97 | 3 | auto array_nested_column = array_data_column.clone_empty(); |
98 | 3 | array_nested_column->reserve(array_data_column.size()); |
99 | | |
100 | 3 | auto dst_offsets_column = ColumnArray::ColumnOffsets::create(); |
101 | 3 | auto& dst_offsets = dst_offsets_column->get_data(); |
102 | 3 | dst_offsets.reserve(array_view.size()); |
103 | | |
104 | 3 | size_t cur = 0; |
105 | 6 | for (size_t row = 0; row < array_view.size(); ++row) { |
106 | 3 | const auto array_data = array_view[row]; |
107 | 3 | size_t cur_count = 0; |
108 | 15 | for (size_t pos = 0; pos < array_data.size(); ++pos) { |
109 | | // Keep null values unless the remove target is also null. |
110 | 12 | if (array_data.is_null_at(pos) && right_view.is_null_at(row)) { |
111 | 2 | continue; |
112 | 2 | } |
113 | 10 | if (array_data.is_null_at(pos) || right_view.is_null_at(row) || |
114 | 10 | !(array_data.value_at(pos) == right_view.value_at(row))) { |
115 | 6 | array_nested_column->insert_from(array_data_column, array_data.offset + pos); |
116 | 6 | ++cur_count; |
117 | 6 | } |
118 | 10 | } |
119 | | |
120 | 3 | cur += cur_count; |
121 | 3 | dst_offsets.push_back(cur); |
122 | 3 | } |
123 | | |
124 | 3 | auto dst = |
125 | 3 | ColumnArray::create(std::move(array_nested_column), std::move(dst_offsets_column)); |
126 | 3 | if (!array_view.is_nullable()) { |
127 | 3 | return dst; |
128 | 3 | } |
129 | | |
130 | 0 | auto dst_null_column = ColumnUInt8::create(array_view.size(), 0); |
131 | 0 | auto& dst_null_map = dst_null_column->get_data(); |
132 | 0 | for (size_t row = 0; row < array_view.size(); ++row) { |
133 | 0 | dst_null_map[row] = array_view.is_null_at(row); |
134 | 0 | } |
135 | 0 | return ColumnNullable::create(std::move(dst), std::move(dst_null_column)); |
136 | 3 | } Unexecuted instantiation: _ZNK5doris19FunctionArrayRemove13_execute_viewILNS_13PrimitiveTypeE2EEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EERKS4_RKNS_15ColumnArrayViewIXT_EEERKNS_10ColumnViewIXT_EEE Unexecuted instantiation: _ZNK5doris19FunctionArrayRemove13_execute_viewILNS_13PrimitiveTypeE3EEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EERKS4_RKNS_15ColumnArrayViewIXT_EEERKNS_10ColumnViewIXT_EEE Unexecuted instantiation: _ZNK5doris19FunctionArrayRemove13_execute_viewILNS_13PrimitiveTypeE4EEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EERKS4_RKNS_15ColumnArrayViewIXT_EEERKNS_10ColumnViewIXT_EEE _ZNK5doris19FunctionArrayRemove13_execute_viewILNS_13PrimitiveTypeE5EEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EERKS4_RKNS_15ColumnArrayViewIXT_EEERKNS_10ColumnViewIXT_EEE Line | Count | Source | 96 | 2 | const ColumnView<PType>& right_view) const { | 97 | 2 | auto array_nested_column = array_data_column.clone_empty(); | 98 | 2 | array_nested_column->reserve(array_data_column.size()); | 99 | | | 100 | 2 | auto dst_offsets_column = ColumnArray::ColumnOffsets::create(); | 101 | 2 | auto& dst_offsets = dst_offsets_column->get_data(); | 102 | 2 | dst_offsets.reserve(array_view.size()); | 103 | | | 104 | 2 | size_t cur = 0; | 105 | 4 | for (size_t row = 0; row < array_view.size(); ++row) { | 106 | 2 | const auto array_data = array_view[row]; | 107 | 2 | size_t cur_count = 0; | 108 | 10 | for (size_t pos = 0; pos < array_data.size(); ++pos) { | 109 | | // Keep null values unless the remove target is also null. | 110 | 8 | if (array_data.is_null_at(pos) && right_view.is_null_at(row)) { | 111 | 2 | continue; | 112 | 2 | } | 113 | 6 | if (array_data.is_null_at(pos) || right_view.is_null_at(row) || | 114 | 6 | !(array_data.value_at(pos) == right_view.value_at(row))) { | 115 | 4 | array_nested_column->insert_from(array_data_column, array_data.offset + pos); | 116 | 4 | ++cur_count; | 117 | 4 | } | 118 | 6 | } | 119 | | | 120 | 2 | cur += cur_count; | 121 | 2 | dst_offsets.push_back(cur); | 122 | 2 | } | 123 | | | 124 | 2 | auto dst = | 125 | 2 | ColumnArray::create(std::move(array_nested_column), std::move(dst_offsets_column)); | 126 | 2 | if (!array_view.is_nullable()) { | 127 | 2 | return dst; | 128 | 2 | } | 129 | | | 130 | 0 | auto dst_null_column = ColumnUInt8::create(array_view.size(), 0); | 131 | 0 | auto& dst_null_map = dst_null_column->get_data(); | 132 | 0 | for (size_t row = 0; row < array_view.size(); ++row) { | 133 | 0 | dst_null_map[row] = array_view.is_null_at(row); | 134 | 0 | } | 135 | 0 | return ColumnNullable::create(std::move(dst), std::move(dst_null_column)); | 136 | 2 | } |
Unexecuted instantiation: _ZNK5doris19FunctionArrayRemove13_execute_viewILNS_13PrimitiveTypeE6EEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EERKS4_RKNS_15ColumnArrayViewIXT_EEERKNS_10ColumnViewIXT_EEE Unexecuted instantiation: _ZNK5doris19FunctionArrayRemove13_execute_viewILNS_13PrimitiveTypeE7EEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EERKS4_RKNS_15ColumnArrayViewIXT_EEERKNS_10ColumnViewIXT_EEE Unexecuted instantiation: _ZNK5doris19FunctionArrayRemove13_execute_viewILNS_13PrimitiveTypeE8EEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EERKS4_RKNS_15ColumnArrayViewIXT_EEERKNS_10ColumnViewIXT_EEE Unexecuted instantiation: _ZNK5doris19FunctionArrayRemove13_execute_viewILNS_13PrimitiveTypeE9EEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EERKS4_RKNS_15ColumnArrayViewIXT_EEERKNS_10ColumnViewIXT_EEE Unexecuted instantiation: _ZNK5doris19FunctionArrayRemove13_execute_viewILNS_13PrimitiveTypeE28EEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EERKS4_RKNS_15ColumnArrayViewIXT_EEERKNS_10ColumnViewIXT_EEE Unexecuted instantiation: _ZNK5doris19FunctionArrayRemove13_execute_viewILNS_13PrimitiveTypeE29EEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EERKS4_RKNS_15ColumnArrayViewIXT_EEERKNS_10ColumnViewIXT_EEE Unexecuted instantiation: _ZNK5doris19FunctionArrayRemove13_execute_viewILNS_13PrimitiveTypeE20EEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EERKS4_RKNS_15ColumnArrayViewIXT_EEERKNS_10ColumnViewIXT_EEE Unexecuted instantiation: _ZNK5doris19FunctionArrayRemove13_execute_viewILNS_13PrimitiveTypeE30EEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EERKS4_RKNS_15ColumnArrayViewIXT_EEERKNS_10ColumnViewIXT_EEE Unexecuted instantiation: _ZNK5doris19FunctionArrayRemove13_execute_viewILNS_13PrimitiveTypeE35EEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EERKS4_RKNS_15ColumnArrayViewIXT_EEERKNS_10ColumnViewIXT_EEE Unexecuted instantiation: _ZNK5doris19FunctionArrayRemove13_execute_viewILNS_13PrimitiveTypeE11EEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EERKS4_RKNS_15ColumnArrayViewIXT_EEERKNS_10ColumnViewIXT_EEE Unexecuted instantiation: _ZNK5doris19FunctionArrayRemove13_execute_viewILNS_13PrimitiveTypeE25EEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EERKS4_RKNS_15ColumnArrayViewIXT_EEERKNS_10ColumnViewIXT_EEE Unexecuted instantiation: _ZNK5doris19FunctionArrayRemove13_execute_viewILNS_13PrimitiveTypeE26EEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EERKS4_RKNS_15ColumnArrayViewIXT_EEERKNS_10ColumnViewIXT_EEE Unexecuted instantiation: _ZNK5doris19FunctionArrayRemove13_execute_viewILNS_13PrimitiveTypeE12EEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EERKS4_RKNS_15ColumnArrayViewIXT_EEERKNS_10ColumnViewIXT_EEE Unexecuted instantiation: _ZNK5doris19FunctionArrayRemove13_execute_viewILNS_13PrimitiveTypeE27EEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EERKS4_RKNS_15ColumnArrayViewIXT_EEERKNS_10ColumnViewIXT_EEE Unexecuted instantiation: _ZNK5doris19FunctionArrayRemove13_execute_viewILNS_13PrimitiveTypeE42EEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EERKS4_RKNS_15ColumnArrayViewIXT_EEERKNS_10ColumnViewIXT_EEE Unexecuted instantiation: _ZNK5doris19FunctionArrayRemove13_execute_viewILNS_13PrimitiveTypeE36EEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EERKS4_RKNS_15ColumnArrayViewIXT_EEERKNS_10ColumnViewIXT_EEE Unexecuted instantiation: _ZNK5doris19FunctionArrayRemove13_execute_viewILNS_13PrimitiveTypeE37EEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EERKS4_RKNS_15ColumnArrayViewIXT_EEERKNS_10ColumnViewIXT_EEE _ZNK5doris19FunctionArrayRemove13_execute_viewILNS_13PrimitiveTypeE23EEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EERKS4_RKNS_15ColumnArrayViewIXT_EEERKNS_10ColumnViewIXT_EEE Line | Count | Source | 96 | 1 | const ColumnView<PType>& right_view) const { | 97 | 1 | auto array_nested_column = array_data_column.clone_empty(); | 98 | 1 | array_nested_column->reserve(array_data_column.size()); | 99 | | | 100 | 1 | auto dst_offsets_column = ColumnArray::ColumnOffsets::create(); | 101 | 1 | auto& dst_offsets = dst_offsets_column->get_data(); | 102 | 1 | dst_offsets.reserve(array_view.size()); | 103 | | | 104 | 1 | size_t cur = 0; | 105 | 2 | for (size_t row = 0; row < array_view.size(); ++row) { | 106 | 1 | const auto array_data = array_view[row]; | 107 | 1 | size_t cur_count = 0; | 108 | 5 | for (size_t pos = 0; pos < array_data.size(); ++pos) { | 109 | | // Keep null values unless the remove target is also null. | 110 | 4 | if (array_data.is_null_at(pos) && right_view.is_null_at(row)) { | 111 | 0 | continue; | 112 | 0 | } | 113 | 4 | if (array_data.is_null_at(pos) || right_view.is_null_at(row) || | 114 | 4 | !(array_data.value_at(pos) == right_view.value_at(row))) { | 115 | 2 | array_nested_column->insert_from(array_data_column, array_data.offset + pos); | 116 | 2 | ++cur_count; | 117 | 2 | } | 118 | 4 | } | 119 | | | 120 | 1 | cur += cur_count; | 121 | 1 | dst_offsets.push_back(cur); | 122 | 1 | } | 123 | | | 124 | 1 | auto dst = | 125 | 1 | ColumnArray::create(std::move(array_nested_column), std::move(dst_offsets_column)); | 126 | 1 | if (!array_view.is_nullable()) { | 127 | 1 | return dst; | 128 | 1 | } | 129 | | | 130 | 0 | auto dst_null_column = ColumnUInt8::create(array_view.size(), 0); | 131 | 0 | auto& dst_null_map = dst_null_column->get_data(); | 132 | 0 | for (size_t row = 0; row < array_view.size(); ++row) { | 133 | 0 | dst_null_map[row] = array_view.is_null_at(row); | 134 | 0 | } | 135 | 0 | return ColumnNullable::create(std::move(dst), std::move(dst_null_column)); | 136 | 1 | } |
|
137 | | |
138 | | ColumnPtr _execute_dispatch(const ColumnsWithTypeAndName& arguments, |
139 | 3 | size_t input_rows_count) const { |
140 | | // check array nested column type and get data |
141 | 3 | const auto& [left_column, is_const] = unpack_if_const(arguments[0].column); |
142 | 3 | const ColumnArray* array_column = nullptr; |
143 | 3 | if (const auto* nullable_array = check_and_get_column<ColumnNullable>(left_column.get())) { |
144 | 0 | array_column = |
145 | 0 | reinterpret_cast<const ColumnArray*>(&nullable_array->get_nested_column()); |
146 | 0 | nullable_array->sanity_check(); |
147 | 3 | } else { |
148 | 3 | array_column = reinterpret_cast<const ColumnArray*>(left_column.get()); |
149 | 3 | } |
150 | 3 | DCHECK(is_const ? array_column->get_offsets().size() == 1 |
151 | 3 | : array_column->get_offsets().size() == input_rows_count); |
152 | | // execute |
153 | 3 | auto array_type = remove_nullable(arguments[0].type); |
154 | 3 | auto left_element_type = remove_nullable( |
155 | 3 | assert_cast<const DataTypeArray*>(array_type.get())->get_nested_type()); |
156 | 3 | auto right_type = remove_nullable(arguments[1].type); |
157 | | |
158 | 3 | auto left_element_primitive_type = left_element_type->get_primitive_type(); |
159 | 3 | auto right_primitive_type = right_type->get_primitive_type(); |
160 | 3 | ColumnPtr res = nullptr; |
161 | 3 | if (right_primitive_type == left_element_primitive_type || |
162 | 3 | (is_string_type(right_primitive_type) && is_string_type(left_element_primitive_type))) { |
163 | 3 | auto call = [&](const auto& type) -> bool { |
164 | 3 | using DispatchType = std::decay_t<decltype(type)>; |
165 | 3 | constexpr PrimitiveType PType = DispatchType::PType; |
166 | 3 | auto array_view = ColumnArrayView<PType>::create(arguments[0].column); |
167 | 3 | auto right_view = ColumnView<PType>::create(arguments[1].column); |
168 | 3 | res = _execute_view(array_column->get_data(), array_view, right_view); |
169 | 3 | return true; |
170 | 3 | }; Unexecuted instantiation: _ZZNK5doris19FunctionArrayRemove17_execute_dispatchERKSt6vectorINS_21ColumnWithTypeAndNameESaIS2_EEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE2EEEEEbS9_ Unexecuted instantiation: _ZZNK5doris19FunctionArrayRemove17_execute_dispatchERKSt6vectorINS_21ColumnWithTypeAndNameESaIS2_EEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE3EEEEEbS9_ Unexecuted instantiation: _ZZNK5doris19FunctionArrayRemove17_execute_dispatchERKSt6vectorINS_21ColumnWithTypeAndNameESaIS2_EEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE4EEEEEbS9_ _ZZNK5doris19FunctionArrayRemove17_execute_dispatchERKSt6vectorINS_21ColumnWithTypeAndNameESaIS2_EEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE5EEEEEbS9_ Line | Count | Source | 163 | 2 | auto call = [&](const auto& type) -> bool { | 164 | 2 | using DispatchType = std::decay_t<decltype(type)>; | 165 | 2 | constexpr PrimitiveType PType = DispatchType::PType; | 166 | 2 | auto array_view = ColumnArrayView<PType>::create(arguments[0].column); | 167 | 2 | auto right_view = ColumnView<PType>::create(arguments[1].column); | 168 | 2 | res = _execute_view(array_column->get_data(), array_view, right_view); | 169 | 2 | return true; | 170 | 2 | }; |
Unexecuted instantiation: _ZZNK5doris19FunctionArrayRemove17_execute_dispatchERKSt6vectorINS_21ColumnWithTypeAndNameESaIS2_EEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE6EEEEEbS9_ Unexecuted instantiation: _ZZNK5doris19FunctionArrayRemove17_execute_dispatchERKSt6vectorINS_21ColumnWithTypeAndNameESaIS2_EEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE7EEEEEbS9_ Unexecuted instantiation: _ZZNK5doris19FunctionArrayRemove17_execute_dispatchERKSt6vectorINS_21ColumnWithTypeAndNameESaIS2_EEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE8EEEEEbS9_ Unexecuted instantiation: _ZZNK5doris19FunctionArrayRemove17_execute_dispatchERKSt6vectorINS_21ColumnWithTypeAndNameESaIS2_EEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE9EEEEEbS9_ Unexecuted instantiation: _ZZNK5doris19FunctionArrayRemove17_execute_dispatchERKSt6vectorINS_21ColumnWithTypeAndNameESaIS2_EEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE28EEEEEbS9_ Unexecuted instantiation: _ZZNK5doris19FunctionArrayRemove17_execute_dispatchERKSt6vectorINS_21ColumnWithTypeAndNameESaIS2_EEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE29EEEEEbS9_ Unexecuted instantiation: _ZZNK5doris19FunctionArrayRemove17_execute_dispatchERKSt6vectorINS_21ColumnWithTypeAndNameESaIS2_EEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE20EEEEEbS9_ Unexecuted instantiation: _ZZNK5doris19FunctionArrayRemove17_execute_dispatchERKSt6vectorINS_21ColumnWithTypeAndNameESaIS2_EEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE30EEEEEbS9_ Unexecuted instantiation: _ZZNK5doris19FunctionArrayRemove17_execute_dispatchERKSt6vectorINS_21ColumnWithTypeAndNameESaIS2_EEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE35EEEEEbS9_ Unexecuted instantiation: _ZZNK5doris19FunctionArrayRemove17_execute_dispatchERKSt6vectorINS_21ColumnWithTypeAndNameESaIS2_EEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE11EEEEEbS9_ Unexecuted instantiation: _ZZNK5doris19FunctionArrayRemove17_execute_dispatchERKSt6vectorINS_21ColumnWithTypeAndNameESaIS2_EEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE25EEEEEbS9_ Unexecuted instantiation: _ZZNK5doris19FunctionArrayRemove17_execute_dispatchERKSt6vectorINS_21ColumnWithTypeAndNameESaIS2_EEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE26EEEEEbS9_ Unexecuted instantiation: _ZZNK5doris19FunctionArrayRemove17_execute_dispatchERKSt6vectorINS_21ColumnWithTypeAndNameESaIS2_EEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE12EEEEEbS9_ Unexecuted instantiation: _ZZNK5doris19FunctionArrayRemove17_execute_dispatchERKSt6vectorINS_21ColumnWithTypeAndNameESaIS2_EEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE27EEEEEbS9_ Unexecuted instantiation: _ZZNK5doris19FunctionArrayRemove17_execute_dispatchERKSt6vectorINS_21ColumnWithTypeAndNameESaIS2_EEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE42EEEEEbS9_ Unexecuted instantiation: _ZZNK5doris19FunctionArrayRemove17_execute_dispatchERKSt6vectorINS_21ColumnWithTypeAndNameESaIS2_EEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE36EEEEEbS9_ Unexecuted instantiation: _ZZNK5doris19FunctionArrayRemove17_execute_dispatchERKSt6vectorINS_21ColumnWithTypeAndNameESaIS2_EEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE37EEEEEbS9_ _ZZNK5doris19FunctionArrayRemove17_execute_dispatchERKSt6vectorINS_21ColumnWithTypeAndNameESaIS2_EEmENKUlRKT_E_clINS_16DispatchDataTypeILNS_13PrimitiveTypeE23EEEEEbS9_ Line | Count | Source | 163 | 1 | auto call = [&](const auto& type) -> bool { | 164 | 1 | using DispatchType = std::decay_t<decltype(type)>; | 165 | 1 | constexpr PrimitiveType PType = DispatchType::PType; | 166 | 1 | auto array_view = ColumnArrayView<PType>::create(arguments[0].column); | 167 | 1 | auto right_view = ColumnView<PType>::create(arguments[1].column); | 168 | 1 | res = _execute_view(array_column->get_data(), array_view, right_view); | 169 | 1 | return true; | 170 | 1 | }; |
|
171 | | |
172 | 3 | dispatch_switch_all(left_element_primitive_type, call); |
173 | 3 | } |
174 | 3 | return res; |
175 | 3 | } |
176 | | }; |
177 | | |
178 | | } // namespace doris |