[Fix](Nereids) fix leading with cte and same subqueryalias name (#34838) (#35047)

fix leading with cte and same subqueryalias name
Example:
with tbl1 as select t1.c1 from t1
select tbl2.c2 from (select / * + leading(t2 tbl1) * / tbl1.c1, t2.c2 from tbl1 join t2) as tbl2 join t3;
Reason:
in this case, before getting analyzed preprocess would change subquery tbl2 to cte plan, and this cte plan should be in upper level cte plan, but not in logical result sink plan
This commit is contained in:
LiBinfeng
2024-05-20 10:44:22 +08:00
committed by GitHub
parent 5ac4ea2cd9
commit be50139eb1
5 changed files with 2056 additions and 2 deletions

View File

@ -79,6 +79,15 @@ public class PullUpSubqueryAliasToCTE extends PlanPreprocessor {
subQueryAlias = new LogicalSubQueryAlias<>(subQueryAlias.getAlias(), newSubQueryAlias);
}
}
return visitChildren(this, logicalCTE, context);
Plan cte = visitChildren(this, logicalCTE, context);
if (!aliasQueries.isEmpty()) {
LogicalCTE newLogicalCTE = (LogicalCTE) cte;
List<LogicalSubQueryAlias<Plan>> subQueryAliasesOfCte = new ArrayList<>();
subQueryAliasesOfCte.addAll(logicalCTE.getAliasQueries());
subQueryAliasesOfCte.addAll(aliasQueries);
aliasQueries = new ArrayList<>();
return new LogicalCTE<>(subQueryAliasesOfCte, (LogicalPlan) newLogicalCTE.child());
}
return cte;
}
}