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