You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by tl...@apache.org on 2021/04/27 10:39:55 UTC
[ignite] branch sql-calcite updated: IGNITE-14648 Calcite. Fallback
into h2 engine only "alter table|(create|drop) index" commands (#9043)
This is an automated email from the ASF dual-hosted git repository.
tledkov pushed a commit to branch sql-calcite
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/sql-calcite by this push:
new ea47c04 IGNITE-14648 Calcite. Fallback into h2 engine only "alter table|(create|drop) index" commands (#9043)
ea47c04 is described below
commit ea47c0421a3fc29ed6bfab714b5d8bfa50f247d6
Author: zstan <st...@gmail.com>
AuthorDate: Tue Apr 27 13:39:34 2021 +0300
IGNITE-14648 Calcite. Fallback into h2 engine only "alter table|(create|drop) index" commands (#9043)
---
.../query/calcite/exec/rel/MinusNode.java | 3 +--
.../query/calcite/exec/rel/MinusExecutionTest.java | 2 +-
.../query/calcite/jdbc/JdbcQueryTest.java | 23 +++++++++++-----------
.../processors/odbc/jdbc/JdbcRequestHandler.java | 4 ++--
.../processors/query/GridQueryProcessor.java | 15 +++++---------
5 files changed, 20 insertions(+), 27 deletions(-)
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/MinusNode.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/MinusNode.java
index 4859119..72c8025 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/MinusNode.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/MinusNode.java
@@ -337,7 +337,7 @@ public class MinusNode<Row> extends AbstractNode<Row> {
int availableRows = availableRows(entry.getValue());
- if (availableRows <= cnt){
+ if (availableRows <= cnt) {
it.remove();
if (availableRows == 0)
@@ -378,7 +378,6 @@ public class MinusNode<Row> extends AbstractNode<Row> {
cntrs[0] -= amount;
}
-
/** */
private boolean isEmpty() {
return groups.isEmpty();
diff --git a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/MinusExecutionTest.java b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/MinusExecutionTest.java
index 772c246..bb7b32c 100644
--- a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/MinusExecutionTest.java
+++ b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/MinusExecutionTest.java
@@ -153,7 +153,7 @@ public class MinusExecutionTest extends AbstractExecutionTest {
);
}
else {
- minusNode = new MinusNode<>(
+ minusNode = new MinusNode<>(
ctx,
rowType,
MAP,
diff --git a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/jdbc/JdbcQueryTest.java b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/jdbc/JdbcQueryTest.java
index 4aac4ea..164bb6d 100644
--- a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/jdbc/JdbcQueryTest.java
+++ b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/jdbc/JdbcQueryTest.java
@@ -114,7 +114,9 @@ public class JdbcQueryTest extends GridCommonAbstractTest {
"float_col FLOAT, " +
"double_col DOUBLE, " +
"time_col TIME, " +
- "timestamp_col TIMESTAMP, " +
+ "timestamp_col_14 TIMESTAMP(14), " +
+ "timestamp_col_10 TIMESTAMP(10), " +
+ "timestamp_col_def TIMESTAMP, " +
"date_col DATE, " +
"PRIMARY KEY (id));");
@@ -122,8 +124,8 @@ public class JdbcQueryTest extends GridCommonAbstractTest {
new AffinityTopologyVersion(3, 2)).get(10_000, TimeUnit.MILLISECONDS);
stmt.executeUpdate("INSERT INTO t1 (id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, " +
- "varchar_col, char_col, float_col, double_col, time_col, timestamp_col, date_col) VALUES (1, null, null, " +
- "null, null, null, null, null, null, null, null, null, null);");
+ "varchar_col, char_col, float_col, double_col, time_col, timestamp_col_14, timestamp_col_10, timestamp_col_def, date_col) " +
+ "VALUES (1, null, null, null, null, null, null, null, null, null, null, null, null, null, null);");
try (ResultSet rs = stmt.executeQuery("SELECT * FROM t1;")) {
assertTrue(rs.next());
@@ -138,17 +140,14 @@ public class JdbcQueryTest extends GridCommonAbstractTest {
assertEquals(Types.INTEGER, md.getColumnType(5));
assertEquals(Types.BIGINT, md.getColumnType(6));
assertEquals(Types.VARCHAR, md.getColumnType(7));
- // TODO https://issues.apache.org/jira/browse/IGNITE-13547 H2 maps SQL type FLOAT to Value.DOUBLE and
- // SQL type CHAR to Value.STRING_FIXED, which are maped to java classes Double/String,
- // and to Types.DOUBLE/Types.VARCHAR respectively. Calcite DDL can map this types in a different way.
- //assertEquals(Types.CHAR, md.getColumnType(8));
- //assertEquals(Types.FLOAT, md.getColumnType(9));
assertEquals(Types.VARCHAR, md.getColumnType(8));
- assertEquals(Types.DOUBLE, md.getColumnType(9));
+ assertEquals(Types.FLOAT, md.getColumnType(9));
assertEquals(Types.DOUBLE, md.getColumnType(10));
- assertEquals(Types.TIME, md.getColumnType(11));
- assertEquals(Types.TIMESTAMP, md.getColumnType(12));
- assertEquals(Types.DATE, md.getColumnType(13));
+ assertEquals(Types.INTEGER, md.getColumnType(11));
+ assertEquals(Types.BIGINT, md.getColumnType(12));
+ assertEquals(Types.BIGINT, md.getColumnType(13));
+ assertEquals(Types.BIGINT, md.getColumnType(14));
+ assertEquals(Types.INTEGER, md.getColumnType(15));
}
stmt.execute("DROP TABLE t1");
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/jdbc/JdbcRequestHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/jdbc/JdbcRequestHandler.java
index 769e357..99a6200 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/jdbc/JdbcRequestHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/jdbc/JdbcRequestHandler.java
@@ -116,7 +116,7 @@ import static org.apache.ignite.internal.processors.odbc.jdbc.JdbcRequest.QRY_CL
import static org.apache.ignite.internal.processors.odbc.jdbc.JdbcRequest.QRY_EXEC;
import static org.apache.ignite.internal.processors.odbc.jdbc.JdbcRequest.QRY_FETCH;
import static org.apache.ignite.internal.processors.odbc.jdbc.JdbcRequest.QRY_META;
-import static org.apache.ignite.internal.processors.query.GridQueryProcessor.shouldRedirectToCalcite;
+import static org.apache.ignite.internal.processors.query.GridQueryProcessor.executeWithExperimentalEngine;
/**
* JDBC request handler.
@@ -787,7 +787,7 @@ public class JdbcRequestHandler implements ClientListenerRequestHandler {
/** */
private List<FieldsQueryCursor<List<?>>> querySqlFields(SqlFieldsQueryEx qry, GridQueryCancel cancel) {
if (experimentalQueryEngine != null) {
- if (shouldRedirectToCalcite(qry.getSql()))
+ if (executeWithExperimentalEngine(qry.getSql()))
return experimentalQueryEngine.query(QueryContext.of(qry, cancel), qry.getSchema(), qry.getSql(), qry.getArgs());
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
index 476495e..4659309 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
@@ -167,8 +167,8 @@ public class GridQueryProcessor extends GridProcessorAdapter {
private static final ThreadLocal<AffinityTopologyVersion> requestTopVer = new ThreadLocal<>();
/** Patter to test incoming query to decide whether this query should be executed with Calcite or H2. */
- private static final Pattern IS_SELECT_OR_EXPLAIN_PATTERN =
- Pattern.compile("^\\s*(select|explain plan)", CASE_INSENSITIVE);
+ public static final Pattern H2_REDIRECTION_RULES =
+ Pattern.compile("\\s*(alter\\s*table|create\\s*index|drop\\s*index)", CASE_INSENSITIVE);
/** For tests. */
public static Class<? extends GridQueryIndexing> idxCls;
@@ -2838,7 +2838,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
throw new CacheException("Execution of local SqlFieldsQuery on client node disallowed.");
if (experimentalQueryEngine != null && useExperimentalSqlEngine) {
- if (shouldRedirectToCalcite(qry.getSql()))
+ if (executeWithExperimentalEngine(qry.getSql()))
return experimentalQueryEngine.query(QueryContext.of(qry), qry.getSchema(), qry.getSql(), X.EMPTY_OBJECT_ARRAY);
}
@@ -2872,11 +2872,6 @@ public class GridQueryProcessor extends GridProcessorAdapter {
});
}
- /** Calcite baseb engine is available. */
- public boolean useExperimentalEngine() {
- return experimentalQueryEngine != null;
- }
-
/**
* @param cctx Cache context.
* @param qry Query.
@@ -3634,8 +3629,8 @@ public class GridQueryProcessor extends GridProcessorAdapter {
* @param sql Query to execute.
* @return {@code true} if the given query should be executed with Calcite-based engine.
*/
- public static boolean shouldRedirectToCalcite(String sql) {
- return IS_SELECT_OR_EXPLAIN_PATTERN.matcher(sql).find();
+ public static boolean executeWithExperimentalEngine(String sql) {
+ return !H2_REDIRECTION_RULES.matcher(sql).find();
}
/**