diff --git a/native-sql-engine/cpp/src/codegen/arrow_compute/ext/actions_impl.cc b/native-sql-engine/cpp/src/codegen/arrow_compute/ext/actions_impl.cc index ef2f7379c..e60ed1316 100644 --- a/native-sql-engine/cpp/src/codegen/arrow_compute/ext/actions_impl.cc +++ b/native-sql-engine/cpp/src/codegen/arrow_compute/ext/actions_impl.cc @@ -50,14 +50,14 @@ struct FindAccumulatorType> { using Type = arrow::DoubleType; }; -arrow::Status ActionBase::Submit(ArrayList in, int max_group_id, +arrow::Status ActionBase::Submit(const ArrayList& in, int max_group_id, std::function* on_valid, std::function* on_null) { return arrow::Status::NotImplemented("ActionBase Submit is abstract."); } arrow::Status ActionBase::Submit( - std::vector> in, + const std::vector>& in, std::function* on_valid, std::function* on_null) { return arrow::Status::NotImplemented("ActionBase Submit is abstract."); @@ -143,7 +143,7 @@ class UniqueAction : public ActionBase { #endif } - arrow::Status Submit(ArrayList in_list, int max_group_id, + arrow::Status Submit(const ArrayList& in_list, int max_group_id, std::function* on_valid, std::function* on_null) override { // resize result data @@ -302,7 +302,7 @@ class CountAction : public ActionBase { #endif } - arrow::Status Submit(ArrayList in_list, int max_group_id, + arrow::Status Submit(const ArrayList& in_list, int max_group_id, std::function* on_valid, std::function* on_null) override { // resize result data @@ -465,7 +465,7 @@ class CountDistinctAction : public ActionBase { #endif } std::string getName() { return "CountDistinctAction"; } - arrow::Status Submit(ArrayList in_list, int max_group_id, + arrow::Status Submit(const ArrayList& in_list, int max_group_id, std::function* on_valid, std::function* on_null) override { // resize result data @@ -616,7 +616,7 @@ class CountLiteralAction : public ActionBase { #endif } - arrow::Status Submit(ArrayList in_list, int max_group_id, + arrow::Status Submit(const ArrayList& in_list, int max_group_id, std::function* on_valid, std::function* on_null) override { // resize result data @@ -740,7 +740,7 @@ class MinAction> #endif } - arrow::Status Submit(ArrayList in_list, int max_group_id, + arrow::Status Submit(const ArrayList& in_list, int max_group_id, std::function* on_valid, std::function* on_null) override { // resize result data @@ -1022,7 +1022,7 @@ class MinAction> #endif } - arrow::Status Submit(ArrayList in_list, int max_group_id, + arrow::Status Submit(const ArrayList& in_list, int max_group_id, std::function* on_valid, std::function* on_null) override { // resize result data @@ -1179,7 +1179,7 @@ class MinAction> #endif } - arrow::Status Submit(ArrayList in_list, int max_group_id, + arrow::Status Submit(const ArrayList& in_list, int max_group_id, std::function* on_valid, std::function* on_null) override { // resize result data @@ -1350,7 +1350,7 @@ class MaxAction> #endif } - arrow::Status Submit(ArrayList in_list, int max_group_id, + arrow::Status Submit(const ArrayList& in_list, int max_group_id, std::function* on_valid, std::function* on_null) override { // resize result data @@ -1627,7 +1627,7 @@ class MaxAction> #endif } - arrow::Status Submit(ArrayList in_list, int max_group_id, + arrow::Status Submit(const ArrayList& in_list, int max_group_id, std::function* on_valid, std::function* on_null) override { // resize result data @@ -1783,7 +1783,7 @@ class MaxAction> #endif } - arrow::Status Submit(ArrayList in_list, int max_group_id, + arrow::Status Submit(const ArrayList& in_list, int max_group_id, std::function* on_valid, std::function* on_null) override { // resize result data @@ -1956,7 +1956,7 @@ class SumAction* on_valid, std::function* on_null) override { // resize result data @@ -2117,7 +2117,7 @@ class SumAction* on_valid, std::function* on_null) override { // resize result data @@ -2284,7 +2284,7 @@ class SumActionPartial* on_valid, std::function* on_null) override { // resize result data @@ -2302,7 +2302,7 @@ class SumActionPartial 0 && in_->IsNull(row_id); + const bool is_null = in_->IsNull(row_id); if (!is_null) { cache_validity_[dest_group_id] = true; cache_[dest_group_id] += data_[row_id]; @@ -2450,7 +2450,7 @@ class SumActionPartial* on_valid, std::function* on_null) override { // resize result data @@ -2467,7 +2467,7 @@ class SumActionPartial 0 && in_->IsNull(row_id); + const bool is_null = in_->IsNull(row_id); if (!is_null) { cache_validity_[dest_group_id] = true; cache_[dest_group_id] += in_->GetView(row_id); @@ -2621,7 +2621,7 @@ class AvgAction* on_valid, std::function* on_null) override { // resize result data @@ -2792,7 +2792,7 @@ class AvgAction* on_valid, std::function* on_null) override { // resize result data @@ -2979,7 +2979,7 @@ class SumCountAction* on_valid, std::function* on_null) override { // resize result data @@ -3005,7 +3005,7 @@ class SumCountAction 0 && in_->IsNull(row_id); + const bool is_null = in_->IsNull(row_id); if (!is_null) { cache_sum_[dest_group_id] += data_[row_id]; cache_count_[dest_group_id] += 1; @@ -3168,7 +3168,7 @@ class SumCountAction* on_valid, std::function* on_null) override { // resize result data @@ -3185,7 +3185,7 @@ class SumCountAction 0 && in_->IsNull(row_id); + const bool is_null = in_->IsNull(row_id); if (!is_null) { cache_sum_[dest_group_id] += in_->GetView(row_id); cache_count_[dest_group_id] += 1; @@ -3353,7 +3353,7 @@ class SumCountMergeAction* on_valid, std::function* on_null) override { // resize result data @@ -3534,7 +3534,7 @@ class SumCountMergeAction* on_valid, std::function* on_null) override { // resize result data @@ -3704,7 +3704,7 @@ class AvgByCountAction* on_valid, std::function* on_null) override { // resize result data @@ -3884,7 +3884,7 @@ class AvgByCountAction* on_valid, std::function* on_null) override { // resize result data @@ -4079,7 +4079,7 @@ class StddevSampPartialAction* on_valid, std::function* on_null) override { // resize result data @@ -4313,7 +4313,7 @@ class StddevSampPartialAction* on_valid, std::function* on_null) override { // resize result data @@ -4540,7 +4540,7 @@ class StddevSampFinalAction* on_valid, std::function* on_null) override { // resize result data @@ -4747,7 +4747,7 @@ class StddevSampFinalAction* on_valid, std::function* on_null) override { // resize result data @@ -4986,7 +4986,7 @@ class FirstPartialAction* on_valid, std::function* on_null) override { // resize result data @@ -5059,8 +5059,9 @@ class FirstPartialAction(in[0]); + int in_null_count = input_array->null_count(); for (int id = 0; id < input_array->length(); id++) { - if (input_array->IsNull(id)) { + if (in_null_count > 0 && input_array->IsNull(id)) { if (ignore_nulls_) { continue; } else { @@ -5224,7 +5225,7 @@ class FirstPartialAction* on_valid, std::function* on_null) override { // resize result data @@ -5296,8 +5297,9 @@ class FirstPartialAction(in[0]); + int in_null_count = input_array->null_count(); for (int id = 0; id < input_array->length(); id++) { - if (input_array->IsNull(id)) { + if (in_null_count > 0 && input_array->IsNull(id)) { if (ignore_nulls_) { continue; } else { @@ -5459,7 +5461,7 @@ class FirstFinalAction* on_valid, std::function* on_null) override { // resize result data @@ -5719,7 +5721,7 @@ class FirstFinalAction* on_valid, std::function* on_null) override { // resize result data diff --git a/native-sql-engine/cpp/src/codegen/arrow_compute/ext/actions_impl.h b/native-sql-engine/cpp/src/codegen/arrow_compute/ext/actions_impl.h index 7e025f37f..05a379831 100644 --- a/native-sql-engine/cpp/src/codegen/arrow_compute/ext/actions_impl.h +++ b/native-sql-engine/cpp/src/codegen/arrow_compute/ext/actions_impl.h @@ -40,10 +40,10 @@ class ActionBase { public: virtual ~ActionBase() {} - virtual arrow::Status Submit(ArrayList in, int max_group_id, + virtual arrow::Status Submit(const ArrayList& in, int max_group_id, std::function* on_valid, std::function* on_null); - virtual arrow::Status Submit(std::vector> in, + virtual arrow::Status Submit(const std::vector>& in, std::function* on_valid, std::function* on_null); virtual arrow::Status Submit(const std::shared_ptr& in,