Coverage Report

Created: 2026-08-03 18:54

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