This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch dev-1.0.1
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/dev-1.0.1 by this push:
new c60ed8f18a [fix](optimizer) join reorder may cause column
non-existence problem (#10670)
c60ed8f18a is described below
commit c60ed8f18aac93fe0a515a807387502829760e48
Author: yinzhijian <[email protected]>
AuthorDate: Fri Jul 8 17:28:32 2022 +0800
[fix](optimizer) join reorder may cause column non-existence problem
(#10670)
for example:
select * from t1 inner join t2 on t1.a = t2.b inner join t3 on t3.c = t2.b;
If t3 is a large table, it will be placed first after the reorderTable,
and the problem that t2.b does not exist will occur in reanalyzing.
---
.../src/main/java/org/apache/doris/analysis/SelectStmt.java | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java
index 84710d14c3..955f9650b4 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java
@@ -817,7 +817,18 @@ public class SelectStmt extends QueryStmt {
List<Expr> candidateEqJoinPredicates =
analyzer.getEqJoinConjunctsExcludeAuxPredicates(tid);
for (Expr candidateEqJoinPredicate :
candidateEqJoinPredicates) {
List<TupleId> candidateTupleList =
Lists.newArrayList();
-
Expr.getIds(Lists.newArrayList(candidateEqJoinPredicate), candidateTupleList,
null);
+ List<Expr> candidateEqJoinPredicateList =
Lists.newArrayList(candidateEqJoinPredicate);
+ // If a large table or view has joinClause is ranked
first,
+ // and the joinClause is not judged here,
+ // the column in joinClause may not be found during
reanalyzing.
+ // for example:
+ // select * from t1 inner join t2 on t1.a = t2.b inner
join t3 on t3.c = t2.b;
+ // If t3 is a large table, it will be placed first
after the reorderTable,
+ // and the problem that t2.b does not exist will occur
in reanalyzing
+ if (candidateTableRef.getOnClause() != null) {
+
candidateEqJoinPredicateList.add(candidateTableRef.getOnClause());
+ }
+ Expr.getIds(candidateEqJoinPredicateList,
candidateTupleList, null);
int count = candidateTupleList.size();
for (TupleId tupleId : candidateTupleList) {
if (validTupleId.contains(tupleId) ||
tid.equals(tupleId)) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]