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 <[email protected]>
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 <[email protected]>
---
.../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;
}