Coverage Report

Created: 2026-09-17 20:05

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
be/src/exprs/aggregate/aggregate_function_percentile.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 <glog/logging.h>
21
#include <stddef.h>
22
#include <stdint.h>
23
24
#include <boost/iterator/iterator_facade.hpp>
25
#include <cmath>
26
#include <cstdint>
27
#include <memory>
28
#include <string>
29
#include <vector>
30
31
#include "common/exception.h"
32
#include "core/assert_cast.h"
33
#include "core/column/column.h"
34
#include "core/column/column_array.h"
35
#include "core/column/column_nullable.h"
36
#include "core/column/column_vector.h"
37
#include "core/data_type/data_type_array.h"
38
#include "core/data_type/data_type_nullable.h"
39
#include "core/data_type/data_type_number.h"
40
#include "core/pod_array.h"
41
#include "core/pod_array_fwd.h"
42
#include "core/types.h"
43
#include "exprs/aggregate/aggregate_function.h"
44
#include "util/percentile_util.h"
45
#include "util/tdigest.h"
46
47
namespace doris {
48
49
class Arena;
50
class BufferReadable;
51
52
inline void check_percentile_array_column_type(const IAggregateFunction& function,
53
0
                                               const IColumn& column, size_t index) {
54
0
    const auto* array_column = check_and_get_column<ColumnArray>(column);
55
0
    if (UNLIKELY(array_column == nullptr)) {
56
0
        throw doris::Exception(Status::InternalError(
57
0
                "Aggregate function {} argument {} type check failed: Column type {} is not "
58
0
                "ColumnArray",
59
0
                function.get_name(), index, column.get_name()));
60
0
    }
61
62
0
    const auto* nullable_column = check_and_get_column<ColumnNullable>(array_column->get_data());
63
0
    if (UNLIKELY(nullable_column == nullptr)) {
64
0
        throw doris::Exception(Status::InternalError(
65
0
                "Aggregate function {} argument {} type check failed: Array nested column type {} "
66
0
                "is not ColumnNullable",
67
0
                function.get_name(), index, array_column->get_data().get_name()));
68
0
    }
69
70
0
    if (UNLIKELY(check_and_get_column<ColumnFloat64>(nullable_column->get_nested_column()) ==
71
0
                 nullptr)) {
72
0
        throw doris::Exception(Status::InternalError(
73
0
                "Aggregate function {} argument {} type check failed: Array nested data column "
74
0
                "type {} is not ColumnFloat64",
75
0
                function.get_name(), index, nullable_column->get_nested_column().get_name()));
76
0
    }
77
0
}
78
79
struct PercentileApproxState {
80
    static constexpr double INIT_QUANTILE = -1.0;
81
860
    PercentileApproxState() = default;
82
860
    ~PercentileApproxState() = default;
83
84
616
    void init(double quantile, float compression = 10000) {
85
616
        if (!init_flag) {
86
            //https://doris.apache.org/zh-CN/sql-reference/sql-functions/aggregate-functions/percentile_approx.html#description
87
            //The compression parameter setting range is [2048, 10000].
88
            //If the value of compression parameter is not specified set, or is outside the range of [2048, 10000],
89
            //will use the default value of 10000
90
544
            if (!std::isfinite(compression) || compression < 2048 || compression > 10000) {
91
0
                compression = 10000;
92
0
            }
93
544
            digest = TDigest::create_unique(compression);
94
544
            check_quantile(quantile);
95
544
            target_quantile = quantile;
96
544
            compressions = compression;
97
544
            init_flag = true;
98
544
        }
99
616
    }
100
101
140
    void write(BufferWritable& buf) const {
102
140
        buf.write_binary(init_flag);
103
140
        if (!init_flag) {
104
44
            return;
105
44
        }
106
107
96
        buf.write_binary(target_quantile);
108
96
        buf.write_binary(compressions);
109
96
        uint32_t serialize_size = digest->serialized_size();
110
96
        std::string result(serialize_size, '0');
111
96
        DCHECK(digest.get() != nullptr);
112
96
        digest->serialize((uint8_t*)result.c_str());
113
114
96
        buf.write_binary(result);
115
96
    }
116
117
156
    void read(BufferReadable& buf) {
118
156
        buf.read_binary(init_flag);
119
156
        if (!init_flag) {
120
44
            return;
121
44
        }
122
123
112
        buf.read_binary(target_quantile);
124
112
        buf.read_binary(compressions);
125
112
        std::string str;
126
112
        buf.read_binary(str);
127
112
        digest = TDigest::create_unique(compressions);
128
112
        digest->unserialize((uint8_t*)str.c_str());
129
112
    }
130
131
416
    double get() const {
132
416
        if (init_flag) {
133
373
            return digest->quantile(static_cast<float>(target_quantile));
134
373
        } else {
135
43
            return std::nan("");
136
43
        }
137
416
    }
138
139
312
    void merge(const PercentileApproxState& rhs) {
140
312
        if (!rhs.init_flag || rhs.digest->total_size() == 0) {
141
165
            return;
142
165
        }
143
147
        if (!init_flag || digest->total_size() == 0) {
144
79
            target_quantile = rhs.target_quantile;
145
79
            compressions = rhs.compressions;
146
79
            digest = TDigest::create_unique(compressions);
147
79
            init_flag = true;
148
79
        } else if (UNLIKELY(target_quantile != rhs.target_quantile ||
149
68
                            compressions != rhs.compressions)) {
150
32
            throw Exception(
151
32
                    ErrorCode::INVALID_ARGUMENT,
152
32
                    "percentile_approx aggregate states have incompatible quantile or compression");
153
32
        }
154
115
        digest->merge(rhs.digest.get());
155
115
    }
156
157
455
    void add(double source) { digest->add(static_cast<float>(source)); }
158
159
161
    void add_with_weight(double source, double weight) {
160
        // the weight should be positive num, as have check the value valid use DCHECK_GT(c._weight, 0);
161
161
        if (weight <= 0) {
162
37
            return;
163
37
        }
164
124
        digest->add(static_cast<float>(source), static_cast<float>(weight));
165
124
    }
166
167
16
    void reset() {
168
16
        target_quantile = INIT_QUANTILE;
169
16
        init_flag = false;
170
16
        digest = TDigest::create_unique(compressions);
171
16
    }
172
173
    bool init_flag = false;
174
    std::unique_ptr<TDigest> digest;
175
    double target_quantile = INIT_QUANTILE;
176
    float compressions = 10000;
177
};
178
179
template <typename Derived>
180
class AggregateFunctionPercentileApproxBase
181
        : public IAggregateFunctionDataHelper<PercentileApproxState, Derived> {
182
public:
183
    AggregateFunctionPercentileApproxBase(const DataTypes& argument_types_)
184
16
            : IAggregateFunctionDataHelper<PercentileApproxState, Derived>(argument_types_) {}
_ZN5doris37AggregateFunctionPercentileApproxBaseINS_42AggregateFunctionPercentileApproxTwoParamsEEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Line
Count
Source
184
10
            : IAggregateFunctionDataHelper<PercentileApproxState, Derived>(argument_types_) {}
_ZN5doris37AggregateFunctionPercentileApproxBaseINS_44AggregateFunctionPercentileApproxThreeParamsEEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Line
Count
Source
184
2
            : IAggregateFunctionDataHelper<PercentileApproxState, Derived>(argument_types_) {}
_ZN5doris37AggregateFunctionPercentileApproxBaseINS_52AggregateFunctionPercentileApproxWeightedThreeParamsEEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Line
Count
Source
184
3
            : IAggregateFunctionDataHelper<PercentileApproxState, Derived>(argument_types_) {}
_ZN5doris37AggregateFunctionPercentileApproxBaseINS_51AggregateFunctionPercentileApproxWeightedFourParamsEEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Line
Count
Source
184
1
            : IAggregateFunctionDataHelper<PercentileApproxState, Derived>(argument_types_) {}
185
186
0
    String get_name() const override { return "percentile_approx"; }
Unexecuted instantiation: _ZNK5doris37AggregateFunctionPercentileApproxBaseINS_42AggregateFunctionPercentileApproxTwoParamsEE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris37AggregateFunctionPercentileApproxBaseINS_44AggregateFunctionPercentileApproxThreeParamsEE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris37AggregateFunctionPercentileApproxBaseINS_52AggregateFunctionPercentileApproxWeightedThreeParamsEE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris37AggregateFunctionPercentileApproxBaseINS_51AggregateFunctionPercentileApproxWeightedFourParamsEE8get_nameB5cxx11Ev
187
188
16
    void reset(AggregateDataPtr __restrict place) const override { this->data(place).reset(); }
_ZNK5doris37AggregateFunctionPercentileApproxBaseINS_42AggregateFunctionPercentileApproxTwoParamsEE5resetEPc
Line
Count
Source
188
8
    void reset(AggregateDataPtr __restrict place) const override { this->data(place).reset(); }
_ZNK5doris37AggregateFunctionPercentileApproxBaseINS_44AggregateFunctionPercentileApproxThreeParamsEE5resetEPc
Line
Count
Source
188
3
    void reset(AggregateDataPtr __restrict place) const override { this->data(place).reset(); }
_ZNK5doris37AggregateFunctionPercentileApproxBaseINS_52AggregateFunctionPercentileApproxWeightedThreeParamsEE5resetEPc
Line
Count
Source
188
3
    void reset(AggregateDataPtr __restrict place) const override { this->data(place).reset(); }
_ZNK5doris37AggregateFunctionPercentileApproxBaseINS_51AggregateFunctionPercentileApproxWeightedFourParamsEE5resetEPc
Line
Count
Source
188
2
    void reset(AggregateDataPtr __restrict place) const override { this->data(place).reset(); }
189
190
    void merge(AggregateDataPtr __restrict place, ConstAggregateDataPtr rhs,
191
312
               Arena&) const override {
192
312
        this->data(place).merge(this->data(rhs));
193
312
    }
_ZNK5doris37AggregateFunctionPercentileApproxBaseINS_42AggregateFunctionPercentileApproxTwoParamsEE5mergeEPcPKcRNS_5ArenaE
Line
Count
Source
191
174
               Arena&) const override {
192
174
        this->data(place).merge(this->data(rhs));
193
174
    }
_ZNK5doris37AggregateFunctionPercentileApproxBaseINS_44AggregateFunctionPercentileApproxThreeParamsEE5mergeEPcPKcRNS_5ArenaE
Line
Count
Source
191
45
               Arena&) const override {
192
45
        this->data(place).merge(this->data(rhs));
193
45
    }
_ZNK5doris37AggregateFunctionPercentileApproxBaseINS_52AggregateFunctionPercentileApproxWeightedThreeParamsEE5mergeEPcPKcRNS_5ArenaE
Line
Count
Source
191
63
               Arena&) const override {
192
63
        this->data(place).merge(this->data(rhs));
193
63
    }
_ZNK5doris37AggregateFunctionPercentileApproxBaseINS_51AggregateFunctionPercentileApproxWeightedFourParamsEE5mergeEPcPKcRNS_5ArenaE
Line
Count
Source
191
30
               Arena&) const override {
192
30
        this->data(place).merge(this->data(rhs));
193
30
    }
194
195
140
    void serialize(ConstAggregateDataPtr __restrict place, BufferWritable& buf) const override {
196
140
        this->data(place).write(buf);
197
140
    }
_ZNK5doris37AggregateFunctionPercentileApproxBaseINS_42AggregateFunctionPercentileApproxTwoParamsEE9serializeEPKcRNS_14BufferWritableE
Line
Count
Source
195
77
    void serialize(ConstAggregateDataPtr __restrict place, BufferWritable& buf) const override {
196
77
        this->data(place).write(buf);
197
77
    }
_ZNK5doris37AggregateFunctionPercentileApproxBaseINS_44AggregateFunctionPercentileApproxThreeParamsEE9serializeEPKcRNS_14BufferWritableE
Line
Count
Source
195
20
    void serialize(ConstAggregateDataPtr __restrict place, BufferWritable& buf) const override {
196
20
        this->data(place).write(buf);
197
20
    }
_ZNK5doris37AggregateFunctionPercentileApproxBaseINS_52AggregateFunctionPercentileApproxWeightedThreeParamsEE9serializeEPKcRNS_14BufferWritableE
Line
Count
Source
195
29
    void serialize(ConstAggregateDataPtr __restrict place, BufferWritable& buf) const override {
196
29
        this->data(place).write(buf);
197
29
    }
_ZNK5doris37AggregateFunctionPercentileApproxBaseINS_51AggregateFunctionPercentileApproxWeightedFourParamsEE9serializeEPKcRNS_14BufferWritableE
Line
Count
Source
195
14
    void serialize(ConstAggregateDataPtr __restrict place, BufferWritable& buf) const override {
196
14
        this->data(place).write(buf);
197
14
    }
198
199
    void deserialize(AggregateDataPtr __restrict place, BufferReadable& buf,
200
156
                     Arena&) const override {
201
156
        this->data(place).read(buf);
202
156
    }
_ZNK5doris37AggregateFunctionPercentileApproxBaseINS_42AggregateFunctionPercentileApproxTwoParamsEE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Line
Count
Source
200
81
                     Arena&) const override {
201
81
        this->data(place).read(buf);
202
81
    }
_ZNK5doris37AggregateFunctionPercentileApproxBaseINS_44AggregateFunctionPercentileApproxThreeParamsEE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Line
Count
Source
200
24
                     Arena&) const override {
201
24
        this->data(place).read(buf);
202
24
    }
_ZNK5doris37AggregateFunctionPercentileApproxBaseINS_52AggregateFunctionPercentileApproxWeightedThreeParamsEE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Line
Count
Source
200
33
                     Arena&) const override {
201
33
        this->data(place).read(buf);
202
33
    }
_ZNK5doris37AggregateFunctionPercentileApproxBaseINS_51AggregateFunctionPercentileApproxWeightedFourParamsEE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Line
Count
Source
200
18
                     Arena&) const override {
201
18
        this->data(place).read(buf);
202
18
    }
203
204
0
    void check_input_columns_type(const IColumn** columns) const override {
205
0
        for (size_t i = 0; i < this->argument_types.size(); ++i) {
206
0
            this->template check_argument_column_type<ColumnFloat64>(columns[i]);
207
0
        }
208
0
    }
Unexecuted instantiation: _ZNK5doris37AggregateFunctionPercentileApproxBaseINS_42AggregateFunctionPercentileApproxTwoParamsEE24check_input_columns_typeEPPKNS_7IColumnE
Unexecuted instantiation: _ZNK5doris37AggregateFunctionPercentileApproxBaseINS_44AggregateFunctionPercentileApproxThreeParamsEE24check_input_columns_typeEPPKNS_7IColumnE
Unexecuted instantiation: _ZNK5doris37AggregateFunctionPercentileApproxBaseINS_52AggregateFunctionPercentileApproxWeightedThreeParamsEE24check_input_columns_typeEPPKNS_7IColumnE
Unexecuted instantiation: _ZNK5doris37AggregateFunctionPercentileApproxBaseINS_51AggregateFunctionPercentileApproxWeightedFourParamsEE24check_input_columns_typeEPPKNS_7IColumnE
209
};
210
211
class AggregateFunctionPercentileApproxTwoParams final
212
        : public AggregateFunctionPercentileApproxBase<AggregateFunctionPercentileApproxTwoParams>,
213
          public MultiExpression,
214
          public NullableAggregateFunction {
215
public:
216
    AggregateFunctionPercentileApproxTwoParams(const DataTypes& argument_types_)
217
10
            : AggregateFunctionPercentileApproxBase<AggregateFunctionPercentileApproxTwoParams>(
218
10
                      argument_types_) {}
219
    void add(AggregateDataPtr __restrict place, const IColumn** columns, ssize_t row_num,
220
382
             Arena&) const override {
221
382
        const auto& sources =
222
382
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[0]);
223
382
        const auto& quantile =
224
382
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[1]);
225
382
        this->data(place).init(quantile.get_element(0));
226
382
        this->data(place).add(sources.get_element(row_num));
227
382
    }
228
229
256
    DataTypePtr get_return_type() const override { return std::make_shared<DataTypeFloat64>(); }
230
231
256
    void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn& to) const override {
232
256
        auto& col = assert_cast<ColumnFloat64&, TypeCheckOnRelease::DISABLE>(to);
233
256
        col.get_data().push_back(this->data(place).get());
234
256
    }
235
};
236
237
class AggregateFunctionPercentileApproxThreeParams final
238
        : public AggregateFunctionPercentileApproxBase<
239
                  AggregateFunctionPercentileApproxThreeParams>,
240
          public MultiExpression,
241
          public NullableAggregateFunction {
242
public:
243
    AggregateFunctionPercentileApproxThreeParams(const DataTypes& argument_types_)
244
2
            : AggregateFunctionPercentileApproxBase<AggregateFunctionPercentileApproxThreeParams>(
245
2
                      argument_types_) {}
246
    void add(AggregateDataPtr __restrict place, const IColumn** columns, ssize_t row_num,
247
73
             Arena&) const override {
248
73
        const auto& sources =
249
73
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[0]);
250
73
        const auto& quantile =
251
73
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[1]);
252
73
        const auto& compression =
253
73
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[2]);
254
255
73
        this->data(place).init(quantile.get_element(0),
256
73
                               static_cast<float>(compression.get_element(0)));
257
73
        this->data(place).add(sources.get_element(row_num));
258
73
    }
259
260
48
    DataTypePtr get_return_type() const override { return std::make_shared<DataTypeFloat64>(); }
261
262
48
    void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn& to) const override {
263
48
        auto& col = assert_cast<ColumnFloat64&, TypeCheckOnRelease::DISABLE>(to);
264
48
        col.get_data().push_back(this->data(place).get());
265
48
    }
266
};
267
268
class AggregateFunctionPercentileApproxWeightedThreeParams final
269
        : public AggregateFunctionPercentileApproxBase<
270
                  AggregateFunctionPercentileApproxWeightedThreeParams>,
271
          MultiExpression,
272
          NullableAggregateFunction {
273
public:
274
    AggregateFunctionPercentileApproxWeightedThreeParams(const DataTypes& argument_types_)
275
3
            : AggregateFunctionPercentileApproxBase<
276
3
                      AggregateFunctionPercentileApproxWeightedThreeParams>(argument_types_) {}
277
278
    void add(AggregateDataPtr __restrict place, const IColumn** columns, ssize_t row_num,
279
121
             Arena&) const override {
280
121
        const auto& sources =
281
121
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[0]);
282
121
        const auto& weight =
283
121
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[1]);
284
121
        const auto& quantile =
285
121
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[2]);
286
287
121
        this->data(place).init(quantile.get_element(0));
288
121
        this->data(place).add_with_weight(sources.get_element(row_num),
289
121
                                          weight.get_element(row_num));
290
121
    }
291
292
84
    DataTypePtr get_return_type() const override { return std::make_shared<DataTypeFloat64>(); }
293
294
84
    void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn& to) const override {
295
84
        auto& col = assert_cast<ColumnFloat64&, TypeCheckOnRelease::DISABLE>(to);
296
84
        col.get_data().push_back(this->data(place).get());
297
84
    }
298
};
299
300
class AggregateFunctionPercentileApproxWeightedFourParams final
301
        : public AggregateFunctionPercentileApproxBase<
302
                  AggregateFunctionPercentileApproxWeightedFourParams>,
303
          MultiExpression,
304
          NullableAggregateFunction {
305
public:
306
    AggregateFunctionPercentileApproxWeightedFourParams(const DataTypes& argument_types_)
307
1
            : AggregateFunctionPercentileApproxBase<
308
1
                      AggregateFunctionPercentileApproxWeightedFourParams>(argument_types_) {}
309
    void add(AggregateDataPtr __restrict place, const IColumn** columns, ssize_t row_num,
310
40
             Arena&) const override {
311
40
        const auto& sources =
312
40
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[0]);
313
40
        const auto& weight =
314
40
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[1]);
315
40
        const auto& quantile =
316
40
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[2]);
317
40
        const auto& compression =
318
40
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[3]);
319
320
40
        this->data(place).init(quantile.get_element(0),
321
40
                               static_cast<float>(compression.get_element(0)));
322
40
        this->data(place).add_with_weight(sources.get_element(row_num),
323
40
                                          weight.get_element(row_num));
324
40
    }
325
326
28
    DataTypePtr get_return_type() const override { return std::make_shared<DataTypeFloat64>(); }
327
328
28
    void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn& to) const override {
329
28
        auto& col = assert_cast<ColumnFloat64&, TypeCheckOnRelease::DISABLE>(to);
330
28
        col.get_data().push_back(this->data(place).get());
331
28
    }
332
};
333
334
struct PercentileApproxArrayState {
335
1.80k
    bool has_samples() const { return !levels.empty() && digest->total_size() != 0; }
336
337
    void init(const PaddedPODArray<Float64>& quantiles, const NullMap& null_map, size_t start,
338
575
              size_t size, float compression = 10000) {
339
575
        if (init_flag) {
340
0
            return;
341
0
        }
342
343
575
        if (!std::isfinite(compression) || compression < 2048 || compression > 10000) {
344
3
            compression = 10000;
345
3
        }
346
575
        compressions = compression;
347
575
        levels.quantiles.resize(size);
348
575
        levels.permutation.resize(size);
349
1.54k
        for (size_t i = 0; i < size; ++i) {
350
975
            if (null_map[start + i]) {
351
1
                throw Exception(ErrorCode::INVALID_ARGUMENT,
352
1
                                "percentile_approx_array quantile should not be null");
353
1
            }
354
974
            check_quantile(quantiles[start + i]);
355
974
            levels.quantiles[i] = quantiles[start + i];
356
974
            levels.permutation[i] = i;
357
974
        }
358
574
        if (!levels.empty()) {
359
521
            digest = TDigest::create_unique(compressions);
360
521
        }
361
574
        init_flag = true;
362
574
    }
363
364
607
    void add_range(const Float64* values, size_t size) {
365
607
        if (levels.empty()) {
366
50
            return;
367
50
        }
368
1.14k
        for (size_t i = 0; i < size; ++i) {
369
587
            digest->add(static_cast<float>(values[i]));
370
587
        }
371
557
    }
372
373
563
    void write(BufferWritable& buf) const {
374
        // Sample-free states share the fresh-state encoding, independent of their parameters.
375
563
        const bool has_data = has_samples();
376
563
        buf.write_binary(has_data);
377
563
        if (!has_data) {
378
451
            return;
379
451
        }
380
381
112
        levels.write(buf);
382
112
        buf.write_binary(compressions);
383
112
        uint32_t serialize_size = digest->serialized_size();
384
112
        std::string result(serialize_size, '0');
385
112
        digest->serialize(reinterpret_cast<uint8_t*>(result.data()));
386
112
        buf.write_binary(result);
387
112
    }
388
389
215
    void read(BufferReadable& buf) {
390
215
        reset();
391
215
        buf.read_binary(init_flag);
392
215
        if (!init_flag) {
393
91
            return;
394
91
        }
395
396
124
        levels.read(buf);
397
124
        buf.read_binary(compressions);
398
124
        if (levels.empty()) {
399
0
            return;
400
0
        }
401
124
        std::string str;
402
124
        buf.read_binary(str);
403
124
        digest = TDigest::create_unique(compressions);
404
124
        digest->unserialize(reinterpret_cast<const uint8_t*>(str.data()));
405
124
    }
406
407
389
    void merge(const PercentileApproxArrayState& rhs) {
408
389
        if (!rhs.has_samples()) {
409
148
            return;
410
148
        }
411
412
241
        if (!has_samples()) {
413
194
            levels = rhs.levels;
414
194
            compressions = rhs.compressions;
415
194
            digest = TDigest::create_unique(compressions);
416
194
            init_flag = true;
417
194
        } else if (UNLIKELY(compressions != rhs.compressions ||
418
47
                            levels.quantiles != rhs.levels.quantiles)) {
419
26
            throw Exception(ErrorCode::INVALID_ARGUMENT,
420
26
                            "percentile_approx_array aggregate states have incompatible quantiles "
421
26
                            "or compression");
422
26
        }
423
215
        digest->merge(rhs.digest.get());
424
215
    }
425
426
261
    void reset() {
427
261
        init_flag = false;
428
261
        levels.clear();
429
261
        digest.reset();
430
261
        compressions = 10000;
431
261
    }
432
433
608
    void insert_result_into(IColumn& to) const {
434
608
        auto& column_data = assert_cast<ColumnFloat64&, TypeCheckOnRelease::DISABLE>(to).get_data();
435
608
        if (!has_samples()) {
436
243
            return;
437
243
        }
438
439
365
        const size_t old_size = column_data.size();
440
365
        const size_t size = levels.quantiles.size();
441
365
        column_data.resize(old_size + size);
442
365
        digest->quantiles(levels.quantiles.data(), levels.get_permutation().data(), size,
443
365
                          column_data.data() + old_size);
444
365
    }
445
446
    bool init_flag = false;
447
    PercentileLevels levels;
448
    std::unique_ptr<TDigest> digest;
449
    float compressions = 10000;
450
};
451
452
template <bool has_compression>
453
class AggregateFunctionPercentileApproxArray final
454
        : public IAggregateFunctionDataHelper<
455
                  PercentileApproxArrayState,
456
                  AggregateFunctionPercentileApproxArray<has_compression>>,
457
          MultiExpression,
458
          NotNullableAggregateFunction {
459
public:
460
    using Base =
461
            IAggregateFunctionDataHelper<PercentileApproxArrayState,
462
                                         AggregateFunctionPercentileApproxArray<has_compression>>;
463
464
    AggregateFunctionPercentileApproxArray(const DataTypes& argument_types_)
465
17
            : Base(argument_types_) {}
_ZN5doris38AggregateFunctionPercentileApproxArrayILb0EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS6_EE
Line
Count
Source
465
10
            : Base(argument_types_) {}
_ZN5doris38AggregateFunctionPercentileApproxArrayILb1EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS6_EE
Line
Count
Source
465
7
            : Base(argument_types_) {}
466
467
0
    String get_name() const override { return "percentile_approx_array"; }
Unexecuted instantiation: _ZNK5doris38AggregateFunctionPercentileApproxArrayILb0EE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris38AggregateFunctionPercentileApproxArrayILb1EE8get_nameB5cxx11Ev
468
469
596
    DataTypePtr get_return_type() const override {
470
596
        return std::make_shared<DataTypeArray>(make_nullable(std::make_shared<DataTypeFloat64>()));
471
596
    }
_ZNK5doris38AggregateFunctionPercentileApproxArrayILb0EE15get_return_typeEv
Line
Count
Source
469
350
    DataTypePtr get_return_type() const override {
470
350
        return std::make_shared<DataTypeArray>(make_nullable(std::make_shared<DataTypeFloat64>()));
471
350
    }
_ZNK5doris38AggregateFunctionPercentileApproxArrayILb1EE15get_return_typeEv
Line
Count
Source
469
246
    DataTypePtr get_return_type() const override {
470
246
        return std::make_shared<DataTypeArray>(make_nullable(std::make_shared<DataTypeFloat64>()));
471
246
    }
472
473
    void add(AggregateDataPtr __restrict place, const IColumn** columns, ssize_t row_num,
474
595
             Arena&) const override {
475
595
        const auto& sources =
476
595
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[0]);
477
595
        _add_values(this->data(place), &sources.get_data()[row_num], 1, columns,
478
595
                    cast_set<size_t>(row_num));
479
595
    }
_ZNK5doris38AggregateFunctionPercentileApproxArrayILb0EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
Line
Count
Source
474
378
             Arena&) const override {
475
378
        const auto& sources =
476
378
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[0]);
477
378
        _add_values(this->data(place), &sources.get_data()[row_num], 1, columns,
478
378
                    cast_set<size_t>(row_num));
479
378
    }
_ZNK5doris38AggregateFunctionPercentileApproxArrayILb1EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
Line
Count
Source
474
217
             Arena&) const override {
475
217
        const auto& sources =
476
217
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[0]);
477
217
        _add_values(this->data(place), &sources.get_data()[row_num], 1, columns,
478
217
                    cast_set<size_t>(row_num));
479
217
    }
480
481
    void add_batch_single_place(size_t batch_size, AggregateDataPtr place, const IColumn** columns,
482
15
                                Arena&) const override {
483
15
        const auto& sources =
484
15
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[0]);
485
15
        DCHECK_EQ(sources.get_data().size(), batch_size);
486
15
        _add_values(this->data(place), sources.get_data().data(), batch_size, columns, 0);
487
15
    }
_ZNK5doris38AggregateFunctionPercentileApproxArrayILb0EE22add_batch_single_placeEmPcPPKNS_7IColumnERNS_5ArenaE
Line
Count
Source
482
6
                                Arena&) const override {
483
6
        const auto& sources =
484
6
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[0]);
485
        DCHECK_EQ(sources.get_data().size(), batch_size);
486
6
        _add_values(this->data(place), sources.get_data().data(), batch_size, columns, 0);
487
6
    }
_ZNK5doris38AggregateFunctionPercentileApproxArrayILb1EE22add_batch_single_placeEmPcPPKNS_7IColumnERNS_5ArenaE
Line
Count
Source
482
9
                                Arena&) const override {
483
9
        const auto& sources =
484
9
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[0]);
485
        DCHECK_EQ(sources.get_data().size(), batch_size);
486
9
        _add_values(this->data(place), sources.get_data().data(), batch_size, columns, 0);
487
9
    }
488
489
    void add_batch_range(size_t batch_begin, size_t batch_end, AggregateDataPtr place,
490
1
                         const IColumn** columns, Arena&, bool has_null) override {
491
1
        DCHECK(!has_null);
492
1
        const auto& sources =
493
1
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[0]);
494
1
        _add_values(this->data(place), sources.get_data().data() + batch_begin,
495
1
                    batch_end - batch_begin + 1, columns, batch_begin);
496
1
    }
_ZN5doris38AggregateFunctionPercentileApproxArrayILb0EE15add_batch_rangeEmmPcPPKNS_7IColumnERNS_5ArenaEb
Line
Count
Source
490
1
                         const IColumn** columns, Arena&, bool has_null) override {
491
        DCHECK(!has_null);
492
1
        const auto& sources =
493
1
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[0]);
494
1
        _add_values(this->data(place), sources.get_data().data() + batch_begin,
495
1
                    batch_end - batch_begin + 1, columns, batch_begin);
496
1
    }
Unexecuted instantiation: _ZN5doris38AggregateFunctionPercentileApproxArrayILb1EE15add_batch_rangeEmmPcPPKNS_7IColumnERNS_5ArenaEb
497
498
0
    void check_input_columns_type(const IColumn** columns) const override {
499
0
        this->template check_argument_column_type<ColumnFloat64>(columns[0]);
500
0
        check_percentile_array_column_type(*this, *columns[1], 1);
501
0
        if constexpr (has_compression) {
502
0
            this->template check_argument_column_type<ColumnFloat64>(columns[2]);
503
0
        }
504
0
    }
Unexecuted instantiation: _ZNK5doris38AggregateFunctionPercentileApproxArrayILb0EE24check_input_columns_typeEPPKNS_7IColumnE
Unexecuted instantiation: _ZNK5doris38AggregateFunctionPercentileApproxArrayILb1EE24check_input_columns_typeEPPKNS_7IColumnE
505
506
46
    void reset(AggregateDataPtr __restrict place) const override { this->data(place).reset(); }
_ZNK5doris38AggregateFunctionPercentileApproxArrayILb0EE5resetEPc
Line
Count
Source
506
25
    void reset(AggregateDataPtr __restrict place) const override { this->data(place).reset(); }
_ZNK5doris38AggregateFunctionPercentileApproxArrayILb1EE5resetEPc
Line
Count
Source
506
21
    void reset(AggregateDataPtr __restrict place) const override { this->data(place).reset(); }
507
508
    void merge(AggregateDataPtr __restrict place, ConstAggregateDataPtr rhs,
509
389
               Arena&) const override {
510
389
        this->data(place).merge(this->data(rhs));
511
389
    }
_ZNK5doris38AggregateFunctionPercentileApproxArrayILb0EE5mergeEPcPKcRNS_5ArenaE
Line
Count
Source
509
232
               Arena&) const override {
510
232
        this->data(place).merge(this->data(rhs));
511
232
    }
_ZNK5doris38AggregateFunctionPercentileApproxArrayILb1EE5mergeEPcPKcRNS_5ArenaE
Line
Count
Source
509
157
               Arena&) const override {
510
157
        this->data(place).merge(this->data(rhs));
511
157
    }
512
513
563
    void serialize(ConstAggregateDataPtr __restrict place, BufferWritable& buf) const override {
514
563
        this->data(place).write(buf);
515
563
    }
_ZNK5doris38AggregateFunctionPercentileApproxArrayILb0EE9serializeEPKcRNS_14BufferWritableE
Line
Count
Source
513
299
    void serialize(ConstAggregateDataPtr __restrict place, BufferWritable& buf) const override {
514
299
        this->data(place).write(buf);
515
299
    }
_ZNK5doris38AggregateFunctionPercentileApproxArrayILb1EE9serializeEPKcRNS_14BufferWritableE
Line
Count
Source
513
264
    void serialize(ConstAggregateDataPtr __restrict place, BufferWritable& buf) const override {
514
264
        this->data(place).write(buf);
515
264
    }
516
517
    void deserialize(AggregateDataPtr __restrict place, BufferReadable& buf,
518
215
                     Arena&) const override {
519
215
        this->data(place).read(buf);
520
215
    }
_ZNK5doris38AggregateFunctionPercentileApproxArrayILb0EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Line
Count
Source
518
127
                     Arena&) const override {
519
127
        this->data(place).read(buf);
520
127
    }
_ZNK5doris38AggregateFunctionPercentileApproxArrayILb1EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Line
Count
Source
518
88
                     Arena&) const override {
519
88
        this->data(place).read(buf);
520
88
    }
521
522
608
    void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn& to) const override {
523
608
        auto& to_arr = assert_cast<ColumnArray&, TypeCheckOnRelease::DISABLE>(to);
524
608
        auto& nullable_data =
525
608
                assert_cast<ColumnNullable&, TypeCheckOnRelease::DISABLE>(to_arr.get_data());
526
608
        auto& nested_data = nullable_data.get_nested_column();
527
608
        this->data(place).insert_result_into(nested_data);
528
608
        nullable_data.get_null_map_data().resize_fill(nested_data.size(), 0);
529
608
        to_arr.get_offsets().push_back(nested_data.size());
530
608
    }
_ZNK5doris38AggregateFunctionPercentileApproxArrayILb0EE18insert_result_intoEPKcRNS_7IColumnE
Line
Count
Source
522
356
    void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn& to) const override {
523
356
        auto& to_arr = assert_cast<ColumnArray&, TypeCheckOnRelease::DISABLE>(to);
524
356
        auto& nullable_data =
525
356
                assert_cast<ColumnNullable&, TypeCheckOnRelease::DISABLE>(to_arr.get_data());
526
356
        auto& nested_data = nullable_data.get_nested_column();
527
356
        this->data(place).insert_result_into(nested_data);
528
356
        nullable_data.get_null_map_data().resize_fill(nested_data.size(), 0);
529
356
        to_arr.get_offsets().push_back(nested_data.size());
530
356
    }
_ZNK5doris38AggregateFunctionPercentileApproxArrayILb1EE18insert_result_intoEPKcRNS_7IColumnE
Line
Count
Source
522
252
    void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn& to) const override {
523
252
        auto& to_arr = assert_cast<ColumnArray&, TypeCheckOnRelease::DISABLE>(to);
524
252
        auto& nullable_data =
525
252
                assert_cast<ColumnNullable&, TypeCheckOnRelease::DISABLE>(to_arr.get_data());
526
252
        auto& nested_data = nullable_data.get_nested_column();
527
252
        this->data(place).insert_result_into(nested_data);
528
252
        nullable_data.get_null_map_data().resize_fill(nested_data.size(), 0);
529
252
        to_arr.get_offsets().push_back(nested_data.size());
530
252
    }
531
532
private:
533
    void _add_values(PercentileApproxArrayState& state, const Float64* values, size_t value_size,
534
611
                     const IColumn** columns, size_t quantile_row) const {
535
611
        if (!state.init_flag) {
536
575
            const auto& quantile_array =
537
575
                    assert_cast<const ColumnArray&, TypeCheckOnRelease::DISABLE>(*columns[1]);
538
575
            const auto& offsets = quantile_array.get_offsets();
539
575
            const auto& nullable_quantiles =
540
575
                    assert_cast<const ColumnNullable&, TypeCheckOnRelease::DISABLE>(
541
575
                            quantile_array.get_data());
542
575
            const auto& quantiles = assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(
543
575
                                            nullable_quantiles.get_nested_column())
544
575
                                            .get_data();
545
575
            const auto& null_map = nullable_quantiles.get_null_map_data();
546
575
            const size_t start = quantile_row == 0 ? 0 : offsets[quantile_row - 1];
547
575
            const size_t quantile_size = offsets[quantile_row] - start;
548
549
575
            float compression = 10000;
550
575
            if constexpr (has_compression) {
551
220
                const auto& compression_column =
552
220
                        assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[2]);
553
220
                compression = static_cast<float>(compression_column.get_element(0));
554
220
            }
555
575
            state.init(quantiles, null_map, start, quantile_size, compression);
556
575
        }
557
611
        state.add_range(values, value_size);
558
611
    }
_ZNK5doris38AggregateFunctionPercentileApproxArrayILb0EE11_add_valuesERNS_26PercentileApproxArrayStateEPKdmPPKNS_7IColumnEm
Line
Count
Source
534
385
                     const IColumn** columns, size_t quantile_row) const {
535
385
        if (!state.init_flag) {
536
355
            const auto& quantile_array =
537
355
                    assert_cast<const ColumnArray&, TypeCheckOnRelease::DISABLE>(*columns[1]);
538
355
            const auto& offsets = quantile_array.get_offsets();
539
355
            const auto& nullable_quantiles =
540
355
                    assert_cast<const ColumnNullable&, TypeCheckOnRelease::DISABLE>(
541
355
                            quantile_array.get_data());
542
355
            const auto& quantiles = assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(
543
355
                                            nullable_quantiles.get_nested_column())
544
355
                                            .get_data();
545
355
            const auto& null_map = nullable_quantiles.get_null_map_data();
546
355
            const size_t start = quantile_row == 0 ? 0 : offsets[quantile_row - 1];
547
355
            const size_t quantile_size = offsets[quantile_row] - start;
548
549
355
            float compression = 10000;
550
            if constexpr (has_compression) {
551
                const auto& compression_column =
552
                        assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[2]);
553
                compression = static_cast<float>(compression_column.get_element(0));
554
            }
555
355
            state.init(quantiles, null_map, start, quantile_size, compression);
556
355
        }
557
385
        state.add_range(values, value_size);
558
385
    }
_ZNK5doris38AggregateFunctionPercentileApproxArrayILb1EE11_add_valuesERNS_26PercentileApproxArrayStateEPKdmPPKNS_7IColumnEm
Line
Count
Source
534
226
                     const IColumn** columns, size_t quantile_row) const {
535
226
        if (!state.init_flag) {
536
220
            const auto& quantile_array =
537
220
                    assert_cast<const ColumnArray&, TypeCheckOnRelease::DISABLE>(*columns[1]);
538
220
            const auto& offsets = quantile_array.get_offsets();
539
220
            const auto& nullable_quantiles =
540
220
                    assert_cast<const ColumnNullable&, TypeCheckOnRelease::DISABLE>(
541
220
                            quantile_array.get_data());
542
220
            const auto& quantiles = assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(
543
220
                                            nullable_quantiles.get_nested_column())
544
220
                                            .get_data();
545
220
            const auto& null_map = nullable_quantiles.get_null_map_data();
546
220
            const size_t start = quantile_row == 0 ? 0 : offsets[quantile_row - 1];
547
220
            const size_t quantile_size = offsets[quantile_row] - start;
548
549
220
            float compression = 10000;
550
220
            if constexpr (has_compression) {
551
220
                const auto& compression_column =
552
220
                        assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[2]);
553
220
                compression = static_cast<float>(compression_column.get_element(0));
554
220
            }
555
220
            state.init(quantiles, null_map, start, quantile_size, compression);
556
220
        }
557
226
        state.add_range(values, value_size);
558
226
    }
559
};
560
561
template <PrimitiveType T>
562
struct PercentileState {
563
    mutable std::vector<Counts<typename PrimitiveTypeTraits<T>::CppType>> vec_counts;
564
    std::vector<double> vec_quantile {-1};
565
    bool inited_flag = false;
566
567
48
    void write(BufferWritable& buf) const {
568
48
        buf.write_binary(inited_flag);
569
48
        if (!inited_flag) {
570
14
            return;
571
14
        }
572
34
        int size_num = cast_set<int>(vec_quantile.size());
573
34
        buf.write_binary(size_num);
574
37
        for (const auto& quantile : vec_quantile) {
575
37
            buf.write_binary(quantile);
576
37
        }
577
37
        for (auto& counts : vec_counts) {
578
37
            counts.serialize(buf);
579
37
        }
580
34
    }
Unexecuted instantiation: _ZNK5doris15PercentileStateILNS_13PrimitiveTypeE3EE5writeERNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris15PercentileStateILNS_13PrimitiveTypeE4EE5writeERNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris15PercentileStateILNS_13PrimitiveTypeE5EE5writeERNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris15PercentileStateILNS_13PrimitiveTypeE6EE5writeERNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris15PercentileStateILNS_13PrimitiveTypeE7EE5writeERNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris15PercentileStateILNS_13PrimitiveTypeE8EE5writeERNS_14BufferWritableE
_ZNK5doris15PercentileStateILNS_13PrimitiveTypeE9EE5writeERNS_14BufferWritableE
Line
Count
Source
567
48
    void write(BufferWritable& buf) const {
568
48
        buf.write_binary(inited_flag);
569
48
        if (!inited_flag) {
570
14
            return;
571
14
        }
572
34
        int size_num = cast_set<int>(vec_quantile.size());
573
34
        buf.write_binary(size_num);
574
37
        for (const auto& quantile : vec_quantile) {
575
37
            buf.write_binary(quantile);
576
37
        }
577
37
        for (auto& counts : vec_counts) {
578
37
            counts.serialize(buf);
579
37
        }
580
34
    }
581
582
60
    void read(BufferReadable& buf) {
583
60
        buf.read_binary(inited_flag);
584
60
        if (!inited_flag) {
585
14
            return;
586
14
        }
587
46
        int size_num = 0;
588
46
        buf.read_binary(size_num);
589
46
        double data = 0.0;
590
46
        vec_quantile.clear();
591
97
        for (int i = 0; i < size_num; ++i) {
592
51
            buf.read_binary(data);
593
51
            vec_quantile.emplace_back(data);
594
51
        }
595
46
        vec_counts.clear();
596
46
        vec_counts.resize(size_num);
597
97
        for (int i = 0; i < size_num; ++i) {
598
51
            vec_counts[i].unserialize(buf);
599
51
        }
600
46
    }
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE3EE4readERNS_14BufferReadableE
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE4EE4readERNS_14BufferReadableE
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE5EE4readERNS_14BufferReadableE
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE6EE4readERNS_14BufferReadableE
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE7EE4readERNS_14BufferReadableE
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE8EE4readERNS_14BufferReadableE
_ZN5doris15PercentileStateILNS_13PrimitiveTypeE9EE4readERNS_14BufferReadableE
Line
Count
Source
582
60
    void read(BufferReadable& buf) {
583
60
        buf.read_binary(inited_flag);
584
60
        if (!inited_flag) {
585
14
            return;
586
14
        }
587
46
        int size_num = 0;
588
46
        buf.read_binary(size_num);
589
46
        double data = 0.0;
590
46
        vec_quantile.clear();
591
97
        for (int i = 0; i < size_num; ++i) {
592
51
            buf.read_binary(data);
593
51
            vec_quantile.emplace_back(data);
594
51
        }
595
46
        vec_counts.clear();
596
46
        vec_counts.resize(size_num);
597
97
        for (int i = 0; i < size_num; ++i) {
598
51
            vec_counts[i].unserialize(buf);
599
51
        }
600
46
    }
601
602
    void add(typename PrimitiveTypeTraits<T>::CppType source,
603
153
             const PaddedPODArray<Float64>& quantiles, const NullMap& null_maps, int64_t arg_size) {
604
153
        if (!inited_flag) {
605
143
            vec_counts.resize(arg_size);
606
143
            vec_quantile.resize(arg_size, -1);
607
143
            inited_flag = true;
608
292
            for (int i = 0; i < arg_size; ++i) {
609
                // throw Exception func call percentile_array(id, [1,0,null])
610
149
                if (null_maps[i]) {
611
0
                    throw Exception(ErrorCode::INVALID_ARGUMENT,
612
0
                                    "quantiles in func percentile_array should not have null");
613
0
                }
614
149
                check_quantile(quantiles[i]);
615
149
                vec_quantile[i] = quantiles[i];
616
149
            }
617
143
        }
618
313
        for (int i = 0; i < arg_size; ++i) {
619
160
            vec_counts[i].increment(source);
620
160
        }
621
153
    }
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE3EE3addEaRKNS_8PODArrayIdLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEERKNS3_IhLm4096ES6_Lm16ELm15EEEl
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE4EE3addEsRKNS_8PODArrayIdLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEERKNS3_IhLm4096ES6_Lm16ELm15EEEl
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE5EE3addEiRKNS_8PODArrayIdLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEERKNS3_IhLm4096ES6_Lm16ELm15EEEl
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE6EE3addElRKNS_8PODArrayIdLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEERKNS3_IhLm4096ES6_Lm16ELm15EEEl
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE7EE3addEnRKNS_8PODArrayIdLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEERKNS3_IhLm4096ES6_Lm16ELm15EEEl
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE8EE3addEfRKNS_8PODArrayIdLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEERKNS3_IhLm4096ES6_Lm16ELm15EEEl
_ZN5doris15PercentileStateILNS_13PrimitiveTypeE9EE3addEdRKNS_8PODArrayIdLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEERKNS3_IhLm4096ES6_Lm16ELm15EEEl
Line
Count
Source
603
153
             const PaddedPODArray<Float64>& quantiles, const NullMap& null_maps, int64_t arg_size) {
604
153
        if (!inited_flag) {
605
143
            vec_counts.resize(arg_size);
606
143
            vec_quantile.resize(arg_size, -1);
607
143
            inited_flag = true;
608
292
            for (int i = 0; i < arg_size; ++i) {
609
                // throw Exception func call percentile_array(id, [1,0,null])
610
149
                if (null_maps[i]) {
611
0
                    throw Exception(ErrorCode::INVALID_ARGUMENT,
612
0
                                    "quantiles in func percentile_array should not have null");
613
0
                }
614
149
                check_quantile(quantiles[i]);
615
149
                vec_quantile[i] = quantiles[i];
616
149
            }
617
143
        }
618
313
        for (int i = 0; i < arg_size; ++i) {
619
160
            vec_counts[i].increment(source);
620
160
        }
621
153
    }
622
623
    void add_batch(const PaddedPODArray<typename PrimitiveTypeTraits<T>::CppType>& source,
624
0
                   const Float64& q) {
625
0
        if (!inited_flag) {
626
0
            inited_flag = true;
627
0
            vec_counts.resize(1);
628
0
            vec_quantile.resize(1);
629
0
            check_quantile(q);
630
0
            vec_quantile[0] = q;
631
0
        }
632
0
        vec_counts[0].increment_batch(source);
633
0
    }
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE3EE9add_batchERKNS_8PODArrayIaLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEERKd
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE4EE9add_batchERKNS_8PODArrayIsLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEERKd
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE5EE9add_batchERKNS_8PODArrayIiLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEERKd
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE6EE9add_batchERKNS_8PODArrayIlLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEERKd
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE7EE9add_batchERKNS_8PODArrayInLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEERKd
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE8EE9add_batchERKNS_8PODArrayIfLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEERKd
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE9EE9add_batchERKNS_8PODArrayIdLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEERKd
634
635
105
    void merge(const PercentileState& rhs) {
636
105
        if (rhs.vec_counts.empty()) {
637
32
            return;
638
32
        }
639
73
        int size_num = cast_set<int>(rhs.vec_quantile.size());
640
73
        if (vec_counts.empty()) {
641
39
            vec_counts.resize(size_num);
642
39
            vec_quantile = rhs.vec_quantile;
643
39
            inited_flag = true;
644
39
        } else if (UNLIKELY(vec_quantile != rhs.vec_quantile)) {
645
24
            throw Exception(ErrorCode::INVALID_ARGUMENT,
646
24
                            "percentile aggregate states have incompatible quantiles");
647
24
        }
648
649
105
        for (int i = 0; i < size_num; ++i) {
650
56
            vec_counts[i].merge(&(rhs.vec_counts[i]));
651
56
        }
652
49
    }
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE3EE5mergeERKS2_
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE4EE5mergeERKS2_
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE5EE5mergeERKS2_
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE6EE5mergeERKS2_
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE7EE5mergeERKS2_
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE8EE5mergeERKS2_
_ZN5doris15PercentileStateILNS_13PrimitiveTypeE9EE5mergeERKS2_
Line
Count
Source
635
105
    void merge(const PercentileState& rhs) {
636
105
        if (rhs.vec_counts.empty()) {
637
32
            return;
638
32
        }
639
73
        int size_num = cast_set<int>(rhs.vec_quantile.size());
640
73
        if (vec_counts.empty()) {
641
39
            vec_counts.resize(size_num);
642
39
            vec_quantile = rhs.vec_quantile;
643
39
            inited_flag = true;
644
39
        } else if (UNLIKELY(vec_quantile != rhs.vec_quantile)) {
645
24
            throw Exception(ErrorCode::INVALID_ARGUMENT,
646
24
                            "percentile aggregate states have incompatible quantiles");
647
24
        }
648
649
105
        for (int i = 0; i < size_num; ++i) {
650
56
            vec_counts[i].merge(&(rhs.vec_counts[i]));
651
56
        }
652
49
    }
653
654
7
    void reset() {
655
7
        vec_counts.clear();
656
7
        vec_quantile.clear();
657
7
        inited_flag = false;
658
7
    }
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE3EE5resetEv
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE4EE5resetEv
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE5EE5resetEv
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE6EE5resetEv
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE7EE5resetEv
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE8EE5resetEv
_ZN5doris15PercentileStateILNS_13PrimitiveTypeE9EE5resetEv
Line
Count
Source
654
7
    void reset() {
655
7
        vec_counts.clear();
656
7
        vec_quantile.clear();
657
7
        inited_flag = false;
658
7
    }
659
660
28
    double get() const { return vec_counts.empty() ? 0 : vec_counts[0].terminate(vec_quantile[0]); }
Unexecuted instantiation: _ZNK5doris15PercentileStateILNS_13PrimitiveTypeE3EE3getEv
Unexecuted instantiation: _ZNK5doris15PercentileStateILNS_13PrimitiveTypeE4EE3getEv
Unexecuted instantiation: _ZNK5doris15PercentileStateILNS_13PrimitiveTypeE5EE3getEv
Unexecuted instantiation: _ZNK5doris15PercentileStateILNS_13PrimitiveTypeE6EE3getEv
Unexecuted instantiation: _ZNK5doris15PercentileStateILNS_13PrimitiveTypeE7EE3getEv
Unexecuted instantiation: _ZNK5doris15PercentileStateILNS_13PrimitiveTypeE8EE3getEv
_ZNK5doris15PercentileStateILNS_13PrimitiveTypeE9EE3getEv
Line
Count
Source
660
28
    double get() const { return vec_counts.empty() ? 0 : vec_counts[0].terminate(vec_quantile[0]); }
661
662
76
    void insert_result_into(IColumn& to) const {
663
76
        auto& column_data = assert_cast<ColumnFloat64&, TypeCheckOnRelease::DISABLE>(to).get_data();
664
158
        for (int i = 0; i < vec_counts.size(); ++i) {
665
82
            column_data.push_back(vec_counts[i].terminate(vec_quantile[i]));
666
82
        }
667
76
    }
Unexecuted instantiation: _ZNK5doris15PercentileStateILNS_13PrimitiveTypeE3EE18insert_result_intoERNS_7IColumnE
Unexecuted instantiation: _ZNK5doris15PercentileStateILNS_13PrimitiveTypeE4EE18insert_result_intoERNS_7IColumnE
Unexecuted instantiation: _ZNK5doris15PercentileStateILNS_13PrimitiveTypeE5EE18insert_result_intoERNS_7IColumnE
Unexecuted instantiation: _ZNK5doris15PercentileStateILNS_13PrimitiveTypeE6EE18insert_result_intoERNS_7IColumnE
Unexecuted instantiation: _ZNK5doris15PercentileStateILNS_13PrimitiveTypeE7EE18insert_result_intoERNS_7IColumnE
Unexecuted instantiation: _ZNK5doris15PercentileStateILNS_13PrimitiveTypeE8EE18insert_result_intoERNS_7IColumnE
_ZNK5doris15PercentileStateILNS_13PrimitiveTypeE9EE18insert_result_intoERNS_7IColumnE
Line
Count
Source
662
76
    void insert_result_into(IColumn& to) const {
663
76
        auto& column_data = assert_cast<ColumnFloat64&, TypeCheckOnRelease::DISABLE>(to).get_data();
664
158
        for (int i = 0; i < vec_counts.size(); ++i) {
665
82
            column_data.push_back(vec_counts[i].terminate(vec_quantile[i]));
666
82
        }
667
76
    }
668
};
669
670
template <PrimitiveType T>
671
struct PercentileExactState {
672
    using ValueType = typename PrimitiveTypeTraits<T>::CppType;
673
    static constexpr size_t bytes_in_arena = 64 - sizeof(PODArray<ValueType>);
674
    using Array = PODArrayWithStackMemory<ValueType, bytes_in_arena>;
675
676
382
    void add_single_range(const ValueType* data, size_t count, double quantile) {
677
382
        if (!inited_flag) {
678
332
            _set_single_level(quantile);
679
332
            inited_flag = true;
680
332
        }
681
382
        _append(data, count);
682
382
    }
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE3EE16add_single_rangeEPKamd
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE4EE16add_single_rangeEPKsmd
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE5EE16add_single_rangeEPKimd
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE6EE16add_single_rangeEPKlmd
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE7EE16add_single_rangeEPKnmd
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE8EE16add_single_rangeEPKfmd
_ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE9EE16add_single_rangeEPKdmd
Line
Count
Source
676
382
    void add_single_range(const ValueType* data, size_t count, double quantile) {
677
382
        if (!inited_flag) {
678
332
            _set_single_level(quantile);
679
332
            inited_flag = true;
680
332
        }
681
382
        _append(data, count);
682
382
    }
683
684
    void add_many_range(const ValueType* data, size_t count,
685
                        const PaddedPODArray<Float64>& quantiles_data, const NullMap& null_maps,
686
227
                        size_t start, int64_t arg_size) {
687
227
        if (!inited_flag) {
688
203
            _set_many_levels(quantiles_data, null_maps, start, arg_size);
689
203
            inited_flag = true;
690
203
        }
691
227
        if (levels.empty()) {
692
13
            return;
693
13
        }
694
214
        _append(data, count);
695
214
    }
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE3EE14add_many_rangeEPKamRKNS_8PODArrayIdLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEERKNS5_IhLm4096ES8_Lm16ELm15EEEml
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE4EE14add_many_rangeEPKsmRKNS_8PODArrayIdLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEERKNS5_IhLm4096ES8_Lm16ELm15EEEml
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE5EE14add_many_rangeEPKimRKNS_8PODArrayIdLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEERKNS5_IhLm4096ES8_Lm16ELm15EEEml
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE6EE14add_many_rangeEPKlmRKNS_8PODArrayIdLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEERKNS5_IhLm4096ES8_Lm16ELm15EEEml
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE7EE14add_many_rangeEPKnmRKNS_8PODArrayIdLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEERKNS5_IhLm4096ES8_Lm16ELm15EEEml
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE8EE14add_many_rangeEPKfmRKNS_8PODArrayIdLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEERKNS5_IhLm4096ES8_Lm16ELm15EEEml
_ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE9EE14add_many_rangeEPKdmRKNS_8PODArrayIdLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEERKNS5_IhLm4096ES8_Lm16ELm15EEEml
Line
Count
Source
686
227
                        size_t start, int64_t arg_size) {
687
227
        if (!inited_flag) {
688
203
            _set_many_levels(quantiles_data, null_maps, start, arg_size);
689
203
            inited_flag = true;
690
203
        }
691
227
        if (levels.empty()) {
692
13
            return;
693
13
        }
694
214
        _append(data, count);
695
214
    }
696
697
132
    void write(BufferWritable& buf) const {
698
132
        buf.write_binary(inited_flag);
699
132
        if (!inited_flag) {
700
42
            return;
701
42
        }
702
703
90
        levels.write(buf);
704
90
        size_t size = values.size();
705
90
        buf.write_binary(size);
706
90
        if (size > 0) {
707
52
            buf.write(reinterpret_cast<const char*>(values.data()), sizeof(ValueType) * size);
708
52
        }
709
90
    }
Unexecuted instantiation: _ZNK5doris20PercentileExactStateILNS_13PrimitiveTypeE3EE5writeERNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris20PercentileExactStateILNS_13PrimitiveTypeE4EE5writeERNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris20PercentileExactStateILNS_13PrimitiveTypeE5EE5writeERNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris20PercentileExactStateILNS_13PrimitiveTypeE6EE5writeERNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris20PercentileExactStateILNS_13PrimitiveTypeE7EE5writeERNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris20PercentileExactStateILNS_13PrimitiveTypeE8EE5writeERNS_14BufferWritableE
_ZNK5doris20PercentileExactStateILNS_13PrimitiveTypeE9EE5writeERNS_14BufferWritableE
Line
Count
Source
697
132
    void write(BufferWritable& buf) const {
698
132
        buf.write_binary(inited_flag);
699
132
        if (!inited_flag) {
700
42
            return;
701
42
        }
702
703
90
        levels.write(buf);
704
90
        size_t size = values.size();
705
90
        buf.write_binary(size);
706
90
        if (size > 0) {
707
52
            buf.write(reinterpret_cast<const char*>(values.data()), sizeof(ValueType) * size);
708
52
        }
709
90
    }
710
711
144
    void read(BufferReadable& buf) {
712
144
        reset();
713
144
        buf.read_binary(inited_flag);
714
144
        if (!inited_flag) {
715
42
            return;
716
42
        }
717
718
102
        levels.read(buf);
719
102
        size_t size = 0;
720
102
        buf.read_binary(size);
721
102
        values.resize(size);
722
102
        if (size > 0) {
723
64
            auto raw = buf.read(sizeof(ValueType) * size);
724
64
            memcpy(values.data(), raw.data, raw.size);
725
64
        }
726
102
    }
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE3EE4readERNS_14BufferReadableE
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE4EE4readERNS_14BufferReadableE
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE5EE4readERNS_14BufferReadableE
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE6EE4readERNS_14BufferReadableE
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE7EE4readERNS_14BufferReadableE
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE8EE4readERNS_14BufferReadableE
_ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE9EE4readERNS_14BufferReadableE
Line
Count
Source
711
144
    void read(BufferReadable& buf) {
712
144
        reset();
713
144
        buf.read_binary(inited_flag);
714
144
        if (!inited_flag) {
715
42
            return;
716
42
        }
717
718
102
        levels.read(buf);
719
102
        size_t size = 0;
720
102
        buf.read_binary(size);
721
102
        values.resize(size);
722
102
        if (size > 0) {
723
64
            auto raw = buf.read(sizeof(ValueType) * size);
724
64
            memcpy(values.data(), raw.data, raw.size);
725
64
        }
726
102
    }
727
728
297
    void merge(const PercentileExactState& rhs) {
729
297
        if (!rhs.inited_flag) {
730
84
            return;
731
84
        }
732
733
213
        if (values.empty()) {
734
137
            levels = rhs.levels;
735
137
            inited_flag = true;
736
137
        } else if (rhs.values.empty()) {
737
18
            return;
738
58
        } else if (UNLIKELY(levels.quantiles != rhs.levels.quantiles)) {
739
24
            throw Exception(ErrorCode::INVALID_ARGUMENT,
740
24
                            "percentile aggregate states have incompatible quantiles");
741
24
        }
742
171
        _append(rhs.values.data(), rhs.values.size());
743
171
    }
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE3EE5mergeERKS2_
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE4EE5mergeERKS2_
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE5EE5mergeERKS2_
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE6EE5mergeERKS2_
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE7EE5mergeERKS2_
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE8EE5mergeERKS2_
_ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE9EE5mergeERKS2_
Line
Count
Source
728
297
    void merge(const PercentileExactState& rhs) {
729
297
        if (!rhs.inited_flag) {
730
84
            return;
731
84
        }
732
733
213
        if (values.empty()) {
734
137
            levels = rhs.levels;
735
137
            inited_flag = true;
736
137
        } else if (rhs.values.empty()) {
737
18
            return;
738
58
        } else if (UNLIKELY(levels.quantiles != rhs.levels.quantiles)) {
739
24
            throw Exception(ErrorCode::INVALID_ARGUMENT,
740
24
                            "percentile aggregate states have incompatible quantiles");
741
24
        }
742
171
        _append(rhs.values.data(), rhs.values.size());
743
171
    }
744
745
159
    void reset() {
746
159
        values.clear();
747
159
        levels.clear();
748
159
        inited_flag = false;
749
159
    }
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE3EE5resetEv
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE4EE5resetEv
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE5EE5resetEv
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE6EE5resetEv
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE7EE5resetEv
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE8EE5resetEv
_ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE9EE5resetEv
Line
Count
Source
745
159
    void reset() {
746
159
        values.clear();
747
159
        levels.clear();
748
159
        inited_flag = false;
749
159
    }
750
751
256
    double get() const {
752
256
        if (!inited_flag || levels.empty() || values.empty()) {
753
132
            return std::numeric_limits<double>::quiet_NaN();
754
132
        }
755
756
256
        DCHECK_EQ(levels.quantiles.size(), 1);
757
124
        return _get_result(levels.quantiles[0]);
758
256
    }
Unexecuted instantiation: _ZNK5doris20PercentileExactStateILNS_13PrimitiveTypeE3EE3getEv
Unexecuted instantiation: _ZNK5doris20PercentileExactStateILNS_13PrimitiveTypeE4EE3getEv
Unexecuted instantiation: _ZNK5doris20PercentileExactStateILNS_13PrimitiveTypeE5EE3getEv
Unexecuted instantiation: _ZNK5doris20PercentileExactStateILNS_13PrimitiveTypeE6EE3getEv
Unexecuted instantiation: _ZNK5doris20PercentileExactStateILNS_13PrimitiveTypeE7EE3getEv
Unexecuted instantiation: _ZNK5doris20PercentileExactStateILNS_13PrimitiveTypeE8EE3getEv
_ZNK5doris20PercentileExactStateILNS_13PrimitiveTypeE9EE3getEv
Line
Count
Source
751
256
    double get() const {
752
256
        if (!inited_flag || levels.empty() || values.empty()) {
753
132
            return std::numeric_limits<double>::quiet_NaN();
754
132
        }
755
756
256
        DCHECK_EQ(levels.quantiles.size(), 1);
757
124
        return _get_result(levels.quantiles[0]);
758
256
    }
759
760
152
    void insert_result_into(IColumn& to) const {
761
152
        auto& column_data = assert_cast<ColumnFloat64&, TypeCheckOnRelease::DISABLE>(to).get_data();
762
152
        if (!inited_flag || levels.empty()) {
763
12
            return;
764
12
        }
765
766
140
        size_t old_size = column_data.size();
767
140
        size_t size = levels.quantiles.size();
768
140
        column_data.resize(old_size + size);
769
140
        auto* result = column_data.data() + old_size;
770
771
140
        if (values.empty()) {
772
80
            for (size_t i = 0; i < size; ++i) {
773
40
                result[i] = std::numeric_limits<double>::quiet_NaN();
774
40
            }
775
40
            return;
776
40
        }
777
778
100
        if (values.size() == 1) {
779
156
            for (size_t i = 0; i < size; ++i) {
780
84
                result[i] = static_cast<double>(values.front());
781
84
            }
782
72
            return;
783
72
        }
784
785
28
        size_t prev_index = 0;
786
28
        const auto& quantiles = levels.quantiles;
787
28
        const auto& permutation = levels.get_permutation();
788
58
        for (size_t i = 0; i < size; ++i) {
789
30
            auto level_index = permutation[i];
790
30
            auto level = quantiles[level_index];
791
30
            double u = static_cast<double>(values.size() - 1) * level;
792
30
            auto index = static_cast<size_t>(u);
793
794
30
            if (index + 1 >= values.size()) {
795
0
                result[level_index] =
796
0
                        static_cast<double>(*std::max_element(values.begin(), values.end()));
797
30
            } else {
798
30
                std::nth_element(values.begin() + prev_index, values.begin() + index, values.end());
799
30
                auto* nth_elem = std::min_element(values.begin() + index + 1, values.end());
800
30
                result[level_index] =
801
30
                        static_cast<double>(values[index]) +
802
30
                        (u - static_cast<double>(index)) * (static_cast<double>(*nth_elem) -
803
30
                                                            static_cast<double>(values[index]));
804
30
                prev_index = index;
805
30
            }
806
30
        }
807
28
    }
Unexecuted instantiation: _ZNK5doris20PercentileExactStateILNS_13PrimitiveTypeE3EE18insert_result_intoERNS_7IColumnE
Unexecuted instantiation: _ZNK5doris20PercentileExactStateILNS_13PrimitiveTypeE4EE18insert_result_intoERNS_7IColumnE
Unexecuted instantiation: _ZNK5doris20PercentileExactStateILNS_13PrimitiveTypeE5EE18insert_result_intoERNS_7IColumnE
Unexecuted instantiation: _ZNK5doris20PercentileExactStateILNS_13PrimitiveTypeE6EE18insert_result_intoERNS_7IColumnE
Unexecuted instantiation: _ZNK5doris20PercentileExactStateILNS_13PrimitiveTypeE7EE18insert_result_intoERNS_7IColumnE
Unexecuted instantiation: _ZNK5doris20PercentileExactStateILNS_13PrimitiveTypeE8EE18insert_result_intoERNS_7IColumnE
_ZNK5doris20PercentileExactStateILNS_13PrimitiveTypeE9EE18insert_result_intoERNS_7IColumnE
Line
Count
Source
760
152
    void insert_result_into(IColumn& to) const {
761
152
        auto& column_data = assert_cast<ColumnFloat64&, TypeCheckOnRelease::DISABLE>(to).get_data();
762
152
        if (!inited_flag || levels.empty()) {
763
12
            return;
764
12
        }
765
766
140
        size_t old_size = column_data.size();
767
140
        size_t size = levels.quantiles.size();
768
140
        column_data.resize(old_size + size);
769
140
        auto* result = column_data.data() + old_size;
770
771
140
        if (values.empty()) {
772
80
            for (size_t i = 0; i < size; ++i) {
773
40
                result[i] = std::numeric_limits<double>::quiet_NaN();
774
40
            }
775
40
            return;
776
40
        }
777
778
100
        if (values.size() == 1) {
779
156
            for (size_t i = 0; i < size; ++i) {
780
84
                result[i] = static_cast<double>(values.front());
781
84
            }
782
72
            return;
783
72
        }
784
785
28
        size_t prev_index = 0;
786
28
        const auto& quantiles = levels.quantiles;
787
28
        const auto& permutation = levels.get_permutation();
788
58
        for (size_t i = 0; i < size; ++i) {
789
30
            auto level_index = permutation[i];
790
30
            auto level = quantiles[level_index];
791
30
            double u = static_cast<double>(values.size() - 1) * level;
792
30
            auto index = static_cast<size_t>(u);
793
794
30
            if (index + 1 >= values.size()) {
795
0
                result[level_index] =
796
0
                        static_cast<double>(*std::max_element(values.begin(), values.end()));
797
30
            } else {
798
30
                std::nth_element(values.begin() + prev_index, values.begin() + index, values.end());
799
30
                auto* nth_elem = std::min_element(values.begin() + index + 1, values.end());
800
30
                result[level_index] =
801
30
                        static_cast<double>(values[index]) +
802
30
                        (u - static_cast<double>(index)) * (static_cast<double>(*nth_elem) -
803
30
                                                            static_cast<double>(values[index]));
804
30
                prev_index = index;
805
30
            }
806
30
        }
807
28
    }
808
809
private:
810
332
    void _set_single_level(double quantile) {
811
332
        DCHECK(levels.empty());
812
332
        check_quantile(quantile);
813
332
        levels.quantiles.push_back(quantile);
814
332
        levels.permutation.push_back(0);
815
332
    }
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE3EE17_set_single_levelEd
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE4EE17_set_single_levelEd
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE5EE17_set_single_levelEd
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE6EE17_set_single_levelEd
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE7EE17_set_single_levelEd
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE8EE17_set_single_levelEd
_ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE9EE17_set_single_levelEd
Line
Count
Source
810
332
    void _set_single_level(double quantile) {
811
        DCHECK(levels.empty());
812
332
        check_quantile(quantile);
813
332
        levels.quantiles.push_back(quantile);
814
332
        levels.permutation.push_back(0);
815
332
    }
816
817
    void _set_many_levels(const PaddedPODArray<Float64>& quantiles_data, const NullMap& null_maps,
818
203
                          size_t start, int64_t arg_size) {
819
203
        DCHECK(levels.empty());
820
203
        size_t size = cast_set<size_t>(arg_size);
821
203
        levels.quantiles.resize(size);
822
203
        levels.permutation.resize(size);
823
412
        for (size_t i = 0; i < size; ++i) {
824
209
            if (null_maps[start + i]) {
825
0
                throw Exception(ErrorCode::INVALID_ARGUMENT,
826
0
                                "quantiles in func percentile_array should not have null");
827
0
            }
828
209
            check_quantile(quantiles_data[start + i]);
829
209
            levels.quantiles[i] = quantiles_data[start + i];
830
209
            levels.permutation[i] = i;
831
209
        }
832
203
    }
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE3EE16_set_many_levelsERKNS_8PODArrayIdLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEERKNS3_IhLm4096ES6_Lm16ELm15EEEml
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE4EE16_set_many_levelsERKNS_8PODArrayIdLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEERKNS3_IhLm4096ES6_Lm16ELm15EEEml
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE5EE16_set_many_levelsERKNS_8PODArrayIdLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEERKNS3_IhLm4096ES6_Lm16ELm15EEEml
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE6EE16_set_many_levelsERKNS_8PODArrayIdLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEERKNS3_IhLm4096ES6_Lm16ELm15EEEml
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE7EE16_set_many_levelsERKNS_8PODArrayIdLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEERKNS3_IhLm4096ES6_Lm16ELm15EEEml
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE8EE16_set_many_levelsERKNS_8PODArrayIdLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEERKNS3_IhLm4096ES6_Lm16ELm15EEEml
_ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE9EE16_set_many_levelsERKNS_8PODArrayIdLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEERKNS3_IhLm4096ES6_Lm16ELm15EEEml
Line
Count
Source
818
203
                          size_t start, int64_t arg_size) {
819
203
        DCHECK(levels.empty());
820
203
        size_t size = cast_set<size_t>(arg_size);
821
203
        levels.quantiles.resize(size);
822
203
        levels.permutation.resize(size);
823
412
        for (size_t i = 0; i < size; ++i) {
824
209
            if (null_maps[start + i]) {
825
0
                throw Exception(ErrorCode::INVALID_ARGUMENT,
826
0
                                "quantiles in func percentile_array should not have null");
827
0
            }
828
209
            check_quantile(quantiles_data[start + i]);
829
209
            levels.quantiles[i] = quantiles_data[start + i];
830
209
            levels.permutation[i] = i;
831
209
        }
832
203
    }
833
834
767
    void _append(const ValueType* data, size_t count) {
835
767
        if (count == 0) {
836
70
            return;
837
70
        }
838
697
        values.reserve(values.size() + count);
839
697
        if constexpr (std::is_floating_point_v<ValueType>) {
840
1.39k
            for (size_t i = 0; i < count; ++i) {
841
697
                if (!std::isnan(data[i])) {
842
417
                    values.push_back(data[i]);
843
417
                }
844
697
            }
845
697
        } else {
846
0
            values.insert_assume_reserved(data, data + count);
847
0
        }
848
697
    }
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE3EE7_appendEPKam
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE4EE7_appendEPKsm
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE5EE7_appendEPKim
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE6EE7_appendEPKlm
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE7EE7_appendEPKnm
Unexecuted instantiation: _ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE8EE7_appendEPKfm
_ZN5doris20PercentileExactStateILNS_13PrimitiveTypeE9EE7_appendEPKdm
Line
Count
Source
834
767
    void _append(const ValueType* data, size_t count) {
835
767
        if (count == 0) {
836
70
            return;
837
70
        }
838
697
        values.reserve(values.size() + count);
839
697
        if constexpr (std::is_floating_point_v<ValueType>) {
840
1.39k
            for (size_t i = 0; i < count; ++i) {
841
697
                if (!std::isnan(data[i])) {
842
417
                    values.push_back(data[i]);
843
417
                }
844
697
            }
845
        } else {
846
            values.insert_assume_reserved(data, data + count);
847
        }
848
697
    }
849
850
124
    double _get_result(double quantile) const {
851
124
        if (values.size() == 1) {
852
84
            return static_cast<double>(values.front());
853
84
        }
854
855
40
        double u = static_cast<double>(values.size() - 1) * quantile;
856
40
        auto index = static_cast<size_t>(u);
857
858
40
        if (index + 1 >= values.size()) {
859
6
            return static_cast<double>(*std::max_element(values.begin(), values.end()));
860
6
        }
861
862
34
        std::nth_element(values.begin(), values.begin() + index, values.end());
863
34
        auto* nth_elem = std::min_element(values.begin() + index + 1, values.end());
864
865
34
        return static_cast<double>(values[index]) +
866
34
               (u - static_cast<double>(index)) *
867
34
                       (static_cast<double>(*nth_elem) - static_cast<double>(values[index]));
868
40
    }
Unexecuted instantiation: _ZNK5doris20PercentileExactStateILNS_13PrimitiveTypeE3EE11_get_resultEd
Unexecuted instantiation: _ZNK5doris20PercentileExactStateILNS_13PrimitiveTypeE4EE11_get_resultEd
Unexecuted instantiation: _ZNK5doris20PercentileExactStateILNS_13PrimitiveTypeE5EE11_get_resultEd
Unexecuted instantiation: _ZNK5doris20PercentileExactStateILNS_13PrimitiveTypeE6EE11_get_resultEd
Unexecuted instantiation: _ZNK5doris20PercentileExactStateILNS_13PrimitiveTypeE7EE11_get_resultEd
Unexecuted instantiation: _ZNK5doris20PercentileExactStateILNS_13PrimitiveTypeE8EE11_get_resultEd
_ZNK5doris20PercentileExactStateILNS_13PrimitiveTypeE9EE11_get_resultEd
Line
Count
Source
850
124
    double _get_result(double quantile) const {
851
124
        if (values.size() == 1) {
852
84
            return static_cast<double>(values.front());
853
84
        }
854
855
40
        double u = static_cast<double>(values.size() - 1) * quantile;
856
40
        auto index = static_cast<size_t>(u);
857
858
40
        if (index + 1 >= values.size()) {
859
6
            return static_cast<double>(*std::max_element(values.begin(), values.end()));
860
6
        }
861
862
34
        std::nth_element(values.begin(), values.begin() + index, values.end());
863
34
        auto* nth_elem = std::min_element(values.begin() + index + 1, values.end());
864
865
34
        return static_cast<double>(values[index]) +
866
34
               (u - static_cast<double>(index)) *
867
34
                       (static_cast<double>(*nth_elem) - static_cast<double>(values[index]));
868
40
    }
869
870
    mutable Array values;
871
    mutable PercentileLevels levels;
872
    bool inited_flag = false;
873
};
874
875
template <PrimitiveType T>
876
class AggregateFunctionPercentile final
877
        : public IAggregateFunctionDataHelper<PercentileState<T>, AggregateFunctionPercentile<T>>,
878
          MultiExpression,
879
          NullableAggregateFunction {
880
public:
881
    using ColVecType = typename PrimitiveTypeTraits<T>::ColumnType;
882
    using Base = IAggregateFunctionDataHelper<PercentileState<T>, AggregateFunctionPercentile<T>>;
883
3
    AggregateFunctionPercentile(const DataTypes& argument_types_) : Base(argument_types_) {}
Unexecuted instantiation: _ZN5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE3EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Unexecuted instantiation: _ZN5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE4EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Unexecuted instantiation: _ZN5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE5EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
_ZN5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE6EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Line
Count
Source
883
2
    AggregateFunctionPercentile(const DataTypes& argument_types_) : Base(argument_types_) {}
Unexecuted instantiation: _ZN5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE7EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Unexecuted instantiation: _ZN5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE8EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
_ZN5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE9EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Line
Count
Source
883
1
    AggregateFunctionPercentile(const DataTypes& argument_types_) : Base(argument_types_) {}
884
885
2
    String get_name() const override { return "percentile"; }
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE3EE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE4EE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE5EE8get_nameB5cxx11Ev
_ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE6EE8get_nameB5cxx11Ev
Line
Count
Source
885
2
    String get_name() const override { return "percentile"; }
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE7EE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE8EE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE9EE8get_nameB5cxx11Ev
886
887
28
    DataTypePtr get_return_type() const override { return std::make_shared<DataTypeFloat64>(); }
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE3EE15get_return_typeEv
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE4EE15get_return_typeEv
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE5EE15get_return_typeEv
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE6EE15get_return_typeEv
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE7EE15get_return_typeEv
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE8EE15get_return_typeEv
_ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE9EE15get_return_typeEv
Line
Count
Source
887
28
    DataTypePtr get_return_type() const override { return std::make_shared<DataTypeFloat64>(); }
888
889
    void add(AggregateDataPtr __restrict place, const IColumn** columns, ssize_t row_num,
890
40
             Arena&) const override {
891
40
        const auto& sources =
892
40
                assert_cast<const ColVecType&, TypeCheckOnRelease::DISABLE>(*columns[0]);
893
40
        const auto& quantile =
894
40
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[1]);
895
40
        AggregateFunctionPercentile::data(place).add(sources.get_data()[row_num],
896
40
                                                     quantile.get_data(), NullMap(1, 0), 1);
897
40
    }
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE3EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE4EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE5EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE6EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE7EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE8EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
_ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE9EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
Line
Count
Source
890
40
             Arena&) const override {
891
40
        const auto& sources =
892
40
                assert_cast<const ColVecType&, TypeCheckOnRelease::DISABLE>(*columns[0]);
893
40
        const auto& quantile =
894
40
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[1]);
895
40
        AggregateFunctionPercentile::data(place).add(sources.get_data()[row_num],
896
40
                                                     quantile.get_data(), NullMap(1, 0), 1);
897
40
    }
898
899
    void add_batch_single_place(size_t batch_size, AggregateDataPtr place, const IColumn** columns,
900
0
                                Arena&) const override {
901
0
        const auto& sources =
902
0
                assert_cast<const ColVecType&, TypeCheckOnRelease::DISABLE>(*columns[0]);
903
0
        const auto& quantile =
904
0
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[1]);
905
0
        DCHECK_EQ(sources.get_data().size(), batch_size);
906
0
        AggregateFunctionPercentile::data(place).add_batch(sources.get_data(),
907
0
                                                           quantile.get_data()[0]);
908
0
    }
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE3EE22add_batch_single_placeEmPcPPKNS_7IColumnERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE4EE22add_batch_single_placeEmPcPPKNS_7IColumnERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE5EE22add_batch_single_placeEmPcPPKNS_7IColumnERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE6EE22add_batch_single_placeEmPcPPKNS_7IColumnERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE7EE22add_batch_single_placeEmPcPPKNS_7IColumnERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE8EE22add_batch_single_placeEmPcPPKNS_7IColumnERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE9EE22add_batch_single_placeEmPcPPKNS_7IColumnERNS_5ArenaE
909
910
0
    void check_input_columns_type(const IColumn** columns) const override {
911
0
        this->template check_argument_column_type<ColVecType>(columns[0]);
912
0
        this->template check_argument_column_type<ColumnFloat64>(columns[1]);
913
0
    }
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE3EE24check_input_columns_typeEPPKNS_7IColumnE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE4EE24check_input_columns_typeEPPKNS_7IColumnE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE5EE24check_input_columns_typeEPPKNS_7IColumnE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE6EE24check_input_columns_typeEPPKNS_7IColumnE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE7EE24check_input_columns_typeEPPKNS_7IColumnE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE8EE24check_input_columns_typeEPPKNS_7IColumnE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE9EE24check_input_columns_typeEPPKNS_7IColumnE
914
915
2
    void reset(AggregateDataPtr __restrict place) const override {
916
2
        AggregateFunctionPercentile::data(place).reset();
917
2
    }
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE3EE5resetEPc
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE4EE5resetEPc
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE5EE5resetEPc
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE6EE5resetEPc
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE7EE5resetEPc
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE8EE5resetEPc
_ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE9EE5resetEPc
Line
Count
Source
915
2
    void reset(AggregateDataPtr __restrict place) const override {
916
2
        AggregateFunctionPercentile::data(place).reset();
917
2
    }
918
919
    void merge(AggregateDataPtr __restrict place, ConstAggregateDataPtr rhs,
920
30
               Arena&) const override {
921
30
        AggregateFunctionPercentile::data(place).merge(AggregateFunctionPercentile::data(rhs));
922
30
    }
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE3EE5mergeEPcPKcRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE4EE5mergeEPcPKcRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE5EE5mergeEPcPKcRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE6EE5mergeEPcPKcRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE7EE5mergeEPcPKcRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE8EE5mergeEPcPKcRNS_5ArenaE
_ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE9EE5mergeEPcPKcRNS_5ArenaE
Line
Count
Source
920
30
               Arena&) const override {
921
30
        AggregateFunctionPercentile::data(place).merge(AggregateFunctionPercentile::data(rhs));
922
30
    }
923
924
14
    void serialize(ConstAggregateDataPtr __restrict place, BufferWritable& buf) const override {
925
14
        AggregateFunctionPercentile::data(place).write(buf);
926
14
    }
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE3EE9serializeEPKcRNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE4EE9serializeEPKcRNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE5EE9serializeEPKcRNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE6EE9serializeEPKcRNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE7EE9serializeEPKcRNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE8EE9serializeEPKcRNS_14BufferWritableE
_ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE9EE9serializeEPKcRNS_14BufferWritableE
Line
Count
Source
924
14
    void serialize(ConstAggregateDataPtr __restrict place, BufferWritable& buf) const override {
925
14
        AggregateFunctionPercentile::data(place).write(buf);
926
14
    }
927
928
    void deserialize(AggregateDataPtr __restrict place, BufferReadable& buf,
929
18
                     Arena&) const override {
930
18
        AggregateFunctionPercentile::data(place).read(buf);
931
18
    }
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE3EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE4EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE5EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE6EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE7EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE8EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
_ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE9EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Line
Count
Source
929
18
                     Arena&) const override {
930
18
        AggregateFunctionPercentile::data(place).read(buf);
931
18
    }
932
933
28
    void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn& to) const override {
934
28
        auto& col = assert_cast<ColumnFloat64&, TypeCheckOnRelease::DISABLE>(to);
935
28
        col.insert_value(AggregateFunctionPercentile::data(place).get());
936
28
    }
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE3EE18insert_result_intoEPKcRNS_7IColumnE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE4EE18insert_result_intoEPKcRNS_7IColumnE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE5EE18insert_result_intoEPKcRNS_7IColumnE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE6EE18insert_result_intoEPKcRNS_7IColumnE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE7EE18insert_result_intoEPKcRNS_7IColumnE
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE8EE18insert_result_intoEPKcRNS_7IColumnE
_ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE9EE18insert_result_intoEPKcRNS_7IColumnE
Line
Count
Source
933
28
    void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn& to) const override {
934
28
        auto& col = assert_cast<ColumnFloat64&, TypeCheckOnRelease::DISABLE>(to);
935
28
        col.insert_value(AggregateFunctionPercentile::data(place).get());
936
28
    }
937
};
938
939
template <PrimitiveType T>
940
class AggregateFunctionPercentileArray final
941
        : public IAggregateFunctionDataHelper<PercentileState<T>,
942
                                              AggregateFunctionPercentileArray<T>>,
943
          MultiExpression,
944
          NotNullableAggregateFunction {
945
public:
946
    using ColVecType = typename PrimitiveTypeTraits<T>::ColumnType;
947
    using Base =
948
            IAggregateFunctionDataHelper<PercentileState<T>, AggregateFunctionPercentileArray<T>>;
949
4
    AggregateFunctionPercentileArray(const DataTypes& argument_types_) : Base(argument_types_) {}
Unexecuted instantiation: _ZN5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE3EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Unexecuted instantiation: _ZN5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE4EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Unexecuted instantiation: _ZN5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE5EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
_ZN5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE6EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Line
Count
Source
949
1
    AggregateFunctionPercentileArray(const DataTypes& argument_types_) : Base(argument_types_) {}
Unexecuted instantiation: _ZN5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE7EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Unexecuted instantiation: _ZN5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE8EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
_ZN5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE9EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Line
Count
Source
949
3
    AggregateFunctionPercentileArray(const DataTypes& argument_types_) : Base(argument_types_) {}
950
951
1
    String get_name() const override { return "percentile_array"; }
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE3EE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE4EE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE5EE8get_nameB5cxx11Ev
_ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE6EE8get_nameB5cxx11Ev
Line
Count
Source
951
1
    String get_name() const override { return "percentile_array"; }
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE7EE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE8EE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE9EE8get_nameB5cxx11Ev
952
953
76
    DataTypePtr get_return_type() const override {
954
76
        return std::make_shared<DataTypeArray>(make_nullable(std::make_shared<DataTypeFloat64>()));
955
76
    }
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE3EE15get_return_typeEv
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE4EE15get_return_typeEv
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE5EE15get_return_typeEv
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE6EE15get_return_typeEv
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE7EE15get_return_typeEv
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE8EE15get_return_typeEv
_ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE9EE15get_return_typeEv
Line
Count
Source
953
76
    DataTypePtr get_return_type() const override {
954
76
        return std::make_shared<DataTypeArray>(make_nullable(std::make_shared<DataTypeFloat64>()));
955
76
    }
956
957
    void add(AggregateDataPtr __restrict place, const IColumn** columns, ssize_t row_num,
958
113
             Arena&) const override {
959
113
        const auto& sources =
960
113
                assert_cast<const ColVecType&, TypeCheckOnRelease::DISABLE>(*columns[0]);
961
113
        const auto& quantile_array =
962
113
                assert_cast<const ColumnArray&, TypeCheckOnRelease::DISABLE>(*columns[1]);
963
113
        const auto& offset_column_data = quantile_array.get_offsets();
964
113
        const auto& null_maps = assert_cast<const ColumnNullable&, TypeCheckOnRelease::DISABLE>(
965
113
                                        quantile_array.get_data())
966
113
                                        .get_null_map_data();
967
113
        const auto& nested_column = assert_cast<const ColumnNullable&, TypeCheckOnRelease::DISABLE>(
968
113
                                            quantile_array.get_data())
969
113
                                            .get_nested_column();
970
113
        const auto& nested_column_data =
971
113
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(nested_column);
972
973
113
        AggregateFunctionPercentileArray::data(place).add(
974
113
                sources.get_element(row_num), nested_column_data.get_data(), null_maps,
975
113
                offset_column_data.data()[row_num] - offset_column_data[(ssize_t)row_num - 1]);
976
113
    }
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE3EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE4EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE5EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE6EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE7EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE8EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
_ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE9EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
Line
Count
Source
958
113
             Arena&) const override {
959
113
        const auto& sources =
960
113
                assert_cast<const ColVecType&, TypeCheckOnRelease::DISABLE>(*columns[0]);
961
113
        const auto& quantile_array =
962
113
                assert_cast<const ColumnArray&, TypeCheckOnRelease::DISABLE>(*columns[1]);
963
113
        const auto& offset_column_data = quantile_array.get_offsets();
964
113
        const auto& null_maps = assert_cast<const ColumnNullable&, TypeCheckOnRelease::DISABLE>(
965
113
                                        quantile_array.get_data())
966
113
                                        .get_null_map_data();
967
113
        const auto& nested_column = assert_cast<const ColumnNullable&, TypeCheckOnRelease::DISABLE>(
968
113
                                            quantile_array.get_data())
969
113
                                            .get_nested_column();
970
113
        const auto& nested_column_data =
971
113
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(nested_column);
972
973
113
        AggregateFunctionPercentileArray::data(place).add(
974
113
                sources.get_element(row_num), nested_column_data.get_data(), null_maps,
975
113
                offset_column_data.data()[row_num] - offset_column_data[(ssize_t)row_num - 1]);
976
113
    }
977
978
0
    void check_input_columns_type(const IColumn** columns) const override {
979
0
        this->template check_argument_column_type<ColVecType>(columns[0]);
980
0
        check_percentile_array_column_type(*this, *columns[1], 1);
981
0
    }
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE3EE24check_input_columns_typeEPPKNS_7IColumnE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE4EE24check_input_columns_typeEPPKNS_7IColumnE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE5EE24check_input_columns_typeEPPKNS_7IColumnE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE6EE24check_input_columns_typeEPPKNS_7IColumnE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE7EE24check_input_columns_typeEPPKNS_7IColumnE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE8EE24check_input_columns_typeEPPKNS_7IColumnE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE9EE24check_input_columns_typeEPPKNS_7IColumnE
982
983
5
    void reset(AggregateDataPtr __restrict place) const override {
984
5
        AggregateFunctionPercentileArray::data(place).reset();
985
5
    }
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE3EE5resetEPc
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE4EE5resetEPc
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE5EE5resetEPc
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE6EE5resetEPc
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE7EE5resetEPc
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE8EE5resetEPc
_ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE9EE5resetEPc
Line
Count
Source
983
5
    void reset(AggregateDataPtr __restrict place) const override {
984
5
        AggregateFunctionPercentileArray::data(place).reset();
985
5
    }
986
987
    void merge(AggregateDataPtr __restrict place, ConstAggregateDataPtr rhs,
988
75
               Arena&) const override {
989
75
        AggregateFunctionPercentileArray::data(place).merge(
990
75
                AggregateFunctionPercentileArray::data(rhs));
991
75
    }
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE3EE5mergeEPcPKcRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE4EE5mergeEPcPKcRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE5EE5mergeEPcPKcRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE6EE5mergeEPcPKcRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE7EE5mergeEPcPKcRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE8EE5mergeEPcPKcRNS_5ArenaE
_ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE9EE5mergeEPcPKcRNS_5ArenaE
Line
Count
Source
988
75
               Arena&) const override {
989
75
        AggregateFunctionPercentileArray::data(place).merge(
990
75
                AggregateFunctionPercentileArray::data(rhs));
991
75
    }
992
993
34
    void serialize(ConstAggregateDataPtr __restrict place, BufferWritable& buf) const override {
994
34
        AggregateFunctionPercentileArray::data(place).write(buf);
995
34
    }
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE3EE9serializeEPKcRNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE4EE9serializeEPKcRNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE5EE9serializeEPKcRNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE6EE9serializeEPKcRNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE7EE9serializeEPKcRNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE8EE9serializeEPKcRNS_14BufferWritableE
_ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE9EE9serializeEPKcRNS_14BufferWritableE
Line
Count
Source
993
34
    void serialize(ConstAggregateDataPtr __restrict place, BufferWritable& buf) const override {
994
34
        AggregateFunctionPercentileArray::data(place).write(buf);
995
34
    }
996
997
    void deserialize(AggregateDataPtr __restrict place, BufferReadable& buf,
998
42
                     Arena&) const override {
999
42
        AggregateFunctionPercentileArray::data(place).read(buf);
1000
42
    }
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE3EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE4EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE5EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE6EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE7EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE8EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
_ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE9EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Line
Count
Source
998
42
                     Arena&) const override {
999
42
        AggregateFunctionPercentileArray::data(place).read(buf);
1000
42
    }
1001
1002
76
    void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn& to) const override {
1003
76
        auto& to_arr = assert_cast<ColumnArray&, TypeCheckOnRelease::DISABLE>(to);
1004
76
        auto& to_nested_col = to_arr.get_data();
1005
76
        if (is_column_nullable(to_nested_col)) {
1006
76
            auto col_null = reinterpret_cast<ColumnNullable*>(&to_nested_col);
1007
76
            AggregateFunctionPercentileArray::data(place).insert_result_into(
1008
76
                    col_null->get_nested_column());
1009
76
            col_null->get_null_map_data().resize_fill(col_null->get_nested_column().size(), 0);
1010
76
        } else {
1011
0
            AggregateFunctionPercentileArray::data(place).insert_result_into(to_nested_col);
1012
0
        }
1013
76
        to_arr.get_offsets().push_back(to_nested_col.size());
1014
76
    }
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE3EE18insert_result_intoEPKcRNS_7IColumnE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE4EE18insert_result_intoEPKcRNS_7IColumnE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE5EE18insert_result_intoEPKcRNS_7IColumnE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE6EE18insert_result_intoEPKcRNS_7IColumnE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE7EE18insert_result_intoEPKcRNS_7IColumnE
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE8EE18insert_result_intoEPKcRNS_7IColumnE
_ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE9EE18insert_result_intoEPKcRNS_7IColumnE
Line
Count
Source
1002
76
    void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn& to) const override {
1003
76
        auto& to_arr = assert_cast<ColumnArray&, TypeCheckOnRelease::DISABLE>(to);
1004
76
        auto& to_nested_col = to_arr.get_data();
1005
76
        if (is_column_nullable(to_nested_col)) {
1006
76
            auto col_null = reinterpret_cast<ColumnNullable*>(&to_nested_col);
1007
76
            AggregateFunctionPercentileArray::data(place).insert_result_into(
1008
76
                    col_null->get_nested_column());
1009
76
            col_null->get_null_map_data().resize_fill(col_null->get_nested_column().size(), 0);
1010
76
        } else {
1011
0
            AggregateFunctionPercentileArray::data(place).insert_result_into(to_nested_col);
1012
0
        }
1013
76
        to_arr.get_offsets().push_back(to_nested_col.size());
1014
76
    }
1015
};
1016
1017
template <PrimitiveType T>
1018
class AggregateFunctionPercentileV2 final
1019
        : public IAggregateFunctionDataHelper<PercentileExactState<T>,
1020
                                              AggregateFunctionPercentileV2<T>>,
1021
          MultiExpression,
1022
          NullableAggregateFunction {
1023
public:
1024
    using ColVecType = typename PrimitiveTypeTraits<T>::ColumnType;
1025
    using Base =
1026
            IAggregateFunctionDataHelper<PercentileExactState<T>, AggregateFunctionPercentileV2<T>>;
1027
12
    AggregateFunctionPercentileV2(const DataTypes& argument_types_) : Base(argument_types_) {}
Unexecuted instantiation: _ZN5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE3EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Unexecuted instantiation: _ZN5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE4EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Unexecuted instantiation: _ZN5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE5EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
_ZN5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE6EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Line
Count
Source
1027
2
    AggregateFunctionPercentileV2(const DataTypes& argument_types_) : Base(argument_types_) {}
Unexecuted instantiation: _ZN5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE7EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Unexecuted instantiation: _ZN5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE8EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
_ZN5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE9EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Line
Count
Source
1027
10
    AggregateFunctionPercentileV2(const DataTypes& argument_types_) : Base(argument_types_) {}
1028
1029
2
    String get_name() const override { return "percentile_v2"; }
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE3EE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE4EE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE5EE8get_nameB5cxx11Ev
_ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE6EE8get_nameB5cxx11Ev
Line
Count
Source
1029
2
    String get_name() const override { return "percentile_v2"; }
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE7EE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE8EE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE9EE8get_nameB5cxx11Ev
1030
1031
256
    DataTypePtr get_return_type() const override { return std::make_shared<DataTypeFloat64>(); }
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE3EE15get_return_typeEv
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE4EE15get_return_typeEv
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE5EE15get_return_typeEv
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE6EE15get_return_typeEv
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE7EE15get_return_typeEv
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE8EE15get_return_typeEv
_ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE9EE15get_return_typeEv
Line
Count
Source
1031
256
    DataTypePtr get_return_type() const override { return std::make_shared<DataTypeFloat64>(); }
1032
1033
    void add(AggregateDataPtr __restrict place, const IColumn** columns, ssize_t row_num,
1034
382
             Arena&) const override {
1035
382
        const auto& sources =
1036
382
                assert_cast<const ColVecType&, TypeCheckOnRelease::DISABLE>(*columns[0]);
1037
382
        const auto& quantile =
1038
382
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[1]);
1039
382
        AggregateFunctionPercentileV2::data(place).add_single_range(&sources.get_data()[row_num], 1,
1040
382
                                                                    quantile.get_data()[0]);
1041
382
    }
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE3EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE4EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE5EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE6EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE7EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE8EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
_ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE9EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
Line
Count
Source
1034
382
             Arena&) const override {
1035
382
        const auto& sources =
1036
382
                assert_cast<const ColVecType&, TypeCheckOnRelease::DISABLE>(*columns[0]);
1037
382
        const auto& quantile =
1038
382
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[1]);
1039
382
        AggregateFunctionPercentileV2::data(place).add_single_range(&sources.get_data()[row_num], 1,
1040
382
                                                                    quantile.get_data()[0]);
1041
382
    }
1042
1043
    void add_batch_single_place(size_t batch_size, AggregateDataPtr place, const IColumn** columns,
1044
0
                                Arena&) const override {
1045
0
        const auto& sources =
1046
0
                assert_cast<const ColVecType&, TypeCheckOnRelease::DISABLE>(*columns[0]);
1047
0
        const auto& quantile =
1048
0
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[1]);
1049
0
        DCHECK_EQ(sources.get_data().size(), batch_size);
1050
0
        AggregateFunctionPercentileV2::data(place).add_single_range(
1051
0
                sources.get_data().data(), batch_size, quantile.get_data()[0]);
1052
0
    }
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE3EE22add_batch_single_placeEmPcPPKNS_7IColumnERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE4EE22add_batch_single_placeEmPcPPKNS_7IColumnERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE5EE22add_batch_single_placeEmPcPPKNS_7IColumnERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE6EE22add_batch_single_placeEmPcPPKNS_7IColumnERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE7EE22add_batch_single_placeEmPcPPKNS_7IColumnERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE8EE22add_batch_single_placeEmPcPPKNS_7IColumnERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE9EE22add_batch_single_placeEmPcPPKNS_7IColumnERNS_5ArenaE
1053
1054
    void add_batch_range(size_t batch_begin, size_t batch_end, AggregateDataPtr place,
1055
0
                         const IColumn** columns, Arena&, bool has_null) override {
1056
0
        const auto& sources =
1057
0
                assert_cast<const ColVecType&, TypeCheckOnRelease::DISABLE>(*columns[0]);
1058
0
        const auto& quantile =
1059
0
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[1]);
1060
0
        DCHECK(!has_null);
1061
0
        AggregateFunctionPercentileV2::data(place).add_single_range(
1062
0
                sources.get_data().data() + batch_begin, batch_end - batch_begin + 1,
1063
0
                quantile.get_data()[0]);
1064
0
    }
Unexecuted instantiation: _ZN5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE3EE15add_batch_rangeEmmPcPPKNS_7IColumnERNS_5ArenaEb
Unexecuted instantiation: _ZN5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE4EE15add_batch_rangeEmmPcPPKNS_7IColumnERNS_5ArenaEb
Unexecuted instantiation: _ZN5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE5EE15add_batch_rangeEmmPcPPKNS_7IColumnERNS_5ArenaEb
Unexecuted instantiation: _ZN5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE6EE15add_batch_rangeEmmPcPPKNS_7IColumnERNS_5ArenaEb
Unexecuted instantiation: _ZN5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE7EE15add_batch_rangeEmmPcPPKNS_7IColumnERNS_5ArenaEb
Unexecuted instantiation: _ZN5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE8EE15add_batch_rangeEmmPcPPKNS_7IColumnERNS_5ArenaEb
Unexecuted instantiation: _ZN5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE9EE15add_batch_rangeEmmPcPPKNS_7IColumnERNS_5ArenaEb
1065
1066
0
    void check_input_columns_type(const IColumn** columns) const override {
1067
0
        this->template check_argument_column_type<ColVecType>(columns[0]);
1068
0
        this->template check_argument_column_type<ColumnFloat64>(columns[1]);
1069
0
    }
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE3EE24check_input_columns_typeEPPKNS_7IColumnE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE4EE24check_input_columns_typeEPPKNS_7IColumnE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE5EE24check_input_columns_typeEPPKNS_7IColumnE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE6EE24check_input_columns_typeEPPKNS_7IColumnE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE7EE24check_input_columns_typeEPPKNS_7IColumnE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE8EE24check_input_columns_typeEPPKNS_7IColumnE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE9EE24check_input_columns_typeEPPKNS_7IColumnE
1070
1071
8
    void reset(AggregateDataPtr __restrict place) const override {
1072
8
        AggregateFunctionPercentileV2::data(place).reset();
1073
8
    }
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE3EE5resetEPc
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE4EE5resetEPc
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE5EE5resetEPc
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE6EE5resetEPc
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE7EE5resetEPc
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE8EE5resetEPc
_ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE9EE5resetEPc
Line
Count
Source
1071
8
    void reset(AggregateDataPtr __restrict place) const override {
1072
8
        AggregateFunctionPercentileV2::data(place).reset();
1073
8
    }
1074
1075
    void merge(AggregateDataPtr __restrict place, ConstAggregateDataPtr rhs,
1076
174
               Arena&) const override {
1077
174
        AggregateFunctionPercentileV2::data(place).merge(AggregateFunctionPercentileV2::data(rhs));
1078
174
    }
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE3EE5mergeEPcPKcRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE4EE5mergeEPcPKcRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE5EE5mergeEPcPKcRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE6EE5mergeEPcPKcRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE7EE5mergeEPcPKcRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE8EE5mergeEPcPKcRNS_5ArenaE
_ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE9EE5mergeEPcPKcRNS_5ArenaE
Line
Count
Source
1076
174
               Arena&) const override {
1077
174
        AggregateFunctionPercentileV2::data(place).merge(AggregateFunctionPercentileV2::data(rhs));
1078
174
    }
1079
1080
77
    void serialize(ConstAggregateDataPtr __restrict place, BufferWritable& buf) const override {
1081
77
        AggregateFunctionPercentileV2::data(place).write(buf);
1082
77
    }
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE3EE9serializeEPKcRNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE4EE9serializeEPKcRNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE5EE9serializeEPKcRNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE6EE9serializeEPKcRNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE7EE9serializeEPKcRNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE8EE9serializeEPKcRNS_14BufferWritableE
_ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE9EE9serializeEPKcRNS_14BufferWritableE
Line
Count
Source
1080
77
    void serialize(ConstAggregateDataPtr __restrict place, BufferWritable& buf) const override {
1081
77
        AggregateFunctionPercentileV2::data(place).write(buf);
1082
77
    }
1083
1084
    void deserialize(AggregateDataPtr __restrict place, BufferReadable& buf,
1085
81
                     Arena&) const override {
1086
81
        AggregateFunctionPercentileV2::data(place).read(buf);
1087
81
    }
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE3EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE4EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE5EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE6EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE7EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE8EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
_ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE9EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Line
Count
Source
1085
81
                     Arena&) const override {
1086
81
        AggregateFunctionPercentileV2::data(place).read(buf);
1087
81
    }
1088
1089
256
    void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn& to) const override {
1090
256
        auto& col = assert_cast<ColumnFloat64&, TypeCheckOnRelease::DISABLE>(to);
1091
256
        col.insert_value(AggregateFunctionPercentileV2::data(place).get());
1092
256
    }
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE3EE18insert_result_intoEPKcRNS_7IColumnE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE4EE18insert_result_intoEPKcRNS_7IColumnE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE5EE18insert_result_intoEPKcRNS_7IColumnE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE6EE18insert_result_intoEPKcRNS_7IColumnE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE7EE18insert_result_intoEPKcRNS_7IColumnE
Unexecuted instantiation: _ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE8EE18insert_result_intoEPKcRNS_7IColumnE
_ZNK5doris29AggregateFunctionPercentileV2ILNS_13PrimitiveTypeE9EE18insert_result_intoEPKcRNS_7IColumnE
Line
Count
Source
1089
256
    void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn& to) const override {
1090
256
        auto& col = assert_cast<ColumnFloat64&, TypeCheckOnRelease::DISABLE>(to);
1091
256
        col.insert_value(AggregateFunctionPercentileV2::data(place).get());
1092
256
    }
1093
};
1094
1095
template <PrimitiveType T>
1096
class AggregateFunctionPercentileArrayV2 final
1097
        : public IAggregateFunctionDataHelper<PercentileExactState<T>,
1098
                                              AggregateFunctionPercentileArrayV2<T>>,
1099
          MultiExpression,
1100
          NotNullableAggregateFunction {
1101
public:
1102
    using ColVecType = typename PrimitiveTypeTraits<T>::ColumnType;
1103
    using Base = IAggregateFunctionDataHelper<PercentileExactState<T>,
1104
                                              AggregateFunctionPercentileArrayV2<T>>;
1105
7
    AggregateFunctionPercentileArrayV2(const DataTypes& argument_types_) : Base(argument_types_) {}
Unexecuted instantiation: _ZN5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE3EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Unexecuted instantiation: _ZN5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE4EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Unexecuted instantiation: _ZN5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE5EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
_ZN5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE6EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Line
Count
Source
1105
1
    AggregateFunctionPercentileArrayV2(const DataTypes& argument_types_) : Base(argument_types_) {}
Unexecuted instantiation: _ZN5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE7EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Unexecuted instantiation: _ZN5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE8EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
_ZN5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE9EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Line
Count
Source
1105
6
    AggregateFunctionPercentileArrayV2(const DataTypes& argument_types_) : Base(argument_types_) {}
1106
1107
1
    String get_name() const override { return "percentile_array_v2"; }
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE3EE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE4EE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE5EE8get_nameB5cxx11Ev
_ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE6EE8get_nameB5cxx11Ev
Line
Count
Source
1107
1
    String get_name() const override { return "percentile_array_v2"; }
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE7EE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE8EE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE9EE8get_nameB5cxx11Ev
1108
1109
152
    DataTypePtr get_return_type() const override {
1110
152
        return std::make_shared<DataTypeArray>(make_nullable(std::make_shared<DataTypeFloat64>()));
1111
152
    }
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE3EE15get_return_typeEv
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE4EE15get_return_typeEv
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE5EE15get_return_typeEv
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE6EE15get_return_typeEv
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE7EE15get_return_typeEv
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE8EE15get_return_typeEv
_ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE9EE15get_return_typeEv
Line
Count
Source
1109
152
    DataTypePtr get_return_type() const override {
1110
152
        return std::make_shared<DataTypeArray>(make_nullable(std::make_shared<DataTypeFloat64>()));
1111
152
    }
1112
1113
    void add(AggregateDataPtr __restrict place, const IColumn** columns, ssize_t row_num,
1114
227
             Arena&) const override {
1115
227
        const auto& sources =
1116
227
                assert_cast<const ColVecType&, TypeCheckOnRelease::DISABLE>(*columns[0]);
1117
227
        const auto& quantile_array =
1118
227
                assert_cast<const ColumnArray&, TypeCheckOnRelease::DISABLE>(*columns[1]);
1119
227
        const auto& offset_column_data = quantile_array.get_offsets();
1120
227
        const auto& null_maps = assert_cast<const ColumnNullable&, TypeCheckOnRelease::DISABLE>(
1121
227
                                        quantile_array.get_data())
1122
227
                                        .get_null_map_data();
1123
227
        const auto& nested_column = assert_cast<const ColumnNullable&, TypeCheckOnRelease::DISABLE>(
1124
227
                                            quantile_array.get_data())
1125
227
                                            .get_nested_column();
1126
227
        const auto& nested_column_data =
1127
227
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(nested_column);
1128
227
        size_t start = row_num == 0 ? 0 : offset_column_data[row_num - 1];
1129
227
        AggregateFunctionPercentileArrayV2::data(place).add_many_range(
1130
227
                &sources.get_data()[row_num], 1, nested_column_data.get_data(), null_maps, start,
1131
227
                cast_set<int64_t>(offset_column_data[row_num] - start));
1132
227
    }
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE3EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE4EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE5EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE6EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE7EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE8EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
_ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE9EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
Line
Count
Source
1114
227
             Arena&) const override {
1115
227
        const auto& sources =
1116
227
                assert_cast<const ColVecType&, TypeCheckOnRelease::DISABLE>(*columns[0]);
1117
227
        const auto& quantile_array =
1118
227
                assert_cast<const ColumnArray&, TypeCheckOnRelease::DISABLE>(*columns[1]);
1119
227
        const auto& offset_column_data = quantile_array.get_offsets();
1120
227
        const auto& null_maps = assert_cast<const ColumnNullable&, TypeCheckOnRelease::DISABLE>(
1121
227
                                        quantile_array.get_data())
1122
227
                                        .get_null_map_data();
1123
227
        const auto& nested_column = assert_cast<const ColumnNullable&, TypeCheckOnRelease::DISABLE>(
1124
227
                                            quantile_array.get_data())
1125
227
                                            .get_nested_column();
1126
227
        const auto& nested_column_data =
1127
227
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(nested_column);
1128
227
        size_t start = row_num == 0 ? 0 : offset_column_data[row_num - 1];
1129
227
        AggregateFunctionPercentileArrayV2::data(place).add_many_range(
1130
227
                &sources.get_data()[row_num], 1, nested_column_data.get_data(), null_maps, start,
1131
227
                cast_set<int64_t>(offset_column_data[row_num] - start));
1132
227
    }
1133
1134
    void add_batch_single_place(size_t batch_size, AggregateDataPtr place, const IColumn** columns,
1135
0
                                Arena&) const override {
1136
0
        const auto& sources =
1137
0
                assert_cast<const ColVecType&, TypeCheckOnRelease::DISABLE>(*columns[0]);
1138
0
        const auto& quantile_array =
1139
0
                assert_cast<const ColumnArray&, TypeCheckOnRelease::DISABLE>(*columns[1]);
1140
0
        const auto& offset_column_data = quantile_array.get_offsets();
1141
0
        const auto& null_maps = assert_cast<const ColumnNullable&, TypeCheckOnRelease::DISABLE>(
1142
0
                                        quantile_array.get_data())
1143
0
                                        .get_null_map_data();
1144
0
        const auto& nested_column = assert_cast<const ColumnNullable&, TypeCheckOnRelease::DISABLE>(
1145
0
                                            quantile_array.get_data())
1146
0
                                            .get_nested_column();
1147
0
        const auto& nested_column_data =
1148
0
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(nested_column);
1149
0
        DCHECK_EQ(sources.get_data().size(), batch_size);
1150
0
        AggregateFunctionPercentileArrayV2::data(place).add_many_range(
1151
0
                sources.get_data().data(), batch_size, nested_column_data.get_data(), null_maps, 0,
1152
0
                cast_set<int64_t>(offset_column_data[0]));
1153
0
    }
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE3EE22add_batch_single_placeEmPcPPKNS_7IColumnERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE4EE22add_batch_single_placeEmPcPPKNS_7IColumnERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE5EE22add_batch_single_placeEmPcPPKNS_7IColumnERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE6EE22add_batch_single_placeEmPcPPKNS_7IColumnERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE7EE22add_batch_single_placeEmPcPPKNS_7IColumnERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE8EE22add_batch_single_placeEmPcPPKNS_7IColumnERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE9EE22add_batch_single_placeEmPcPPKNS_7IColumnERNS_5ArenaE
1154
1155
    void add_batch_range(size_t batch_begin, size_t batch_end, AggregateDataPtr place,
1156
0
                         const IColumn** columns, Arena&, bool has_null) override {
1157
0
        const auto& sources =
1158
0
                assert_cast<const ColVecType&, TypeCheckOnRelease::DISABLE>(*columns[0]);
1159
0
        const auto& quantile_array =
1160
0
                assert_cast<const ColumnArray&, TypeCheckOnRelease::DISABLE>(*columns[1]);
1161
0
        const auto& offset_column_data = quantile_array.get_offsets();
1162
0
        const auto& null_maps = assert_cast<const ColumnNullable&, TypeCheckOnRelease::DISABLE>(
1163
0
                                        quantile_array.get_data())
1164
0
                                        .get_null_map_data();
1165
0
        const auto& nested_column = assert_cast<const ColumnNullable&, TypeCheckOnRelease::DISABLE>(
1166
0
                                            quantile_array.get_data())
1167
0
                                            .get_nested_column();
1168
0
        const auto& nested_column_data =
1169
0
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(nested_column);
1170
0
        DCHECK(!has_null);
1171
0
        size_t start = batch_begin == 0 ? 0 : offset_column_data[batch_begin - 1];
1172
0
        AggregateFunctionPercentileArrayV2::data(place).add_many_range(
1173
0
                sources.get_data().data() + batch_begin, batch_end - batch_begin + 1,
1174
0
                nested_column_data.get_data(), null_maps, start,
1175
0
                cast_set<int64_t>(offset_column_data[batch_begin] - start));
1176
0
    }
Unexecuted instantiation: _ZN5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE3EE15add_batch_rangeEmmPcPPKNS_7IColumnERNS_5ArenaEb
Unexecuted instantiation: _ZN5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE4EE15add_batch_rangeEmmPcPPKNS_7IColumnERNS_5ArenaEb
Unexecuted instantiation: _ZN5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE5EE15add_batch_rangeEmmPcPPKNS_7IColumnERNS_5ArenaEb
Unexecuted instantiation: _ZN5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE6EE15add_batch_rangeEmmPcPPKNS_7IColumnERNS_5ArenaEb
Unexecuted instantiation: _ZN5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE7EE15add_batch_rangeEmmPcPPKNS_7IColumnERNS_5ArenaEb
Unexecuted instantiation: _ZN5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE8EE15add_batch_rangeEmmPcPPKNS_7IColumnERNS_5ArenaEb
Unexecuted instantiation: _ZN5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE9EE15add_batch_rangeEmmPcPPKNS_7IColumnERNS_5ArenaEb
1177
1178
0
    void check_input_columns_type(const IColumn** columns) const override {
1179
0
        this->template check_argument_column_type<ColVecType>(columns[0]);
1180
0
        check_percentile_array_column_type(*this, *columns[1], 1);
1181
0
    }
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE3EE24check_input_columns_typeEPPKNS_7IColumnE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE4EE24check_input_columns_typeEPPKNS_7IColumnE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE5EE24check_input_columns_typeEPPKNS_7IColumnE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE6EE24check_input_columns_typeEPPKNS_7IColumnE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE7EE24check_input_columns_typeEPPKNS_7IColumnE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE8EE24check_input_columns_typeEPPKNS_7IColumnE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE9EE24check_input_columns_typeEPPKNS_7IColumnE
1182
1183
7
    void reset(AggregateDataPtr __restrict place) const override {
1184
7
        AggregateFunctionPercentileArrayV2::data(place).reset();
1185
7
    }
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE3EE5resetEPc
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE4EE5resetEPc
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE5EE5resetEPc
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE6EE5resetEPc
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE7EE5resetEPc
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE8EE5resetEPc
_ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE9EE5resetEPc
Line
Count
Source
1183
7
    void reset(AggregateDataPtr __restrict place) const override {
1184
7
        AggregateFunctionPercentileArrayV2::data(place).reset();
1185
7
    }
1186
1187
    void merge(AggregateDataPtr __restrict place, ConstAggregateDataPtr rhs,
1188
123
               Arena&) const override {
1189
123
        AggregateFunctionPercentileArrayV2::data(place).merge(
1190
123
                AggregateFunctionPercentileArrayV2::data(rhs));
1191
123
    }
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE3EE5mergeEPcPKcRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE4EE5mergeEPcPKcRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE5EE5mergeEPcPKcRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE6EE5mergeEPcPKcRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE7EE5mergeEPcPKcRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE8EE5mergeEPcPKcRNS_5ArenaE
_ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE9EE5mergeEPcPKcRNS_5ArenaE
Line
Count
Source
1188
123
               Arena&) const override {
1189
123
        AggregateFunctionPercentileArrayV2::data(place).merge(
1190
123
                AggregateFunctionPercentileArrayV2::data(rhs));
1191
123
    }
1192
1193
55
    void serialize(ConstAggregateDataPtr __restrict place, BufferWritable& buf) const override {
1194
55
        AggregateFunctionPercentileArrayV2::data(place).write(buf);
1195
55
    }
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE3EE9serializeEPKcRNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE4EE9serializeEPKcRNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE5EE9serializeEPKcRNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE6EE9serializeEPKcRNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE7EE9serializeEPKcRNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE8EE9serializeEPKcRNS_14BufferWritableE
_ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE9EE9serializeEPKcRNS_14BufferWritableE
Line
Count
Source
1193
55
    void serialize(ConstAggregateDataPtr __restrict place, BufferWritable& buf) const override {
1194
55
        AggregateFunctionPercentileArrayV2::data(place).write(buf);
1195
55
    }
1196
1197
    void deserialize(AggregateDataPtr __restrict place, BufferReadable& buf,
1198
63
                     Arena&) const override {
1199
63
        AggregateFunctionPercentileArrayV2::data(place).read(buf);
1200
63
    }
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE3EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE4EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE5EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE6EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE7EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE8EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
_ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE9EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Line
Count
Source
1198
63
                     Arena&) const override {
1199
63
        AggregateFunctionPercentileArrayV2::data(place).read(buf);
1200
63
    }
1201
1202
152
    void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn& to) const override {
1203
152
        auto& to_arr = assert_cast<ColumnArray&, TypeCheckOnRelease::DISABLE>(to);
1204
152
        auto& to_nested_col = to_arr.get_data();
1205
152
        if (is_column_nullable(to_nested_col)) {
1206
152
            auto* col_null = reinterpret_cast<ColumnNullable*>(&to_nested_col);
1207
152
            AggregateFunctionPercentileArrayV2::data(place).insert_result_into(
1208
152
                    col_null->get_nested_column());
1209
152
            col_null->get_null_map_data().resize_fill(col_null->get_nested_column().size(), 0);
1210
152
        } else {
1211
0
            AggregateFunctionPercentileArrayV2::data(place).insert_result_into(to_nested_col);
1212
0
        }
1213
152
        to_arr.get_offsets().push_back(to_nested_col.size());
1214
152
    }
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE3EE18insert_result_intoEPKcRNS_7IColumnE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE4EE18insert_result_intoEPKcRNS_7IColumnE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE5EE18insert_result_intoEPKcRNS_7IColumnE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE6EE18insert_result_intoEPKcRNS_7IColumnE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE7EE18insert_result_intoEPKcRNS_7IColumnE
Unexecuted instantiation: _ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE8EE18insert_result_intoEPKcRNS_7IColumnE
_ZNK5doris34AggregateFunctionPercentileArrayV2ILNS_13PrimitiveTypeE9EE18insert_result_intoEPKcRNS_7IColumnE
Line
Count
Source
1202
152
    void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn& to) const override {
1203
152
        auto& to_arr = assert_cast<ColumnArray&, TypeCheckOnRelease::DISABLE>(to);
1204
152
        auto& to_nested_col = to_arr.get_data();
1205
152
        if (is_column_nullable(to_nested_col)) {
1206
152
            auto* col_null = reinterpret_cast<ColumnNullable*>(&to_nested_col);
1207
152
            AggregateFunctionPercentileArrayV2::data(place).insert_result_into(
1208
152
                    col_null->get_nested_column());
1209
152
            col_null->get_null_map_data().resize_fill(col_null->get_nested_column().size(), 0);
1210
152
        } else {
1211
0
            AggregateFunctionPercentileArrayV2::data(place).insert_result_into(to_nested_col);
1212
0
        }
1213
152
        to_arr.get_offsets().push_back(to_nested_col.size());
1214
152
    }
1215
};
1216
1217
} // namespace doris