This is an automated email from the ASF dual-hosted git repository. amashenkov pushed a commit to branch ignite-26698 in repository https://gitbox.apache.org/repos/asf/ignite-3.git
commit 66e2bcd26159d931dd2153a41a1a4a49a22631eb Author: amashenkov <[email protected]> AuthorDate: Thu Oct 16 12:09:24 2025 +0300 wip --- .../internal/sql/engine/ItFloatingPointTest.java | 3 +++ .../sql/engine/rel/agg/MapReduceAggregates.java | 23 +++++++++++++--------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItFloatingPointTest.java b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItFloatingPointTest.java index d56062242e4..668bc878898 100644 --- a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItFloatingPointTest.java +++ b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItFloatingPointTest.java @@ -447,6 +447,9 @@ public class ItFloatingPointTest extends BaseSqlMultiStatementTest { assertQuery("SELECT MIN(fn), MIN(dn) FROM test").returns(Float.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY).check(); assertQuery("SELECT MAX(fn), MAX(dn) FROM test").returns(Float.NaN, Double.NaN).check(); assertQuery("SELECT AVG(fn), AVG(dn) FROM test").returns(Double.NaN, Double.NaN).check(); + + assertQuery(node(1), "SELECT AVG(f), AVG(d) FROM test").returns(Double.NaN, Double.NaN).check(); + assertQuery(node(1), "SELECT AVG(fn), AVG(dn) FROM test").returns(Double.NaN, Double.NaN).check(); } @Test diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/agg/MapReduceAggregates.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/agg/MapReduceAggregates.java index a2b430c0b2f..91552eb35b3 100644 --- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/agg/MapReduceAggregates.java +++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rel/agg/MapReduceAggregates.java @@ -658,19 +658,24 @@ public class MapReduceAggregates { numeratorRef = rexBuilder.ensureType(mapSum0.type, numeratorRef, true); - RelDataType resultType = typeFactory.decimalOf(call.type); + RelDataType resultType = typeSystem.deriveAvgAggType(typeFactory, call.getType()); - // Return correct decimal type with correct scale and precision. - int precision = resultType.getPrecision(); // not used. - int scale = resultType.getScale(); + RexNode sumDivCnt; + if (SqlTypeUtil.isExactNumeric(resultType)) { + // Return correct decimal type with correct scale and precision. + int precision = resultType.getPrecision(); // not used. + int scale = resultType.getScale(); - RexLiteral p = rexBuilder.makeExactLiteral(BigDecimal.valueOf(precision), tf.createSqlType(SqlTypeName.INTEGER)); - RexLiteral s = rexBuilder.makeExactLiteral(BigDecimal.valueOf(scale), tf.createSqlType(SqlTypeName.INTEGER)); + RexLiteral p = rexBuilder.makeExactLiteral(BigDecimal.valueOf(precision), tf.createSqlType(SqlTypeName.INTEGER)); + RexLiteral s = rexBuilder.makeExactLiteral(BigDecimal.valueOf(scale), tf.createSqlType(SqlTypeName.INTEGER)); - RexNode sumDivCnt = rexBuilder.makeCall(IgniteSqlOperatorTable.DECIMAL_DIVIDE, numeratorRef, denominatorRef, p, s); + sumDivCnt = rexBuilder.makeCall(IgniteSqlOperatorTable.DECIMAL_DIVIDE, numeratorRef, denominatorRef, p, s); - if (call.getType().getSqlTypeName() != SqlTypeName.DECIMAL) { - sumDivCnt = rexBuilder.makeCast(call.getType(), sumDivCnt, false, false); + if (call.getType().getSqlTypeName() != SqlTypeName.DECIMAL) { + sumDivCnt = rexBuilder.makeCast(call.getType(), sumDivCnt, false, false); + } + } else { + sumDivCnt = rexBuilder.makeCall(IgniteSqlOperatorTable.DIVIDE, numeratorRef, denominatorRef); } if (canBeNull) {
