private boolean rewrite(IOptimizationContext context) throws AlgebricksException { boolean changed = false; for (List<Mutable<ILogicalOperator>> members : equivalenceClasses) { if (rewriteForOneEquivalentClass(members, context)) { changed = true; } } return changed; }
public static <T> boolean extractComplexExpressions(ILogicalOperator op, List<T> exprList, Function<T, Mutable<ILogicalExpression>> exprGetter, IOptimizationContext context) throws AlgebricksException { return extractComplexExpressions(op, exprList, exprGetter, t -> false, context); } }
public final static List<IAlgebraicRewriteRule> buildConsolidationRuleCollection() { List<IAlgebraicRewriteRule> consolidation = new LinkedList<IAlgebraicRewriteRule>(); consolidation.add(new ConsolidateSelectsRule()); consolidation.add(new ConsolidateAssignsRule()); consolidation.add(new InlineAssignIntoAggregateRule()); consolidation.add(new IntroduceGroupByCombinerRule()); consolidation.add(new IntroduceAggregateCombinerRule()); consolidation.add(new RemoveUnusedAssignAndAggregateRule()); return consolidation; }
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; }
/** * When a nested data sources exist, convert the plan to use the join operator. * * @return List of algebraic rewrite rules. */ public final static List<IAlgebraicRewriteRule> buildNestedDataSourceRuleCollection() { List<IAlgebraicRewriteRule> xquery = new LinkedList<IAlgebraicRewriteRule>(); xquery.add(new BreakSelectIntoConjunctsRule()); xquery.add(new SimpleUnnestToProductRule()); xquery.add(new PushMapOperatorDownThroughProductRule()); xquery.add(new PushSubplanWithAggregateDownThroughProductRule()); xquery.add(new PushSelectDownRule()); xquery.add(new PushSelectIntoJoinRule()); // Clean up xquery.add(new RemoveRedundantVariablesRule()); xquery.add(new RemoveUnusedAssignAndAggregateRule()); return xquery; }
public final static List<IAlgebraicRewriteRule> buildPhysicalRewritesAllLevelsRuleCollection() { List<IAlgebraicRewriteRule> physicalPlanRewrites = new LinkedList<IAlgebraicRewriteRule>(); physicalPlanRewrites.add(new PullSelectOutOfEqJoin()); physicalPlanRewrites.add(new PushFunctionsOntoEqJoinBranches()); physicalPlanRewrites.add(new SetAlgebricksPhysicalOperatorsRule()); physicalPlanRewrites.add(new SetExecutionModeRule()); physicalPlanRewrites.add(new EnforceStructuralPropertiesRule()); physicalPlanRewrites.add(new PushProjectDownRule()); physicalPlanRewrites.add(new CopyLimitDownRule()); return physicalPlanRewrites; }
public static final List<IAlgebraicRewriteRule> prepareForJobGenRuleCollection() { List<IAlgebraicRewriteRule> prepareForJobGenRewrites = new LinkedList<>(); prepareForJobGenRewrites.add(new InsertProjectBeforeUnionRule()); prepareForJobGenRewrites.add(new SetAlgebricksPhysicalOperatorsRule()); prepareForJobGenRewrites .add(new IsolateHyracksOperatorsRule(HeuristicOptimizer.hyraxOperatorsBelowWhichJobGenIsDisabled)); prepareForJobGenRewrites.add(new FixReplicateOperatorOutputsRule()); prepareForJobGenRewrites.add(new ExtractCommonOperatorsRule()); // Re-infer all types, so that, e.g., the effect of not-is-null is // propagated. prepareForJobGenRewrites.add(new ReinferAllTypesRule()); prepareForJobGenRewrites.add(new PushGroupByIntoSortRule()); prepareForJobGenRewrites.add(new SetExecutionModeRule()); prepareForJobGenRewrites.add(new SweepIllegalNonfunctionalFunctions()); prepareForJobGenRewrites.add(new FixReplicateOperatorOutputsRule()); return prepareForJobGenRewrites; } }
public final static List<IAlgebraicRewriteRule> prepareForJobGenRuleCollection() { List<IAlgebraicRewriteRule> prepareForJobGenRewrites = new LinkedList<IAlgebraicRewriteRule>(); prepareForJobGenRewrites.add(new ConvertFromAlgebricksExpressionsRule()); prepareForJobGenRewrites .add(new IsolateHyracksOperatorsRule(HeuristicOptimizer.hyraxOperatorsBelowWhichJobGenIsDisabled)); prepareForJobGenRewrites.add(new ExtractCommonOperatorsRule()); // Re-infer all types, so that, e.g., the effect of not-is-null is // propagated. prepareForJobGenRewrites.add(new PushProjectIntoDataSourceScanRule()); prepareForJobGenRewrites.add(new ReinferAllTypesRule()); prepareForJobGenRewrites.add(new SetExecutionModeRule()); return prepareForJobGenRewrites; } }
public static final List<IAlgebraicRewriteRule> buildFuzzyJoinRuleCollection() { List<IAlgebraicRewriteRule> fuzzy = new LinkedList<>(); fuzzy.add(new FuzzyJoinRule()); fuzzy.add(new ExtractCommonExpressionsRule()); fuzzy.add(new NestedSubplanToJoinRule()); fuzzy.add(new PushSelectIntoJoinRule()); fuzzy.add(new RemoveUnusedAssignAndAggregateRule()); fuzzy.add(new InlineSubplanInputForNestedTupleSourceRule()); fuzzy.add(new RemoveRedundantVariablesRule()); fuzzy.add(new AsterixInlineVariablesRule()); fuzzy.add(new RemoveUnusedAssignAndAggregateRule()); return fuzzy; }
public final static List<IAlgebraicRewriteRule> buildNormalizationRuleCollection() { List<IAlgebraicRewriteRule> normalization = new LinkedList<IAlgebraicRewriteRule>(); normalization.add(new EliminateSubplanRule()); normalization.add(new BreakSelectIntoConjunctsRule()); normalization.add(new PushSelectIntoJoinRule()); normalization.add(new ExtractGbyExpressionsRule()); return normalization; }
public final static List<IAlgebraicRewriteRule> buildCondPushDownRuleCollection() { List<IAlgebraicRewriteRule> condPushDown = new LinkedList<IAlgebraicRewriteRule>(); condPushDown.add(new PushSelectDownRule()); condPushDown.add(new InlineVariablesRule()); condPushDown.add(new FactorRedundantGroupAndDecorVarsRule()); condPushDown.add(new EliminateSubplanRule()); return condPushDown; }
public final static List<IAlgebraicRewriteRule> buildOpPushDownRuleCollection() { List<IAlgebraicRewriteRule> opPushDown = new LinkedList<IAlgebraicRewriteRule>(); opPushDown.add(new PushProjectDownRule()); opPushDown.add(new PushSelectDownRule()); return opPushDown; }
public final static List<IAlgebraicRewriteRule> buildPhysicalRewritesTopLevelRuleCollection() { List<IAlgebraicRewriteRule> physicalPlanRewrites = new LinkedList<IAlgebraicRewriteRule>(); physicalPlanRewrites.add(new CopyLimitDownRule()); physicalPlanRewrites.add(new SetExecutionModeRule()); return physicalPlanRewrites; }
public final static List<IAlgebraicRewriteRule> buildJoinInferenceRuleCollection() { List<IAlgebraicRewriteRule> joinInference = new LinkedList<IAlgebraicRewriteRule>(); joinInference.add(new InlineVariablesRule()); joinInference.add(new ComplexJoinInferenceRule()); return joinInference; }
private void updateEquivalenceClassMap(LogicalVariable lhs, Mutable<ILogicalExpression> rhsExprRef, ILogicalExpression rhsExpr, ILogicalOperator op) { ExprEquivalenceClass exprEqClass = exprEqClassMap.get(rhsExpr); if (exprEqClass == null) { exprEqClass = new ExprEquivalenceClass(op, rhsExprRef); exprEqClassMap.put(rhsExpr, exprEqClass); } exprEqClass.setVariable(lhs); }
protected void prepare(IOptimizationContext context) { varAssignRhs.clear(); inlineVisitor.setContext(context); subTreesDone.clear(); }
protected boolean performBottomUpAction(AbstractLogicalOperator op) throws AlgebricksException { // Only inline variables in operators that can deal with arbitrary expressions. if (!op.requiresVariableReferenceExpressions()) { inlineVisitor.setOperator(op); return op.accept(inlineVisitor, inlineVisitor); } return false; }
private void gatherFunctionCalls(AssignOperator assignOp, List<Mutable<ILogicalExpression>> funcExprs) { for (Mutable<ILogicalExpression> exprRef : assignOp.getExpressions()) { gatherFunctionCalls(exprRef, funcExprs); } }
private void typePlan(ILogicalPlan p, IOptimizationContext context) throws AlgebricksException { for (Mutable<ILogicalOperator> r : p.getRoots()) { typeOpRec(r, context); } }
private static boolean extractComplexExpressions(ILogicalOperator op, List<Pair<LogicalVariable, Mutable<ILogicalExpression>>> exprList, IOptimizationContext context) throws AlgebricksException { return extractComplexExpressions(op, exprList, Pair::getSecond, context); }