@Override public void getUsedVariables(Collection<LogicalVariable> vars) { for (Mutable<ILogicalExpression> arg : arguments) { arg.getValue().getUsedVariables(vars); } }
@Override public void getUsedVariablesExceptNestedPlans(Collection<LogicalVariable> vars) { for (Pair<LogicalVariable, Mutable<ILogicalExpression>> g : gByList) { g.second.getValue().getUsedVariables(vars); } for (Pair<LogicalVariable, Mutable<ILogicalExpression>> g : decorList) { g.second.getValue().getUsedVariables(vars); } }
@Override public Void visitDistinctOperator(DistinctOperator op, Void arg) { for (Mutable<ILogicalExpression> eRef : op.getExpressions()) { eRef.getValue().getUsedVariables(usedVariables); } return null; }
@Override public Void visitLimitOperator(LimitOperator op, Void arg) { op.getMaxObjects().getValue().getUsedVariables(usedVariables); ILogicalExpression offsetExpr = op.getOffset().getValue(); if (offsetExpr != null) { offsetExpr.getUsedVariables(usedVariables); } return null; }
@Override public Void visitTokenizeOperator(TokenizeOperator op, Void arg) { for (Mutable<ILogicalExpression> e : op.getPrimaryKeyExpressions()) { e.getValue().getUsedVariables(usedVariables); } for (Mutable<ILogicalExpression> e : op.getSecondaryKeyExpressions()) { e.getValue().getUsedVariables(usedVariables); } return null; }
public static IAType constantRuntimeResultType(ILogicalExpression expr, IOptimizationContext context, IVariableTypeEnvironment typeEnvironment) throws AlgebricksException { Set<LogicalVariable> usedVariables = new HashSet<>(); expr.getUsedVariables(usedVariables); if (usedVariables.size() > 0) { return null; } return (IAType) context.getExpressionTypeComputer().getType(expr, context.getMetadataProvider(), typeEnvironment); }
@Override public Void visitAssignOperator(AssignOperator op, Void arg) { for (Mutable<ILogicalExpression> exprRef : op.getExpressions()) { exprRef.getValue().getUsedVariables(usedVariables); } return null; }
@Override public Void visitRunningAggregateOperator(RunningAggregateOperator op, Void arg) { for (Mutable<ILogicalExpression> exprRef : op.getExpressions()) { exprRef.getValue().getUsedVariables(usedVariables); } return null; }
@Override public Void visitForwardOperator(ForwardOperator op, Void arg) throws AlgebricksException { op.getRangeMapExpression().getValue().getUsedVariables(usedVariables); return null; }
@Override public Void visitAggregateOperator(AggregateOperator op, Void arg) { for (Mutable<ILogicalExpression> exprRef : op.getExpressions()) { exprRef.getValue().getUsedVariables(usedVariables); } return null; }
@Override public Void visitInnerJoinOperator(InnerJoinOperator op, Void arg) { op.getCondition().getValue().getUsedVariables(usedVariables); return null; }
@Override public Void visitLeftOuterJoinOperator(LeftOuterJoinOperator op, Void arg) { op.getCondition().getValue().getUsedVariables(usedVariables); return null; }
@Override public Void visitOrderOperator(OrderOperator op, Void arg) { for (Pair<IOrder, Mutable<ILogicalExpression>> oe : op.getOrderExpressions()) { oe.second.getValue().getUsedVariables(usedVariables); } return null; }
@Override public Void visitDistributeResultOperator(DistributeResultOperator op, Void arg) { for (Mutable<ILogicalExpression> expr : op.getExpressions()) { expr.getValue().getUsedVariables(usedVariables); } return null; }
@Override public Void visitUnnestOperator(UnnestOperator op, Void arg) { op.getExpressionRef().getValue().getUsedVariables(usedVariables); return null; }
@Override public Void visitSplitOperator(SplitOperator op, Void arg) throws AlgebricksException { op.getBranchingExpression().getValue().getUsedVariables(usedVariables); return null; }
@Override public Void visitLeftOuterUnnestOperator(LeftOuterUnnestOperator op, Void arg) throws AlgebricksException { op.getExpressionRef().getValue().getUsedVariables(usedVariables); return null; }
private void getUsedVarsFromExprAndFilterExpr(AbstractUnnestMapOperator op) { op.getExpressionRef().getValue().getUsedVariables(usedVariables); if (op.getAdditionalFilteringExpressions() != null) { for (Mutable<ILogicalExpression> e : op.getAdditionalFilteringExpressions()) { e.getValue().getUsedVariables(usedVariables); } } }
@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; }
private Pair<Boolean, LogicalVariable> checkUnnest(LeftOuterUnnestOperator outerUnnest) { if (outerUnnest.getPositionalVariable() != null) { return new Pair<>(false, null); } Set<LogicalVariable> varsToUnnest = new HashSet<>(); outerUnnest.getExpressionRef().getValue().getUsedVariables(varsToUnnest); if (varsToUnnest.size() > 1) { return new Pair<>(false, null); } return new Pair<>(true, varsToUnnest.iterator().next()); }