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

amashenkov pushed a commit to branch ignite-25942
in repository https://gitbox.apache.org/repos/asf/ignite-3.git

commit a67f26c7b7b430fcf344afdbc47b909898a02bfc
Author: amashenkov <[email protected]>
AuthorDate: Thu Jul 17 14:27:57 2025 +0300

    minor
---
 .../internal/sql/engine/exec/exp/agg/Accumulators.java   | 16 +++++++---------
 .../sql/engine/exec/exp/agg/AccumulatorsFactory.java     |  6 +++---
 .../ignite/internal/sql/engine/util/PlanUtils.java       |  4 +---
 .../engine/exec/exp/agg/LiteralValAccumulatorTest.java   |  3 ++-
 .../ignite/internal/sql/engine/util/PlanUtilsTest.java   |  5 +++--
 5 files changed, 16 insertions(+), 18 deletions(-)

diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/agg/Accumulators.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/agg/Accumulators.java
index 6ff88ffb264..f890338380e 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/agg/Accumulators.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/agg/Accumulators.java
@@ -19,7 +19,6 @@ package org.apache.ignite.internal.sql.engine.exec.exp.agg;
 
 import static org.apache.calcite.sql.type.SqlTypeName.ANY;
 import static org.apache.calcite.sql.type.SqlTypeName.BIGINT;
-import static org.apache.calcite.sql.type.SqlTypeName.BOOLEAN;
 import static org.apache.calcite.sql.type.SqlTypeName.DECIMAL;
 import static org.apache.calcite.sql.type.SqlTypeName.DOUBLE;
 import static org.apache.calcite.sql.type.SqlTypeName.VARBINARY;
@@ -31,7 +30,7 @@ import java.util.Comparator;
 import java.util.List;
 import java.util.function.IntFunction;
 import java.util.function.Supplier;
-import org.apache.calcite.DataContexts;
+import org.apache.calcite.DataContext;
 import org.apache.calcite.avatica.util.ByteString;
 import org.apache.calcite.rel.core.AggregateCall;
 import org.apache.calcite.rel.type.RelDataType;
@@ -69,11 +68,11 @@ public class Accumulators {
     /**
      * Returns a supplier that creates a accumulator functions for the given 
aggregate call.
      */
-    public Supplier<Accumulator> accumulatorFactory(AggregateCall call, 
RelDataType inputType) {
-        return accumulatorFunctionFactory(call, inputType);
+    public Supplier<Accumulator> accumulatorFactory(DataContext context, 
AggregateCall call, RelDataType inputType) {
+        return accumulatorFunctionFactory(context, call, inputType);
     }
 
-    private Supplier<Accumulator> accumulatorFunctionFactory(AggregateCall 
call, RelDataType inputType) {
+    private Supplier<Accumulator> accumulatorFunctionFactory(DataContext 
context, AggregateCall call, RelDataType inputType) {
         // Update documentation in IgniteCustomType when you add an aggregate
         // that can work for any type out of the box.
         switch (call.getAggregation().getName()) {
@@ -99,9 +98,8 @@ public class Accumulators {
                 assert call.rexList.size() == 1 : "Incorrect number of 
pre-operands for LiteralAgg: " + call + ", input: " + inputType;
                 RexNode lit = call.rexList.get(0);
                 assert lit instanceof RexLiteral : "Non-literal argument for 
LiteralAgg: " + call + ", argument: " + lit;
-                assert lit.getType().getSqlTypeName() == BOOLEAN : 
"Unsupported argument for LiteralAgg: " + call + ", argument: " + lit;
 
-                return LiteralVal.newAccumulator((RexLiteral) lit);
+                return LiteralVal.newAccumulator(context, (RexLiteral) lit);
             default:
                 throw new AssertionError(call.getAggregation().getName());
         }
@@ -288,12 +286,12 @@ public class Accumulators {
          * @param literal Literal.
          * @return Accumulator factory function.
          */
-        public static Supplier<Accumulator> newAccumulator(RexLiteral literal) 
{
+        public static Supplier<Accumulator> newAccumulator(DataContext 
context, RexLiteral literal) {
             Class<?> javaClass = (Class<?>) 
Commons.typeFactory().getJavaClass(literal.getType());
             if (javaClass.isPrimitive()) {
                 javaClass = Primitives.wrap(javaClass);
             }
-            Object value = RexUtils.literalValue(DataContexts.EMPTY, literal, 
javaClass);
+            Object value = RexUtils.literalValue(context, literal, javaClass);
 
             return () -> new LiteralVal(literal.getType(), value);
         }
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/agg/AccumulatorsFactory.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/agg/AccumulatorsFactory.java
index d1eba8ad448..7f28df0fbb9 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/agg/AccumulatorsFactory.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/agg/AccumulatorsFactory.java
@@ -189,18 +189,18 @@ public class AccumulatorsFactory<RowT> {
         /** {@inheritDoc} */
         @Override
         public AccumulatorWrapper<RowT> apply(ExecutionContext<RowT> context) {
-            Accumulator accumulator = accumulator();
+            Accumulator accumulator = accumulator(context);
 
             return new AccumulatorWrapperImpl<>(context, accumulator, call, 
inAdapter, outAdapter);
         }
 
-        private Accumulator accumulator() {
+        private Accumulator accumulator(DataContext context) {
             if (accFactory != null) {
                 return accFactory.get();
             }
 
             // init factory and adapters
-            accFactory = accumulators.accumulatorFactory(call, inputRowType);
+            accFactory = accumulators.accumulatorFactory(context, call, 
inputRowType);
             Accumulator accumulator = accFactory.get();
 
             inAdapter = createInAdapter(accumulator);
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/PlanUtils.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/PlanUtils.java
index 4d7af9d0c14..209ea7acc06 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/PlanUtils.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/PlanUtils.java
@@ -30,7 +30,6 @@ import org.apache.calcite.sql.fun.SqlSumAggFunction;
 import org.apache.calcite.sql.type.SqlTypeName;
 import org.apache.calcite.util.ImmutableBitSet;
 import org.apache.calcite.util.mapping.Mapping;
-import org.apache.ignite.internal.sql.engine.exec.exp.agg.Accumulator;
 import org.apache.ignite.internal.sql.engine.exec.exp.agg.Accumulators;
 import org.apache.ignite.internal.sql.engine.type.IgniteTypeFactory;
 
@@ -132,7 +131,6 @@ public class PlanUtils {
 
         for (int i = 0; i < aggregateCalls.size(); i++) {
             AggregateCall call = aggregateCalls.get(i);
-            Accumulator acc = accumulators.accumulatorFactory(call, 
inputType).get();
             RelDataType fieldType;
             // For a decimal type Accumulator::returnType returns a type with 
default precision and scale,
             // that can cause precision loss when a tuple is sent over the 
wire by an exchanger/outbox.
@@ -141,7 +139,7 @@ public class PlanUtils {
             if (call.getType().getSqlTypeName().allowsScale()) {
                 fieldType = call.type;
             } else {
-                fieldType = acc.returnType(typeFactory);
+                fieldType = call.getAggregation().inferReturnType(typeFactory, 
List.of(call.getType()));
             }
             String fieldName = "_ACC" + i;
 
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/exp/agg/LiteralValAccumulatorTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/exp/agg/LiteralValAccumulatorTest.java
index 81787ea03e4..767503946df 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/exp/agg/LiteralValAccumulatorTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/exp/agg/LiteralValAccumulatorTest.java
@@ -20,6 +20,7 @@ package org.apache.ignite.internal.sql.engine.exec.exp.agg;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.util.function.Supplier;
+import org.apache.calcite.DataContexts;
 import 
org.apache.ignite.internal.sql.engine.exec.exp.agg.Accumulators.LiteralVal;
 import org.apache.ignite.internal.sql.engine.util.Commons;
 import org.apache.ignite.internal.testframework.BaseIgniteAbstractTest;
@@ -48,7 +49,7 @@ public class LiteralValAccumulatorTest extends 
BaseIgniteAbstractTest {
     }
 
     private StatefulAccumulator newCall(boolean literal) {
-        Supplier<Accumulator> supplier = 
LiteralVal.newAccumulator(Commons.rexBuilder().makeLiteral(literal));
+        Supplier<Accumulator> supplier = 
LiteralVal.newAccumulator(DataContexts.EMPTY, 
Commons.rexBuilder().makeLiteral(literal));
         return new StatefulAccumulator(supplier);
     }
 }
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/util/PlanUtilsTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/util/PlanUtilsTest.java
index ac13578f9d8..057df67802e 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/util/PlanUtilsTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/util/PlanUtilsTest.java
@@ -22,6 +22,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import com.google.common.collect.ImmutableList;
 import java.util.Arrays;
 import java.util.List;
+import org.apache.calcite.DataContexts;
 import org.apache.calcite.rel.RelCollations;
 import org.apache.calcite.rel.core.AggregateCall;
 import org.apache.calcite.rel.type.RelDataType;
@@ -53,7 +54,7 @@ public class PlanUtilsTest {
                 .build();
 
         AggregateCall call1 = 
newCall(typeFactory.createSqlType(SqlTypeName.BIGINT));
-        Accumulator acc1 = accumulators.accumulatorFactory(call1, 
inputType).get();
+        Accumulator acc1 = accumulators.accumulatorFactory(DataContexts.EMPTY, 
call1, inputType).get();
 
         RelDataType expectedType = new RelDataTypeFactory.Builder(typeFactory)
                 .add("f1", typeFactory.createSqlType(SqlTypeName.INTEGER))
@@ -83,7 +84,7 @@ public class PlanUtilsTest {
                 .build();
 
         AggregateCall call1 = 
newCall(typeFactory.createSqlType(SqlTypeName.BIGINT));
-        Accumulator acc1 = accumulators.accumulatorFactory(call1, 
inputType).get();
+        Accumulator acc1 = accumulators.accumulatorFactory(DataContexts.EMPTY, 
call1, inputType).get();
 
         RelDataType expectedType = new RelDataTypeFactory.Builder(typeFactory)
                 .add("f1", typeFactory.createSqlType(SqlTypeName.INTEGER))

Reply via email to