Coverage Report

Created: 2026-04-16 16:37

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 "core/assert_cast.h"
32
#include "core/column/column.h"
33
#include "core/column/column_array.h"
34
#include "core/column/column_nullable.h"
35
#include "core/column/column_vector.h"
36
#include "core/data_type/data_type_array.h"
37
#include "core/data_type/data_type_nullable.h"
38
#include "core/data_type/data_type_number.h"
39
#include "core/pod_array_fwd.h"
40
#include "core/types.h"
41
#include "exprs/aggregate/aggregate_function.h"
42
#include "util/counts.h"
43
#include "util/tdigest.h"
44
45
namespace doris {
46
47
class Arena;
48
class BufferReadable;
49
50
0
inline void check_quantile(double quantile) {
51
0
    if (quantile < 0 || quantile > 1) {
52
0
        throw Exception(ErrorCode::INVALID_ARGUMENT,
53
0
                        "quantile in func percentile should in [0, 1], but real data is:" +
54
0
                                std::to_string(quantile));
55
0
    }
56
0
}
57
58
struct PercentileApproxState {
59
    static constexpr double INIT_QUANTILE = -1.0;
60
0
    PercentileApproxState() = default;
61
0
    ~PercentileApproxState() = default;
62
63
0
    void init(double quantile, float compression = 10000) {
64
0
        if (!init_flag) {
65
            //https://doris.apache.org/zh-CN/sql-reference/sql-functions/aggregate-functions/percentile_approx.html#description
66
            //The compression parameter setting range is [2048, 10000].
67
            //If the value of compression parameter is not specified set, or is outside the range of [2048, 10000],
68
            //will use the default value of 10000
69
0
            if (compression < 2048 || compression > 10000) {
70
0
                compression = 10000;
71
0
            }
72
0
            digest = TDigest::create_unique(compression);
73
0
            check_quantile(quantile);
74
0
            target_quantile = quantile;
75
0
            compressions = compression;
76
0
            init_flag = true;
77
0
        }
78
0
    }
79
80
0
    void write(BufferWritable& buf) const {
81
0
        buf.write_binary(init_flag);
82
0
        if (!init_flag) {
83
0
            return;
84
0
        }
85
86
0
        buf.write_binary(target_quantile);
87
0
        buf.write_binary(compressions);
88
0
        uint32_t serialize_size = digest->serialized_size();
89
0
        std::string result(serialize_size, '0');
90
0
        DCHECK(digest.get() != nullptr);
91
0
        digest->serialize((uint8_t*)result.c_str());
92
93
0
        buf.write_binary(result);
94
0
    }
95
96
0
    void read(BufferReadable& buf) {
97
0
        buf.read_binary(init_flag);
98
0
        if (!init_flag) {
99
0
            return;
100
0
        }
101
102
0
        buf.read_binary(target_quantile);
103
0
        buf.read_binary(compressions);
104
0
        std::string str;
105
0
        buf.read_binary(str);
106
0
        digest = TDigest::create_unique(compressions);
107
0
        digest->unserialize((uint8_t*)str.c_str());
108
0
    }
109
110
0
    double get() const {
111
0
        if (init_flag) {
112
0
            return digest->quantile(static_cast<float>(target_quantile));
113
0
        } else {
114
0
            return std::nan("");
115
0
        }
116
0
    }
117
118
0
    void merge(const PercentileApproxState& rhs) {
119
0
        if (!rhs.init_flag) {
120
0
            return;
121
0
        }
122
0
        if (init_flag) {
123
0
            DCHECK(digest.get() != nullptr);
124
0
            digest->merge(rhs.digest.get());
125
0
        } else {
126
0
            digest = TDigest::create_unique(compressions);
127
0
            digest->merge(rhs.digest.get());
128
0
            init_flag = true;
129
0
        }
130
0
        if (target_quantile == PercentileApproxState::INIT_QUANTILE) {
131
0
            target_quantile = rhs.target_quantile;
132
0
        }
133
0
    }
134
135
0
    void add(double source) { digest->add(static_cast<float>(source)); }
136
137
0
    void add_with_weight(double source, double weight) {
138
        // the weight should be positive num, as have check the value valid use DCHECK_GT(c._weight, 0);
139
0
        if (weight <= 0) {
140
0
            return;
141
0
        }
142
0
        digest->add(static_cast<float>(source), static_cast<float>(weight));
143
0
    }
144
145
0
    void reset() {
146
0
        target_quantile = INIT_QUANTILE;
147
0
        init_flag = false;
148
0
        digest = TDigest::create_unique(compressions);
149
0
    }
150
151
    bool init_flag = false;
152
    std::unique_ptr<TDigest> digest;
153
    double target_quantile = INIT_QUANTILE;
154
    float compressions = 10000;
155
};
156
157
template <typename Derived>
158
class AggregateFunctionPercentileApproxBase
159
        : public IAggregateFunctionDataHelper<PercentileApproxState, Derived> {
160
public:
161
    AggregateFunctionPercentileApproxBase(const DataTypes& argument_types_)
162
0
            : IAggregateFunctionDataHelper<PercentileApproxState, Derived>(argument_types_) {}
Unexecuted instantiation: _ZN5doris37AggregateFunctionPercentileApproxBaseINS_42AggregateFunctionPercentileApproxTwoParamsEEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Unexecuted instantiation: _ZN5doris37AggregateFunctionPercentileApproxBaseINS_44AggregateFunctionPercentileApproxThreeParamsEEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Unexecuted instantiation: _ZN5doris37AggregateFunctionPercentileApproxBaseINS_52AggregateFunctionPercentileApproxWeightedThreeParamsEEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Unexecuted instantiation: _ZN5doris37AggregateFunctionPercentileApproxBaseINS_51AggregateFunctionPercentileApproxWeightedFourParamsEEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
163
164
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
165
166
0
    void reset(AggregateDataPtr __restrict place) const override { this->data(place).reset(); }
Unexecuted instantiation: _ZNK5doris37AggregateFunctionPercentileApproxBaseINS_42AggregateFunctionPercentileApproxTwoParamsEE5resetEPc
Unexecuted instantiation: _ZNK5doris37AggregateFunctionPercentileApproxBaseINS_44AggregateFunctionPercentileApproxThreeParamsEE5resetEPc
Unexecuted instantiation: _ZNK5doris37AggregateFunctionPercentileApproxBaseINS_52AggregateFunctionPercentileApproxWeightedThreeParamsEE5resetEPc
Unexecuted instantiation: _ZNK5doris37AggregateFunctionPercentileApproxBaseINS_51AggregateFunctionPercentileApproxWeightedFourParamsEE5resetEPc
167
168
    void merge(AggregateDataPtr __restrict place, ConstAggregateDataPtr rhs,
169
0
               Arena&) const override {
170
0
        this->data(place).merge(this->data(rhs));
171
0
    }
Unexecuted instantiation: _ZNK5doris37AggregateFunctionPercentileApproxBaseINS_42AggregateFunctionPercentileApproxTwoParamsEE5mergeEPcPKcRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris37AggregateFunctionPercentileApproxBaseINS_44AggregateFunctionPercentileApproxThreeParamsEE5mergeEPcPKcRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris37AggregateFunctionPercentileApproxBaseINS_52AggregateFunctionPercentileApproxWeightedThreeParamsEE5mergeEPcPKcRNS_5ArenaE
Unexecuted instantiation: _ZNK5doris37AggregateFunctionPercentileApproxBaseINS_51AggregateFunctionPercentileApproxWeightedFourParamsEE5mergeEPcPKcRNS_5ArenaE
172
173
0
    void serialize(ConstAggregateDataPtr __restrict place, BufferWritable& buf) const override {
174
0
        this->data(place).write(buf);
175
0
    }
Unexecuted instantiation: _ZNK5doris37AggregateFunctionPercentileApproxBaseINS_42AggregateFunctionPercentileApproxTwoParamsEE9serializeEPKcRNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris37AggregateFunctionPercentileApproxBaseINS_44AggregateFunctionPercentileApproxThreeParamsEE9serializeEPKcRNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris37AggregateFunctionPercentileApproxBaseINS_52AggregateFunctionPercentileApproxWeightedThreeParamsEE9serializeEPKcRNS_14BufferWritableE
Unexecuted instantiation: _ZNK5doris37AggregateFunctionPercentileApproxBaseINS_51AggregateFunctionPercentileApproxWeightedFourParamsEE9serializeEPKcRNS_14BufferWritableE
176
177
    void deserialize(AggregateDataPtr __restrict place, BufferReadable& buf,
178
0
                     Arena&) const override {
179
0
        this->data(place).read(buf);
180
0
    }
Unexecuted instantiation: _ZNK5doris37AggregateFunctionPercentileApproxBaseINS_42AggregateFunctionPercentileApproxTwoParamsEE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris37AggregateFunctionPercentileApproxBaseINS_44AggregateFunctionPercentileApproxThreeParamsEE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris37AggregateFunctionPercentileApproxBaseINS_52AggregateFunctionPercentileApproxWeightedThreeParamsEE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
Unexecuted instantiation: _ZNK5doris37AggregateFunctionPercentileApproxBaseINS_51AggregateFunctionPercentileApproxWeightedFourParamsEE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
181
};
182
183
class AggregateFunctionPercentileApproxTwoParams final
184
        : public AggregateFunctionPercentileApproxBase<AggregateFunctionPercentileApproxTwoParams>,
185
          public MultiExpression,
186
          public NullableAggregateFunction {
187
public:
188
    AggregateFunctionPercentileApproxTwoParams(const DataTypes& argument_types_)
189
0
            : AggregateFunctionPercentileApproxBase<AggregateFunctionPercentileApproxTwoParams>(
190
0
                      argument_types_) {}
191
    void add(AggregateDataPtr __restrict place, const IColumn** columns, ssize_t row_num,
192
0
             Arena&) const override {
193
0
        const auto& sources =
194
0
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[0]);
195
0
        const auto& quantile =
196
0
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[1]);
197
0
        this->data(place).init(quantile.get_element(0));
198
0
        this->data(place).add(sources.get_element(row_num));
199
0
    }
200
201
0
    DataTypePtr get_return_type() const override { return std::make_shared<DataTypeFloat64>(); }
202
203
0
    void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn& to) const override {
204
0
        auto& col = assert_cast<ColumnFloat64&>(to);
205
0
        double result = this->data(place).get();
206
207
0
        if (std::isnan(result)) {
208
0
            col.insert_default();
209
0
        } else {
210
0
            col.get_data().push_back(result);
211
0
        }
212
0
    }
213
};
214
215
class AggregateFunctionPercentileApproxThreeParams final
216
        : public AggregateFunctionPercentileApproxBase<
217
                  AggregateFunctionPercentileApproxThreeParams>,
218
          public MultiExpression,
219
          public NullableAggregateFunction {
220
public:
221
    AggregateFunctionPercentileApproxThreeParams(const DataTypes& argument_types_)
222
0
            : AggregateFunctionPercentileApproxBase<AggregateFunctionPercentileApproxThreeParams>(
223
0
                      argument_types_) {}
224
    void add(AggregateDataPtr __restrict place, const IColumn** columns, ssize_t row_num,
225
0
             Arena&) const override {
226
0
        const auto& sources =
227
0
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[0]);
228
0
        const auto& quantile =
229
0
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[1]);
230
0
        const auto& compression =
231
0
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[2]);
232
233
0
        this->data(place).init(quantile.get_element(0),
234
0
                               static_cast<float>(compression.get_element(0)));
235
0
        this->data(place).add(sources.get_element(row_num));
236
0
    }
237
238
0
    DataTypePtr get_return_type() const override { return std::make_shared<DataTypeFloat64>(); }
239
240
0
    void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn& to) const override {
241
0
        auto& col = assert_cast<ColumnFloat64&>(to);
242
0
        double result = this->data(place).get();
243
244
0
        if (std::isnan(result)) {
245
0
            col.insert_default();
246
0
        } else {
247
0
            col.get_data().push_back(result);
248
0
        }
249
0
    }
250
};
251
252
class AggregateFunctionPercentileApproxWeightedThreeParams final
253
        : public AggregateFunctionPercentileApproxBase<
254
                  AggregateFunctionPercentileApproxWeightedThreeParams>,
255
          MultiExpression,
256
          NullableAggregateFunction {
257
public:
258
    AggregateFunctionPercentileApproxWeightedThreeParams(const DataTypes& argument_types_)
259
0
            : AggregateFunctionPercentileApproxBase<
260
0
                      AggregateFunctionPercentileApproxWeightedThreeParams>(argument_types_) {}
261
262
    void add(AggregateDataPtr __restrict place, const IColumn** columns, ssize_t row_num,
263
0
             Arena&) const override {
264
0
        const auto& sources =
265
0
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[0]);
266
0
        const auto& weight =
267
0
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[1]);
268
0
        const auto& quantile =
269
0
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[2]);
270
271
0
        this->data(place).init(quantile.get_element(0));
272
0
        this->data(place).add_with_weight(sources.get_element(row_num),
273
0
                                          weight.get_element(row_num));
274
0
    }
275
276
0
    DataTypePtr get_return_type() const override { return std::make_shared<DataTypeFloat64>(); }
277
278
0
    void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn& to) const override {
279
0
        auto& col = assert_cast<ColumnFloat64&>(to);
280
0
        double result = this->data(place).get();
281
282
0
        if (std::isnan(result)) {
283
0
            col.insert_default();
284
0
        } else {
285
0
            col.get_data().push_back(result);
286
0
        }
287
0
    }
288
};
289
290
class AggregateFunctionPercentileApproxWeightedFourParams final
291
        : public AggregateFunctionPercentileApproxBase<
292
                  AggregateFunctionPercentileApproxWeightedFourParams>,
293
          MultiExpression,
294
          NullableAggregateFunction {
295
public:
296
    AggregateFunctionPercentileApproxWeightedFourParams(const DataTypes& argument_types_)
297
0
            : AggregateFunctionPercentileApproxBase<
298
0
                      AggregateFunctionPercentileApproxWeightedFourParams>(argument_types_) {}
299
    void add(AggregateDataPtr __restrict place, const IColumn** columns, ssize_t row_num,
300
0
             Arena&) const override {
301
0
        const auto& sources =
302
0
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[0]);
303
0
        const auto& weight =
304
0
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[1]);
305
0
        const auto& quantile =
306
0
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[2]);
307
0
        const auto& compression =
308
0
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[3]);
309
310
0
        this->data(place).init(quantile.get_element(0),
311
0
                               static_cast<float>(compression.get_element(0)));
312
0
        this->data(place).add_with_weight(sources.get_element(row_num),
313
0
                                          weight.get_element(row_num));
314
0
    }
315
316
0
    DataTypePtr get_return_type() const override { return std::make_shared<DataTypeFloat64>(); }
317
318
0
    void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn& to) const override {
319
0
        auto& col = assert_cast<ColumnFloat64&>(to);
320
0
        double result = this->data(place).get();
321
322
0
        if (std::isnan(result)) {
323
0
            col.insert_default();
324
0
        } else {
325
0
            col.get_data().push_back(result);
326
0
        }
327
0
    }
328
};
329
330
template <PrimitiveType T>
331
struct PercentileState {
332
    mutable std::vector<Counts<typename PrimitiveTypeTraits<T>::CppType>> vec_counts;
333
    std::vector<double> vec_quantile {-1};
334
    bool inited_flag = false;
335
336
0
    void write(BufferWritable& buf) const {
337
0
        buf.write_binary(inited_flag);
338
0
        if (!inited_flag) {
339
0
            return;
340
0
        }
341
0
        int size_num = cast_set<int>(vec_quantile.size());
342
0
        buf.write_binary(size_num);
343
0
        for (const auto& quantile : vec_quantile) {
344
0
            buf.write_binary(quantile);
345
0
        }
346
0
        for (auto& counts : vec_counts) {
347
0
            counts.serialize(buf);
348
0
        }
349
0
    }
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
Unexecuted instantiation: _ZNK5doris15PercentileStateILNS_13PrimitiveTypeE9EE5writeERNS_14BufferWritableE
350
351
0
    void read(BufferReadable& buf) {
352
0
        buf.read_binary(inited_flag);
353
0
        if (!inited_flag) {
354
0
            return;
355
0
        }
356
0
        int size_num = 0;
357
0
        buf.read_binary(size_num);
358
0
        double data = 0.0;
359
0
        vec_quantile.clear();
360
0
        for (int i = 0; i < size_num; ++i) {
361
0
            buf.read_binary(data);
362
0
            vec_quantile.emplace_back(data);
363
0
        }
364
0
        vec_counts.clear();
365
0
        vec_counts.resize(size_num);
366
0
        for (int i = 0; i < size_num; ++i) {
367
0
            vec_counts[i].unserialize(buf);
368
0
        }
369
0
    }
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
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE9EE4readERNS_14BufferReadableE
370
371
    void add(typename PrimitiveTypeTraits<T>::CppType source,
372
0
             const PaddedPODArray<Float64>& quantiles, const NullMap& null_maps, int64_t arg_size) {
373
0
        if (!inited_flag) {
374
0
            vec_counts.resize(arg_size);
375
0
            vec_quantile.resize(arg_size, -1);
376
0
            inited_flag = true;
377
0
            for (int i = 0; i < arg_size; ++i) {
378
                // throw Exception func call percentile_array(id, [1,0,null])
379
0
                if (null_maps[i]) {
380
0
                    throw Exception(ErrorCode::INVALID_ARGUMENT,
381
0
                                    "quantiles in func percentile_array should not have null");
382
0
                }
383
0
                check_quantile(quantiles[i]);
384
0
                vec_quantile[i] = quantiles[i];
385
0
            }
386
0
        }
387
0
        for (int i = 0; i < arg_size; ++i) {
388
0
            vec_counts[i].increment(source);
389
0
        }
390
0
    }
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
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE9EE3addEdRKNS_8PODArrayIdLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEERKNS3_IhLm4096ES6_Lm16ELm15EEEl
391
392
    void add_batch(const PaddedPODArray<typename PrimitiveTypeTraits<T>::CppType>& source,
393
0
                   const Float64& q) {
394
0
        if (!inited_flag) {
395
0
            inited_flag = true;
396
0
            vec_counts.resize(1);
397
0
            vec_quantile.resize(1);
398
0
            check_quantile(q);
399
0
            vec_quantile[0] = q;
400
0
        }
401
0
        vec_counts[0].increment_batch(source);
402
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
403
404
0
    void merge(const PercentileState& rhs) {
405
0
        if (!rhs.inited_flag) {
406
0
            return;
407
0
        }
408
0
        int size_num = cast_set<int>(rhs.vec_quantile.size());
409
0
        if (!inited_flag) {
410
0
            vec_counts.resize(size_num);
411
0
            vec_quantile.resize(size_num, -1);
412
0
            inited_flag = true;
413
0
        }
414
415
0
        for (int i = 0; i < size_num; ++i) {
416
0
            if (vec_quantile[i] == -1.0) {
417
0
                vec_quantile[i] = rhs.vec_quantile[i];
418
0
            }
419
0
            vec_counts[i].merge(&(rhs.vec_counts[i]));
420
0
        }
421
0
    }
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE3EE5mergeERKS2_
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE4EE5mergeERKS2_
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE5EE5mergeERKS2_
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE6EE5mergeERKS2_
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE7EE5mergeERKS2_
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE8EE5mergeERKS2_
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE9EE5mergeERKS2_
422
423
0
    void reset() {
424
0
        vec_counts.clear();
425
0
        vec_quantile.clear();
426
0
        inited_flag = false;
427
0
    }
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE3EE5resetEv
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE4EE5resetEv
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE5EE5resetEv
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE6EE5resetEv
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE7EE5resetEv
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE8EE5resetEv
Unexecuted instantiation: _ZN5doris15PercentileStateILNS_13PrimitiveTypeE9EE5resetEv
428
429
0
    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
Unexecuted instantiation: _ZNK5doris15PercentileStateILNS_13PrimitiveTypeE9EE3getEv
430
431
0
    void insert_result_into(IColumn& to) const {
432
0
        auto& column_data = assert_cast<ColumnFloat64&>(to).get_data();
433
0
        for (int i = 0; i < vec_counts.size(); ++i) {
434
0
            column_data.push_back(vec_counts[i].terminate(vec_quantile[i]));
435
0
        }
436
0
    }
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
Unexecuted instantiation: _ZNK5doris15PercentileStateILNS_13PrimitiveTypeE9EE18insert_result_intoERNS_7IColumnE
437
};
438
439
template <PrimitiveType T>
440
class AggregateFunctionPercentile final
441
        : public IAggregateFunctionDataHelper<PercentileState<T>, AggregateFunctionPercentile<T>>,
442
          MultiExpression,
443
          NullableAggregateFunction {
444
public:
445
    using ColVecType = typename PrimitiveTypeTraits<T>::ColumnType;
446
    using Base = IAggregateFunctionDataHelper<PercentileState<T>, AggregateFunctionPercentile<T>>;
447
0
    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
Unexecuted instantiation: _ZN5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE6EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Unexecuted instantiation: _ZN5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE7EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Unexecuted instantiation: _ZN5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE8EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Unexecuted instantiation: _ZN5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE9EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
448
449
0
    String get_name() const override { return "percentile"; }
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE3EE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE4EE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE5EE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE6EE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE7EE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE8EE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE9EE8get_nameB5cxx11Ev
450
451
0
    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
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE9EE15get_return_typeEv
452
453
    void add(AggregateDataPtr __restrict place, const IColumn** columns, ssize_t row_num,
454
0
             Arena&) const override {
455
0
        const auto& sources =
456
0
                assert_cast<const ColVecType&, TypeCheckOnRelease::DISABLE>(*columns[0]);
457
0
        const auto& quantile =
458
0
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[1]);
459
0
        AggregateFunctionPercentile::data(place).add(sources.get_data()[row_num],
460
0
                                                     quantile.get_data(), NullMap(1, 0), 1);
461
0
    }
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
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE9EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
462
463
    void add_batch_single_place(size_t batch_size, AggregateDataPtr place, const IColumn** columns,
464
0
                                Arena&) const override {
465
0
        const auto& sources =
466
0
                assert_cast<const ColVecType&, TypeCheckOnRelease::DISABLE>(*columns[0]);
467
0
        const auto& quantile =
468
0
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(*columns[1]);
469
0
        DCHECK_EQ(sources.get_data().size(), batch_size);
470
0
        AggregateFunctionPercentile::data(place).add_batch(sources.get_data(),
471
0
                                                           quantile.get_data()[0]);
472
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
473
474
0
    void reset(AggregateDataPtr __restrict place) const override {
475
0
        AggregateFunctionPercentile::data(place).reset();
476
0
    }
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE3EE5resetEPc
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE4EE5resetEPc
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE5EE5resetEPc
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE6EE5resetEPc
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE7EE5resetEPc
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE8EE5resetEPc
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE9EE5resetEPc
477
478
    void merge(AggregateDataPtr __restrict place, ConstAggregateDataPtr rhs,
479
0
               Arena&) const override {
480
0
        AggregateFunctionPercentile::data(place).merge(AggregateFunctionPercentile::data(rhs));
481
0
    }
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
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE9EE5mergeEPcPKcRNS_5ArenaE
482
483
0
    void serialize(ConstAggregateDataPtr __restrict place, BufferWritable& buf) const override {
484
0
        AggregateFunctionPercentile::data(place).write(buf);
485
0
    }
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
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE9EE9serializeEPKcRNS_14BufferWritableE
486
487
    void deserialize(AggregateDataPtr __restrict place, BufferReadable& buf,
488
0
                     Arena&) const override {
489
0
        AggregateFunctionPercentile::data(place).read(buf);
490
0
    }
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
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE9EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
491
492
0
    void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn& to) const override {
493
0
        auto& col = assert_cast<ColumnFloat64&>(to);
494
0
        col.insert_value(AggregateFunctionPercentile::data(place).get());
495
0
    }
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
Unexecuted instantiation: _ZNK5doris27AggregateFunctionPercentileILNS_13PrimitiveTypeE9EE18insert_result_intoEPKcRNS_7IColumnE
496
};
497
498
template <PrimitiveType T>
499
class AggregateFunctionPercentileArray final
500
        : public IAggregateFunctionDataHelper<PercentileState<T>,
501
                                              AggregateFunctionPercentileArray<T>>,
502
          MultiExpression,
503
          NotNullableAggregateFunction {
504
public:
505
    using ColVecType = typename PrimitiveTypeTraits<T>::ColumnType;
506
    using Base =
507
            IAggregateFunctionDataHelper<PercentileState<T>, AggregateFunctionPercentileArray<T>>;
508
0
    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
Unexecuted instantiation: _ZN5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE6EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Unexecuted instantiation: _ZN5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE7EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Unexecuted instantiation: _ZN5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE8EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
Unexecuted instantiation: _ZN5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE9EEC2ERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS7_EE
509
510
0
    String get_name() const override { return "percentile_array"; }
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE3EE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE4EE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE5EE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE6EE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE7EE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE8EE8get_nameB5cxx11Ev
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE9EE8get_nameB5cxx11Ev
511
512
0
    DataTypePtr get_return_type() const override {
513
0
        return std::make_shared<DataTypeArray>(make_nullable(std::make_shared<DataTypeFloat64>()));
514
0
    }
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
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE9EE15get_return_typeEv
515
516
    void add(AggregateDataPtr __restrict place, const IColumn** columns, ssize_t row_num,
517
0
             Arena&) const override {
518
0
        const auto& sources =
519
0
                assert_cast<const ColVecType&, TypeCheckOnRelease::DISABLE>(*columns[0]);
520
0
        const auto& quantile_array =
521
0
                assert_cast<const ColumnArray&, TypeCheckOnRelease::DISABLE>(*columns[1]);
522
0
        const auto& offset_column_data = quantile_array.get_offsets();
523
0
        const auto& null_maps = assert_cast<const ColumnNullable&, TypeCheckOnRelease::DISABLE>(
524
0
                                        quantile_array.get_data())
525
0
                                        .get_null_map_data();
526
0
        const auto& nested_column = assert_cast<const ColumnNullable&, TypeCheckOnRelease::DISABLE>(
527
0
                                            quantile_array.get_data())
528
0
                                            .get_nested_column();
529
0
        const auto& nested_column_data =
530
0
                assert_cast<const ColumnFloat64&, TypeCheckOnRelease::DISABLE>(nested_column);
531
532
0
        AggregateFunctionPercentileArray::data(place).add(
533
0
                sources.get_element(row_num), nested_column_data.get_data(), null_maps,
534
0
                offset_column_data.data()[row_num] - offset_column_data[(ssize_t)row_num - 1]);
535
0
    }
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
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE9EE3addEPcPPKNS_7IColumnElRNS_5ArenaE
536
537
0
    void reset(AggregateDataPtr __restrict place) const override {
538
0
        AggregateFunctionPercentileArray::data(place).reset();
539
0
    }
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE3EE5resetEPc
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE4EE5resetEPc
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE5EE5resetEPc
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE6EE5resetEPc
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE7EE5resetEPc
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE8EE5resetEPc
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE9EE5resetEPc
540
541
    void merge(AggregateDataPtr __restrict place, ConstAggregateDataPtr rhs,
542
0
               Arena&) const override {
543
0
        AggregateFunctionPercentileArray::data(place).merge(
544
0
                AggregateFunctionPercentileArray::data(rhs));
545
0
    }
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
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE9EE5mergeEPcPKcRNS_5ArenaE
546
547
0
    void serialize(ConstAggregateDataPtr __restrict place, BufferWritable& buf) const override {
548
0
        AggregateFunctionPercentileArray::data(place).write(buf);
549
0
    }
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
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE9EE9serializeEPKcRNS_14BufferWritableE
550
551
    void deserialize(AggregateDataPtr __restrict place, BufferReadable& buf,
552
0
                     Arena&) const override {
553
0
        AggregateFunctionPercentileArray::data(place).read(buf);
554
0
    }
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
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE9EE11deserializeEPcRNS_14BufferReadableERNS_5ArenaE
555
556
0
    void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn& to) const override {
557
0
        auto& to_arr = assert_cast<ColumnArray&>(to);
558
0
        auto& to_nested_col = to_arr.get_data();
559
0
        if (to_nested_col.is_nullable()) {
560
0
            auto col_null = reinterpret_cast<ColumnNullable*>(&to_nested_col);
561
0
            AggregateFunctionPercentileArray::data(place).insert_result_into(
562
0
                    col_null->get_nested_column());
563
0
            col_null->get_null_map_data().resize_fill(col_null->get_nested_column().size(), 0);
564
0
        } else {
565
0
            AggregateFunctionPercentileArray::data(place).insert_result_into(to_nested_col);
566
0
        }
567
0
        to_arr.get_offsets().push_back(to_nested_col.size());
568
0
    }
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
Unexecuted instantiation: _ZNK5doris32AggregateFunctionPercentileArrayILNS_13PrimitiveTypeE9EE18insert_result_intoEPKcRNS_7IColumnE
569
};
570
571
} // namespace doris