This is an automated email from the ASF dual-hosted git repository.

jackie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git


The following commit(s) were added to refs/heads/master by this push:
     new 1e771ea458 Fix behavior for distinct sum and distinct avg when all 
values are null (#14069)
1e771ea458 is described below

commit 1e771ea45838ecad99c0d7558c8147a99bd7ab17
Author: Yash Mayya <[email protected]>
AuthorDate: Tue Sep 24 22:55:17 2024 +0530

    Fix behavior for distinct sum and distinct avg when all values are null 
(#14069)
---
 .../function/DistinctAvgAggregationFunction.java   |  4 +++
 .../function/DistinctSumAggregationFunction.java   |  4 +++
 .../function/DistinctAggregationFunctionTest.java  | 30 ++++++++++++++++++++++
 3 files changed, 38 insertions(+)

diff --git 
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctAvgAggregationFunction.java
 
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctAvgAggregationFunction.java
index 7194783910..affcf4b3be 100644
--- 
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctAvgAggregationFunction.java
+++ 
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctAvgAggregationFunction.java
@@ -63,6 +63,10 @@ public class DistinctAvgAggregationFunction extends 
BaseDistinctAggregateAggrega
 
   @Override
   public Double extractFinalResult(Set intermediateResult) {
+    if (_nullHandlingEnabled && intermediateResult.isEmpty()) {
+      return null;
+    }
+
     Double distinctSum = 0.0;
 
     for (Object obj : intermediateResult) {
diff --git 
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctSumAggregationFunction.java
 
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctSumAggregationFunction.java
index 602017da65..8e9bb34a0c 100644
--- 
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctSumAggregationFunction.java
+++ 
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctSumAggregationFunction.java
@@ -63,6 +63,10 @@ public class DistinctSumAggregationFunction extends 
BaseDistinctAggregateAggrega
 
   @Override
   public Double extractFinalResult(Set intermediateResult) {
+    if (_nullHandlingEnabled && intermediateResult.isEmpty()) {
+      return null;
+    }
+
     Double distinctSum = 0.0;
 
     for (Object obj : intermediateResult) {
diff --git 
a/pinot-core/src/test/java/org/apache/pinot/core/query/aggregation/function/DistinctAggregationFunctionTest.java
 
b/pinot-core/src/test/java/org/apache/pinot/core/query/aggregation/function/DistinctAggregationFunctionTest.java
index 2067a4c914..43c1095434 100644
--- 
a/pinot-core/src/test/java/org/apache/pinot/core/query/aggregation/function/DistinctAggregationFunctionTest.java
+++ 
b/pinot-core/src/test/java/org/apache/pinot/core/query/aggregation/function/DistinctAggregationFunctionTest.java
@@ -142,6 +142,21 @@ public class DistinctAggregationFunctionTest extends 
AbstractAggregationFunction
         .thenResultIs("STRING | INTEGER", "literal | 3");
   }
 
+  @Test(dataProvider = "scenarios")
+  void distinctSumAggregationAllNullsWithNullHandlingEnabled(DataTypeScenario 
scenario) {
+    scenario.getDeclaringTable(true)
+        .onFirstInstance("myField",
+            "null",
+            "null",
+            "null"
+        ).andOnSecondInstance("myField",
+            "null",
+            "null",
+            "null"
+        ).whenQuery("select sum(distinct myField) from testTable")
+        .thenResultIs("INTEGER", "null");
+  }
+
   @Test(dataProvider = "scenarios")
   void distinctSumAggregationWithNullHandlingDisabled(DataTypeScenario 
scenario) {
     scenario.getDeclaringTable(false)
@@ -204,6 +219,21 @@ public class DistinctAggregationFunctionTest extends 
AbstractAggregationFunction
         .thenResultIs("STRING | DOUBLE", "literal | 6");
   }
 
+  @Test(dataProvider = "scenarios")
+  void distinctAvgAggregationAllNullsWithNullHandlingEnabled(DataTypeScenario 
scenario) {
+    scenario.getDeclaringTable(true)
+        .onFirstInstance("myField",
+            "null",
+            "null",
+            "null"
+        ).andOnSecondInstance("myField",
+            "null",
+            "null",
+            "null"
+        ).whenQuery("select avg(distinct myField) from testTable")
+        .thenResultIs("DOUBLE", "null");
+  }
+
   @Test(dataProvider = "scenarios")
   void distinctAvgAggregationWithNullHandlingDisabled(DataTypeScenario 
scenario) {
     scenario.getDeclaringTable(false, FieldSpec.FieldType.METRIC)


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to