This is an automated email from the ASF dual-hosted git repository.
zhangstar333 pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-3.0 by this push:
new 62d502267dc [cherry-pick](branch-30) fix agg functions coredump when
upgrade (#40438)(#40472) (#40692)
62d502267dc is described below
commit 62d502267dc235fb8efe6a9c3c1bdf1e7477a328
Author: zhangstar333 <[email protected]>
AuthorDate: Thu Sep 12 18:11:00 2024 +0800
[cherry-pick](branch-30) fix agg functions coredump when upgrade
(#40438)(#40472) (#40692)
## Proposed changes
cherry-pick from master https://github.com/apache/doris/pull/40438
https://github.com/apache/doris/pull/40472
<!--Describe your changes.-->
---
.../aggregate_functions/aggregate_function_covar.h | 19 +--
.../aggregate_function_percentile.h | 151 ++++++++++++++++-----
2 files changed, 126 insertions(+), 44 deletions(-)
diff --git a/be/src/vec/aggregate_functions/aggregate_function_covar.h
b/be/src/vec/aggregate_functions/aggregate_function_covar.h
index 179e723285e..9b4b1b70c1f 100644
--- a/be/src/vec/aggregate_functions/aggregate_function_covar.h
+++ b/be/src/vec/aggregate_functions/aggregate_function_covar.h
@@ -120,8 +120,6 @@ struct BaseData {
count += 1;
}
- static DataTypePtr get_return_type() { return
std::make_shared<DataTypeNumber<Float64>>(); }
-
double sum_x;
double sum_y;
double sum_xy;
@@ -134,6 +132,7 @@ struct PopData : Data {
auto& col = assert_cast<ColumnFloat64&>(to);
col.get_data().push_back(this->get_pop_result());
}
+ static DataTypePtr get_return_type() { return
std::make_shared<DataTypeNumber<Float64>>(); }
};
template <typename T, typename Data>
@@ -148,6 +147,9 @@ struct SampData_OLDER : Data {
nullable_column.get_null_map_data().push_back(0);
}
}
+ static DataTypePtr get_return_type() {
+ return make_nullable(std::make_shared<DataTypeNumber<Float64>>());
+ }
};
template <typename T, typename Data>
@@ -160,6 +162,7 @@ struct SampData : Data {
col.get_data().push_back(this->get_samp_result());
}
}
+ static DataTypePtr get_return_type() { return
std::make_shared<DataTypeNumber<Float64>>(); }
};
template <typename Data>
@@ -184,17 +187,7 @@ public:
String get_name() const override { return Data::name(); }
- DataTypePtr get_return_type() const override {
- if constexpr (is_pop) {
- return Data::get_return_type();
- } else {
- if (IAggregateFunction::version < AGG_FUNCTION_NULLABLE) {
- return make_nullable(Data::get_return_type());
- } else {
- return Data::get_return_type();
- }
- }
- }
+ DataTypePtr get_return_type() const override { return
Data::get_return_type(); }
void add(AggregateDataPtr __restrict place, const IColumn** columns,
ssize_t row_num,
Arena*) const override {
diff --git a/be/src/vec/aggregate_functions/aggregate_function_percentile.h
b/be/src/vec/aggregate_functions/aggregate_function_percentile.h
index 5217ba5aeb5..1c8a12340d7 100644
--- a/be/src/vec/aggregate_functions/aggregate_function_percentile.h
+++ b/be/src/vec/aggregate_functions/aggregate_function_percentile.h
@@ -162,13 +162,6 @@ public:
String get_name() const override { return "percentile_approx"; }
- DataTypePtr get_return_type() const override {
- if (IAggregateFunction::version < AGG_FUNCTION_NULLABLE) {
- return make_nullable(std::make_shared<DataTypeFloat64>());
- }
- return std::make_shared<DataTypeFloat64>();
- }
-
void reset(AggregateDataPtr __restrict place) const override {
AggregateFunctionPercentileApprox::data(place).reset();
}
@@ -187,30 +180,6 @@ public:
Arena*) const override {
AggregateFunctionPercentileApprox::data(place).read(buf);
}
-
- void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn&
to) const override {
- if (IAggregateFunction::version < AGG_FUNCTION_NULLABLE) {
- ColumnNullable& nullable_column = assert_cast<ColumnNullable&>(to);
- double result =
AggregateFunctionPercentileApprox::data(place).get();
-
- if (std::isnan(result)) {
- nullable_column.insert_default();
- } else {
- auto& col =
assert_cast<ColumnFloat64&>(nullable_column.get_nested_column());
- col.get_data().push_back(result);
- nullable_column.get_null_map_data().push_back(0);
- }
- } else {
- auto& col = assert_cast<ColumnFloat64&>(to);
- double result =
AggregateFunctionPercentileApprox::data(place).get();
-
- if (std::isnan(result)) {
- col.insert_default();
- } else {
- col.get_data().push_back(result);
- }
- }
- }
};
template <bool is_nullable>
@@ -256,6 +225,23 @@ public:
this->data(place).add(sources.get_element(row_num),
quantile.get_element(row_num));
}
}
+
+ DataTypePtr get_return_type() const override {
+ return make_nullable(std::make_shared<DataTypeFloat64>());
+ }
+
+ void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn&
to) const override {
+ auto& nullable_column = assert_cast<ColumnNullable&>(to);
+ double result = AggregateFunctionPercentileApprox::data(place).get();
+
+ if (std::isnan(result)) {
+ nullable_column.insert_default();
+ } else {
+ auto& col =
assert_cast<ColumnFloat64&>(nullable_column.get_nested_column());
+ col.get_data().push_back(result);
+ nullable_column.get_null_map_data().push_back(0);
+ }
+ }
};
class AggregateFunctionPercentileApproxTwoParams : public
AggregateFunctionPercentileApprox {
@@ -271,6 +257,19 @@ public:
this->data(place).init();
this->data(place).add(sources.get_element(row_num),
quantile.get_element(row_num));
}
+
+ DataTypePtr get_return_type() const override { return
std::make_shared<DataTypeFloat64>(); }
+
+ void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn&
to) const override {
+ auto& col = assert_cast<ColumnFloat64&>(to);
+ double result = AggregateFunctionPercentileApprox::data(place).get();
+
+ if (std::isnan(result)) {
+ col.insert_default();
+ } else {
+ col.get_data().push_back(result);
+ }
+ }
};
template <bool is_nullable>
@@ -319,6 +318,23 @@ public:
this->data(place).add(sources.get_element(row_num),
quantile.get_element(row_num));
}
}
+
+ DataTypePtr get_return_type() const override {
+ return make_nullable(std::make_shared<DataTypeFloat64>());
+ }
+
+ void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn&
to) const override {
+ auto& nullable_column = assert_cast<ColumnNullable&>(to);
+ double result = AggregateFunctionPercentileApprox::data(place).get();
+
+ if (std::isnan(result)) {
+ nullable_column.insert_default();
+ } else {
+ auto& col =
assert_cast<ColumnFloat64&>(nullable_column.get_nested_column());
+ col.get_data().push_back(result);
+ nullable_column.get_null_map_data().push_back(0);
+ }
+ }
};
class AggregateFunctionPercentileApproxThreeParams : public
AggregateFunctionPercentileApprox {
@@ -337,6 +353,19 @@ public:
this->data(place).init(compression.get_element(row_num));
this->data(place).add(sources.get_element(row_num),
quantile.get_element(row_num));
}
+
+ DataTypePtr get_return_type() const override { return
std::make_shared<DataTypeFloat64>(); }
+
+ void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn&
to) const override {
+ auto& col = assert_cast<ColumnFloat64&>(to);
+ double result = AggregateFunctionPercentileApprox::data(place).get();
+
+ if (std::isnan(result)) {
+ col.insert_default();
+ } else {
+ col.get_data().push_back(result);
+ }
+ }
};
template <bool is_nullable>
@@ -390,6 +419,23 @@ public:
quantile.get_element(row_num));
}
}
+
+ DataTypePtr get_return_type() const override {
+ return make_nullable(std::make_shared<DataTypeFloat64>());
+ }
+
+ void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn&
to) const override {
+ auto& nullable_column = assert_cast<ColumnNullable&>(to);
+ double result = AggregateFunctionPercentileApprox::data(place).get();
+
+ if (std::isnan(result)) {
+ nullable_column.insert_default();
+ } else {
+ auto& col =
assert_cast<ColumnFloat64&>(nullable_column.get_nested_column());
+ col.get_data().push_back(result);
+ nullable_column.get_null_map_data().push_back(0);
+ }
+ }
};
class AggregateFunctionPercentileApproxWeightedThreeParams
@@ -411,6 +457,19 @@ public:
this->data(place).add_with_weight(sources.get_element(row_num),
weight.get_element(row_num),
quantile.get_element(row_num));
}
+
+ DataTypePtr get_return_type() const override { return
std::make_shared<DataTypeFloat64>(); }
+
+ void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn&
to) const override {
+ auto& col = assert_cast<ColumnFloat64&>(to);
+ double result = AggregateFunctionPercentileApprox::data(place).get();
+
+ if (std::isnan(result)) {
+ col.insert_default();
+ } else {
+ col.get_data().push_back(result);
+ }
+ }
};
template <bool is_nullable>
@@ -467,6 +526,23 @@ public:
quantile.get_element(row_num));
}
}
+
+ DataTypePtr get_return_type() const override {
+ return make_nullable(std::make_shared<DataTypeFloat64>());
+ }
+
+ void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn&
to) const override {
+ auto& nullable_column = assert_cast<ColumnNullable&>(to);
+ double result = AggregateFunctionPercentileApprox::data(place).get();
+
+ if (std::isnan(result)) {
+ nullable_column.insert_default();
+ } else {
+ auto& col =
assert_cast<ColumnFloat64&>(nullable_column.get_nested_column());
+ col.get_data().push_back(result);
+ nullable_column.get_null_map_data().push_back(0);
+ }
+ }
};
class AggregateFunctionPercentileApproxWeightedFourParams
@@ -489,6 +565,19 @@ public:
this->data(place).add_with_weight(sources.get_element(row_num),
weight.get_element(row_num),
quantile.get_element(row_num));
}
+
+ DataTypePtr get_return_type() const override { return
std::make_shared<DataTypeFloat64>(); }
+
+ void insert_result_into(ConstAggregateDataPtr __restrict place, IColumn&
to) const override {
+ auto& col = assert_cast<ColumnFloat64&>(to);
+ double result = AggregateFunctionPercentileApprox::data(place).get();
+
+ if (std::isnan(result)) {
+ col.insert_default();
+ } else {
+ col.get_data().push_back(result);
+ }
+ }
};
template <typename T>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]