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 <87313068+zhangstar...@users.noreply.github.com>
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: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to