This is an automated email from the ASF dual-hosted git repository. zstan pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push: new d71c8523e1 IGNITE-18467: Sql. RexLiteral cache work incorrect for dynamic parameters in case nested function - Fixes #1481. d71c8523e1 is described below commit d71c8523e18dcc4d3c0b8b57291c439aec341cb5 Author: Yury Gerzhedovich <ygerzhedov...@gridgain.com> AuthorDate: Wed Dec 28 14:14:51 2022 +0300 IGNITE-18467: Sql. RexLiteral cache work incorrect for dynamic parameters in case nested function - Fixes #1481. Signed-off-by: zstan <stanilov...@gmail.com> --- .../internal/sql/engine/ItDynamicParameterTest.java | 3 +++ .../sql/engine/exec/exp/ExpressionFactoryImpl.java | 21 +++++++-------------- .../internal/sql/engine/prepare/CacheKey.java | 2 +- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDynamicParameterTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDynamicParameterTest.java index 7d86e946c1..f38f8fa6d1 100644 --- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDynamicParameterTest.java +++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDynamicParameterTest.java @@ -105,6 +105,9 @@ public class ItDynamicParameterTest extends AbstractBasicIntegrationTest { assertQuery("SELECT COALESCE(?, ?)").withParams("a", 10).returns("a").check(); assertQuery("SELECT COALESCE(?, ?)").withParams("a", "b").returns("a").check(); assertQuery("SELECT COALESCE(?, ?)").withParams(22, 33).returns(22).check(); + + assertQuery("SELECT UPPER(TYPEOF(?))").withParams(1).returns("INTEGER").check(); + assertQuery("SELECT UPPER(TYPEOF(?))").withParams(1d).returns("DOUBLE").check(); } // After fix the mute reason need to merge the test with above testWithDifferentParametersTypes diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/ExpressionFactoryImpl.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/ExpressionFactoryImpl.java index d33a51a090..2cc3a39d43 100644 --- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/ExpressionFactoryImpl.java +++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/ExpressionFactoryImpl.java @@ -32,7 +32,6 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.StringJoiner; import java.util.concurrent.ConcurrentMap; import java.util.function.BiPredicate; import java.util.function.Function; @@ -53,8 +52,8 @@ import org.apache.calcite.rel.core.AggregateCall; import org.apache.calcite.rel.type.RelDataType; import org.apache.calcite.rel.type.RelDataTypeFactory; import org.apache.calcite.rex.RexBuilder; -import org.apache.calcite.rex.RexCall; import org.apache.calcite.rex.RexCorrelVariable; +import org.apache.calcite.rex.RexDynamicParam; import org.apache.calcite.rex.RexFieldAccess; import org.apache.calcite.rex.RexLiteral; import org.apache.calcite.rex.RexNode; @@ -553,18 +552,6 @@ public class ExpressionFactoryImpl<RowT> implements ExpressionFactory<RowT> { continue; } - if (node instanceof RexCall) { - RexCall call = (RexCall) node; - if (!call.operands.isEmpty()) { - StringJoiner sj = new StringJoiner("[", ",", "]"); - for (RexNode rn : call.operands) { - sj.add(rn.getType().toString()); - } - - b.append(sj); - } - } - b.append(':'); b.append(node.getType().getFullTypeString()); @@ -575,6 +562,12 @@ public class ExpressionFactoryImpl<RowT> implements ExpressionFactory<RowT> { return super.visitFieldAccess(fieldAccess); } + + @Override public RexNode visitDynamicParam(RexDynamicParam dynamicParam) { + b.append(", paramType=").append(dynamicParam.getType().getFullTypeString()); + + return super.visitDynamicParam(dynamicParam); + } }.apply(node); } diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/CacheKey.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/CacheKey.java index 443d383e8e..89cd57d3a2 100644 --- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/CacheKey.java +++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/prepare/CacheKey.java @@ -80,7 +80,7 @@ public class CacheKey { if (!query.equals(cacheKey.query)) { return false; } - if (Objects.equals(contextKey, cacheKey.contextKey)) { + if (!Objects.equals(contextKey, cacheKey.contextKey)) { return false; }