zabetak commented on code in PR #5249:
URL: https://github.com/apache/hive/pull/5249#discussion_r1670515250
##########
ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/ASTConverter.java:
##########
@@ -114,25 +115,31 @@ public class ASTConverter {
private Filter having;
private RelNode select;
private RelNode orderLimit;
+ private List<ASTNode> ctes;
private Schema schema;
private long derivedTableCount;
private PlanMapper planMapper;
- ASTConverter(RelNode root, long dtCounterInitVal, PlanMapper planMapper) {
+ ASTConverter(RelNode root, long dtCounterInitVal, PlanMapper planMapper,
List<ASTNode> ctes) {
this.root = root;
hiveAST = new HiveAST();
this.derivedTableCount = dtCounterInitVal;
this.planMapper = planMapper;
+ this.ctes = ctes;
}
public static ASTNode convert(final RelNode relNode, List<FieldSchema>
resultSchema, boolean alignColumns, PlanMapper planMapper)
throws CalciteSemanticException {
RelNode root = PlanModifierForASTConv.convertOpTree(relNode, resultSchema,
alignColumns);
- ASTConverter c = new ASTConverter(root, 0, planMapper);
- return c.convert();
+ ASTConverter c = new ASTConverter(root, 0, planMapper, new ArrayList<>());
+ ASTNode r = c.convert();
+ for (ASTNode cte : c.ctes) {
Review Comment:
The CTE declaration/query is not yet part of the ASTNode. The `ctes` list is
populated when visiting the plan (`c.convert()`) but it is not connected with
tree.
At this point, we are prepending all `WITH` clauses to the main query. The
reason we do this now and not during the traversal is because we want all
`WITH` clauses to appear at the beginning (top-level) of the query and be
visible at all (potentially nested) sub-queries .
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]