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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]