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

alexpl pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new c92eba5a373 IGNITE-23251 SQL Calcite: Add number of passed query 
parameters validation - Fixes #11547.
c92eba5a373 is described below

commit c92eba5a373fcec58b1c992348725950714e437e
Author: Vladimir Steshin <[email protected]>
AuthorDate: Fri Apr 4 10:27:27 2025 +0300

    IGNITE-23251 SQL Calcite: Add number of passed query parameters validation 
- Fixes #11547.
    
    Signed-off-by: Aleksey Plekhanov <[email protected]>
---
 .../query/calcite/CalciteQueryProcessor.java       |  31 +++-
 .../calcite/sql/stat/IgniteSqlStatisticsTable.java |   7 +-
 .../CalciteBasicSecondaryIndexIntegrationTest.java |   4 +-
 .../DynamicParametersIntegrationTest.java          | 179 ++++++++++++++++++++-
 .../integration/LimitOffsetIntegrationTest.java    |   4 +-
 .../QueryWithPartitionsIntegrationTest.java        |  18 ++-
 .../query/calcite/planner/PlannerTest.java         |   2 +-
 7 files changed, 224 insertions(+), 21 deletions(-)

diff --git 
a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/CalciteQueryProcessor.java
 
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/CalciteQueryProcessor.java
index f060d32c011..9d63235146f 100644
--- 
a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/CalciteQueryProcessor.java
+++ 
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/CalciteQueryProcessor.java
@@ -417,7 +417,7 @@ public class CalciteQueryProcessor extends 
GridProcessorAdapter implements Query
         String sql,
         Object... params
     ) throws IgniteSQLException {
-        return parseAndProcessQuery(qryCtx, executionSvc::executePlan, 
schemaName, sql, params);
+        return parseAndProcessQuery(qryCtx, executionSvc::executePlan, 
schemaName, sql, true, params);
     }
 
     /** {@inheritDoc} */
@@ -426,7 +426,7 @@ public class CalciteQueryProcessor extends 
GridProcessorAdapter implements Query
         String schemaName,
         String sql
     ) throws IgniteSQLException {
-        return parseAndProcessQuery(ctx, (qry, plan) -> fieldsMeta(plan, 
true), schemaName, sql);
+        return parseAndProcessQuery(ctx, (qry, plan) -> fieldsMeta(plan, 
true), schemaName, sql, false);
     }
 
     /** {@inheritDoc} */
@@ -435,7 +435,7 @@ public class CalciteQueryProcessor extends 
GridProcessorAdapter implements Query
         String schemaName,
         String sql
     ) throws IgniteSQLException {
-        return parseAndProcessQuery(ctx, (qry, plan) -> fieldsMeta(plan, 
false), schemaName, sql);
+        return parseAndProcessQuery(ctx, (qry, plan) -> fieldsMeta(plan, 
false), schemaName, sql, false);
     }
 
     /** {@inheritDoc} */
@@ -511,6 +511,7 @@ public class CalciteQueryProcessor extends 
GridProcessorAdapter implements Query
         BiFunction<RootQuery<Object[]>, QueryPlan, T> action,
         @Nullable String schemaName,
         String sql,
+        boolean validateParamsCnt,
         Object... params
     ) throws IgniteSQLException {
         ensureTransactionModeSupported(qryCtx);
@@ -540,6 +541,9 @@ public class CalciteQueryProcessor extends 
GridProcessorAdapter implements Query
                 IgniteQueryErrorCode.UNSUPPORTED_OPERATION);
         }
 
+        if (validateParamsCnt)
+            checkDynamicParamsCount(qryList, params);
+
         List<T> res = new ArrayList<>(qryList.size());
         List<RootQuery<Object[]>> qrys = new ArrayList<>(qryList.size());
 
@@ -565,6 +569,27 @@ public class CalciteQueryProcessor extends 
GridProcessorAdapter implements Query
         return res;
     }
 
+    /** */
+    private void checkDynamicParamsCount(SqlNode node, Object[] params) {
+        int[] maxDynParIdx = new int[] {-1};
+
+        node.accept(new SqlShuttle() {
+            @Override public SqlNode visit(SqlDynamicParam param) {
+                if (param.getIndex() > maxDynParIdx[0])
+                    maxDynParIdx[0] = param.getIndex();
+
+                return param;
+            }
+        });
+
+        int paramsCnt = params == null ? 0 : params.length;
+
+        if (paramsCnt != maxDynParIdx[0] + 1) {
+            throw new IgniteSQLException("Wrong number of query parameters. 
Expected: " + (maxDynParIdx[0] + 1) + ", passed: "
+                + paramsCnt + '.', IgniteQueryErrorCode.PARSING);
+        }
+    }
+
     /** */
     private String removeSensitive(SqlNode qry) {
         if (QueryUtils.INCLUDE_SENSITIVE)
diff --git 
a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/stat/IgniteSqlStatisticsTable.java
 
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/stat/IgniteSqlStatisticsTable.java
index b589552534d..d81f959d309 100644
--- 
a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/stat/IgniteSqlStatisticsTable.java
+++ 
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/stat/IgniteSqlStatisticsTable.java
@@ -52,10 +52,9 @@ public class IgniteSqlStatisticsTable extends SqlCall {
     ) {
         super(pos);
         this.name = name;
-        if (!F.isEmpty(columns))
-            this.columns = SqlNodeList.of(columns.getParserPosition(), 
columns.getList());
-        else
-            this.columns = null;
+        this.columns = F.isEmpty(columns)
+            ? SqlNodeList.EMPTY
+            : SqlNodeList.of(columns.getParserPosition(), columns.getList());
     }
 
     /** {@inheritDoc} */
diff --git 
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/CalciteBasicSecondaryIndexIntegrationTest.java
 
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/CalciteBasicSecondaryIndexIntegrationTest.java
index 28146315298..7016a65f3d1 100644
--- 
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/CalciteBasicSecondaryIndexIntegrationTest.java
+++ 
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/CalciteBasicSecondaryIndexIntegrationTest.java
@@ -572,8 +572,8 @@ public class CalciteBasicSecondaryIndexIntegrationTest 
extends AbstractBasicInte
     /** */
     @Test
     public void testIndexedFieldGreaterThanFilter() {
-        assertQuery("SELECT * FROM Developer WHERE depId>21")
-            .withParams(3)
+        assertQuery("SELECT * FROM Developer WHERE depId>?")
+            .withParams(21)
             .matches(containsIndexScan("PUBLIC", "DEVELOPER", DEPID_IDX))
             .returns(23, "Musorgskii", 22, "", -1)
             .check();
diff --git 
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/DynamicParametersIntegrationTest.java
 
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/DynamicParametersIntegrationTest.java
index af3f92dd25b..daa39e374a0 100644
--- 
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/DynamicParametersIntegrationTest.java
+++ 
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/DynamicParametersIntegrationTest.java
@@ -35,6 +35,22 @@ import org.junit.Test;
  *  Dynamic parameters types inference test.
  */
 public class DynamicParametersIntegrationTest extends 
AbstractBasicIntegrationTest {
+    /** {@inheritDoc} */
+    @Override public void beforeTest() throws Exception {
+        super.beforeTest();
+
+        sql("CREATE TABLE t1 (id INTEGER PRIMARY KEY, val1 INTEGER NOT NULL, 
val2 INTEGER)");
+        sql("CREATE TABLE t2 (id2 INTEGER PRIMARY KEY, val3 INTEGER NOT NULL, 
val4 INTEGER)");
+    }
+
+    /** {@inheritDoc} */
+    @Override public void afterTest() throws Exception {
+        sql("DROP TABLE IF EXISTS t1");
+        sql("DROP TABLE IF EXISTS t2");
+
+        super.afterTest();
+    }
+
     /** */
     @Test
     public void testMetadataTypesForDynamicParameters() {
@@ -65,9 +81,9 @@ public class DynamicParametersIntegrationTest extends 
AbstractBasicIntegrationTe
     /** */
     @Test
     public void testMissedValue() {
-        assertThrows("SELECT ?", IgniteSQLException.class, "Illegal use of 
dynamic parameter");
+        assertUnexpectedNumberOfParameters("SELECT ?");
 
-        assertThrows("SELECT ?, ?", IgniteSQLException.class, "Illegal use of 
dynamic parameter", "arg0");
+        assertUnexpectedNumberOfParameters("SELECT ?, ?", "arg0");
     }
 
     /** */
@@ -160,4 +176,163 @@ public class DynamicParametersIntegrationTest extends 
AbstractBasicIntegrationTe
         assertQuery("SELECT 
UPPER(TYPEOF(?))").withParams(1).returns("INTEGER").check();
         assertQuery("SELECT 
UPPER(TYPEOF(?))").withParams(1d).returns("DOUBLE").check();
     }
+
+    /** */
+    @Test
+    public void testWrongParametersNumberInSelectList() {
+        assertUnexpectedNumberOfParameters("SELECT 1", 1);
+        assertUnexpectedNumberOfParameters("SELECT ?", 1, 2);
+        assertUnexpectedNumberOfParameters("SELECT COALESCE(?)");
+        assertUnexpectedNumberOfParameters("SELECT COALESCE(?)", 1, 2);
+        assertUnexpectedNumberOfParameters("SELECT * FROM (VALUES(1, 2, ?)) 
t1");
+        assertUnexpectedNumberOfParameters("SELECT * FROM (VALUES(1, 2, ?)) 
t1", 1, 2);
+    }
+
+    /** */
+    @Test
+    public void testDynamicParametersInExplain() {
+        sql("EXPLAIN PLAN FOR SELECT * FROM t1 WHERE id > ?", 1);
+    }
+
+    /** */
+    @Test
+    public void testWrongParametersNumberInDelete() {
+        assertUnexpectedNumberOfParameters("DELETE FROM t1 WHERE id = 1 AND 
val1=1", 1);
+        assertUnexpectedNumberOfParameters("DELETE FROM t1 WHERE id = ? AND 
val1=1", 1, 2);
+        assertUnexpectedNumberOfParameters("DELETE FROM t1 WHERE id = ? AND 
val1=1");
+    }
+
+    /** */
+    @Test
+    public void testWrongParametersNumberInInsert() {
+        assertUnexpectedNumberOfParameters("INSERT INTO t1 VALUES(1, 2, 3)", 
1);
+        assertUnexpectedNumberOfParameters("INSERT INTO t1 VALUES(1, 2, ?)", 
1, 2);
+        assertUnexpectedNumberOfParameters("INSERT INTO t1 VALUES(1, 2, ?)");
+    }
+
+    /** */
+    @Test
+    public void testWrongParametersNumberInExplain() {
+        assertUnexpectedNumberOfParameters("EXPLAIN PLAN FOR SELECT * FROM t1 
WHERE id > ?");
+        assertUnexpectedNumberOfParameters("EXPLAIN PLAN FOR SELECT * FROM t1 
WHERE id > ?", 1, 2);
+    }
+
+    /** */
+    @Test
+    public void testWrongParametersNumberInSubqueries() {
+        assertUnexpectedNumberOfParameters("SELECT * FROM t1 where val1 in 
(SELECT val2 from t1 where val2>? and val2!=val1)", 1, 2);
+        assertUnexpectedNumberOfParameters("SELECT * FROM t1 where val1 in 
(SELECT val2 from t1 where val2>? and val2!=val1)");
+        assertUnexpectedNumberOfParameters("SELECT * FROM t1 where val1 in 
(SELECT val2 from t1 where val2>? and val2!=val1 " +
+            "LIMIT ? OFFSET 1)", 1, 2, 3);
+        assertUnexpectedNumberOfParameters("SELECT * FROM t1 where val1 in 
(SELECT val2 from t1 where val2>? and val2!=val1 " +
+            "LIMIT ? OFFSET ?)", 1);
+        assertUnexpectedNumberOfParameters("SELECT * FROM t1 where val1 in 
(SELECT val2 from t1 where val2>? and val2!=val1 " +
+                "LIMIT ? OFFSET ?) LIMIT ?",
+            1, 2, 3);
+
+        assertUnexpectedNumberOfParameters("SELECT * FROM t1 where val1 in 
(SELECT val3 from t2 where val3>? and val4!=val1)", 1, 2);
+        assertUnexpectedNumberOfParameters("SELECT * FROM t1 where val1 in 
(SELECT val3 from t2 where val3>? and val4!=val1)");
+        assertUnexpectedNumberOfParameters("SELECT * FROM t1 where val1 in 
(SELECT val3 from t2 where val3>? and val4!=val1 " +
+            "LIMIT ? OFFSET 1)", 1, 2, 3);
+        assertUnexpectedNumberOfParameters("SELECT * FROM t1 where val1 in 
(SELECT val3 from t2 where val3>? and val4!=val1 " +
+            "LIMIT ? OFFSET ?)", 1);
+        assertUnexpectedNumberOfParameters("SELECT * FROM t1 where val1 in 
(SELECT val3 from t2 where val3>? and val4!=val1 " +
+            "LIMIT ? OFFSET ?) LIMIT ?", 1, 2, 3);
+    }
+
+    /** */
+    @Test
+    public void testWrongParametersNumberInJoins() {
+        assertUnexpectedNumberOfParameters("SELECT val1, val3 FROM t1 JOIN t2 
on val2=val4", 1);
+        assertUnexpectedNumberOfParameters("SELECT val1 * ?, val3 FROM t1 JOIN 
t2 on val2=val4*?");
+        assertUnexpectedNumberOfParameters("SELECT val1 * ?, val3 FROM t1 JOIN 
t2 on val2=val4*?", 1);
+        assertUnexpectedNumberOfParameters("SELECT val1 * ?, val3 FROM t1 JOIN 
t2 on val2=val4*?", 1, 2, 3);
+
+        assertUnexpectedNumberOfParameters("SELECT val1 * ?, val3 FROM t1 JOIN 
t2 on val2=val4*? WHERE val3>? ORDER BY " +
+            "val1 LIMIT ? OFFSET ?", 1, 2, 3, 4);
+        assertUnexpectedNumberOfParameters("SELECT val1 * ?, val3 FROM t1 JOIN 
t2 on val2=val4*? WHERE val3>? ORDER BY " +
+            "val1 LIMIT ? OFFSET ?", 1, 2, 3, 4, 5, 6);
+    }
+
+    /** */
+    @Test
+    public void testWrongParametersNumberInUnion() {
+        assertUnexpectedNumberOfParameters("SELECT val1 FROM t1 where val2=? 
UNION ALL SELECT val3 FROM t2 where val4=?", 1);
+        assertUnexpectedNumberOfParameters("SELECT val1 FROM t1 where val2=? 
UNION ALL SELECT val3 FROM t2 where val4=?", 1, 2, 3);
+        assertUnexpectedNumberOfParameters("SELECT val1 FROM t1 where val2=? 
UNION ALL SELECT val3 FROM t2 where val4=?");
+
+        assertUnexpectedNumberOfParameters("SELECT val1 FROM t1 where val2=? 
UNION ALL SELECT val3 FROM t2 where val4=? " +
+            "LIMIT 5 OFFSET 3", 1);
+        assertUnexpectedNumberOfParameters("SELECT val1 FROM t1 where val2=? 
UNION ALL SELECT val3 FROM t2 where val4=? " +
+            "LIMIT 5 OFFSET 3", 1, 2, 3);
+        assertUnexpectedNumberOfParameters("SELECT val1 FROM t1 where val2=? 
UNION ALL SELECT val3 FROM t2 where val4=? " +
+            "LIMIT 5 OFFSET 3");
+
+        assertUnexpectedNumberOfParameters("SELECT val1 FROM t1 where val2=? 
UNION ALL SELECT val3 FROM t2 where val4=? " +
+            "LIMIT ? OFFSET ?", 1, 2, 3);
+        assertUnexpectedNumberOfParameters("SELECT val1 FROM t1 where val2=? 
UNION ALL SELECT val3 FROM t2 where val4=? " +
+            "LIMIT ? OFFSET ?", 1, 2, 3, 4, 5);
+        assertUnexpectedNumberOfParameters("SELECT val1 FROM t1 where val2=? 
UNION ALL SELECT val3 FROM t2 where val4=? " +
+            "LIMIT ? OFFSET ?");
+
+        assertUnexpectedNumberOfParameters("SELECT val1 FROM t1 where 
val2=(SELECT val3 from T2 where val3 > val1 + ? LIMIT ?) " +
+            "UNION ALL SELECT val3 FROM t2 where val4=?");
+        assertUnexpectedNumberOfParameters("SELECT val1 FROM t1 where 
val2=(SELECT val3 from T2 where val3 > val1 + ? LIMIT ?) " +
+            "UNION ALL SELECT val3 FROM t2 where val4=?", 1, 2);
+        assertUnexpectedNumberOfParameters("SELECT val1 FROM t1 where 
val2=(SELECT val3 from T2 where val3 > val1 + ? LIMIT ?) " +
+            "UNION ALL SELECT val3 FROM t2 where val4=?", 1, 2, 3, 4);
+
+        assertUnexpectedNumberOfParameters("SELECT val1 FROM t1 where val2=?+1 
and val1>? UNION ALL SELECT val3 FROM t2 " +
+            "where val4=? LIMIT 1 OFFSET 2");
+        assertUnexpectedNumberOfParameters("SELECT val1 FROM t1 where val2=?+1 
and val1>? UNION ALL SELECT val3 FROM t2 " +
+            "where val4=? LIMIT 1 OFFSET 2", 1);
+        assertUnexpectedNumberOfParameters("SELECT val1 FROM t1 where val2=?+1 
and val1>? UNION ALL SELECT val3 FROM t2 " +
+            "where val4=? LIMIT 1 OFFSET 2", 1, 2, 3, 4);
+    }
+
+    /** */
+    @Test
+    public void testWrongParametersNumberInSeveralQueries() {
+        assertUnexpectedNumberOfParameters("SELECT val1 FROM t1 where val2=?; 
SELECT val3 FROM t2 where val4=?");
+        assertUnexpectedNumberOfParameters("SELECT val1 FROM t1 where val2=?; 
SELECT val3 FROM t2 where val4=?", 1);
+        assertUnexpectedNumberOfParameters("SELECT val1 FROM t1 where val2=?; 
SELECT val3 FROM t2 where val4=?", 1);
+        assertUnexpectedNumberOfParameters("SELECT val1 FROM t1 where val2=?; 
SELECT val3 FROM t2 where val4=?", 1, 2, 3);
+
+        assertUnexpectedNumberOfParameters("SELECT val1 FROM t1 where val2=? 
LIMIT ? OFFSET ?; SELECT val3 FROM t2 " +
+            "where val4=? LIMIT ?", 1, 2, 3, 4);
+        assertUnexpectedNumberOfParameters("SELECT val1 FROM t1 where val2=? 
LIMIT ? OFFSET ?; SELECT val3 FROM t2 " +
+            "where val4=? LIMIT ?", 1, 2, 3, 4, 5, 6);
+    }
+
+    /** */
+    @Test
+    public void testWrongParametersNumberInLimitOffset() {
+        assertUnexpectedNumberOfParameters("SELECT * FROM t1 LIMIT 1", 1);
+        assertUnexpectedNumberOfParameters("SELECT * FROM t1 LIMIT ?", 1, 2);
+        assertUnexpectedNumberOfParameters("SELECT * FROM t1 LIMIT ?");
+
+        assertUnexpectedNumberOfParameters("SELECT * FROM t1 LIMIT 1 OFFSET 
1", 1);
+        assertUnexpectedNumberOfParameters("SELECT * FROM t1 LIMIT ? OFFSET 
?", 1, 2, 3);
+        assertUnexpectedNumberOfParameters("SELECT * FROM t1 LIMIT ? OFFSET 
?", 1);
+        assertUnexpectedNumberOfParameters("SELECT * FROM t1 LIMIT 1 OFFSET 
?", 1, 2);
+        assertUnexpectedNumberOfParameters("SELECT * FROM t1 LIMIT 1 OFFSET 
?");
+
+        assertUnexpectedNumberOfParameters("SELECT * FROM t1 OFFSET 1", 1);
+        assertUnexpectedNumberOfParameters("SELECT * FROM t1 OFFSET ?", 1, 2);
+        assertUnexpectedNumberOfParameters("SELECT * FROM t1 OFFSET ?");
+    }
+
+    /** */
+    @Test
+    public void testWrongParametersNumberInUpdate() {
+        assertUnexpectedNumberOfParameters("UPDATE t1 SET val1=? WHERE id = 
1");
+        assertUnexpectedNumberOfParameters("UPDATE t1 SET val1=? WHERE id = 
1", 1, 2);
+        assertUnexpectedNumberOfParameters("UPDATE t1 SET val1=10 WHERE id = 
?");
+        assertUnexpectedNumberOfParameters("UPDATE t1 SET val1=10 WHERE id = 
?", 1, 2);
+    }
+
+    /** */
+    private void assertUnexpectedNumberOfParameters(String qry, Object... 
params) {
+        assertThrows(qry, IgniteSQLException.class, "Wrong number of query 
parameters", params);
+    }
 }
diff --git 
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/LimitOffsetIntegrationTest.java
 
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/LimitOffsetIntegrationTest.java
index 89b2d73ffda..428d4d273d9 100644
--- 
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/LimitOffsetIntegrationTest.java
+++ 
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/LimitOffsetIntegrationTest.java
@@ -225,7 +225,7 @@ public class LimitOffsetIntegrationTest extends 
AbstractBasicIntegrationTransact
 
         log.info("SQL: " + sql + (param ? "params=" + Arrays.toString(params) 
: ""));
 
-        List<List<?>> res = sql(sql, params);
+        List<List<?>> res = sql(sql, param ? params : X.EMPTY_OBJECT_ARRAY);
 
         assertEquals("Invalid results size. [rows=" + rows + ", limit=" + lim 
+ ", off=" + off
             + ", res=" + res.size() + ']', expectedSize(rows, lim, off), 
res.size());
@@ -253,7 +253,7 @@ public class LimitOffsetIntegrationTest extends 
AbstractBasicIntegrationTransact
     /**
      * @param lim Limit.
      * @param off Offset.
-     * @param param Flag to place limit/offset  by parameter or literal.
+     * @param param Flag to place limit/offset by parameter or literal.
      * @return SQL query string.
      */
     private String createSql(int lim, int off, boolean param, boolean sorted) {
diff --git 
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/QueryWithPartitionsIntegrationTest.java
 
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/QueryWithPartitionsIntegrationTest.java
index 660ee91dc3e..e5e68334974 100644
--- 
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/QueryWithPartitionsIntegrationTest.java
+++ 
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/QueryWithPartitionsIntegrationTest.java
@@ -34,6 +34,7 @@ import 
org.apache.ignite.internal.processors.cache.GridCacheContext;
 import org.apache.ignite.internal.processors.query.QueryContext;
 import org.apache.ignite.internal.processors.query.calcite.QueryChecker;
 import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.internal.util.typedef.X;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -96,6 +97,9 @@ public class QueryWithPartitionsIntegrationTest extends 
AbstractBasicIntegration
 
     /** {@inheritDoc} */
     @Override protected List<List<?>> sql(String sql, Object... params) {
+        if (params.length == 1 && params[0] == X.EMPTY_OBJECT_ARRAY)
+            params = X.EMPTY_OBJECT_ARRAY;
+
         return sql(local ? grid(0) : client, sql, params);
     }
 
@@ -138,7 +142,7 @@ public class QueryWithPartitionsIntegrationTest extends 
AbstractBasicIntegration
     /** */
     @Test
     public void testSingle() {
-        Stream.of(Pair.of("SELECT * FROM T1", null),
+        Stream.of(Pair.of("SELECT * FROM T1", X.EMPTY_OBJECT_ARRAY),
                   Pair.of("SELECT * FROM T1 WHERE ID < ?", ENTRIES_COUNT))
             .forEach(query -> {
                 long cnt = sql(query.left, query.right).size();
@@ -146,7 +150,7 @@ public class QueryWithPartitionsIntegrationTest extends 
AbstractBasicIntegration
                 assertEquals(cacheSize("T1_CACHE", parts), cnt);
             });
 
-        Stream.of(Pair.of("SELECT count(*) FROM T1", null),
+        Stream.of(Pair.of("SELECT count(*) FROM T1", X.EMPTY_OBJECT_ARRAY),
                   Pair.of("SELECT count(*) FROM T1 WHERE ID < ?", 
ENTRIES_COUNT))
             .forEach(query -> {
                 Long cnt = (Long)sql(query.left, query.right).get(0).get(0);
@@ -158,7 +162,7 @@ public class QueryWithPartitionsIntegrationTest extends 
AbstractBasicIntegration
     /** */
     @Test
     public void testReplicated() {
-        Stream.of(Pair.of("select * from DICT", null),
+        Stream.of(Pair.of("select * from DICT", X.EMPTY_OBJECT_ARRAY),
                   Pair.of("select * from DICT where id < ?", ENTRIES_COUNT))
             .forEach(query -> {
                 List<List<?>> res = sql(query.left, query.right);
@@ -166,7 +170,7 @@ public class QueryWithPartitionsIntegrationTest extends 
AbstractBasicIntegration
                 assertEquals(res.size(), cacheSize("DICT_CACHE"));
             });
 
-        Stream.of(Pair.of("select count(*) from DICT", null),
+        Stream.of(Pair.of("select count(*) from DICT", X.EMPTY_OBJECT_ARRAY),
                   Pair.of("select count(*) from DICT where id < ?", 
ENTRIES_COUNT))
             .forEach(query -> {
                 Long size = (Long)sql(query.left, query.right).get(0).get(0);
@@ -201,7 +205,7 @@ public class QueryWithPartitionsIntegrationTest extends 
AbstractBasicIntegration
     @Test
     public void testInsertFromSelect() {
         Stream.of(Pair.of("SELECT ID, IDX_VAL, VAL FROM T1 WHERE ID < ?", 
ENTRIES_COUNT),
-                  Pair.of("SELECT ID, IDX_VAL, VAL FROM T1", null))
+                  Pair.of("SELECT ID, IDX_VAL, VAL FROM T1", 
X.EMPTY_OBJECT_ARRAY))
             .forEach(query -> {
                 try {
                     sql("CREATE TABLE T3(ID INT PRIMARY KEY, IDX_VAL VARCHAR, 
VAL VARCHAR) WITH cache_name=t3_cache,backups=1");
@@ -219,7 +223,7 @@ public class QueryWithPartitionsIntegrationTest extends 
AbstractBasicIntegration
     /** */
     @Test
     public void testDelete() {
-        Stream.of(Pair.of("DELETE FROM T3 WHERE ID < ?", ENTRIES_COUNT), 
Pair.of("DELETE FROM T3", null))
+        Stream.of(Pair.of("DELETE FROM T3 WHERE ID < ?", ENTRIES_COUNT), 
Pair.of("DELETE FROM T3", X.EMPTY_OBJECT_ARRAY))
             .forEach(query -> {
                 try {
                     sql("CREATE TABLE T3(ID INT PRIMARY KEY, IDX_VAL VARCHAR, 
VAL VARCHAR) WITH cache_name=t3_cache,backups=1");
@@ -245,7 +249,7 @@ public class QueryWithPartitionsIntegrationTest extends 
AbstractBasicIntegration
     @Test
     public void testCreateTableAsSelect() {
         Stream.of(Pair.of("SELECT ID, IDX_VAL, VAL FROM T1 WHERE ID < ?", 
ENTRIES_COUNT),
-                  Pair.of("SELECT ID, IDX_VAL, VAL FROM T1", null))
+                  Pair.of("SELECT ID, IDX_VAL, VAL FROM T1", 
X.EMPTY_OBJECT_ARRAY))
             .forEach(query -> {
                 try {
                     sql("CREATE TABLE T3(ID, IDX_VAL, VAL) WITH 
cache_name=t3_cache,backups=1 AS " + query.left, query.right);
diff --git 
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/planner/PlannerTest.java
 
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/planner/PlannerTest.java
index b3b52d4b840..1627da8b900 100644
--- 
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/planner/PlannerTest.java
+++ 
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/planner/PlannerTest.java
@@ -281,7 +281,7 @@ public class PlannerTest extends AbstractPlannerTest {
 
         String sql = "SELECT (ID0 + ID1) AS RES FROM PUBLIC.TEST_TABLE";
 
-        List<Object[]> res = executeQuery(publicSchema, sql, -10);
+        List<Object[]> res = executeQuery(publicSchema, sql);
 
         assertFalse(res.isEmpty());
 

Reply via email to