@Override public Void visitLeftOuterUnnestMapOperator(LeftOuterUnnestMapOperator op, Void arg) throws AlgebricksException { getUsedVarsFromExprAndFilterExpr(op); return null; }
@Override public Void visitSubplanOperator(SubplanOperator op, Void arg) throws AlgebricksException { visitNestedPlans(op); return null; }
/*** * Adds the used variables in the logical operator to the list of used variables * * @param op * The target operator * @param usedVariables * A list to be filled with variables used in the logical operator op. * @throws AlgebricksException */ public static void getUsedVariables(ILogicalOperator op, Collection<LogicalVariable> usedVariables) throws AlgebricksException { ILogicalOperatorVisitor<Void, Void> visitor = new UsedVariableVisitor(usedVariables); op.accept(visitor, null); }
@Override public Void visitGroupByOperator(GroupByOperator op, Void arg) throws AlgebricksException { visitNestedPlans(op); for (Pair<LogicalVariable, Mutable<ILogicalExpression>> g : op.getGroupByList()) { g.second.getValue().getUsedVariables(usedVariables); } for (Pair<LogicalVariable, Mutable<ILogicalExpression>> g : op.getDecorList()) { g.second.getValue().getUsedVariables(usedVariables); } return null; }
@Override public Void visitUnnestMapOperator(UnnestMapOperator op, Void arg) { getUsedVarsFromExprAndFilterExpr(op); if (op.getSelectCondition() != null) { Set<LogicalVariable> usedVariablesBySelect = new HashSet<>(); op.getSelectCondition().getValue().getUsedVariables(usedVariablesBySelect); usedVariablesBySelect.removeAll(op.getVariables()); usedVariables.addAll(usedVariablesBySelect); } return null; }
@Override public Void visitWindowOperator(WindowOperator op, Void arg) throws AlgebricksException { visitNestedPlans(op); for (Mutable<ILogicalExpression> exprRef : op.getPartitionExpressions()) { exprRef.getValue().getUsedVariables(usedVariables); } for (Pair<IOrder, Mutable<ILogicalExpression>> p : op.getOrderExpressions()) { p.second.getValue().getUsedVariables(usedVariables); } for (Pair<IOrder, Mutable<ILogicalExpression>> p : op.getFrameValueExpressions()) { p.second.getValue().getUsedVariables(usedVariables); } for (Mutable<ILogicalExpression> exprRef : op.getFrameStartExpressions()) { exprRef.getValue().getUsedVariables(usedVariables); } for (Mutable<ILogicalExpression> exprRef : op.getFrameEndExpressions()) { exprRef.getValue().getUsedVariables(usedVariables); } for (Mutable<ILogicalExpression> exprRef : op.getFrameExcludeExpressions()) { exprRef.getValue().getUsedVariables(usedVariables); } ILogicalExpression frameOffset = op.getFrameOffset().getValue(); if (frameOffset != null) { frameOffset.getUsedVariables(usedVariables); } for (Mutable<ILogicalExpression> exprRef : op.getExpressions()) { exprRef.getValue().getUsedVariables(usedVariables); } return null; }