printExprList(frameExcludeExpressions); Mutable<ILogicalExpression> frameOffset = op.getFrameOffset(); if (frameOffset.getValue() != null) { stringBuilder.append(") frame offset (");
public static boolean compareWindowFrameSpec(WindowOperator winOp1, WindowOperator winOp2) { return compareIOrderAndExpressions(winOp1.getFrameValueExpressions(), winOp2.getFrameValueExpressions()) && compareExpressions(winOp1.getFrameStartExpressions(), winOp2.getFrameStartExpressions()) && compareExpressions(winOp1.getFrameEndExpressions(), winOp2.getFrameEndExpressions()) && compareExpressions(winOp1.getFrameExcludeExpressions(), winOp2.getFrameExcludeExpressions()) && winOp1.getFrameExcludeNegationStartIdx() == winOp2.getFrameExcludeNegationStartIdx() && Objects.equals(winOp1.getFrameOffset().getValue(), winOp2.getFrameOffset().getValue()) && winOp1.getFrameMaxObjects() == winOp2.getFrameMaxObjects(); }
@Override public ILogicalOperator visitWindowOperator(WindowOperator op, Void arg) throws AlgebricksException { List<Mutable<ILogicalExpression>> newPartitionExprs = new ArrayList<>(); deepCopyExpressionRefs(op.getPartitionExpressions(), newPartitionExprs); List<Pair<IOrder, Mutable<ILogicalExpression>>> newOrderExprs = deepCopyOrderAndExpression(op.getOrderExpressions()); List<Pair<IOrder, Mutable<ILogicalExpression>>> newFrameValueExprs = deepCopyOrderAndExpression(op.getFrameValueExpressions()); List<Mutable<ILogicalExpression>> newFrameStartExprs = new ArrayList<>(); deepCopyExpressionRefs(newFrameStartExprs, op.getFrameStartExpressions()); List<Mutable<ILogicalExpression>> newFrameEndExprs = new ArrayList<>(); deepCopyExpressionRefs(newFrameEndExprs, op.getFrameEndExpressions()); List<Mutable<ILogicalExpression>> newFrameExclusionExprs = new ArrayList<>(); deepCopyExpressionRefs(newFrameExclusionExprs, op.getFrameExcludeExpressions()); ILogicalExpression newFrameOffset = deepCopyExpressionRef(op.getFrameOffset()).getValue(); List<LogicalVariable> newVariables = new ArrayList<>(); deepCopyVars(newVariables, op.getVariables()); List<Mutable<ILogicalExpression>> newExpressions = new ArrayList<>(); deepCopyExpressionRefs(newExpressions, op.getExpressions()); List<ILogicalPlan> newNestedPlans = new ArrayList<>(); WindowOperator newWinOp = new WindowOperator(newPartitionExprs, newOrderExprs, newFrameValueExprs, newFrameStartExprs, newFrameEndExprs, newFrameExclusionExprs, op.getFrameExcludeNegationStartIdx(), newFrameOffset, op.getFrameMaxObjects(), newVariables, newExpressions, newNestedPlans); for (ILogicalPlan nestedPlan : op.getNestedPlans()) { newNestedPlans.add(OperatorManipulationUtil.deepCopy(nestedPlan, newWinOp)); } return newWinOp; } }
Mutable<ILogicalExpression> frameOffset = op.getFrameOffset(); if (frameOffset.getValue() != null) { buffer.append(" offset ");
private boolean consolidateNestedPlans(WindowOperator winOpTo, WindowOperator winOpFrom, IOptimizationContext context) throws AlgebricksException { if (winOpTo.hasNestedPlans()) { AggregateOperator aggTo = getAggregateRoot(winOpTo.getNestedPlans()); if (aggTo == null) { return false; } AggregateOperator aggFrom = getAggregateRoot(winOpFrom.getNestedPlans()); if (aggFrom == null) { return false; } if (!IsomorphismUtilities.isOperatorIsomorphicPlanSegment(aggTo.getInputs().get(0).getValue(), aggFrom.getInputs().get(0).getValue())) { return false; } aggTo.getVariables().addAll(aggFrom.getVariables()); aggTo.getExpressions().addAll(aggFrom.getExpressions()); context.computeAndSetTypeEnvironmentForOperator(aggTo); } else { setAll(winOpTo.getNestedPlans(), winOpFrom.getNestedPlans()); setAll(winOpTo.getFrameValueExpressions(), winOpFrom.getFrameValueExpressions()); setAll(winOpTo.getFrameStartExpressions(), winOpFrom.getFrameStartExpressions()); setAll(winOpTo.getFrameEndExpressions(), winOpFrom.getFrameEndExpressions()); setAll(winOpTo.getFrameExcludeExpressions(), winOpFrom.getFrameExcludeExpressions()); winOpTo.setFrameExcludeNegationStartIdx(winOpFrom.getFrameExcludeNegationStartIdx()); winOpTo.getFrameOffset().setValue(winOpFrom.getFrameOffset().getValue()); winOpTo.setFrameMaxObjects(winOpFrom.getFrameMaxObjects()); } return true; }
ILogicalExpression frameOffsetExpr = winOp.getFrameOffset().getValue(); if (frameOffsetExpr != null) { frameOffsetExprEval =
.append(String.valueOf(op.getFrameExcludeNegationStartIdx())); Mutable<ILogicalExpression> frameOffset = op.getFrameOffset(); if (frameOffset.getValue() != null) { buffer.append(",\n");
@Override public ILogicalOperator visitWindowOperator(WindowOperator op, ILogicalOperator arg) throws AlgebricksException { List<Mutable<ILogicalExpression>> partitionExprCopy = exprDeepCopyVisitor.deepCopyExpressionReferenceList(op.getPartitionExpressions()); List<Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>>> orderExprCopy = deepCopyOrderExpressionReferencePairList(op.getOrderExpressions()); List<Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>>> frameValueExprCopy = deepCopyOrderExpressionReferencePairList(op.getFrameValueExpressions()); List<Mutable<ILogicalExpression>> frameStartExprCopy = exprDeepCopyVisitor.deepCopyExpressionReferenceList(op.getFrameStartExpressions()); List<Mutable<ILogicalExpression>> frameEndExprCopy = exprDeepCopyVisitor.deepCopyExpressionReferenceList(op.getFrameEndExpressions()); List<Mutable<ILogicalExpression>> frameExclusionExprCopy = exprDeepCopyVisitor.deepCopyExpressionReferenceList(op.getFrameExcludeExpressions()); ILogicalExpression frameOffsetCopy = exprDeepCopyVisitor.deepCopy(op.getFrameOffset().getValue()); List<LogicalVariable> varCopy = deepCopyVariableList(op.getVariables()); List<Mutable<ILogicalExpression>> exprCopy = exprDeepCopyVisitor.deepCopyExpressionReferenceList(op.getExpressions()); List<ILogicalPlan> nestedPlansCopy = new ArrayList<>(); WindowOperator opCopy = new WindowOperator(partitionExprCopy, orderExprCopy, frameValueExprCopy, frameStartExprCopy, frameEndExprCopy, frameExclusionExprCopy, op.getFrameExcludeNegationStartIdx(), frameOffsetCopy, op.getFrameMaxObjects(), varCopy, exprCopy, nestedPlansCopy); deepCopyInputsAnnotationsAndExecutionMode(op, arg, opCopy); deepCopyPlanList(op.getNestedPlans(), nestedPlansCopy, opCopy); return opCopy; }
@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; }
expr.getValue().substituteVar(pair.first, pair.second); ILogicalExpression frameOffset = op.getFrameOffset().getValue(); if (frameOffset != null) { frameOffset.substituteVar(pair.first, pair.second);
sweepExpression(me.getValue()); ILogicalExpression frameOffset = op.getFrameOffset().getValue(); if (frameOffset != null) { sweepExpression(frameOffset);