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/10/04 07:30:40 UTC
[ignite-3] branch main updated: IGNITE-15668 Commented code without
ticket link in ignite-calcite (#371)
This is an automated email from the ASF dual-hosted git repository.
tledkov 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 a970223 IGNITE-15668 Commented code without ticket link in ignite-calcite (#371)
a970223 is described below
commit a9702234d3a535d537f55853e8062d6a833cc5b6
Author: korlov42 <ko...@gridgain.com>
AuthorDate: Mon Oct 4 10:30:37 2021 +0300
IGNITE-15668 Commented code without ticket link in ignite-calcite (#371)
---
.../calcite/AbstractBasicIntegrationTest.java | 10 --
.../ignite/internal/calcite/ITFunctionsTest.java | 127 ++++++++++++---------
.../ignite/internal/calcite/ITMetadataTest.java | 9 ++
.../internal/calcite/ITMixedQueriesTest.java | 26 -----
.../ignite/internal/calcite/util/QueryChecker.java | 38 ++++--
5 files changed, 112 insertions(+), 98 deletions(-)
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/AbstractBasicIntegrationTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/AbstractBasicIntegrationTest.java
index 69008a4..75fb4d2 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/AbstractBasicIntegrationTest.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/AbstractBasicIntegrationTest.java
@@ -126,16 +126,6 @@ public class AbstractBasicIntegrationTest {
LOG.info("End tearDown()");
}
-// /** */
-// protected void cleanQueryPlanCache() {
-// for (Ignite ign : G.allGrids()) {
-// CalciteQueryProcessor qryProc = (CalciteQueryProcessor)Commons.lookupComponent(
-// ((IgniteEx)ign).context(), QueryEngine.class);
-//
-// qryProc.queryPlanCache().clear();
-// }
-// }
-
/** */
protected QueryChecker assertQuery(String qry) {
return new QueryChecker(qry) {
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/ITFunctionsTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/ITFunctionsTest.java
index 125b28d..b7c7af7 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/ITFunctionsTest.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/ITFunctionsTest.java
@@ -23,7 +23,13 @@ import java.sql.Timestamp;
import java.util.List;
import java.util.function.LongFunction;
+import org.apache.ignite.internal.schema.configuration.SchemaConfigurationConverter;
import org.apache.ignite.lang.IgniteInternalException;
+import org.apache.ignite.schema.SchemaBuilders;
+import org.apache.ignite.schema.definition.ColumnType;
+import org.apache.ignite.schema.definition.TableDefinition;
+import org.apache.ignite.table.RecordView;
+import org.apache.ignite.table.Tuple;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
@@ -121,61 +127,72 @@ public class ITFunctionsTest extends AbstractBasicIntegrationTest {
assertEquals("Increment can't be 0", ex.getMessage());
}
-// /**
-// * Important! Don`t change query call sequence in this test. This also tests correctness of
-// * {@link org.apache.ignite.internal.processors.query.calcite.exec.exp.ExpressionFactoryImpl#SCALAR_CACHE} usage.
-// */
-// @Test
-// public void testRangeWithCache() throws Exception {
-// IgniteCache<Integer, Integer> cache = grid(0).getOrCreateCache(
-// new CacheConfiguration<Integer, Integer>("test")
-// .setBackups(1)
-// .setIndexedTypes(Integer.class, Integer.class)
-// );
-//
-// for (int i = 0; i < 100; i++)
-// cache.put(i, i);
-//
-// awaitPartitionMapExchange();
-//
-// // Correlated INNER join.
-// assertQuery("SELECT t._val FROM \"test\".Integer t WHERE t._val < 5 AND " +
-// "t._key in (SELECT x FROM table(system_range(t._val, t._val))) ")
-// .returns(0)
-// .returns(1)
-// .returns(2)
-// .returns(3)
-// .returns(4)
-// .check();
-//
-// // Correlated LEFT joins.
-// assertQuery("SELECT t._val FROM \"test\".Integer t WHERE t._val < 5 AND " +
-// "EXISTS (SELECT x FROM table(system_range(t._val, t._val)) WHERE mod(x, 2) = 0) ")
-// .returns(0)
-// .returns(2)
-// .returns(4)
-// .check();
-//
-// assertQuery("SELECT t._val FROM \"test\".Integer t WHERE t._val < 5 AND " +
-// "NOT EXISTS (SELECT x FROM table(system_range(t._val, t._val)) WHERE mod(x, 2) = 0) ")
-// .returns(1)
-// .returns(3)
-// .check();
-//
-// assertEquals(0, qryEngine.query(null, "PUBLIC",
-// "SELECT t._val FROM \"test\".Integer t WHERE " +
-// "EXISTS (SELECT x FROM table(system_range(t._val, null))) ").get(0).getAll().size());
-//
-// // Non-correlated join.
-// assertQuery("SELECT t._val FROM \"test\".Integer t JOIN table(system_range(1, 50)) as r ON t._key = r.x " +
-// "WHERE mod(r.x, 10) = 0")
-// .returns(10)
-// .returns(20)
-// .returns(30)
-// .returns(40)
-// .returns(50)
-// .check();
-// }
+ /** */
+ @Test
+ public void testRangeWithCache() {
+ TableDefinition tblDef = SchemaBuilders.tableBuilder("PUBLIC", "TEST")
+ .columns(
+ SchemaBuilders.column("ID", ColumnType.INT32).asNonNull().build(),
+ SchemaBuilders.column("VAL", ColumnType.INT32).asNonNull().build()
+ )
+ .withPrimaryKey("ID")
+ .build();
+
+ String tblName = tblDef.canonicalName();
+
+ RecordView<Tuple> tbl = CLUSTER_NODES.get(0).tables().createTable(tblDef.canonicalName(), tblCh ->
+ SchemaConfigurationConverter.convert(tblDef, tblCh)
+ .changeReplicas(1)
+ .changePartitions(10)
+ ).recordView();
+
+ try {
+
+ for (int i = 0; i < 100; i++)
+ tbl.insert(Tuple.create().set("ID", i).set("VAL", i));
+
+ // Correlated INNER join.
+ assertQuery("SELECT t.val FROM test t WHERE t.val < 5 AND " +
+ "t.id in (SELECT x FROM table(system_range(t.val, t.val))) ")
+ .returns(0)
+ .returns(1)
+ .returns(2)
+ .returns(3)
+ .returns(4)
+ .check();
+
+ // Correlated LEFT joins.
+ assertQuery("SELECT t.val FROM test t WHERE t.val < 5 AND " +
+ "EXISTS (SELECT x FROM table(system_range(t.val, t.val)) WHERE mod(x, 2) = 0) ")
+ .returns(0)
+ .returns(2)
+ .returns(4)
+ .check();
+
+ assertQuery("SELECT t.val FROM test t WHERE t.val < 5 AND " +
+ "NOT EXISTS (SELECT x FROM table(system_range(t.val, t.val)) WHERE mod(x, 2) = 0) ")
+ .returns(1)
+ .returns(3)
+ .check();
+
+ assertQuery("SELECT t.val FROM test t WHERE " +
+ "EXISTS (SELECT x FROM table(system_range(t.val, null))) ")
+ .check();
+
+ // Non-correlated join.
+ assertQuery("SELECT t.val FROM test t JOIN table(system_range(1, 50)) as r ON t.id = r.x " +
+ "WHERE mod(r.x, 10) = 0")
+ .returns(10)
+ .returns(20)
+ .returns(30)
+ .returns(40)
+ .returns(50)
+ .check();
+ }
+ finally {
+ CLUSTER_NODES.get(0).tables().dropTable(tblName);
+ }
+ }
/** */
@Test
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/ITMetadataTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/ITMetadataTest.java
index 86bc68a..d5492bc 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/ITMetadataTest.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/ITMetadataTest.java
@@ -69,4 +69,13 @@ public class ITMetadataTest extends AbstractBasicIntegrationTest {
assertQuery("select 1, -1, 'some string' from person").columnNames("1", "-1", "'some string'").check();
}
+
+ /** */
+ @Test
+ public void infixTypeCast() {
+ assertQuery("select id, id::tinyint as tid, id::smallint as sid, id::varchar as vid from person")
+ .columnNames("ID", "TID", "SID", "VID")
+ .columnTypes(Integer.class, Byte.class, Short.class, String.class)
+ .check();
+ }
}
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/ITMixedQueriesTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/ITMixedQueriesTest.java
index e32f899..4722277 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/ITMixedQueriesTest.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/ITMixedQueriesTest.java
@@ -267,32 +267,6 @@ public class ITMixedQueriesTest extends AbstractBasicIntegrationTest {
assertQuery(selectAllQry).columnNames("ID", "VAL").check();
}
-// /**
-// * Verifies infix cast operator.
-// */
-// @Test
-// public void testInfixTypeCast() {
-// sql("drop table if exists test_tbl");
-// sql("create table test_tbl(id int primary key, val varchar)");
-//
-// // Await for PME, see details here: https://issues.apache.org/jira/browse/IGNITE-14974
-// awaitPartitionMapExchange();
-//
-// QueryEngine engineSrv = Commons.lookupComponent(grid(1).context(), QueryEngine.class);
-//
-// FieldsQueryCursor<List<?>> cur = engineSrv.query(null, "PUBLIC",
-// "select id, id::tinyint as tid, id::smallint as sid, id::varchar as vid from test_tbl").get(0);
-//
-// assertThat(cur, CoreMatchers.instanceOf(QueryCursorEx.class));
-//
-// QueryCursorEx<?> qCur = (QueryCursorEx<?>)cur;
-//
-// assertThat(qCur.fieldsMeta().get(0).fieldTypeName(), equalTo(Integer.class.getName()));
-// assertThat(qCur.fieldsMeta().get(1).fieldTypeName(), equalTo(Byte.class.getName()));
-// assertThat(qCur.fieldsMeta().get(2).fieldTypeName(), equalTo(Short.class.getName()));
-// assertThat(qCur.fieldsMeta().get(3).fieldTypeName(), equalTo(String.class.getName()));
-// }
-
/** Quantified predicates test. */
@Disabled("https://issues.apache.org/jira/browse/IGNITE-13159")
@Test
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/util/QueryChecker.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/util/QueryChecker.java
index f92c462..43aeae7 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/util/QueryChecker.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/util/QueryChecker.java
@@ -17,6 +17,7 @@
package org.apache.ignite.internal.calcite.util;
+import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -27,8 +28,10 @@ import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
+import org.apache.calcite.rel.type.RelDataTypeField;
import org.apache.ignite.internal.processors.query.calcite.QueryProcessor;
import org.apache.ignite.internal.processors.query.calcite.SqlCursor;
+import org.apache.ignite.internal.processors.query.calcite.type.IgniteTypeFactory;
import org.apache.ignite.internal.util.CollectionUtils;
import org.apache.ignite.internal.util.Cursor;
import org.hamcrest.CoreMatchers;
@@ -39,6 +42,7 @@ import org.jetbrains.annotations.Nullable;
import static org.apache.ignite.internal.calcite.util.Commons.getAllFromCursor;
import static org.apache.ignite.internal.util.ArrayUtils.OBJECT_EMPTY_ARRAY;
import static org.apache.ignite.internal.util.ArrayUtils.nullOrEmpty;
+import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.fail;
@@ -223,6 +227,9 @@ public abstract class QueryChecker {
private List<String> expectedColumnNames;
/** */
+ private List<Type> expectedColumnTypes;
+
+ /** */
private boolean ordered;
/** */
@@ -273,6 +280,13 @@ public abstract class QueryChecker {
}
/** */
+ public QueryChecker columnTypes(Type... columns) {
+ expectedColumnTypes = Arrays.asList(columns);
+
+ return this;
+ }
+
+ /** */
public QueryChecker matches(Matcher<String>... planMatcher) {
Collections.addAll(planMatchers, planMatcher);
@@ -310,14 +324,24 @@ public abstract class QueryChecker {
List<SqlCursor<List<?>>> cursors =
qryProc.query( "PUBLIC", qry, params);
- Cursor<List<?>> cur = cursors.get(0);
+ SqlCursor<List<?>> cur = cursors.get(0);
-// if (expectedColumnNames != null) {
-// List<String> colNames = IntStream.range(0, cur.getColumnsCount())
-// .mapToObj(cur::getFieldName).collect(Collectors.toList());
-//
-// assertThat("Column names don't match", colNames, equalTo(expectedColumnNames));
-// }
+ if (expectedColumnNames != null) {
+ List<String> colNames = cur.getColumnMetadata().rowType().getFieldNames();
+
+ assertThat("Column names don't match", colNames, equalTo(expectedColumnNames));
+ }
+
+ if (expectedColumnTypes != null) {
+ IgniteTypeFactory typeFactory = new IgniteTypeFactory();
+
+ List<Type> colNames = cur.getColumnMetadata().rowType().getFieldList().stream()
+ .map(RelDataTypeField::getType)
+ .map(typeFactory::getResultClass)
+ .collect(Collectors.toList());
+
+ assertThat("Column types don't match", colNames, equalTo(expectedColumnTypes));
+ }
List<List<?>> res = getAllFromCursor(cur);