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;
         }
 

Reply via email to