be/src/exprs/function/function_bitmap_variadic.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 <functional> |
22 | | #include <memory> |
23 | | #include <type_traits> |
24 | | #include <utility> |
25 | | #include <vector> |
26 | | |
27 | | #include "common/status.h" |
28 | | #include "core/assert_cast.h" |
29 | | #include "core/block/block.h" |
30 | | #include "core/block/column_numbers.h" |
31 | | #include "core/block/column_with_type_and_name.h" |
32 | | #include "core/column/column.h" |
33 | | #include "core/column/column_complex.h" |
34 | | #include "core/column/column_nullable.h" |
35 | | #include "core/column/column_vector.h" |
36 | | #include "core/data_type/data_type.h" |
37 | | #include "core/data_type/data_type_bitmap.h" |
38 | | #include "core/data_type/data_type_nullable.h" |
39 | | #include "core/data_type/data_type_number.h" |
40 | | #include "core/types.h" |
41 | | #include "core/value/bitmap_value.h" |
42 | | #include "exprs/aggregate/aggregate_function.h" |
43 | | #include "exprs/function/function.h" |
44 | | #include "exprs/function/simple_function_factory.h" |
45 | | |
46 | | namespace doris { |
47 | | class FunctionContext; |
48 | | } // namespace doris |
49 | | |
50 | | namespace doris { |
51 | | |
52 | | // currently only bitmap_or and bitmap_or_count will call this function, |
53 | | // other bitmap functions will use default implementation for nulls |
54 | | #define BITMAP_OR_NULLABLE(nullable, input_rows_count, res, op) \ |
55 | 31 | const auto& nested_col_ptr = nullable->get_nested_column_ptr(); \ |
56 | 31 | const auto* __restrict null_map_data = nullable->get_null_map_data().data(); \ |
57 | 31 | const auto& mid_data = assert_cast<const ColumnBitmap*>(nested_col_ptr.get())->get_data(); \ |
58 | 74 | for (size_t row = 0; row < input_rows_count; ++row) { \ |
59 | 43 | if (!null_map_data[row]) { \ |
60 | 20 | res[row] op mid_data[row]; \ |
61 | 20 | } \ |
62 | 43 | } |
63 | | |
64 | | #define BITMAP_FUNCTION_VARIADIC(CLASS, FUNCTION_NAME, OP) \ |
65 | | struct CLASS { \ |
66 | | static constexpr auto name = #FUNCTION_NAME; \ |
67 | | using ResultDataType = DataTypeBitMap; \ |
68 | | static Status vector_vector(ColumnPtr argument_columns[], size_t col_size, \ |
69 | | size_t input_rows_count, std::vector<BitmapValue>& res, \ |
70 | 481 | IColumn* res_nulls) { \ |
71 | 481 | std::vector<const ColumnUInt8::value_type*> null_map_datas(col_size); \ |
72 | 481 | int nullable_cols_count = 0; \ |
73 | 481 | ColumnUInt8::value_type* __restrict res_nulls_data = nullptr; \ |
74 | 481 | if (res_nulls) { \ |
75 | 21 | res_nulls_data = assert_cast<ColumnUInt8*>(res_nulls)->get_data().data(); \ |
76 | 21 | } \ |
77 | 481 | if (auto* nullable = check_and_get_column<ColumnNullable>(*argument_columns[0])) { \ |
78 | 12 | null_map_datas[nullable_cols_count++] = nullable->get_null_map_data().data(); \ |
79 | 12 | BITMAP_OR_NULLABLE(nullable, input_rows_count, res, =); \ |
80 | 469 | } else { \ |
81 | 469 | const auto& mid_data = \ |
82 | 469 | assert_cast<const ColumnBitmap*>(argument_columns[0].get())->get_data(); \ |
83 | 16.8k | for (size_t row = 0; row < input_rows_count; ++row) { \ |
84 | 16.4k | res[row] = mid_data[row]; \ |
85 | 16.4k | } \ |
86 | 469 | } \ |
87 | 980 | for (size_t col = 1; col < col_size; ++col) { \ |
88 | 499 | if (auto* nullable = \ |
89 | 499 | check_and_get_column<ColumnNullable>(*argument_columns[col])) { \ |
90 | 19 | null_map_datas[nullable_cols_count++] = nullable->get_null_map_data().data(); \ |
91 | 19 | BITMAP_OR_NULLABLE(nullable, input_rows_count, res, OP); \ |
92 | 480 | } else { \ |
93 | 480 | const auto& col_data = \ |
94 | 480 | assert_cast<const ColumnBitmap*>(argument_columns[col].get()) \ |
95 | 480 | ->get_data(); \ |
96 | 16.9k | for (size_t row = 0; row < input_rows_count; ++row) { \ |
97 | 16.4k | res[row] OP col_data[row]; \ |
98 | 16.4k | } \ |
99 | 480 | } \ |
100 | 499 | } \ |
101 | 481 | if (res_nulls_data && nullable_cols_count == col_size) { \ |
102 | 9 | const auto* null_map_data = null_map_datas[0]; \ |
103 | 22 | for (size_t row = 0; row < input_rows_count; ++row) { \ |
104 | 13 | res_nulls_data[row] = null_map_data[row]; \ |
105 | 13 | } \ |
106 | 18 | for (int i = 1; i < nullable_cols_count; ++i) { \ |
107 | 9 | null_map_data = null_map_datas[i]; \ |
108 | 22 | for (size_t row = 0; row < input_rows_count; ++row) { \ |
109 | 13 | res_nulls_data[row] &= null_map_data[row]; \ |
110 | 13 | } \ |
111 | 9 | } \ |
112 | 9 | } \ |
113 | 481 | return Status::OK(); \ |
114 | 481 | } \ _ZN5doris8BitmapOr13vector_vectorEPNS_3COWINS_7IColumnEE13immutable_ptrIS2_EEmmRSt6vectorINS_11BitmapValueESaIS8_EEPS2_ Line | Count | Source | 70 | 46 | IColumn* res_nulls) { \ | 71 | 46 | std::vector<const ColumnUInt8::value_type*> null_map_datas(col_size); \ | 72 | 46 | int nullable_cols_count = 0; \ | 73 | 46 | ColumnUInt8::value_type* __restrict res_nulls_data = nullptr; \ | 74 | 46 | if (res_nulls) { \ | 75 | 21 | res_nulls_data = assert_cast<ColumnUInt8*>(res_nulls)->get_data().data(); \ | 76 | 21 | } \ | 77 | 46 | if (auto* nullable = check_and_get_column<ColumnNullable>(*argument_columns[0])) { \ | 78 | 12 | null_map_datas[nullable_cols_count++] = nullable->get_null_map_data().data(); \ | 79 | 12 | BITMAP_OR_NULLABLE(nullable, input_rows_count, res, =); \ | 80 | 34 | } else { \ | 81 | 34 | const auto& mid_data = \ | 82 | 34 | assert_cast<const ColumnBitmap*>(argument_columns[0].get())->get_data(); \ | 83 | 95 | for (size_t row = 0; row < input_rows_count; ++row) { \ | 84 | 61 | res[row] = mid_data[row]; \ | 85 | 61 | } \ | 86 | 34 | } \ | 87 | 102 | for (size_t col = 1; col < col_size; ++col) { \ | 88 | 56 | if (auto* nullable = \ | 89 | 56 | check_and_get_column<ColumnNullable>(*argument_columns[col])) { \ | 90 | 19 | null_map_datas[nullable_cols_count++] = nullable->get_null_map_data().data(); \ | 91 | 19 | BITMAP_OR_NULLABLE(nullable, input_rows_count, res, OP); \ | 92 | 37 | } else { \ | 93 | 37 | const auto& col_data = \ | 94 | 37 | assert_cast<const ColumnBitmap*>(argument_columns[col].get()) \ | 95 | 37 | ->get_data(); \ | 96 | 97 | for (size_t row = 0; row < input_rows_count; ++row) { \ | 97 | 60 | res[row] OP col_data[row]; \ | 98 | 60 | } \ | 99 | 37 | } \ | 100 | 56 | } \ | 101 | 46 | if (res_nulls_data && nullable_cols_count == col_size) { \ | 102 | 9 | const auto* null_map_data = null_map_datas[0]; \ | 103 | 22 | for (size_t row = 0; row < input_rows_count; ++row) { \ | 104 | 13 | res_nulls_data[row] = null_map_data[row]; \ | 105 | 13 | } \ | 106 | 18 | for (int i = 1; i < nullable_cols_count; ++i) { \ | 107 | 9 | null_map_data = null_map_datas[i]; \ | 108 | 22 | for (size_t row = 0; row < input_rows_count; ++row) { \ | 109 | 13 | res_nulls_data[row] &= null_map_data[row]; \ | 110 | 13 | } \ | 111 | 9 | } \ | 112 | 9 | } \ | 113 | 46 | return Status::OK(); \ | 114 | 46 | } \ |
_ZN5doris9BitmapXor13vector_vectorEPNS_3COWINS_7IColumnEE13immutable_ptrIS2_EEmmRSt6vectorINS_11BitmapValueESaIS8_EEPS2_ Line | Count | Source | 70 | 417 | IColumn* res_nulls) { \ | 71 | 417 | std::vector<const ColumnUInt8::value_type*> null_map_datas(col_size); \ | 72 | 417 | int nullable_cols_count = 0; \ | 73 | 417 | ColumnUInt8::value_type* __restrict res_nulls_data = nullptr; \ | 74 | 417 | if (res_nulls) { \ | 75 | 0 | res_nulls_data = assert_cast<ColumnUInt8*>(res_nulls)->get_data().data(); \ | 76 | 0 | } \ | 77 | 417 | if (auto* nullable = check_and_get_column<ColumnNullable>(*argument_columns[0])) { \ | 78 | 0 | null_map_datas[nullable_cols_count++] = nullable->get_null_map_data().data(); \ | 79 | 0 | BITMAP_OR_NULLABLE(nullable, input_rows_count, res, =); \ | 80 | 417 | } else { \ | 81 | 417 | const auto& mid_data = \ | 82 | 417 | assert_cast<const ColumnBitmap*>(argument_columns[0].get())->get_data(); \ | 83 | 16.7k | for (size_t row = 0; row < input_rows_count; ++row) { \ | 84 | 16.3k | res[row] = mid_data[row]; \ | 85 | 16.3k | } \ | 86 | 417 | } \ | 87 | 839 | for (size_t col = 1; col < col_size; ++col) { \ | 88 | 422 | if (auto* nullable = \ | 89 | 422 | check_and_get_column<ColumnNullable>(*argument_columns[col])) { \ | 90 | 0 | null_map_datas[nullable_cols_count++] = nullable->get_null_map_data().data(); \ | 91 | 0 | BITMAP_OR_NULLABLE(nullable, input_rows_count, res, OP); \ | 92 | 422 | } else { \ | 93 | 422 | const auto& col_data = \ | 94 | 422 | assert_cast<const ColumnBitmap*>(argument_columns[col].get()) \ | 95 | 422 | ->get_data(); \ | 96 | 16.7k | for (size_t row = 0; row < input_rows_count; ++row) { \ | 97 | 16.3k | res[row] OP col_data[row]; \ | 98 | 16.3k | } \ | 99 | 422 | } \ | 100 | 422 | } \ | 101 | 417 | if (res_nulls_data && nullable_cols_count == col_size) { \ | 102 | 0 | const auto* null_map_data = null_map_datas[0]; \ | 103 | 0 | for (size_t row = 0; row < input_rows_count; ++row) { \ | 104 | 0 | res_nulls_data[row] = null_map_data[row]; \ | 105 | 0 | } \ | 106 | 0 | for (int i = 1; i < nullable_cols_count; ++i) { \ | 107 | 0 | null_map_data = null_map_datas[i]; \ | 108 | 0 | for (size_t row = 0; row < input_rows_count; ++row) { \ | 109 | 0 | res_nulls_data[row] &= null_map_data[row]; \ | 110 | 0 | } \ | 111 | 0 | } \ | 112 | 0 | } \ | 113 | 417 | return Status::OK(); \ | 114 | 417 | } \ |
_ZN5doris9BitmapAnd13vector_vectorEPNS_3COWINS_7IColumnEE13immutable_ptrIS2_EEmmRSt6vectorINS_11BitmapValueESaIS8_EEPS2_ Line | Count | Source | 70 | 18 | IColumn* res_nulls) { \ | 71 | 18 | std::vector<const ColumnUInt8::value_type*> null_map_datas(col_size); \ | 72 | 18 | int nullable_cols_count = 0; \ | 73 | 18 | ColumnUInt8::value_type* __restrict res_nulls_data = nullptr; \ | 74 | 18 | if (res_nulls) { \ | 75 | 0 | res_nulls_data = assert_cast<ColumnUInt8*>(res_nulls)->get_data().data(); \ | 76 | 0 | } \ | 77 | 18 | if (auto* nullable = check_and_get_column<ColumnNullable>(*argument_columns[0])) { \ | 78 | 0 | null_map_datas[nullable_cols_count++] = nullable->get_null_map_data().data(); \ | 79 | 0 | BITMAP_OR_NULLABLE(nullable, input_rows_count, res, =); \ | 80 | 18 | } else { \ | 81 | 18 | const auto& mid_data = \ | 82 | 18 | assert_cast<const ColumnBitmap*>(argument_columns[0].get())->get_data(); \ | 83 | 60 | for (size_t row = 0; row < input_rows_count; ++row) { \ | 84 | 42 | res[row] = mid_data[row]; \ | 85 | 42 | } \ | 86 | 18 | } \ | 87 | 39 | for (size_t col = 1; col < col_size; ++col) { \ | 88 | 21 | if (auto* nullable = \ | 89 | 21 | check_and_get_column<ColumnNullable>(*argument_columns[col])) { \ | 90 | 0 | null_map_datas[nullable_cols_count++] = nullable->get_null_map_data().data(); \ | 91 | 0 | BITMAP_OR_NULLABLE(nullable, input_rows_count, res, OP); \ | 92 | 21 | } else { \ | 93 | 21 | const auto& col_data = \ | 94 | 21 | assert_cast<const ColumnBitmap*>(argument_columns[col].get()) \ | 95 | 21 | ->get_data(); \ | 96 | 65 | for (size_t row = 0; row < input_rows_count; ++row) { \ | 97 | 44 | res[row] OP col_data[row]; \ | 98 | 44 | } \ | 99 | 21 | } \ | 100 | 21 | } \ | 101 | 18 | if (res_nulls_data && nullable_cols_count == col_size) { \ | 102 | 0 | const auto* null_map_data = null_map_datas[0]; \ | 103 | 0 | for (size_t row = 0; row < input_rows_count; ++row) { \ | 104 | 0 | res_nulls_data[row] = null_map_data[row]; \ | 105 | 0 | } \ | 106 | 0 | for (int i = 1; i < nullable_cols_count; ++i) { \ | 107 | 0 | null_map_data = null_map_datas[i]; \ | 108 | 0 | for (size_t row = 0; row < input_rows_count; ++row) { \ | 109 | 0 | res_nulls_data[row] &= null_map_data[row]; \ | 110 | 0 | } \ | 111 | 0 | } \ | 112 | 0 | } \ | 113 | 18 | return Status::OK(); \ | 114 | 18 | } \ |
|
115 | | } |
116 | | |
117 | | #define BITMAP_FUNCTION_COUNT_VARIADIC(CLASS, FUNCTION_NAME, OP, COUNT_OP) \ |
118 | | struct CLASS { \ |
119 | | public: \ |
120 | | static constexpr auto name = #FUNCTION_NAME; \ |
121 | | using ResultDataType = DataTypeInt64; \ |
122 | | using TData = std::vector<BitmapValue>; \ |
123 | | using ResTData = typename ColumnInt64::Container; \ |
124 | | static Status vector_vector(ColumnPtr argument_columns[], size_t col_size, \ |
125 | 118 | size_t input_rows_count, ResTData& res, IColumn* res_nulls) { \ |
126 | 118 | DCHECK_GE(col_size, 2); \ |
127 | 118 | if (col_size == 2) { \ |
128 | 106 | const auto lhs = make_bitmap_column_accessor(argument_columns[0]); \ |
129 | 106 | const auto rhs = make_bitmap_column_accessor(argument_columns[1]); \ |
130 | 316 | for (size_t row = 0; row < input_rows_count; ++row) { \ |
131 | 210 | const auto* lhs_value = lhs.is_null_at(row) ? nullptr : &lhs.get_value(row); \ |
132 | 210 | const auto* rhs_value = rhs.is_null_at(row) ? nullptr : &rhs.get_value(row); \ |
133 | 210 | if (!lhs_value || !rhs_value) { \ |
134 | 28 | if constexpr (std::is_same_v<CLASS, BitmapOrCount>) { \ |
135 | 28 | const auto* value = lhs_value ? lhs_value : rhs_value; \ |
136 | 28 | res[row] = value ? value->cardinality() : 0; \ |
137 | 28 | } else { \ |
138 | 0 | res[row] = 0; \ |
139 | 0 | } \ |
140 | 182 | } else { \ |
141 | 182 | res[row] = lhs_value->COUNT_OP(*rhs_value); \ |
142 | 182 | } \ |
143 | 210 | } \ |
144 | 106 | return Status::OK(); \ |
145 | 106 | } \ |
146 | 118 | TData vals(input_rows_count); \ |
147 | 12 | const auto first_column = make_bitmap_column_accessor(argument_columns[0]); \ |
148 | 33 | for (size_t row = 0; row < input_rows_count; ++row) { \ |
149 | 21 | if (!first_column.is_null_at(row)) { \ |
150 | 20 | vals[row] = first_column.get_value(row); \ |
151 | 20 | } \ |
152 | 21 | } \ |
153 | 31 | for (size_t col = 1; col + 1 < col_size; ++col) { \ |
154 | 19 | const auto column = make_bitmap_column_accessor(argument_columns[col]); \ |
155 | 47 | for (size_t row = 0; row < input_rows_count; ++row) { \ |
156 | 28 | if (!column.is_null_at(row)) { \ |
157 | 28 | vals[row] OP column.get_value(row); \ |
158 | 28 | } \ |
159 | 28 | } \ |
160 | 19 | } \ |
161 | 12 | const auto last_column = make_bitmap_column_accessor(argument_columns[col_size - 1]); \ |
162 | 33 | for (size_t row = 0; row < input_rows_count; ++row) { \ |
163 | 21 | const auto* lhs_value = &vals[row]; \ |
164 | 21 | const auto* rhs_value = \ |
165 | 21 | last_column.is_null_at(row) ? nullptr : &last_column.get_value(row); \ |
166 | 21 | if (!rhs_value) { \ |
167 | 3 | if constexpr (std::is_same_v<CLASS, BitmapOrCount>) { \ |
168 | 3 | res[row] = lhs_value->cardinality(); \ |
169 | 3 | } else { \ |
170 | 0 | res[row] = 0; \ |
171 | 0 | } \ |
172 | 18 | } else { \ |
173 | 18 | res[row] = lhs_value->COUNT_OP(*rhs_value); \ |
174 | 18 | } \ |
175 | 21 | } \ |
176 | 12 | return Status::OK(); \ |
177 | 118 | } \ |
178 | | \ |
179 | | private: \ |
180 | | struct BitmapColumnAccessor { \ |
181 | | const std::vector<BitmapValue>* values = nullptr; \ |
182 | | const BitmapValue* const_value = nullptr; \ |
183 | | const ColumnUInt8::value_type* null_map_data = nullptr; \ |
184 | | bool is_const = false; \ |
185 | | bool is_const_null = false; \ |
186 | | \ |
187 | 490 | bool is_null_at(size_t row) const { \ |
188 | 490 | return is_const ? is_const_null : (null_map_data && null_map_data[row]); \ |
189 | 490 | } \ _ZNK5doris13BitmapOrCount20BitmapColumnAccessor10is_null_atEm Line | Count | Source | 187 | 204 | bool is_null_at(size_t row) const { \ | 188 | 204 | return is_const ? is_const_null : (null_map_data && null_map_data[row]); \ | 189 | 204 | } \ |
_ZNK5doris14BitmapAndCount20BitmapColumnAccessor10is_null_atEm Line | Count | Source | 187 | 143 | bool is_null_at(size_t row) const { \ | 188 | 143 | return is_const ? is_const_null : (null_map_data && null_map_data[row]); \ | 189 | 143 | } \ |
_ZNK5doris14BitmapXorCount20BitmapColumnAccessor10is_null_atEm Line | Count | Source | 187 | 143 | bool is_null_at(size_t row) const { \ | 188 | 143 | return is_const ? is_const_null : (null_map_data && null_map_data[row]); \ | 189 | 143 | } \ |
|
190 | | \ |
191 | 451 | const BitmapValue& get_value(size_t row) const { \ |
192 | 451 | return is_const ? *const_value : (*values)[row]; \ |
193 | 451 | } \ _ZNK5doris13BitmapOrCount20BitmapColumnAccessor9get_valueEm Line | Count | Source | 191 | 165 | const BitmapValue& get_value(size_t row) const { \ | 192 | 165 | return is_const ? *const_value : (*values)[row]; \ | 193 | 165 | } \ |
_ZNK5doris14BitmapAndCount20BitmapColumnAccessor9get_valueEm Line | Count | Source | 191 | 143 | const BitmapValue& get_value(size_t row) const { \ | 192 | 143 | return is_const ? *const_value : (*values)[row]; \ | 193 | 143 | } \ |
_ZNK5doris14BitmapXorCount20BitmapColumnAccessor9get_valueEm Line | Count | Source | 191 | 143 | const BitmapValue& get_value(size_t row) const { \ | 192 | 143 | return is_const ? *const_value : (*values)[row]; \ | 193 | 143 | } \ |
|
194 | | }; \ |
195 | | \ |
196 | 255 | static BitmapColumnAccessor make_bitmap_column_accessor(const ColumnPtr& column) { \ |
197 | 255 | BitmapColumnAccessor accessor; \ |
198 | 255 | const auto& [data_column_ptr, is_const] = unpack_if_const(column); \ |
199 | 255 | accessor.is_const = is_const; \ |
200 | 255 | const IColumn* data_column = data_column_ptr.get(); \ |
201 | 255 | \ |
202 | 255 | if (const auto* nullable = check_and_get_column<ColumnNullable>(*data_column)) { \ |
203 | 60 | if (accessor.is_const) { \ |
204 | 2 | accessor.is_const_null = nullable->is_null_at(0); \ |
205 | 58 | } else { \ |
206 | 58 | accessor.null_map_data = nullable->get_null_map_data().data(); \ |
207 | 58 | } \ |
208 | 60 | data_column = nullable->get_nested_column_ptr().get(); \ |
209 | 60 | } \ |
210 | 255 | \ |
211 | 255 | const auto* bitmap_column = assert_cast<const ColumnBitmap*>(data_column); \ |
212 | 255 | if (accessor.is_const) { \ |
213 | 2 | accessor.const_value = &bitmap_column->get_data()[0]; \ |
214 | 253 | } else { \ |
215 | 253 | accessor.values = &bitmap_column->get_data(); \ |
216 | 253 | } \ |
217 | 255 | \ |
218 | 255 | return accessor; \ |
219 | 255 | } \ _ZN5doris13BitmapOrCount27make_bitmap_column_accessorERKNS_3COWINS_7IColumnEE13immutable_ptrIS2_EE Line | Count | Source | 196 | 115 | static BitmapColumnAccessor make_bitmap_column_accessor(const ColumnPtr& column) { \ | 197 | 115 | BitmapColumnAccessor accessor; \ | 198 | 115 | const auto& [data_column_ptr, is_const] = unpack_if_const(column); \ | 199 | 115 | accessor.is_const = is_const; \ | 200 | 115 | const IColumn* data_column = data_column_ptr.get(); \ | 201 | 115 | \ | 202 | 115 | if (const auto* nullable = check_and_get_column<ColumnNullable>(*data_column)) { \ | 203 | 60 | if (accessor.is_const) { \ | 204 | 2 | accessor.is_const_null = nullable->is_null_at(0); \ | 205 | 58 | } else { \ | 206 | 58 | accessor.null_map_data = nullable->get_null_map_data().data(); \ | 207 | 58 | } \ | 208 | 60 | data_column = nullable->get_nested_column_ptr().get(); \ | 209 | 60 | } \ | 210 | 115 | \ | 211 | 115 | const auto* bitmap_column = assert_cast<const ColumnBitmap*>(data_column); \ | 212 | 115 | if (accessor.is_const) { \ | 213 | 2 | accessor.const_value = &bitmap_column->get_data()[0]; \ | 214 | 113 | } else { \ | 215 | 113 | accessor.values = &bitmap_column->get_data(); \ | 216 | 113 | } \ | 217 | 115 | \ | 218 | 115 | return accessor; \ | 219 | 115 | } \ |
_ZN5doris14BitmapAndCount27make_bitmap_column_accessorERKNS_3COWINS_7IColumnEE13immutable_ptrIS2_EE Line | Count | Source | 196 | 70 | static BitmapColumnAccessor make_bitmap_column_accessor(const ColumnPtr& column) { \ | 197 | 70 | BitmapColumnAccessor accessor; \ | 198 | 70 | const auto& [data_column_ptr, is_const] = unpack_if_const(column); \ | 199 | 70 | accessor.is_const = is_const; \ | 200 | 70 | const IColumn* data_column = data_column_ptr.get(); \ | 201 | 70 | \ | 202 | 70 | if (const auto* nullable = check_and_get_column<ColumnNullable>(*data_column)) { \ | 203 | 0 | if (accessor.is_const) { \ | 204 | 0 | accessor.is_const_null = nullable->is_null_at(0); \ | 205 | 0 | } else { \ | 206 | 0 | accessor.null_map_data = nullable->get_null_map_data().data(); \ | 207 | 0 | } \ | 208 | 0 | data_column = nullable->get_nested_column_ptr().get(); \ | 209 | 0 | } \ | 210 | 70 | \ | 211 | 70 | const auto* bitmap_column = assert_cast<const ColumnBitmap*>(data_column); \ | 212 | 70 | if (accessor.is_const) { \ | 213 | 0 | accessor.const_value = &bitmap_column->get_data()[0]; \ | 214 | 70 | } else { \ | 215 | 70 | accessor.values = &bitmap_column->get_data(); \ | 216 | 70 | } \ | 217 | 70 | \ | 218 | 70 | return accessor; \ | 219 | 70 | } \ |
_ZN5doris14BitmapXorCount27make_bitmap_column_accessorERKNS_3COWINS_7IColumnEE13immutable_ptrIS2_EE Line | Count | Source | 196 | 70 | static BitmapColumnAccessor make_bitmap_column_accessor(const ColumnPtr& column) { \ | 197 | 70 | BitmapColumnAccessor accessor; \ | 198 | 70 | const auto& [data_column_ptr, is_const] = unpack_if_const(column); \ | 199 | 70 | accessor.is_const = is_const; \ | 200 | 70 | const IColumn* data_column = data_column_ptr.get(); \ | 201 | 70 | \ | 202 | 70 | if (const auto* nullable = check_and_get_column<ColumnNullable>(*data_column)) { \ | 203 | 0 | if (accessor.is_const) { \ | 204 | 0 | accessor.is_const_null = nullable->is_null_at(0); \ | 205 | 0 | } else { \ | 206 | 0 | accessor.null_map_data = nullable->get_null_map_data().data(); \ | 207 | 0 | } \ | 208 | 0 | data_column = nullable->get_nested_column_ptr().get(); \ | 209 | 0 | } \ | 210 | 70 | \ | 211 | 70 | const auto* bitmap_column = assert_cast<const ColumnBitmap*>(data_column); \ | 212 | 70 | if (accessor.is_const) { \ | 213 | 0 | accessor.const_value = &bitmap_column->get_data()[0]; \ | 214 | 70 | } else { \ | 215 | 70 | accessor.values = &bitmap_column->get_data(); \ | 216 | 70 | } \ | 217 | 70 | \ | 218 | 70 | return accessor; \ | 219 | 70 | } \ |
|
220 | | } |
221 | | |
222 | | BITMAP_FUNCTION_VARIADIC(BitmapOr, bitmap_or, |=); |
223 | | BITMAP_FUNCTION_VARIADIC(BitmapAnd, bitmap_and, &=); |
224 | | BITMAP_FUNCTION_VARIADIC(BitmapXor, bitmap_xor, ^=); |
225 | 54 | BITMAP_FUNCTION_COUNT_VARIADIC(BitmapOrCount, bitmap_or_count, |=, or_cardinality); |
226 | 32 | BITMAP_FUNCTION_COUNT_VARIADIC(BitmapAndCount, bitmap_and_count, &=, and_cardinality); |
227 | 32 | BITMAP_FUNCTION_COUNT_VARIADIC(BitmapXorCount, bitmap_xor_count, ^=, xor_cardinality); |
228 | | |
229 | | Status execute_bitmap_op_count_null_to_zero( |
230 | | FunctionContext* context, Block& block, const ColumnNumbers& arguments, uint32_t result, |
231 | | size_t input_rows_count, |
232 | | const std::function<Status(FunctionContext*, Block&, const ColumnNumbers&, size_t, size_t)>& |
233 | | exec_impl_func); |
234 | | |
235 | | template <typename Impl, bool NewVersion = false> |
236 | | class FunctionBitMapVariadic : public IFunction { |
237 | | static_assert(!NewVersion || (NewVersion && (std::is_same_v<Impl, BitmapOrCount> || |
238 | | std::is_same_v<Impl, BitmapAndCount> || |
239 | | std::is_same_v<Impl, BitmapXorCount>))); |
240 | | |
241 | | public: |
242 | | static constexpr auto name = []() constexpr { |
243 | | if constexpr (!NewVersion) { |
244 | | return Impl::name; |
245 | | } else if constexpr (std::is_same_v<Impl, BitmapOrCount>) { |
246 | | return "bitmap_or_count_v2"; |
247 | | } else if constexpr (std::is_same_v<Impl, BitmapAndCount>) { |
248 | | return "bitmap_and_count_v2"; |
249 | | } else if constexpr (std::is_same_v<Impl, BitmapXorCount>) { |
250 | | return "bitmap_xor_count_v2"; |
251 | | } else { |
252 | | return Impl::name; |
253 | | } |
254 | | }(); |
255 | | |
256 | 278 | static FunctionPtr create() { |
257 | 278 | return std::make_shared<FunctionBitMapVariadic<Impl, NewVersion>>(); |
258 | 278 | } _ZN5doris22FunctionBitMapVariadicINS_8BitmapOrELb0EE6createEv Line | Count | Source | 256 | 40 | static FunctionPtr create() { | 257 | 40 | return std::make_shared<FunctionBitMapVariadic<Impl, NewVersion>>(); | 258 | 40 | } |
_ZN5doris22FunctionBitMapVariadicINS_9BitmapXorELb0EE6createEv Line | Count | Source | 256 | 76 | static FunctionPtr create() { | 257 | 76 | return std::make_shared<FunctionBitMapVariadic<Impl, NewVersion>>(); | 258 | 76 | } |
_ZN5doris22FunctionBitMapVariadicINS_9BitmapAndELb0EE6createEv Line | Count | Source | 256 | 19 | static FunctionPtr create() { | 257 | 19 | return std::make_shared<FunctionBitMapVariadic<Impl, NewVersion>>(); | 258 | 19 | } |
_ZN5doris22FunctionBitMapVariadicINS_13BitmapOrCountELb0EE6createEv Line | Count | Source | 256 | 12 | static FunctionPtr create() { | 257 | 12 | return std::make_shared<FunctionBitMapVariadic<Impl, NewVersion>>(); | 258 | 12 | } |
_ZN5doris22FunctionBitMapVariadicINS_14BitmapAndCountELb0EE6createEv Line | Count | Source | 256 | 11 | static FunctionPtr create() { | 257 | 11 | return std::make_shared<FunctionBitMapVariadic<Impl, NewVersion>>(); | 258 | 11 | } |
_ZN5doris22FunctionBitMapVariadicINS_14BitmapXorCountELb0EE6createEv Line | Count | Source | 256 | 11 | static FunctionPtr create() { | 257 | 11 | return std::make_shared<FunctionBitMapVariadic<Impl, NewVersion>>(); | 258 | 11 | } |
_ZN5doris22FunctionBitMapVariadicINS_13BitmapOrCountELb1EE6createEv Line | Count | Source | 256 | 45 | static FunctionPtr create() { | 257 | 45 | return std::make_shared<FunctionBitMapVariadic<Impl, NewVersion>>(); | 258 | 45 | } |
_ZN5doris22FunctionBitMapVariadicINS_14BitmapAndCountELb1EE6createEv Line | Count | Source | 256 | 32 | static FunctionPtr create() { | 257 | 32 | return std::make_shared<FunctionBitMapVariadic<Impl, NewVersion>>(); | 258 | 32 | } |
_ZN5doris22FunctionBitMapVariadicINS_14BitmapXorCountELb1EE6createEv Line | Count | Source | 256 | 32 | static FunctionPtr create() { | 257 | 32 | return std::make_shared<FunctionBitMapVariadic<Impl, NewVersion>>(); | 258 | 32 | } |
|
259 | | |
260 | 3 | String get_name() const override { return name; }Unexecuted instantiation: _ZNK5doris22FunctionBitMapVariadicINS_8BitmapOrELb0EE8get_nameB5cxx11Ev Unexecuted instantiation: _ZNK5doris22FunctionBitMapVariadicINS_9BitmapXorELb0EE8get_nameB5cxx11Ev Unexecuted instantiation: _ZNK5doris22FunctionBitMapVariadicINS_9BitmapAndELb0EE8get_nameB5cxx11Ev Unexecuted instantiation: _ZNK5doris22FunctionBitMapVariadicINS_13BitmapOrCountELb0EE8get_nameB5cxx11Ev Unexecuted instantiation: _ZNK5doris22FunctionBitMapVariadicINS_14BitmapAndCountELb0EE8get_nameB5cxx11Ev Unexecuted instantiation: _ZNK5doris22FunctionBitMapVariadicINS_14BitmapXorCountELb0EE8get_nameB5cxx11Ev _ZNK5doris22FunctionBitMapVariadicINS_13BitmapOrCountELb1EE8get_nameB5cxx11Ev Line | Count | Source | 260 | 1 | String get_name() const override { return name; } |
_ZNK5doris22FunctionBitMapVariadicINS_14BitmapAndCountELb1EE8get_nameB5cxx11Ev Line | Count | Source | 260 | 1 | String get_name() const override { return name; } |
_ZNK5doris22FunctionBitMapVariadicINS_14BitmapXorCountELb1EE8get_nameB5cxx11Ev Line | Count | Source | 260 | 1 | String get_name() const override { return name; } |
|
261 | | |
262 | 0 | size_t get_number_of_arguments() const override { return 0; }Unexecuted instantiation: _ZNK5doris22FunctionBitMapVariadicINS_8BitmapOrELb0EE23get_number_of_argumentsEv Unexecuted instantiation: _ZNK5doris22FunctionBitMapVariadicINS_9BitmapXorELb0EE23get_number_of_argumentsEv Unexecuted instantiation: _ZNK5doris22FunctionBitMapVariadicINS_9BitmapAndELb0EE23get_number_of_argumentsEv Unexecuted instantiation: _ZNK5doris22FunctionBitMapVariadicINS_13BitmapOrCountELb0EE23get_number_of_argumentsEv Unexecuted instantiation: _ZNK5doris22FunctionBitMapVariadicINS_14BitmapAndCountELb0EE23get_number_of_argumentsEv Unexecuted instantiation: _ZNK5doris22FunctionBitMapVariadicINS_14BitmapXorCountELb0EE23get_number_of_argumentsEv Unexecuted instantiation: _ZNK5doris22FunctionBitMapVariadicINS_13BitmapOrCountELb1EE23get_number_of_argumentsEv Unexecuted instantiation: _ZNK5doris22FunctionBitMapVariadicINS_14BitmapAndCountELb1EE23get_number_of_argumentsEv Unexecuted instantiation: _ZNK5doris22FunctionBitMapVariadicINS_14BitmapXorCountELb1EE23get_number_of_argumentsEv |
263 | | |
264 | 215 | bool is_variadic() const override { return true; }_ZNK5doris22FunctionBitMapVariadicINS_8BitmapOrELb0EE11is_variadicEv Line | Count | Source | 264 | 33 | bool is_variadic() const override { return true; } |
_ZNK5doris22FunctionBitMapVariadicINS_9BitmapXorELb0EE11is_variadicEv Line | Count | Source | 264 | 69 | bool is_variadic() const override { return true; } |
_ZNK5doris22FunctionBitMapVariadicINS_9BitmapAndELb0EE11is_variadicEv Line | Count | Source | 264 | 12 | bool is_variadic() const override { return true; } |
_ZNK5doris22FunctionBitMapVariadicINS_13BitmapOrCountELb0EE11is_variadicEv Line | Count | Source | 264 | 5 | bool is_variadic() const override { return true; } |
_ZNK5doris22FunctionBitMapVariadicINS_14BitmapAndCountELb0EE11is_variadicEv Line | Count | Source | 264 | 4 | bool is_variadic() const override { return true; } |
_ZNK5doris22FunctionBitMapVariadicINS_14BitmapXorCountELb0EE11is_variadicEv Line | Count | Source | 264 | 4 | bool is_variadic() const override { return true; } |
_ZNK5doris22FunctionBitMapVariadicINS_13BitmapOrCountELb1EE11is_variadicEv Line | Count | Source | 264 | 38 | bool is_variadic() const override { return true; } |
_ZNK5doris22FunctionBitMapVariadicINS_14BitmapAndCountELb1EE11is_variadicEv Line | Count | Source | 264 | 25 | bool is_variadic() const override { return true; } |
_ZNK5doris22FunctionBitMapVariadicINS_14BitmapXorCountELb1EE11is_variadicEv Line | Count | Source | 264 | 25 | bool is_variadic() const override { return true; } |
|
265 | | |
266 | 206 | DataTypePtr get_return_type_impl(const DataTypes& arguments) const override { |
267 | 206 | using ResultDataType = typename Impl::ResultDataType; |
268 | 206 | if constexpr (NewVersion) { |
269 | 85 | return std::make_shared<ResultDataType>(); |
270 | 85 | } |
271 | 206 | if (std::is_same_v<Impl, BitmapOr> || is_count()) { |
272 | 42 | bool return_nullable = false; |
273 | | // result is nullable only when any columns is nullable for bitmap_or and bitmap_or_count |
274 | 90 | for (size_t i = 0; i < arguments.size(); ++i) { |
275 | 73 | if (arguments[i]->is_nullable()) { |
276 | 25 | return_nullable = true; |
277 | 25 | break; |
278 | 25 | } |
279 | 73 | } |
280 | 42 | auto result_type = std::make_shared<ResultDataType>(); |
281 | 42 | return return_nullable ? make_nullable(result_type) : result_type; |
282 | 164 | } else { |
283 | 164 | return std::make_shared<ResultDataType>(); |
284 | 164 | } |
285 | 206 | } _ZNK5doris22FunctionBitMapVariadicINS_8BitmapOrELb0EE20get_return_type_implERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE Line | Count | Source | 266 | 32 | DataTypePtr get_return_type_impl(const DataTypes& arguments) const override { | 267 | 32 | using ResultDataType = typename Impl::ResultDataType; | 268 | | if constexpr (NewVersion) { | 269 | | return std::make_shared<ResultDataType>(); | 270 | | } | 271 | 32 | if (std::is_same_v<Impl, BitmapOr> || is_count()) { | 272 | 32 | bool return_nullable = false; | 273 | | // result is nullable only when any columns is nullable for bitmap_or and bitmap_or_count | 274 | 80 | for (size_t i = 0; i < arguments.size(); ++i) { | 275 | 63 | if (arguments[i]->is_nullable()) { | 276 | 15 | return_nullable = true; | 277 | 15 | break; | 278 | 15 | } | 279 | 63 | } | 280 | 32 | auto result_type = std::make_shared<ResultDataType>(); | 281 | 32 | return return_nullable ? make_nullable(result_type) : result_type; | 282 | 32 | } else { | 283 | 0 | return std::make_shared<ResultDataType>(); | 284 | 0 | } | 285 | 32 | } |
_ZNK5doris22FunctionBitMapVariadicINS_9BitmapXorELb0EE20get_return_type_implERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE Line | Count | Source | 266 | 68 | DataTypePtr get_return_type_impl(const DataTypes& arguments) const override { | 267 | 68 | using ResultDataType = typename Impl::ResultDataType; | 268 | | if constexpr (NewVersion) { | 269 | | return std::make_shared<ResultDataType>(); | 270 | | } | 271 | 68 | if (std::is_same_v<Impl, BitmapOr> || is_count()) { | 272 | 0 | bool return_nullable = false; | 273 | | // result is nullable only when any columns is nullable for bitmap_or and bitmap_or_count | 274 | 0 | for (size_t i = 0; i < arguments.size(); ++i) { | 275 | 0 | if (arguments[i]->is_nullable()) { | 276 | 0 | return_nullable = true; | 277 | 0 | break; | 278 | 0 | } | 279 | 0 | } | 280 | 0 | auto result_type = std::make_shared<ResultDataType>(); | 281 | 0 | return return_nullable ? make_nullable(result_type) : result_type; | 282 | 68 | } else { | 283 | 68 | return std::make_shared<ResultDataType>(); | 284 | 68 | } | 285 | 68 | } |
_ZNK5doris22FunctionBitMapVariadicINS_9BitmapAndELb0EE20get_return_type_implERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE Line | Count | Source | 266 | 11 | DataTypePtr get_return_type_impl(const DataTypes& arguments) const override { | 267 | 11 | using ResultDataType = typename Impl::ResultDataType; | 268 | | if constexpr (NewVersion) { | 269 | | return std::make_shared<ResultDataType>(); | 270 | | } | 271 | 11 | if (std::is_same_v<Impl, BitmapOr> || is_count()) { | 272 | 0 | bool return_nullable = false; | 273 | | // result is nullable only when any columns is nullable for bitmap_or and bitmap_or_count | 274 | 0 | for (size_t i = 0; i < arguments.size(); ++i) { | 275 | 0 | if (arguments[i]->is_nullable()) { | 276 | 0 | return_nullable = true; | 277 | 0 | break; | 278 | 0 | } | 279 | 0 | } | 280 | 0 | auto result_type = std::make_shared<ResultDataType>(); | 281 | 0 | return return_nullable ? make_nullable(result_type) : result_type; | 282 | 11 | } else { | 283 | 11 | return std::make_shared<ResultDataType>(); | 284 | 11 | } | 285 | 11 | } |
_ZNK5doris22FunctionBitMapVariadicINS_13BitmapOrCountELb0EE20get_return_type_implERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE Line | Count | Source | 266 | 4 | DataTypePtr get_return_type_impl(const DataTypes& arguments) const override { | 267 | 4 | using ResultDataType = typename Impl::ResultDataType; | 268 | | if constexpr (NewVersion) { | 269 | | return std::make_shared<ResultDataType>(); | 270 | | } | 271 | 4 | if (std::is_same_v<Impl, BitmapOr> || is_count()) { | 272 | 4 | bool return_nullable = false; | 273 | | // result is nullable only when any columns is nullable for bitmap_or and bitmap_or_count | 274 | 4 | for (size_t i = 0; i < arguments.size(); ++i) { | 275 | 4 | if (arguments[i]->is_nullable()) { | 276 | 4 | return_nullable = true; | 277 | 4 | break; | 278 | 4 | } | 279 | 4 | } | 280 | 4 | auto result_type = std::make_shared<ResultDataType>(); | 281 | 4 | return return_nullable ? make_nullable(result_type) : result_type; | 282 | 4 | } else { | 283 | 0 | return std::make_shared<ResultDataType>(); | 284 | 0 | } | 285 | 4 | } |
_ZNK5doris22FunctionBitMapVariadicINS_14BitmapAndCountELb0EE20get_return_type_implERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE Line | Count | Source | 266 | 3 | DataTypePtr get_return_type_impl(const DataTypes& arguments) const override { | 267 | 3 | using ResultDataType = typename Impl::ResultDataType; | 268 | | if constexpr (NewVersion) { | 269 | | return std::make_shared<ResultDataType>(); | 270 | | } | 271 | 3 | if (std::is_same_v<Impl, BitmapOr> || is_count()) { | 272 | 3 | bool return_nullable = false; | 273 | | // result is nullable only when any columns is nullable for bitmap_or and bitmap_or_count | 274 | 3 | for (size_t i = 0; i < arguments.size(); ++i) { | 275 | 3 | if (arguments[i]->is_nullable()) { | 276 | 3 | return_nullable = true; | 277 | 3 | break; | 278 | 3 | } | 279 | 3 | } | 280 | 3 | auto result_type = std::make_shared<ResultDataType>(); | 281 | 3 | return return_nullable ? make_nullable(result_type) : result_type; | 282 | 3 | } else { | 283 | 0 | return std::make_shared<ResultDataType>(); | 284 | 0 | } | 285 | 3 | } |
_ZNK5doris22FunctionBitMapVariadicINS_14BitmapXorCountELb0EE20get_return_type_implERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE Line | Count | Source | 266 | 3 | DataTypePtr get_return_type_impl(const DataTypes& arguments) const override { | 267 | 3 | using ResultDataType = typename Impl::ResultDataType; | 268 | | if constexpr (NewVersion) { | 269 | | return std::make_shared<ResultDataType>(); | 270 | | } | 271 | 3 | if (std::is_same_v<Impl, BitmapOr> || is_count()) { | 272 | 3 | bool return_nullable = false; | 273 | | // result is nullable only when any columns is nullable for bitmap_or and bitmap_or_count | 274 | 3 | for (size_t i = 0; i < arguments.size(); ++i) { | 275 | 3 | if (arguments[i]->is_nullable()) { | 276 | 3 | return_nullable = true; | 277 | 3 | break; | 278 | 3 | } | 279 | 3 | } | 280 | 3 | auto result_type = std::make_shared<ResultDataType>(); | 281 | 3 | return return_nullable ? make_nullable(result_type) : result_type; | 282 | 3 | } else { | 283 | 0 | return std::make_shared<ResultDataType>(); | 284 | 0 | } | 285 | 3 | } |
_ZNK5doris22FunctionBitMapVariadicINS_13BitmapOrCountELb1EE20get_return_type_implERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE Line | Count | Source | 266 | 37 | DataTypePtr get_return_type_impl(const DataTypes& arguments) const override { | 267 | 37 | using ResultDataType = typename Impl::ResultDataType; | 268 | 37 | if constexpr (NewVersion) { | 269 | 37 | return std::make_shared<ResultDataType>(); | 270 | 37 | } | 271 | 37 | if (std::is_same_v<Impl, BitmapOr> || is_count()) { | 272 | 0 | bool return_nullable = false; | 273 | | // result is nullable only when any columns is nullable for bitmap_or and bitmap_or_count | 274 | 0 | for (size_t i = 0; i < arguments.size(); ++i) { | 275 | 0 | if (arguments[i]->is_nullable()) { | 276 | 0 | return_nullable = true; | 277 | 0 | break; | 278 | 0 | } | 279 | 0 | } | 280 | 0 | auto result_type = std::make_shared<ResultDataType>(); | 281 | 0 | return return_nullable ? make_nullable(result_type) : result_type; | 282 | 37 | } else { | 283 | 37 | return std::make_shared<ResultDataType>(); | 284 | 37 | } | 285 | 37 | } |
_ZNK5doris22FunctionBitMapVariadicINS_14BitmapAndCountELb1EE20get_return_type_implERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE Line | Count | Source | 266 | 24 | DataTypePtr get_return_type_impl(const DataTypes& arguments) const override { | 267 | 24 | using ResultDataType = typename Impl::ResultDataType; | 268 | 24 | if constexpr (NewVersion) { | 269 | 24 | return std::make_shared<ResultDataType>(); | 270 | 24 | } | 271 | 24 | if (std::is_same_v<Impl, BitmapOr> || is_count()) { | 272 | 0 | bool return_nullable = false; | 273 | | // result is nullable only when any columns is nullable for bitmap_or and bitmap_or_count | 274 | 0 | for (size_t i = 0; i < arguments.size(); ++i) { | 275 | 0 | if (arguments[i]->is_nullable()) { | 276 | 0 | return_nullable = true; | 277 | 0 | break; | 278 | 0 | } | 279 | 0 | } | 280 | 0 | auto result_type = std::make_shared<ResultDataType>(); | 281 | 0 | return return_nullable ? make_nullable(result_type) : result_type; | 282 | 24 | } else { | 283 | 24 | return std::make_shared<ResultDataType>(); | 284 | 24 | } | 285 | 24 | } |
_ZNK5doris22FunctionBitMapVariadicINS_14BitmapXorCountELb1EE20get_return_type_implERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE Line | Count | Source | 266 | 24 | DataTypePtr get_return_type_impl(const DataTypes& arguments) const override { | 267 | 24 | using ResultDataType = typename Impl::ResultDataType; | 268 | 24 | if constexpr (NewVersion) { | 269 | 24 | return std::make_shared<ResultDataType>(); | 270 | 24 | } | 271 | 24 | if (std::is_same_v<Impl, BitmapOr> || is_count()) { | 272 | 0 | bool return_nullable = false; | 273 | | // result is nullable only when any columns is nullable for bitmap_or and bitmap_or_count | 274 | 0 | for (size_t i = 0; i < arguments.size(); ++i) { | 275 | 0 | if (arguments[i]->is_nullable()) { | 276 | 0 | return_nullable = true; | 277 | 0 | break; | 278 | 0 | } | 279 | 0 | } | 280 | 0 | auto result_type = std::make_shared<ResultDataType>(); | 281 | 0 | return return_nullable ? make_nullable(result_type) : result_type; | 282 | 24 | } else { | 283 | 24 | return std::make_shared<ResultDataType>(); | 284 | 24 | } | 285 | 24 | } |
|
286 | | |
287 | 2.01k | bool use_default_implementation_for_nulls() const override { |
288 | | // result is null only when all columns is null for bitmap_or. |
289 | | // for count functions, result is always not null, and if the bitmap op result is null, |
290 | | // the count is 0 |
291 | 2.01k | return !static_cast<bool>(std::is_same_v<Impl, BitmapOr> || is_count()); |
292 | 2.01k | } _ZNK5doris22FunctionBitMapVariadicINS_8BitmapOrELb0EE36use_default_implementation_for_nullsEv Line | Count | Source | 287 | 169 | bool use_default_implementation_for_nulls() const override { | 288 | | // result is null only when all columns is null for bitmap_or. | 289 | | // for count functions, result is always not null, and if the bitmap op result is null, | 290 | | // the count is 0 | 291 | 169 | return !static_cast<bool>(std::is_same_v<Impl, BitmapOr> || is_count()); | 292 | 169 | } |
_ZNK5doris22FunctionBitMapVariadicINS_9BitmapXorELb0EE36use_default_implementation_for_nullsEv Line | Count | Source | 287 | 1.32k | bool use_default_implementation_for_nulls() const override { | 288 | | // result is null only when all columns is null for bitmap_or. | 289 | | // for count functions, result is always not null, and if the bitmap op result is null, | 290 | | // the count is 0 | 291 | 1.32k | return !static_cast<bool>(std::is_same_v<Impl, BitmapOr> || is_count()); | 292 | 1.32k | } |
_ZNK5doris22FunctionBitMapVariadicINS_9BitmapAndELb0EE36use_default_implementation_for_nullsEv Line | Count | Source | 287 | 72 | bool use_default_implementation_for_nulls() const override { | 288 | | // result is null only when all columns is null for bitmap_or. | 289 | | // for count functions, result is always not null, and if the bitmap op result is null, | 290 | | // the count is 0 | 291 | 72 | return !static_cast<bool>(std::is_same_v<Impl, BitmapOr> || is_count()); | 292 | 72 | } |
_ZNK5doris22FunctionBitMapVariadicINS_13BitmapOrCountELb0EE36use_default_implementation_for_nullsEv Line | Count | Source | 287 | 13 | bool use_default_implementation_for_nulls() const override { | 288 | | // result is null only when all columns is null for bitmap_or. | 289 | | // for count functions, result is always not null, and if the bitmap op result is null, | 290 | | // the count is 0 | 291 | 13 | return !static_cast<bool>(std::is_same_v<Impl, BitmapOr> || is_count()); | 292 | 13 | } |
_ZNK5doris22FunctionBitMapVariadicINS_14BitmapAndCountELb0EE36use_default_implementation_for_nullsEv Line | Count | Source | 287 | 9 | bool use_default_implementation_for_nulls() const override { | 288 | | // result is null only when all columns is null for bitmap_or. | 289 | | // for count functions, result is always not null, and if the bitmap op result is null, | 290 | | // the count is 0 | 291 | 9 | return !static_cast<bool>(std::is_same_v<Impl, BitmapOr> || is_count()); | 292 | 9 | } |
_ZNK5doris22FunctionBitMapVariadicINS_14BitmapXorCountELb0EE36use_default_implementation_for_nullsEv Line | Count | Source | 287 | 9 | bool use_default_implementation_for_nulls() const override { | 288 | | // result is null only when all columns is null for bitmap_or. | 289 | | // for count functions, result is always not null, and if the bitmap op result is null, | 290 | | // the count is 0 | 291 | 9 | return !static_cast<bool>(std::is_same_v<Impl, BitmapOr> || is_count()); | 292 | 9 | } |
_ZNK5doris22FunctionBitMapVariadicINS_13BitmapOrCountELb1EE36use_default_implementation_for_nullsEv Line | Count | Source | 287 | 189 | bool use_default_implementation_for_nulls() const override { | 288 | | // result is null only when all columns is null for bitmap_or. | 289 | | // for count functions, result is always not null, and if the bitmap op result is null, | 290 | | // the count is 0 | 291 | 189 | return !static_cast<bool>(std::is_same_v<Impl, BitmapOr> || is_count()); | 292 | 189 | } |
_ZNK5doris22FunctionBitMapVariadicINS_14BitmapAndCountELb1EE36use_default_implementation_for_nullsEv Line | Count | Source | 287 | 114 | bool use_default_implementation_for_nulls() const override { | 288 | | // result is null only when all columns is null for bitmap_or. | 289 | | // for count functions, result is always not null, and if the bitmap op result is null, | 290 | | // the count is 0 | 291 | 114 | return !static_cast<bool>(std::is_same_v<Impl, BitmapOr> || is_count()); | 292 | 114 | } |
_ZNK5doris22FunctionBitMapVariadicINS_14BitmapXorCountELb1EE36use_default_implementation_for_nullsEv Line | Count | Source | 287 | 114 | bool use_default_implementation_for_nulls() const override { | 288 | | // result is null only when all columns is null for bitmap_or. | 289 | | // for count functions, result is always not null, and if the bitmap op result is null, | 290 | | // the count is 0 | 291 | 114 | return !static_cast<bool>(std::is_same_v<Impl, BitmapOr> || is_count()); | 292 | 114 | } |
|
293 | | |
294 | | Status execute_impl(FunctionContext* context, Block& block, const ColumnNumbers& arguments, |
295 | 596 | uint32_t result, size_t input_rows_count) const override { |
296 | | if constexpr (std::is_same_v<Impl, BitmapAndCount> || |
297 | 63 | std::is_same_v<Impl, BitmapXorCount>) { |
298 | 63 | auto impl_func = [&](FunctionContext* context, Block& block, |
299 | 63 | const ColumnNumbers& arguments, uint32_t result, |
300 | 64 | size_t input_rows_count) { |
301 | 64 | return execute_impl_internal(context, block, arguments, result, input_rows_count); |
302 | 64 | }; _ZZNK5doris22FunctionBitMapVariadicINS_14BitmapAndCountELb0EE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmENKUlS4_S6_SB_jmE_clES4_S6_SB_jm Line | Count | Source | 300 | 2 | size_t input_rows_count) { | 301 | 2 | return execute_impl_internal(context, block, arguments, result, input_rows_count); | 302 | 2 | }; |
_ZZNK5doris22FunctionBitMapVariadicINS_14BitmapXorCountELb0EE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmENKUlS4_S6_SB_jmE_clES4_S6_SB_jm Line | Count | Source | 300 | 2 | size_t input_rows_count) { | 301 | 2 | return execute_impl_internal(context, block, arguments, result, input_rows_count); | 302 | 2 | }; |
_ZZNK5doris22FunctionBitMapVariadicINS_14BitmapAndCountELb1EE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmENKUlS4_S6_SB_jmE_clES4_S6_SB_jm Line | Count | Source | 300 | 30 | size_t input_rows_count) { | 301 | 30 | return execute_impl_internal(context, block, arguments, result, input_rows_count); | 302 | 30 | }; |
_ZZNK5doris22FunctionBitMapVariadicINS_14BitmapXorCountELb1EE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmENKUlS4_S6_SB_jmE_clES4_S6_SB_jm Line | Count | Source | 300 | 30 | size_t input_rows_count) { | 301 | 30 | return execute_impl_internal(context, block, arguments, result, input_rows_count); | 302 | 30 | }; |
|
303 | 63 | return execute_bitmap_op_count_null_to_zero(context, block, arguments, result, |
304 | 63 | input_rows_count, impl_func); |
305 | 533 | } else { |
306 | 533 | return execute_impl_internal(context, block, arguments, result, input_rows_count); |
307 | 533 | } |
308 | 596 | } _ZNK5doris22FunctionBitMapVariadicINS_8BitmapOrELb0EE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjm Line | Count | Source | 295 | 45 | uint32_t result, size_t input_rows_count) const override { | 296 | | if constexpr (std::is_same_v<Impl, BitmapAndCount> || | 297 | | std::is_same_v<Impl, BitmapXorCount>) { | 298 | | auto impl_func = [&](FunctionContext* context, Block& block, | 299 | | const ColumnNumbers& arguments, uint32_t result, | 300 | | size_t input_rows_count) { | 301 | | return execute_impl_internal(context, block, arguments, result, input_rows_count); | 302 | | }; | 303 | | return execute_bitmap_op_count_null_to_zero(context, block, arguments, result, | 304 | | input_rows_count, impl_func); | 305 | 45 | } else { | 306 | 45 | return execute_impl_internal(context, block, arguments, result, input_rows_count); | 307 | 45 | } | 308 | 45 | } |
_ZNK5doris22FunctionBitMapVariadicINS_9BitmapXorELb0EE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjm Line | Count | Source | 295 | 417 | uint32_t result, size_t input_rows_count) const override { | 296 | | if constexpr (std::is_same_v<Impl, BitmapAndCount> || | 297 | | std::is_same_v<Impl, BitmapXorCount>) { | 298 | | auto impl_func = [&](FunctionContext* context, Block& block, | 299 | | const ColumnNumbers& arguments, uint32_t result, | 300 | | size_t input_rows_count) { | 301 | | return execute_impl_internal(context, block, arguments, result, input_rows_count); | 302 | | }; | 303 | | return execute_bitmap_op_count_null_to_zero(context, block, arguments, result, | 304 | | input_rows_count, impl_func); | 305 | 417 | } else { | 306 | 417 | return execute_impl_internal(context, block, arguments, result, input_rows_count); | 307 | 417 | } | 308 | 417 | } |
_ZNK5doris22FunctionBitMapVariadicINS_9BitmapAndELb0EE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjm Line | Count | Source | 295 | 17 | uint32_t result, size_t input_rows_count) const override { | 296 | | if constexpr (std::is_same_v<Impl, BitmapAndCount> || | 297 | | std::is_same_v<Impl, BitmapXorCount>) { | 298 | | auto impl_func = [&](FunctionContext* context, Block& block, | 299 | | const ColumnNumbers& arguments, uint32_t result, | 300 | | size_t input_rows_count) { | 301 | | return execute_impl_internal(context, block, arguments, result, input_rows_count); | 302 | | }; | 303 | | return execute_bitmap_op_count_null_to_zero(context, block, arguments, result, | 304 | | input_rows_count, impl_func); | 305 | 17 | } else { | 306 | 17 | return execute_impl_internal(context, block, arguments, result, input_rows_count); | 307 | 17 | } | 308 | 17 | } |
_ZNK5doris22FunctionBitMapVariadicINS_13BitmapOrCountELb0EE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjm Line | Count | Source | 295 | 3 | uint32_t result, size_t input_rows_count) const override { | 296 | | if constexpr (std::is_same_v<Impl, BitmapAndCount> || | 297 | | std::is_same_v<Impl, BitmapXorCount>) { | 298 | | auto impl_func = [&](FunctionContext* context, Block& block, | 299 | | const ColumnNumbers& arguments, uint32_t result, | 300 | | size_t input_rows_count) { | 301 | | return execute_impl_internal(context, block, arguments, result, input_rows_count); | 302 | | }; | 303 | | return execute_bitmap_op_count_null_to_zero(context, block, arguments, result, | 304 | | input_rows_count, impl_func); | 305 | 3 | } else { | 306 | 3 | return execute_impl_internal(context, block, arguments, result, input_rows_count); | 307 | 3 | } | 308 | 3 | } |
_ZNK5doris22FunctionBitMapVariadicINS_14BitmapAndCountELb0EE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjm Line | Count | Source | 295 | 2 | uint32_t result, size_t input_rows_count) const override { | 296 | | if constexpr (std::is_same_v<Impl, BitmapAndCount> || | 297 | 2 | std::is_same_v<Impl, BitmapXorCount>) { | 298 | 2 | auto impl_func = [&](FunctionContext* context, Block& block, | 299 | 2 | const ColumnNumbers& arguments, uint32_t result, | 300 | 2 | size_t input_rows_count) { | 301 | 2 | return execute_impl_internal(context, block, arguments, result, input_rows_count); | 302 | 2 | }; | 303 | 2 | return execute_bitmap_op_count_null_to_zero(context, block, arguments, result, | 304 | 2 | input_rows_count, impl_func); | 305 | | } else { | 306 | | return execute_impl_internal(context, block, arguments, result, input_rows_count); | 307 | | } | 308 | 2 | } |
_ZNK5doris22FunctionBitMapVariadicINS_14BitmapXorCountELb0EE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjm Line | Count | Source | 295 | 2 | uint32_t result, size_t input_rows_count) const override { | 296 | | if constexpr (std::is_same_v<Impl, BitmapAndCount> || | 297 | 2 | std::is_same_v<Impl, BitmapXorCount>) { | 298 | 2 | auto impl_func = [&](FunctionContext* context, Block& block, | 299 | 2 | const ColumnNumbers& arguments, uint32_t result, | 300 | 2 | size_t input_rows_count) { | 301 | 2 | return execute_impl_internal(context, block, arguments, result, input_rows_count); | 302 | 2 | }; | 303 | 2 | return execute_bitmap_op_count_null_to_zero(context, block, arguments, result, | 304 | 2 | input_rows_count, impl_func); | 305 | | } else { | 306 | | return execute_impl_internal(context, block, arguments, result, input_rows_count); | 307 | | } | 308 | 2 | } |
_ZNK5doris22FunctionBitMapVariadicINS_13BitmapOrCountELb1EE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjm Line | Count | Source | 295 | 51 | uint32_t result, size_t input_rows_count) const override { | 296 | | if constexpr (std::is_same_v<Impl, BitmapAndCount> || | 297 | | std::is_same_v<Impl, BitmapXorCount>) { | 298 | | auto impl_func = [&](FunctionContext* context, Block& block, | 299 | | const ColumnNumbers& arguments, uint32_t result, | 300 | | size_t input_rows_count) { | 301 | | return execute_impl_internal(context, block, arguments, result, input_rows_count); | 302 | | }; | 303 | | return execute_bitmap_op_count_null_to_zero(context, block, arguments, result, | 304 | | input_rows_count, impl_func); | 305 | 51 | } else { | 306 | 51 | return execute_impl_internal(context, block, arguments, result, input_rows_count); | 307 | 51 | } | 308 | 51 | } |
_ZNK5doris22FunctionBitMapVariadicINS_14BitmapAndCountELb1EE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjm Line | Count | Source | 295 | 30 | uint32_t result, size_t input_rows_count) const override { | 296 | | if constexpr (std::is_same_v<Impl, BitmapAndCount> || | 297 | 30 | std::is_same_v<Impl, BitmapXorCount>) { | 298 | 30 | auto impl_func = [&](FunctionContext* context, Block& block, | 299 | 30 | const ColumnNumbers& arguments, uint32_t result, | 300 | 30 | size_t input_rows_count) { | 301 | 30 | return execute_impl_internal(context, block, arguments, result, input_rows_count); | 302 | 30 | }; | 303 | 30 | return execute_bitmap_op_count_null_to_zero(context, block, arguments, result, | 304 | 30 | input_rows_count, impl_func); | 305 | | } else { | 306 | | return execute_impl_internal(context, block, arguments, result, input_rows_count); | 307 | | } | 308 | 30 | } |
_ZNK5doris22FunctionBitMapVariadicINS_14BitmapXorCountELb1EE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjm Line | Count | Source | 295 | 29 | uint32_t result, size_t input_rows_count) const override { | 296 | | if constexpr (std::is_same_v<Impl, BitmapAndCount> || | 297 | 29 | std::is_same_v<Impl, BitmapXorCount>) { | 298 | 29 | auto impl_func = [&](FunctionContext* context, Block& block, | 299 | 29 | const ColumnNumbers& arguments, uint32_t result, | 300 | 29 | size_t input_rows_count) { | 301 | 29 | return execute_impl_internal(context, block, arguments, result, input_rows_count); | 302 | 29 | }; | 303 | 29 | return execute_bitmap_op_count_null_to_zero(context, block, arguments, result, | 304 | 29 | input_rows_count, impl_func); | 305 | | } else { | 306 | | return execute_impl_internal(context, block, arguments, result, input_rows_count); | 307 | | } | 308 | 29 | } |
|
309 | | |
310 | | Status execute_impl_internal(FunctionContext* context, Block& block, |
311 | | const ColumnNumbers& arguments, uint32_t result, |
312 | 598 | size_t input_rows_count) const { |
313 | 598 | size_t argument_size = arguments.size(); |
314 | | |
315 | 598 | using ResultDataType = typename Impl::ResultDataType; //DataTypeBitMap or DataTypeInt64 |
316 | 598 | using ColVecResult = std::conditional_t<is_complex_v<ResultDataType::PType>, |
317 | 598 | ColumnComplexType<ResultDataType::PType>, |
318 | 598 | ColumnVector<ResultDataType::PType>>; |
319 | 598 | typename ColVecResult::MutablePtr col_res = nullptr; |
320 | | |
321 | 598 | typename ColumnUInt8::MutablePtr col_res_nulls; |
322 | 598 | auto& result_info = block.get_by_position(result); |
323 | | // special case for bitmap_or and bitmap_or_count |
324 | 598 | if (!use_default_implementation_for_nulls() && result_info.type->is_nullable()) { |
325 | 28 | col_res_nulls = ColumnUInt8::create(input_rows_count, 0); |
326 | 28 | } |
327 | | |
328 | 598 | col_res = ColVecResult::create(); |
329 | | |
330 | 598 | auto& vec_res = col_res->get_data(); |
331 | 598 | vec_res.resize(input_rows_count); |
332 | | |
333 | 598 | std::vector<ColumnPtr> argument_columns(argument_size); |
334 | 1.83k | for (size_t i = 0; i < argument_size; ++i) { |
335 | 1.23k | argument_columns[i] = block.get_by_position(arguments[i]).column; |
336 | | if constexpr (!std::is_same_v<Impl, BitmapOrCount> && |
337 | | !std::is_same_v<Impl, BitmapAndCount> && |
338 | 981 | !std::is_same_v<Impl, BitmapXorCount>) { |
339 | 981 | argument_columns[i] = argument_columns[i]->convert_to_full_column_if_const(); |
340 | 981 | } |
341 | 1.23k | } |
342 | 598 | RETURN_IF_ERROR(Impl::vector_vector(argument_columns.data(), argument_size, |
343 | 598 | input_rows_count, vec_res, col_res_nulls.get())); |
344 | | |
345 | 598 | if (!use_default_implementation_for_nulls() && result_info.type->is_nullable()) { |
346 | 28 | block.replace_by_position( |
347 | 28 | result, ColumnNullable::create(std::move(col_res), std::move(col_res_nulls))); |
348 | 570 | } else { |
349 | 570 | block.replace_by_position(result, std::move(col_res)); |
350 | 570 | } |
351 | 598 | return Status::OK(); |
352 | 598 | } _ZNK5doris22FunctionBitMapVariadicINS_8BitmapOrELb0EE21execute_impl_internalEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjm Line | Count | Source | 312 | 45 | size_t input_rows_count) const { | 313 | 45 | size_t argument_size = arguments.size(); | 314 | | | 315 | 45 | using ResultDataType = typename Impl::ResultDataType; //DataTypeBitMap or DataTypeInt64 | 316 | 45 | using ColVecResult = std::conditional_t<is_complex_v<ResultDataType::PType>, | 317 | 45 | ColumnComplexType<ResultDataType::PType>, | 318 | 45 | ColumnVector<ResultDataType::PType>>; | 319 | 45 | typename ColVecResult::MutablePtr col_res = nullptr; | 320 | | | 321 | 45 | typename ColumnUInt8::MutablePtr col_res_nulls; | 322 | 45 | auto& result_info = block.get_by_position(result); | 323 | | // special case for bitmap_or and bitmap_or_count | 324 | 46 | if (!use_default_implementation_for_nulls() && result_info.type->is_nullable()) { | 325 | 21 | col_res_nulls = ColumnUInt8::create(input_rows_count, 0); | 326 | 21 | } | 327 | | | 328 | 45 | col_res = ColVecResult::create(); | 329 | | | 330 | 45 | auto& vec_res = col_res->get_data(); | 331 | 45 | vec_res.resize(input_rows_count); | 332 | | | 333 | 45 | std::vector<ColumnPtr> argument_columns(argument_size); | 334 | 147 | for (size_t i = 0; i < argument_size; ++i) { | 335 | 102 | argument_columns[i] = block.get_by_position(arguments[i]).column; | 336 | | if constexpr (!std::is_same_v<Impl, BitmapOrCount> && | 337 | | !std::is_same_v<Impl, BitmapAndCount> && | 338 | 102 | !std::is_same_v<Impl, BitmapXorCount>) { | 339 | 102 | argument_columns[i] = argument_columns[i]->convert_to_full_column_if_const(); | 340 | 102 | } | 341 | 102 | } | 342 | 45 | RETURN_IF_ERROR(Impl::vector_vector(argument_columns.data(), argument_size, | 343 | 45 | input_rows_count, vec_res, col_res_nulls.get())); | 344 | | | 345 | 45 | if (!use_default_implementation_for_nulls() && result_info.type->is_nullable()) { | 346 | 21 | block.replace_by_position( | 347 | 21 | result, ColumnNullable::create(std::move(col_res), std::move(col_res_nulls))); | 348 | 24 | } else { | 349 | 24 | block.replace_by_position(result, std::move(col_res)); | 350 | 24 | } | 351 | 45 | return Status::OK(); | 352 | 45 | } |
_ZNK5doris22FunctionBitMapVariadicINS_9BitmapXorELb0EE21execute_impl_internalEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjm Line | Count | Source | 312 | 417 | size_t input_rows_count) const { | 313 | 417 | size_t argument_size = arguments.size(); | 314 | | | 315 | 417 | using ResultDataType = typename Impl::ResultDataType; //DataTypeBitMap or DataTypeInt64 | 316 | 417 | using ColVecResult = std::conditional_t<is_complex_v<ResultDataType::PType>, | 317 | 417 | ColumnComplexType<ResultDataType::PType>, | 318 | 417 | ColumnVector<ResultDataType::PType>>; | 319 | 417 | typename ColVecResult::MutablePtr col_res = nullptr; | 320 | | | 321 | 417 | typename ColumnUInt8::MutablePtr col_res_nulls; | 322 | 417 | auto& result_info = block.get_by_position(result); | 323 | | // special case for bitmap_or and bitmap_or_count | 324 | 417 | if (!use_default_implementation_for_nulls() && result_info.type->is_nullable()) { | 325 | 0 | col_res_nulls = ColumnUInt8::create(input_rows_count, 0); | 326 | 0 | } | 327 | | | 328 | 417 | col_res = ColVecResult::create(); | 329 | | | 330 | 417 | auto& vec_res = col_res->get_data(); | 331 | 417 | vec_res.resize(input_rows_count); | 332 | | | 333 | 417 | std::vector<ColumnPtr> argument_columns(argument_size); | 334 | 1.25k | for (size_t i = 0; i < argument_size; ++i) { | 335 | 840 | argument_columns[i] = block.get_by_position(arguments[i]).column; | 336 | | if constexpr (!std::is_same_v<Impl, BitmapOrCount> && | 337 | | !std::is_same_v<Impl, BitmapAndCount> && | 338 | 840 | !std::is_same_v<Impl, BitmapXorCount>) { | 339 | 840 | argument_columns[i] = argument_columns[i]->convert_to_full_column_if_const(); | 340 | 840 | } | 341 | 840 | } | 342 | 417 | RETURN_IF_ERROR(Impl::vector_vector(argument_columns.data(), argument_size, | 343 | 417 | input_rows_count, vec_res, col_res_nulls.get())); | 344 | | | 345 | 417 | if (!use_default_implementation_for_nulls() && result_info.type->is_nullable()) { | 346 | 0 | block.replace_by_position( | 347 | 0 | result, ColumnNullable::create(std::move(col_res), std::move(col_res_nulls))); | 348 | 417 | } else { | 349 | 417 | block.replace_by_position(result, std::move(col_res)); | 350 | 417 | } | 351 | 417 | return Status::OK(); | 352 | 417 | } |
_ZNK5doris22FunctionBitMapVariadicINS_9BitmapAndELb0EE21execute_impl_internalEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjm Line | Count | Source | 312 | 18 | size_t input_rows_count) const { | 313 | 18 | size_t argument_size = arguments.size(); | 314 | | | 315 | 18 | using ResultDataType = typename Impl::ResultDataType; //DataTypeBitMap or DataTypeInt64 | 316 | 18 | using ColVecResult = std::conditional_t<is_complex_v<ResultDataType::PType>, | 317 | 18 | ColumnComplexType<ResultDataType::PType>, | 318 | 18 | ColumnVector<ResultDataType::PType>>; | 319 | 18 | typename ColVecResult::MutablePtr col_res = nullptr; | 320 | | | 321 | 18 | typename ColumnUInt8::MutablePtr col_res_nulls; | 322 | 18 | auto& result_info = block.get_by_position(result); | 323 | | // special case for bitmap_or and bitmap_or_count | 324 | 18 | if (!use_default_implementation_for_nulls() && result_info.type->is_nullable()) { | 325 | 0 | col_res_nulls = ColumnUInt8::create(input_rows_count, 0); | 326 | 0 | } | 327 | | | 328 | 18 | col_res = ColVecResult::create(); | 329 | | | 330 | 18 | auto& vec_res = col_res->get_data(); | 331 | 18 | vec_res.resize(input_rows_count); | 332 | | | 333 | 18 | std::vector<ColumnPtr> argument_columns(argument_size); | 334 | 57 | for (size_t i = 0; i < argument_size; ++i) { | 335 | 39 | argument_columns[i] = block.get_by_position(arguments[i]).column; | 336 | | if constexpr (!std::is_same_v<Impl, BitmapOrCount> && | 337 | | !std::is_same_v<Impl, BitmapAndCount> && | 338 | 39 | !std::is_same_v<Impl, BitmapXorCount>) { | 339 | 39 | argument_columns[i] = argument_columns[i]->convert_to_full_column_if_const(); | 340 | 39 | } | 341 | 39 | } | 342 | 18 | RETURN_IF_ERROR(Impl::vector_vector(argument_columns.data(), argument_size, | 343 | 18 | input_rows_count, vec_res, col_res_nulls.get())); | 344 | | | 345 | 18 | if (!use_default_implementation_for_nulls() && result_info.type->is_nullable()) { | 346 | 0 | block.replace_by_position( | 347 | 0 | result, ColumnNullable::create(std::move(col_res), std::move(col_res_nulls))); | 348 | 18 | } else { | 349 | 18 | block.replace_by_position(result, std::move(col_res)); | 350 | 18 | } | 351 | 18 | return Status::OK(); | 352 | 18 | } |
_ZNK5doris22FunctionBitMapVariadicINS_13BitmapOrCountELb0EE21execute_impl_internalEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjm Line | Count | Source | 312 | 3 | size_t input_rows_count) const { | 313 | 3 | size_t argument_size = arguments.size(); | 314 | | | 315 | 3 | using ResultDataType = typename Impl::ResultDataType; //DataTypeBitMap or DataTypeInt64 | 316 | 3 | using ColVecResult = std::conditional_t<is_complex_v<ResultDataType::PType>, | 317 | 3 | ColumnComplexType<ResultDataType::PType>, | 318 | 3 | ColumnVector<ResultDataType::PType>>; | 319 | 3 | typename ColVecResult::MutablePtr col_res = nullptr; | 320 | | | 321 | 3 | typename ColumnUInt8::MutablePtr col_res_nulls; | 322 | 3 | auto& result_info = block.get_by_position(result); | 323 | | // special case for bitmap_or and bitmap_or_count | 324 | 3 | if (!use_default_implementation_for_nulls() && result_info.type->is_nullable()) { | 325 | 3 | col_res_nulls = ColumnUInt8::create(input_rows_count, 0); | 326 | 3 | } | 327 | | | 328 | 3 | col_res = ColVecResult::create(); | 329 | | | 330 | 3 | auto& vec_res = col_res->get_data(); | 331 | 3 | vec_res.resize(input_rows_count); | 332 | | | 333 | 3 | std::vector<ColumnPtr> argument_columns(argument_size); | 334 | 10 | for (size_t i = 0; i < argument_size; ++i) { | 335 | 7 | argument_columns[i] = block.get_by_position(arguments[i]).column; | 336 | | if constexpr (!std::is_same_v<Impl, BitmapOrCount> && | 337 | | !std::is_same_v<Impl, BitmapAndCount> && | 338 | | !std::is_same_v<Impl, BitmapXorCount>) { | 339 | | argument_columns[i] = argument_columns[i]->convert_to_full_column_if_const(); | 340 | | } | 341 | 7 | } | 342 | 3 | RETURN_IF_ERROR(Impl::vector_vector(argument_columns.data(), argument_size, | 343 | 3 | input_rows_count, vec_res, col_res_nulls.get())); | 344 | | | 345 | 3 | if (!use_default_implementation_for_nulls() && result_info.type->is_nullable()) { | 346 | 3 | block.replace_by_position( | 347 | 3 | result, ColumnNullable::create(std::move(col_res), std::move(col_res_nulls))); | 348 | 3 | } else { | 349 | 0 | block.replace_by_position(result, std::move(col_res)); | 350 | 0 | } | 351 | 3 | return Status::OK(); | 352 | 3 | } |
_ZNK5doris22FunctionBitMapVariadicINS_14BitmapAndCountELb0EE21execute_impl_internalEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjm Line | Count | Source | 312 | 2 | size_t input_rows_count) const { | 313 | 2 | size_t argument_size = arguments.size(); | 314 | | | 315 | 2 | using ResultDataType = typename Impl::ResultDataType; //DataTypeBitMap or DataTypeInt64 | 316 | 2 | using ColVecResult = std::conditional_t<is_complex_v<ResultDataType::PType>, | 317 | 2 | ColumnComplexType<ResultDataType::PType>, | 318 | 2 | ColumnVector<ResultDataType::PType>>; | 319 | 2 | typename ColVecResult::MutablePtr col_res = nullptr; | 320 | | | 321 | 2 | typename ColumnUInt8::MutablePtr col_res_nulls; | 322 | 2 | auto& result_info = block.get_by_position(result); | 323 | | // special case for bitmap_or and bitmap_or_count | 324 | 2 | if (!use_default_implementation_for_nulls() && result_info.type->is_nullable()) { | 325 | 2 | col_res_nulls = ColumnUInt8::create(input_rows_count, 0); | 326 | 2 | } | 327 | | | 328 | 2 | col_res = ColVecResult::create(); | 329 | | | 330 | 2 | auto& vec_res = col_res->get_data(); | 331 | 2 | vec_res.resize(input_rows_count); | 332 | | | 333 | 2 | std::vector<ColumnPtr> argument_columns(argument_size); | 334 | 7 | for (size_t i = 0; i < argument_size; ++i) { | 335 | 5 | argument_columns[i] = block.get_by_position(arguments[i]).column; | 336 | | if constexpr (!std::is_same_v<Impl, BitmapOrCount> && | 337 | | !std::is_same_v<Impl, BitmapAndCount> && | 338 | | !std::is_same_v<Impl, BitmapXorCount>) { | 339 | | argument_columns[i] = argument_columns[i]->convert_to_full_column_if_const(); | 340 | | } | 341 | 5 | } | 342 | 2 | RETURN_IF_ERROR(Impl::vector_vector(argument_columns.data(), argument_size, | 343 | 2 | input_rows_count, vec_res, col_res_nulls.get())); | 344 | | | 345 | 2 | if (!use_default_implementation_for_nulls() && result_info.type->is_nullable()) { | 346 | 2 | block.replace_by_position( | 347 | 2 | result, ColumnNullable::create(std::move(col_res), std::move(col_res_nulls))); | 348 | 2 | } else { | 349 | 0 | block.replace_by_position(result, std::move(col_res)); | 350 | 0 | } | 351 | 2 | return Status::OK(); | 352 | 2 | } |
_ZNK5doris22FunctionBitMapVariadicINS_14BitmapXorCountELb0EE21execute_impl_internalEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjm Line | Count | Source | 312 | 2 | size_t input_rows_count) const { | 313 | 2 | size_t argument_size = arguments.size(); | 314 | | | 315 | 2 | using ResultDataType = typename Impl::ResultDataType; //DataTypeBitMap or DataTypeInt64 | 316 | 2 | using ColVecResult = std::conditional_t<is_complex_v<ResultDataType::PType>, | 317 | 2 | ColumnComplexType<ResultDataType::PType>, | 318 | 2 | ColumnVector<ResultDataType::PType>>; | 319 | 2 | typename ColVecResult::MutablePtr col_res = nullptr; | 320 | | | 321 | 2 | typename ColumnUInt8::MutablePtr col_res_nulls; | 322 | 2 | auto& result_info = block.get_by_position(result); | 323 | | // special case for bitmap_or and bitmap_or_count | 324 | 2 | if (!use_default_implementation_for_nulls() && result_info.type->is_nullable()) { | 325 | 2 | col_res_nulls = ColumnUInt8::create(input_rows_count, 0); | 326 | 2 | } | 327 | | | 328 | 2 | col_res = ColVecResult::create(); | 329 | | | 330 | 2 | auto& vec_res = col_res->get_data(); | 331 | 2 | vec_res.resize(input_rows_count); | 332 | | | 333 | 2 | std::vector<ColumnPtr> argument_columns(argument_size); | 334 | 7 | for (size_t i = 0; i < argument_size; ++i) { | 335 | 5 | argument_columns[i] = block.get_by_position(arguments[i]).column; | 336 | | if constexpr (!std::is_same_v<Impl, BitmapOrCount> && | 337 | | !std::is_same_v<Impl, BitmapAndCount> && | 338 | | !std::is_same_v<Impl, BitmapXorCount>) { | 339 | | argument_columns[i] = argument_columns[i]->convert_to_full_column_if_const(); | 340 | | } | 341 | 5 | } | 342 | 2 | RETURN_IF_ERROR(Impl::vector_vector(argument_columns.data(), argument_size, | 343 | 2 | input_rows_count, vec_res, col_res_nulls.get())); | 344 | | | 345 | 2 | if (!use_default_implementation_for_nulls() && result_info.type->is_nullable()) { | 346 | 2 | block.replace_by_position( | 347 | 2 | result, ColumnNullable::create(std::move(col_res), std::move(col_res_nulls))); | 348 | 2 | } else { | 349 | 0 | block.replace_by_position(result, std::move(col_res)); | 350 | 0 | } | 351 | 2 | return Status::OK(); | 352 | 2 | } |
_ZNK5doris22FunctionBitMapVariadicINS_13BitmapOrCountELb1EE21execute_impl_internalEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjm Line | Count | Source | 312 | 51 | size_t input_rows_count) const { | 313 | 51 | size_t argument_size = arguments.size(); | 314 | | | 315 | 51 | using ResultDataType = typename Impl::ResultDataType; //DataTypeBitMap or DataTypeInt64 | 316 | 51 | using ColVecResult = std::conditional_t<is_complex_v<ResultDataType::PType>, | 317 | 51 | ColumnComplexType<ResultDataType::PType>, | 318 | 51 | ColumnVector<ResultDataType::PType>>; | 319 | 51 | typename ColVecResult::MutablePtr col_res = nullptr; | 320 | | | 321 | 51 | typename ColumnUInt8::MutablePtr col_res_nulls; | 322 | 51 | auto& result_info = block.get_by_position(result); | 323 | | // special case for bitmap_or and bitmap_or_count | 324 | 51 | if (!use_default_implementation_for_nulls() && result_info.type->is_nullable()) { | 325 | 0 | col_res_nulls = ColumnUInt8::create(input_rows_count, 0); | 326 | 0 | } | 327 | | | 328 | 51 | col_res = ColVecResult::create(); | 329 | | | 330 | 51 | auto& vec_res = col_res->get_data(); | 331 | 51 | vec_res.resize(input_rows_count); | 332 | | | 333 | 51 | std::vector<ColumnPtr> argument_columns(argument_size); | 334 | 159 | for (size_t i = 0; i < argument_size; ++i) { | 335 | 108 | argument_columns[i] = block.get_by_position(arguments[i]).column; | 336 | | if constexpr (!std::is_same_v<Impl, BitmapOrCount> && | 337 | | !std::is_same_v<Impl, BitmapAndCount> && | 338 | | !std::is_same_v<Impl, BitmapXorCount>) { | 339 | | argument_columns[i] = argument_columns[i]->convert_to_full_column_if_const(); | 340 | | } | 341 | 108 | } | 342 | 51 | RETURN_IF_ERROR(Impl::vector_vector(argument_columns.data(), argument_size, | 343 | 51 | input_rows_count, vec_res, col_res_nulls.get())); | 344 | | | 345 | 51 | if (!use_default_implementation_for_nulls() && result_info.type->is_nullable()) { | 346 | 0 | block.replace_by_position( | 347 | 0 | result, ColumnNullable::create(std::move(col_res), std::move(col_res_nulls))); | 348 | 51 | } else { | 349 | 51 | block.replace_by_position(result, std::move(col_res)); | 350 | 51 | } | 351 | 51 | return Status::OK(); | 352 | 51 | } |
_ZNK5doris22FunctionBitMapVariadicINS_14BitmapAndCountELb1EE21execute_impl_internalEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjm Line | Count | Source | 312 | 30 | size_t input_rows_count) const { | 313 | 30 | size_t argument_size = arguments.size(); | 314 | | | 315 | 30 | using ResultDataType = typename Impl::ResultDataType; //DataTypeBitMap or DataTypeInt64 | 316 | 30 | using ColVecResult = std::conditional_t<is_complex_v<ResultDataType::PType>, | 317 | 30 | ColumnComplexType<ResultDataType::PType>, | 318 | 30 | ColumnVector<ResultDataType::PType>>; | 319 | 30 | typename ColVecResult::MutablePtr col_res = nullptr; | 320 | | | 321 | 30 | typename ColumnUInt8::MutablePtr col_res_nulls; | 322 | 30 | auto& result_info = block.get_by_position(result); | 323 | | // special case for bitmap_or and bitmap_or_count | 324 | 30 | if (!use_default_implementation_for_nulls() && result_info.type->is_nullable()) { | 325 | 0 | col_res_nulls = ColumnUInt8::create(input_rows_count, 0); | 326 | 0 | } | 327 | | | 328 | 30 | col_res = ColVecResult::create(); | 329 | | | 330 | 30 | auto& vec_res = col_res->get_data(); | 331 | 30 | vec_res.resize(input_rows_count); | 332 | | | 333 | 30 | std::vector<ColumnPtr> argument_columns(argument_size); | 334 | 95 | for (size_t i = 0; i < argument_size; ++i) { | 335 | 65 | argument_columns[i] = block.get_by_position(arguments[i]).column; | 336 | | if constexpr (!std::is_same_v<Impl, BitmapOrCount> && | 337 | | !std::is_same_v<Impl, BitmapAndCount> && | 338 | | !std::is_same_v<Impl, BitmapXorCount>) { | 339 | | argument_columns[i] = argument_columns[i]->convert_to_full_column_if_const(); | 340 | | } | 341 | 65 | } | 342 | 30 | RETURN_IF_ERROR(Impl::vector_vector(argument_columns.data(), argument_size, | 343 | 30 | input_rows_count, vec_res, col_res_nulls.get())); | 344 | | | 345 | 30 | if (!use_default_implementation_for_nulls() && result_info.type->is_nullable()) { | 346 | 0 | block.replace_by_position( | 347 | 0 | result, ColumnNullable::create(std::move(col_res), std::move(col_res_nulls))); | 348 | 30 | } else { | 349 | 30 | block.replace_by_position(result, std::move(col_res)); | 350 | 30 | } | 351 | 30 | return Status::OK(); | 352 | 30 | } |
_ZNK5doris22FunctionBitMapVariadicINS_14BitmapXorCountELb1EE21execute_impl_internalEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjm Line | Count | Source | 312 | 30 | size_t input_rows_count) const { | 313 | 30 | size_t argument_size = arguments.size(); | 314 | | | 315 | 30 | using ResultDataType = typename Impl::ResultDataType; //DataTypeBitMap or DataTypeInt64 | 316 | 30 | using ColVecResult = std::conditional_t<is_complex_v<ResultDataType::PType>, | 317 | 30 | ColumnComplexType<ResultDataType::PType>, | 318 | 30 | ColumnVector<ResultDataType::PType>>; | 319 | 30 | typename ColVecResult::MutablePtr col_res = nullptr; | 320 | | | 321 | 30 | typename ColumnUInt8::MutablePtr col_res_nulls; | 322 | 30 | auto& result_info = block.get_by_position(result); | 323 | | // special case for bitmap_or and bitmap_or_count | 324 | 30 | if (!use_default_implementation_for_nulls() && result_info.type->is_nullable()) { | 325 | 0 | col_res_nulls = ColumnUInt8::create(input_rows_count, 0); | 326 | 0 | } | 327 | | | 328 | 30 | col_res = ColVecResult::create(); | 329 | | | 330 | 30 | auto& vec_res = col_res->get_data(); | 331 | 30 | vec_res.resize(input_rows_count); | 332 | | | 333 | 30 | std::vector<ColumnPtr> argument_columns(argument_size); | 334 | 95 | for (size_t i = 0; i < argument_size; ++i) { | 335 | 65 | argument_columns[i] = block.get_by_position(arguments[i]).column; | 336 | | if constexpr (!std::is_same_v<Impl, BitmapOrCount> && | 337 | | !std::is_same_v<Impl, BitmapAndCount> && | 338 | | !std::is_same_v<Impl, BitmapXorCount>) { | 339 | | argument_columns[i] = argument_columns[i]->convert_to_full_column_if_const(); | 340 | | } | 341 | 65 | } | 342 | 30 | RETURN_IF_ERROR(Impl::vector_vector(argument_columns.data(), argument_size, | 343 | 30 | input_rows_count, vec_res, col_res_nulls.get())); | 344 | | | 345 | 30 | if (!use_default_implementation_for_nulls() && result_info.type->is_nullable()) { | 346 | 0 | block.replace_by_position( | 347 | 0 | result, ColumnNullable::create(std::move(col_res), std::move(col_res_nulls))); | 348 | 30 | } else { | 349 | 30 | block.replace_by_position(result, std::move(col_res)); | 350 | 30 | } | 351 | 30 | return Status::OK(); | 352 | 30 | } |
|
353 | | |
354 | | private: |
355 | 1.93k | bool is_count() const { |
356 | 1.93k | return (std::is_same_v<Impl, BitmapOrCount> || std::is_same_v<Impl, BitmapAndCount> || |
357 | 1.93k | std::is_same_v<Impl, BitmapXorCount>); |
358 | 1.93k | } _ZNK5doris22FunctionBitMapVariadicINS_9BitmapXorELb0EE8is_countEv Line | Count | Source | 355 | 1.39k | bool is_count() const { | 356 | 1.39k | return (std::is_same_v<Impl, BitmapOrCount> || std::is_same_v<Impl, BitmapAndCount> || | 357 | 1.39k | std::is_same_v<Impl, BitmapXorCount>); | 358 | 1.39k | } |
_ZNK5doris22FunctionBitMapVariadicINS_9BitmapAndELb0EE8is_countEv Line | Count | Source | 355 | 83 | bool is_count() const { | 356 | 83 | return (std::is_same_v<Impl, BitmapOrCount> || std::is_same_v<Impl, BitmapAndCount> || | 357 | 83 | std::is_same_v<Impl, BitmapXorCount>); | 358 | 83 | } |
_ZNK5doris22FunctionBitMapVariadicINS_13BitmapOrCountELb0EE8is_countEv Line | Count | Source | 355 | 17 | bool is_count() const { | 356 | 17 | return (std::is_same_v<Impl, BitmapOrCount> || std::is_same_v<Impl, BitmapAndCount> || | 357 | 17 | std::is_same_v<Impl, BitmapXorCount>); | 358 | 17 | } |
_ZNK5doris22FunctionBitMapVariadicINS_14BitmapAndCountELb0EE8is_countEv Line | Count | Source | 355 | 12 | bool is_count() const { | 356 | 12 | return (std::is_same_v<Impl, BitmapOrCount> || std::is_same_v<Impl, BitmapAndCount> || | 357 | 12 | std::is_same_v<Impl, BitmapXorCount>); | 358 | 12 | } |
_ZNK5doris22FunctionBitMapVariadicINS_14BitmapXorCountELb0EE8is_countEv Line | Count | Source | 355 | 12 | bool is_count() const { | 356 | 12 | return (std::is_same_v<Impl, BitmapOrCount> || std::is_same_v<Impl, BitmapAndCount> || | 357 | 12 | std::is_same_v<Impl, BitmapXorCount>); | 358 | 12 | } |
_ZNK5doris22FunctionBitMapVariadicINS_13BitmapOrCountELb1EE8is_countEv Line | Count | Source | 355 | 189 | bool is_count() const { | 356 | 189 | return (std::is_same_v<Impl, BitmapOrCount> || std::is_same_v<Impl, BitmapAndCount> || | 357 | 189 | std::is_same_v<Impl, BitmapXorCount>); | 358 | 189 | } |
_ZNK5doris22FunctionBitMapVariadicINS_14BitmapAndCountELb1EE8is_countEv Line | Count | Source | 355 | 113 | bool is_count() const { | 356 | 113 | return (std::is_same_v<Impl, BitmapOrCount> || std::is_same_v<Impl, BitmapAndCount> || | 357 | 113 | std::is_same_v<Impl, BitmapXorCount>); | 358 | 113 | } |
_ZNK5doris22FunctionBitMapVariadicINS_14BitmapXorCountELb1EE8is_countEv Line | Count | Source | 355 | 113 | bool is_count() const { | 356 | 113 | return (std::is_same_v<Impl, BitmapOrCount> || std::is_same_v<Impl, BitmapAndCount> || | 357 | 113 | std::is_same_v<Impl, BitmapXorCount>); | 358 | 113 | } |
Unexecuted instantiation: _ZNK5doris22FunctionBitMapVariadicINS_8BitmapOrELb0EE8is_countEv |
359 | | }; |
360 | | |
361 | | using FunctionBitmapOr = FunctionBitMapVariadic<BitmapOr>; |
362 | | using FunctionBitmapXor = FunctionBitMapVariadic<BitmapXor>; |
363 | | using FunctionBitmapAnd = FunctionBitMapVariadic<BitmapAnd>; |
364 | | using FunctionBitmapOrCount = FunctionBitMapVariadic<BitmapOrCount>; |
365 | | using FunctionBitmapAndCount = FunctionBitMapVariadic<BitmapAndCount>; |
366 | | using FunctionBitmapXorCount = FunctionBitMapVariadic<BitmapXorCount>; |
367 | | using FunctionBitmapOrCountV2 = FunctionBitMapVariadic<BitmapOrCount, true>; |
368 | | using FunctionBitmapAndCountV2 = FunctionBitMapVariadic<BitmapAndCount, true>; |
369 | | using FunctionBitmapXorCountV2 = FunctionBitMapVariadic<BitmapXorCount, true>; |
370 | | |
371 | 7 | void register_function_bitmap_variadic(SimpleFunctionFactory& factory) { |
372 | 7 | factory.register_function<FunctionBitmapOr>(); |
373 | 7 | factory.register_function<FunctionBitmapXor>(); |
374 | 7 | factory.register_function<FunctionBitmapAnd>(); |
375 | 7 | factory.register_function<FunctionBitmapOrCount>(); |
376 | 7 | factory.register_function<FunctionBitmapAndCount>(); |
377 | 7 | factory.register_function<FunctionBitmapXorCount>(); |
378 | 7 | factory.register_function<FunctionBitmapOrCountV2>(); |
379 | 7 | factory.register_function<FunctionBitmapAndCountV2>(); |
380 | 7 | factory.register_function<FunctionBitmapXorCountV2>(); |
381 | 7 | } |
382 | | } // namespace doris |