@Override public Void visitGroupByOperator(GroupByOperator op, Pair<LogicalVariable, LogicalVariable> pair) throws AlgebricksException { subst(pair.first, pair.second, op.getGroupByList()); subst(pair.first, pair.second, op.getDecorList()); substInNestedPlans(pair.first, pair.second, op); substVarTypes(op, pair); return null; }
@Override public Void visitAggregateOperator(AggregateOperator op, Pair<LogicalVariable, LogicalVariable> pair) throws AlgebricksException { substAssignVariables(op.getVariables(), op.getExpressions(), pair); substVarTypes(op, pair); return null; }
@Override public Void visitScriptOperator(ScriptOperator op, Pair<LogicalVariable, LogicalVariable> pair) throws AlgebricksException { substInArray(op.getInputVariables(), pair.first, pair.second); substInArray(op.getOutputVariables(), pair.first, pair.second); substVarTypes(op, pair); return null; }
@Override public Void visitProjectOperator(ProjectOperator op, Pair<LogicalVariable, LogicalVariable> pair) throws AlgebricksException { List<LogicalVariable> usedVariables = op.getVariables(); int n = usedVariables.size(); for (int i = 0; i < n; i++) { LogicalVariable v = usedVariables.get(i); if (v.equals(pair.first)) { usedVariables.set(i, pair.second); } } substVarTypes(op, pair); return null; }
frameOffset.substituteVar(pair.first, pair.second); substAssignVariables(op.getVariables(), op.getExpressions(), pair); substInNestedPlans(pair.first, pair.second, op); substVarTypes(op, pair); return null;
@Override public Void visitLeftOuterUnnestMapOperator(LeftOuterUnnestMapOperator op, Pair<LogicalVariable, LogicalVariable> pair) throws AlgebricksException { substituteVarsForAbstractUnnestMapOp(op, pair); return null; }
@Override public Void visitLeftOuterUnnestOperator(LeftOuterUnnestOperator op, Pair<LogicalVariable, LogicalVariable> pair) throws AlgebricksException { return visitUnnestNonMapOperator(op, pair); }
@Override public Void visitSubplanOperator(SubplanOperator op, Pair<LogicalVariable, LogicalVariable> pair) throws AlgebricksException { substInNestedPlans(pair.first, pair.second, op); return null; }
public static void substituteVariables(ILogicalOperator op, LogicalVariable v1, LogicalVariable v2, boolean goThroughNts, ITypingContext ctx) throws AlgebricksException { ILogicalOperatorVisitor<Void, Pair<LogicalVariable, LogicalVariable>> visitor = new SubstituteVariableVisitor(goThroughNts, ctx); op.accept(visitor, new Pair<LogicalVariable, LogicalVariable>(v1, v2)); }
private void substituteVarsForAbstractUnnestMapOp(AbstractUnnestMapOperator op, Pair<LogicalVariable, LogicalVariable> pair) throws AlgebricksException { List<LogicalVariable> variables = op.getVariables(); for (int i = 0; i < variables.size(); i++) { if (variables.get(i) == pair.first) { variables.set(i, pair.second); return; } } op.getExpressionRef().getValue().substituteVar(pair.first, pair.second); substVarTypes(op, pair); }
@Override public Void visitUnnestMapOperator(UnnestMapOperator op, Pair<LogicalVariable, LogicalVariable> pair) throws AlgebricksException { substituteVarsForAbstractUnnestMapOp(op, pair); if (op.getSelectCondition() != null) { op.getSelectCondition().getValue().substituteVar(pair.first, pair.second); } return null; }
@Override public Void visitUnnestOperator(UnnestOperator op, Pair<LogicalVariable, LogicalVariable> pair) throws AlgebricksException { return visitUnnestNonMapOperator(op, pair); }
private Void visitUnnestNonMapOperator(AbstractUnnestNonMapOperator op, Pair<LogicalVariable, LogicalVariable> pair) throws AlgebricksException { List<LogicalVariable> variables = op.getVariables(); for (int i = 0; i < variables.size(); i++) { if (variables.get(i) == pair.first) { variables.set(i, pair.second); return null; } } op.getExpressionRef().getValue().substituteVar(pair.first, pair.second); substVarTypes(op, pair); return null; }
@Override public Void visitRunningAggregateOperator(RunningAggregateOperator op, Pair<LogicalVariable, LogicalVariable> pair) throws AlgebricksException { substAssignVariables(op.getVariables(), op.getExpressions(), pair); substVarTypes(op, pair); return null; }
@Override public Void visitInnerJoinOperator(InnerJoinOperator op, Pair<LogicalVariable, LogicalVariable> pair) throws AlgebricksException { op.getCondition().getValue().substituteVar(pair.first, pair.second); substVarTypes(op, pair); return null; }
@Override public Void visitAssignOperator(AssignOperator op, Pair<LogicalVariable, LogicalVariable> pair) throws AlgebricksException { substAssignVariables(op.getVariables(), op.getExpressions(), pair); // Substitute variables stored in ordering property if (op.getExplicitOrderingProperty() != null) { List<OrderColumn> orderColumns = op.getExplicitOrderingProperty().getOrderColumns(); for (int i = 0; i < orderColumns.size(); i++) { OrderColumn oc = orderColumns.get(i); if (oc.getColumn().equals(pair.first)) { orderColumns.set(i, new OrderColumn(pair.second, oc.getOrder())); } } } substVarTypes(op, pair); return null; }
@Override public Void visitDistinctOperator(DistinctOperator op, Pair<LogicalVariable, LogicalVariable> pair) throws AlgebricksException { for (Mutable<ILogicalExpression> eRef : op.getExpressions()) { eRef.getValue().substituteVar(pair.first, pair.second); } substVarTypes(op, pair); return null; }
@Override public Void visitLeftOuterJoinOperator(LeftOuterJoinOperator op, Pair<LogicalVariable, LogicalVariable> pair) throws AlgebricksException { op.getCondition().getValue().substituteVar(pair.first, pair.second); substVarTypes(op, pair); return null; }
@Override public Void visitDataScanOperator(DataSourceScanOperator op, Pair<LogicalVariable, LogicalVariable> pair) throws AlgebricksException { List<LogicalVariable> variables = op.getVariables(); for (int i = 0; i < variables.size(); i++) { if (variables.get(i) == pair.first) { variables.set(i, pair.second); return null; } } if (op.getSelectCondition() != null) { op.getSelectCondition().getValue().substituteVar(pair.first, pair.second); } substVarTypes(op, pair); return null; }
@Override public Void visitOrderOperator(OrderOperator op, Pair<LogicalVariable, LogicalVariable> pair) throws AlgebricksException { for (Pair<IOrder, Mutable<ILogicalExpression>> oe : op.getOrderExpressions()) { oe.second.getValue().substituteVar(pair.first, pair.second); } substVarTypes(op, pair); return null; }