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

vavrtom pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git


The following commit(s) were added to refs/heads/main by this push:
     new 89273e94dd QPID-8717: [Broker-J] Broker query engine may produce 
ClassCastException when using AVG function (#340)
89273e94dd is described below

commit 89273e94dd36874a42225ee4dea63238cf40b6a2
Author: Daniil Kirilyuk <[email protected]>
AuthorDate: Wed Nov 26 15:29:15 2025 +0100

    QPID-8717: [Broker-J] Broker query engine may produce ClassCastException 
when using AVG function (#340)
---
 .../parsing/expression/function/aggregation/AvgExpression.java   | 8 +++++++-
 .../expression/function/aggregation/AvgExpressionTest.java       | 9 +++++++++
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git 
a/broker-plugins/query-engine/src/main/java/org/apache/qpid/server/query/engine/parsing/expression/function/aggregation/AvgExpression.java
 
b/broker-plugins/query-engine/src/main/java/org/apache/qpid/server/query/engine/parsing/expression/function/aggregation/AvgExpression.java
index 372e20ac54..979383a75a 100644
--- 
a/broker-plugins/query-engine/src/main/java/org/apache/qpid/server/query/engine/parsing/expression/function/aggregation/AvgExpression.java
+++ 
b/broker-plugins/query-engine/src/main/java/org/apache/qpid/server/query/engine/parsing/expression/function/aggregation/AvgExpression.java
@@ -81,6 +81,12 @@ public class AvgExpression<T> extends 
AbstractAggregationExpression<T, Double>
     {
         final List<?> args = getArguments(items, _typeValidator);
         final OptionalDouble optionalDouble = 
args.stream().mapToDouble(NumberConverter::toDouble).average();
-        return optionalDouble.isPresent() ? 
NumberConverter.narrow(BigDecimal.valueOf(optionalDouble.getAsDouble())) : null;
+        if (optionalDouble.isEmpty())
+        {
+            return null;
+        }
+        final BigDecimal bigDecimal = 
BigDecimal.valueOf(optionalDouble.getAsDouble());
+        final Number narrowed = NumberConverter.narrow(bigDecimal);
+        return Double.valueOf(narrowed.doubleValue());
     }
 }
diff --git 
a/broker-plugins/query-engine/src/test/java/org/apache/qpid/server/query/engine/parsing/expression/function/aggregation/AvgExpressionTest.java
 
b/broker-plugins/query-engine/src/test/java/org/apache/qpid/server/query/engine/parsing/expression/function/aggregation/AvgExpressionTest.java
index 22e11223f5..457892216a 100644
--- 
a/broker-plugins/query-engine/src/test/java/org/apache/qpid/server/query/engine/parsing/expression/function/aggregation/AvgExpressionTest.java
+++ 
b/broker-plugins/query-engine/src/test/java/org/apache/qpid/server/query/engine/parsing/expression/function/aggregation/AvgExpressionTest.java
@@ -170,4 +170,13 @@ public class AvgExpressionTest
             assertEquals("QUEUE_" + i, result.get(i - 50).get("name"));
         }
     }
+
+    @Test
+    void avgOnZeroValues()
+    {
+        String query = "SELECT avg(queueDepthMessages) as AverageDepth FROM 
queue where name = 'QUEUE_1'";
+        List<Map<String, Object>> result = 
_queryEvaluator.execute(query).getResults();
+        assertEquals(1, result.size());
+        assertEquals(0.0, result.get(0).get("AverageDepth"));
+    }
 }


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

Reply via email to