public static final List<IAlgebraicRewriteRule> buildConsolidationRuleCollection() { List<IAlgebraicRewriteRule> consolidation = new LinkedList<>(); consolidation.add(new ConsolidateSelectsRule()); consolidation.add(new ConsolidateAssignsRule()); consolidation.add(new InlineAssignIntoAggregateRule()); consolidation.add(new AsterixIntroduceGroupByCombinerRule()); consolidation.add(new IntroduceAggregateCombinerRule()); consolidation.add(new CountVarToCountOneRule()); consolidation.add(new RemoveUnusedAssignAndAggregateRule()); consolidation.add(new RemoveRedundantGroupByDecorVarsRule()); //PushUnnestDownUnion => RemoveRedundantListifyRule cause these rules are correlated consolidation.add(new PushUnnestDownThroughUnionRule()); consolidation.add(new RemoveRedundantListifyRule()); // Window operator consolidation rules consolidation.add(new ConsolidateWindowOperatorsRule()); consolidation.add(new ReuseWindowAggregateRule()); consolidation.add(new RemoveRedundantWindowOperatorsRule()); consolidation.add(new RemoveRedundantVariablesRule()); return consolidation; }
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; }
if (winOp2.hasNestedPlans() && !consolidateNestedPlans(winOp1, winOp2, context)) { return false;