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

jakevin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 6f9afbd74f [fix](Nereids): just allow crossjoin empty condition. 
(#14893)
6f9afbd74f is described below

commit 6f9afbd74fac78d609792f4cd25e069d16ef36f7
Author: jakevin <jakevin...@gmail.com>
AuthorDate: Sat Dec 10 15:32:49 2022 +0800

    [fix](Nereids): just allow crossjoin empty condition. (#14893)
---
 .../apache/doris/nereids/parser/LogicalPlanBuilder.java    |  9 ++++++++-
 .../org/apache/doris/nereids/parser/NereidsParserTest.java | 14 +++++++++++++-
 .../doris/nereids/rules/analysis/AnalyzeSubQueryTest.java  |  7 ++-----
 .../doris/nereids/rules/analysis/RegisterCTETest.java      |  5 ++---
 4 files changed, 25 insertions(+), 10 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
index 4a6b38239d..f37ceccdb2 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
@@ -1020,8 +1020,10 @@ public class LogicalPlanBuilder extends 
DorisParserBaseVisitor<Object> {
                 joinType = JoinType.LEFT_OUTER_JOIN;
             } else if (join.joinType().RIGHT() != null) {
                 joinType = JoinType.RIGHT_OUTER_JOIN;
-            } else {
+            } else if (join.joinType().INNER() != null) {
                 joinType = JoinType.INNER_JOIN;
+            } else {
+                joinType = JoinType.CROSS_JOIN;
             }
 
             // TODO: natural join, lateral join, using join, union join
@@ -1038,6 +1040,11 @@ public class LogicalPlanBuilder extends 
DorisParserBaseVisitor<Object> {
                                             Collectors.toList());
                     return new LogicalJoin(JoinType.USING_JOIN, ids, last, 
plan(join.relationPrimary()));
                 }
+            } else {
+                // keep same with original planner, allow cross/inner join
+                if (!joinType.isInnerOrCrossJoin()) {
+                    throw new ParseException("on mustn't be empty except for 
cross/inner join", join);
+                }
             }
 
             last = new LogicalJoin<>(joinType, ExpressionUtils.EMPTY_CONDITION,
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/parser/NereidsParserTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/parser/NereidsParserTest.java
index 573ee9e905..e43e62f85d 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/parser/NereidsParserTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/parser/NereidsParserTest.java
@@ -170,7 +170,7 @@ public class NereidsParserTest extends ParserTestBase {
         String innerJoin2 = "SELECT t1.a FROM t1 JOIN t2 ON t1.id = t2.id;";
         logicalPlan = nereidsParser.parseSingle(innerJoin2);
         logicalJoin = (LogicalJoin) logicalPlan.child(0);
-        Assertions.assertEquals(JoinType.INNER_JOIN, 
logicalJoin.getJoinType());
+        Assertions.assertEquals(JoinType.CROSS_JOIN, 
logicalJoin.getJoinType());
 
         String leftJoin1 = "SELECT t1.a FROM t1 LEFT JOIN t2 ON t1.id = 
t2.id;";
         logicalPlan = nereidsParser.parseSingle(leftJoin1);
@@ -218,6 +218,18 @@ public class NereidsParserTest extends ParserTestBase {
         Assertions.assertEquals(JoinType.CROSS_JOIN, 
logicalJoin.getJoinType());
     }
 
+    @Test
+    void parseJoinEmptyConditionError() {
+        parsePlan("select * from t1 LEFT JOIN t2")
+                .assertThrowsExactly(ParseException.class)
+                .assertMessageEquals("\n"
+                        + "on mustn't be empty except for cross/inner 
join(line 1, pos 17)\n"
+                        + "\n"
+                        + "== SQL ==\n"
+                        + "select * from t1 LEFT JOIN t2\n"
+                        + "-----------------^^^\n");
+    }
+
     @Test
     public void parseDecimal() {
         String f1 = "SELECT col1 * 0.267081789095306 FROM t";
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/AnalyzeSubQueryTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/AnalyzeSubQueryTest.java
index 8d15f83607..899d91ef18 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/AnalyzeSubQueryTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/AnalyzeSubQueryTest.java
@@ -27,7 +27,6 @@ import org.apache.doris.nereids.trees.expressions.EqualTo;
 import org.apache.doris.nereids.trees.expressions.ExprId;
 import org.apache.doris.nereids.trees.expressions.NamedExpressionUtil;
 import org.apache.doris.nereids.trees.expressions.SlotReference;
-import org.apache.doris.nereids.trees.plans.JoinType;
 import org.apache.doris.nereids.trees.plans.physical.PhysicalPlan;
 import org.apache.doris.nereids.types.BigIntType;
 import org.apache.doris.nereids.util.FieldChecker;
@@ -132,7 +131,7 @@ public class AnalyzeSubQueryTest extends TestWithFeService 
implements PatternMat
                 .applyTopDown(new LogicalSubQueryAliasToLogicalProject())
                 .matchesFromRoot(
                     logicalProject(
-                        logicalJoin(
+                        crossLogicalJoin(
                             logicalProject(
                                 logicalOlapScan()
                             ),
@@ -147,7 +146,6 @@ public class AnalyzeSubQueryTest extends TestWithFeService 
implements PatternMat
                                 new SlotReference(new ExprId(1), "score", 
BigIntType.INSTANCE, true, ImmutableList.of("TT2"))))
                             )
                         )
-                        .when(FieldChecker.check("joinType", 
JoinType.INNER_JOIN))
                         .when(FieldChecker.check("otherJoinConjuncts",
                                 ImmutableList.of(new EqualTo(
                                         new SlotReference(new ExprId(2), "id", 
BigIntType.INSTANCE, true, ImmutableList.of("TT1")),
@@ -169,13 +167,12 @@ public class AnalyzeSubQueryTest extends 
TestWithFeService implements PatternMat
                 .applyTopDown(new LogicalSubQueryAliasToLogicalProject())
                 .matchesFromRoot(
                     logicalProject(
-                        logicalJoin(
+                        crossLogicalJoin(
                             logicalOlapScan(),
                             logicalProject(
                                 logicalOlapScan()
                             )
                         )
-                        .when(FieldChecker.check("joinType", 
JoinType.INNER_JOIN))
                         .when(FieldChecker.check("otherJoinConjuncts", 
ImmutableList.of(new EqualTo(
                                 new SlotReference(new ExprId(0), "id", 
BigIntType.INSTANCE, true, ImmutableList.of("default_cluster:test", "T1")),
                                 new SlotReference(new ExprId(2), "id", 
BigIntType.INSTANCE, true, ImmutableList.of("T2")))))
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/RegisterCTETest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/RegisterCTETest.java
index d1d2564103..560dfcec7f 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/RegisterCTETest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/RegisterCTETest.java
@@ -236,15 +236,14 @@ public class RegisterCTETest extends TestWithFeService 
implements PatternMatchSu
                 .analyze(sql4)
                 .matchesFromRoot(
                     logicalProject(
-                        logicalJoin(
+                        crossLogicalJoin(
                             logicalSubQueryAlias(
                                 logicalProject().when(p -> 
p.getProjects().equals(ImmutableList.of(skAlias)))
                             ).when(a -> a.getAlias().equals("cte1")),
                             logicalSubQueryAlias(
                                 logicalProject().when(p -> 
p.getProjects().equals(ImmutableList.of(skInCTE2)))
                             ).when(a -> a.getAlias().equals("cte2"))
-                        ).when(FieldChecker.check("joinType", 
JoinType.INNER_JOIN))
-                            .when(j -> 
j.getOtherJoinConjuncts().equals(ImmutableList.of(new EqualTo(skInCTE1, 
skInCTE2))))
+                        ).when(j -> 
j.getOtherJoinConjuncts().equals(ImmutableList.of(new EqualTo(skInCTE1, 
skInCTE2))))
                     ).when(p -> 
p.getProjects().equals(ImmutableList.of(skInCTE1, skInCTE2)))
                 );
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to