@Override public Node process(Node node, @Nullable Void context) { Node result = super.process(node, context); nodes.add(node); return result; } }.process(tree, null);
@Override protected R visitCoalesceExpression(CoalesceExpression node, C context) { for (Expression operand : node.getOperands()) { process(operand, context); } return null; }
@Override protected R visitGroupingOperation(GroupingOperation node, C context) { for (Expression columnArgument : node.getGroupingColumns()) { process(columnArgument, context); } return null; }
@Override protected R visitSubqueryExpression(SubqueryExpression node, C context) { return process(node.getQuery(), context); }
@Override protected R visitValues(Values node, C context) { for (Expression row : node.getRows()) { process(row, context); } return null; }
@Override protected R visitRow(Row node, C context) { for (Expression expression : node.getItems()) { process(expression, context); } return null; }
@Override protected R visitUnnest(Unnest node, C context) { for (Expression expression : node.getExpressions()) { process(expression, context); } return null; }
@Override protected R visitGroupBy(GroupBy node, C context) { for (GroupingElement groupingElement : node.getGroupingElements()) { process(groupingElement, context); } return null; }
@Override protected R visitCreateView(CreateView node, C context) { process(node.getQuery(), context); return null; }
@Override protected R visitExists(ExistsPredicate node, C context) { process(node.getSubquery(), context); return null; }
@Override protected R visitExtract(Extract node, C context) { return process(node.getExpression(), context); }
@Override protected R visitArithmeticUnary(ArithmeticUnaryExpression node, C context) { return process(node.getValue(), context); }
@Override protected R visitSetOperation(SetOperation node, C context) { for (Relation relation : node.getRelations()) { process(relation, context); } return null; }