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())))))
         );
     }
 

Reply via email to