You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ko...@apache.org on 2022/06/14 12:37:31 UTC

[ignite] branch master updated: IGNITE-17131 Wrong result if subquery is on the left child of LEFT JOIN operator (#10077)

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

korlov 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 e0210d287a1 IGNITE-17131 Wrong result if subquery is on the left child of LEFT JOIN operator (#10077)
e0210d287a1 is described below

commit e0210d287a1486457ec2a593b0ddd0d80262d6ea
Author: korlov42 <ko...@gridgain.com>
AuthorDate: Tue Jun 14 15:37:25 2022 +0300

    IGNITE-17131 Wrong result if subquery is on the left child of LEFT JOIN operator (#10077)
---
 .../processors/query/h2/GridSubqueryJoinOptimizer.java      |  2 +-
 .../query/h2/GridSubqueryJoinOptimizerSelfTest.java         | 13 +++++++++++++
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/GridSubqueryJoinOptimizer.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/GridSubqueryJoinOptimizer.java
index c039471a5e7..3e45770fca4 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/GridSubqueryJoinOptimizer.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/GridSubqueryJoinOptimizer.java
@@ -402,7 +402,7 @@ public class GridSubqueryJoinOptimizer {
         GridSqlAst where = subSel.where();
 
         if (where != null) {
-            if (target != null) {
+            if (target instanceof GridSqlJoin && childInd != GridSqlJoin.LEFT_TABLE_CHILD) {
                 GridSqlJoin join = (GridSqlJoin)target;
 
                 join.child(GridSqlJoin.ON_CHILD, new GridSqlOperation(AND, join.on(), where));
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/GridSubqueryJoinOptimizerSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/GridSubqueryJoinOptimizerSelfTest.java
index 197d877fe6d..5849d1b8aea 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/GridSubqueryJoinOptimizerSelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/GridSubqueryJoinOptimizerSelfTest.java
@@ -804,6 +804,19 @@ public class GridSubqueryJoinOptimizerSelfTest extends GridCommonAbstractTest {
         check(resSql, 1);
     }
 
+    /**
+     * Case with left join where subquery is on the left shoulder.
+     */
+    @Test
+    public void testOptimizationLeftJoinSubqueryOnLeft() {
+        String outerSqlTemplate = "SELECT * FROM (%s) AS t1 LEFT JOIN dep AS t2 ON t1.dep_id = t2.id;";
+        String subSql = "SELECT * FROM emp WHERE id % 2 = 1";
+
+        String resSql = String.format(outerSqlTemplate, subSql);
+
+        check(resSql, 1);
+    }
+
     /**
      * Test should verify all cases where subquery should not be rewrited.
      */