This is an automated email from the ASF dual-hosted git repository. amashenkov pushed a commit to branch ignite-19018 in repository https://gitbox.apache.org/repos/asf/ignite-3.git
commit b967b36b331995a15167b3d4733b14039daee15f Author: amashenkov <[email protected]> AuthorDate: Tue Mar 28 15:55:58 2023 +0300 WIP. --- .../internal/sql/engine/ItCorrelatesTest.java | 1 - .../internal/sql/engine/ItCreateTableDdlTest.java | 5 ++++- .../internal/sql/engine/util/QueryChecker.java | 21 ++++++++++++++++++--- .../internal/sql/engine/exec/rel/ScanNode.java | 1 + .../sql/engine/rule/ValuesConverterRule.java | 4 ++-- .../internal/sql/engine/planner/DmlPlannerTest.java | 3 ++- 6 files changed, 27 insertions(+), 8 deletions(-) diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItCorrelatesTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItCorrelatesTest.java index c9b9ceca1f..b007f8fb0e 100644 --- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItCorrelatesTest.java +++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItCorrelatesTest.java @@ -83,7 +83,6 @@ public class ItCorrelatesTest extends ClusterPerClassIntegrationTest { * Tests resolving of collisions in correlates with correlate variables in both, left and right hands. */ @Test - @Disabled("https://issues.apache.org/jira/browse/IGNITE-19018") public void testCorrelatesCollisionRight() throws InterruptedException { sql("CREATE TABLE test1 (a INTEGER PRIMARY KEY, b INTEGER)"); sql("INSERT INTO test1 VALUES (11, 1), (12, 2), (13, 3)"); diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItCreateTableDdlTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItCreateTableDdlTest.java index e7a54f0552..0d4828d288 100644 --- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItCreateTableDdlTest.java +++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItCreateTableDdlTest.java @@ -64,8 +64,11 @@ public class ItCreateTableDdlTest extends ClusterPerClassIntegrationTest { } @Test - public void pkWithFunctionalDefault() { + public void pkWithFunctionalDefault() throws InterruptedException { sql("create table t (id varchar default gen_random_uuid primary key, val int)"); + + waitForIndex("t_PK"); + sql("insert into t (val) values (1), (2)"); var result = sql("select * from t"); diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/util/QueryChecker.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/util/QueryChecker.java index 9867b04311..0057259319 100644 --- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/util/QueryChecker.java +++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/util/QueryChecker.java @@ -262,6 +262,8 @@ public abstract class QueryChecker { private Transaction tx; + private boolean dumpPlan; + /** * Constructor. * @@ -404,6 +406,17 @@ public abstract class QueryChecker { return this; } + /** + * Print query plan to System.out. + * + * @return This. + */ + public QueryChecker dumpPlan() { + dumpPlan = true; + + return this; + } + /** * Run checks. */ @@ -424,9 +437,7 @@ public abstract class QueryChecker { + disabledRules.stream().collect(Collectors.joining("','", "/*+ DISABLE_RULE('", "') */"))); } try { - - if (!CollectionUtils.nullOrEmpty(planMatchers) || exactPlan != null) { - + if (!CollectionUtils.nullOrEmpty(planMatchers) || exactPlan != null || dumpPlan) { CompletableFuture<AsyncSqlCursor<List<Object>>> explainCursors = qryProc.querySingleAsync(sessionId, context, "EXPLAIN PLAN FOR " + qry, params); AsyncSqlCursor<List<Object>> explainCursor = await(explainCursors); @@ -434,6 +445,10 @@ public abstract class QueryChecker { String actualPlan = (String) explainRes.get(0).get(0); + if (dumpPlan) { + System.out.println("Query: " + qry + "\nPlan: " + actualPlan); + } + if (!CollectionUtils.nullOrEmpty(planMatchers)) { for (Matcher<String> matcher : planMatchers) { assertThat("Invalid plan:\n" + actualPlan, actualPlan, matcher); diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/ScanNode.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/ScanNode.java index 2fc8831073..59c8b607b3 100644 --- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/ScanNode.java +++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/ScanNode.java @@ -76,6 +76,7 @@ public class ScanNode<RowT> extends AbstractNode<RowT> implements SingleNode<Row protected void rewindInternal() { Commons.closeQuiet(it); it = null; + requested = 0; } /** {@inheritDoc} */ diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/ValuesConverterRule.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/ValuesConverterRule.java index bcade330b9..6959ec13b9 100644 --- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/ValuesConverterRule.java +++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/rule/ValuesConverterRule.java @@ -17,7 +17,7 @@ package org.apache.ignite.internal.sql.engine.rule; -import static org.apache.ignite.internal.sql.engine.trait.IgniteDistributions.single; +import static org.apache.ignite.internal.sql.engine.trait.IgniteDistributions.broadcast; import org.apache.calcite.plan.RelOptCluster; import org.apache.calcite.plan.RelOptPlanner; @@ -48,7 +48,7 @@ public class ValuesConverterRule extends AbstractIgniteConverterRule<LogicalValu protected PhysicalNode convert(RelOptPlanner planner, RelMetadataQuery mq, LogicalValues rel) { RelOptCluster cluster = rel.getCluster(); RelTraitSet traits = cluster.traitSetOf(IgniteConvention.INSTANCE) - .replace(single()); + .replace(broadcast()); return new IgniteValues(cluster, rel.getRowType(), rel.getTuples(), traits); } diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/DmlPlannerTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/DmlPlannerTest.java index 8613120468..41108b1850 100644 --- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/DmlPlannerTest.java +++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/DmlPlannerTest.java @@ -25,6 +25,7 @@ import org.apache.ignite.internal.sql.engine.framework.TestBuilders; import org.apache.ignite.internal.sql.engine.rel.IgniteExchange; import org.apache.ignite.internal.sql.engine.rel.IgniteTableModify; import org.apache.ignite.internal.sql.engine.rel.IgniteTableScan; +import org.apache.ignite.internal.sql.engine.rel.IgniteTrimExchange; import org.apache.ignite.internal.sql.engine.rel.IgniteValues; import org.apache.ignite.internal.sql.engine.schema.IgniteSchema; import org.apache.ignite.internal.sql.engine.schema.IgniteTable; @@ -66,7 +67,7 @@ public class DmlPlannerTest extends AbstractPlannerTest { nodeOrAnyChild(isInstanceOf(IgniteExchange.class) .and(e -> e.distribution().equals(IgniteDistributions.single()))) .and(nodeOrAnyChild(isInstanceOf(IgniteTableModify.class)) - .and(hasChildThat(isInstanceOf(IgniteExchange.class).and(e -> distribution.equals(e.distribution()))))) + .and(hasChildThat(isInstanceOf(IgniteTrimExchange.class).and(e -> distribution.equals(e.distribution()))))) ); }
