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]