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; } }
private void disableJobGenRec(ILogicalOperator operator) { AbstractLogicalOperator op = (AbstractLogicalOperator) operator; op.disableJobGen(); for (Mutable<ILogicalOperator> i : op.getInputs()) { disableJobGenRec(i.getValue()); } }
@Override public boolean rewritePost(Mutable<ILogicalOperator> opRef, IOptimizationContext context) throws AlgebricksException { AbstractLogicalOperator op = (AbstractLogicalOperator) opRef.getValue(); IPhysicalOperator pt = op.getPhysicalOperator(); if (pt == null || op.getOperatorTag() == LogicalOperatorTag.EXCHANGE) { return false; } if (!pt.isMicroOperator()) { return testIfExchangeBelow(opRef, context); } else { return testIfExchangeAbove(opRef, context); } }
private boolean testIfExchangeBelow(Mutable<ILogicalOperator> opRef, IOptimizationContext context) throws AlgebricksException { AbstractLogicalOperator op = (AbstractLogicalOperator) opRef.getValue(); boolean exchInserted = false; for (Mutable<ILogicalOperator> i : op.getInputs()) { AbstractLogicalOperator c = (AbstractLogicalOperator) i.getValue(); if (c.getOperatorTag() != LogicalOperatorTag.EXCHANGE) { if (c.getPhysicalOperator() == null) { return false; } insertOneToOneExchange(i, context); exchInserted = true; } } IPhysicalOperator pt = op.getPhysicalOperator(); if (pt.isJobGenDisabledBelowMe() || arrayContains(operatorsBelowWhichJobGenIsDisabled, pt.getOperatorTag())) { for (Mutable<ILogicalOperator> i : op.getInputs()) { disableJobGenRec(i.getValue()); } } return exchInserted; }
private boolean testIfExchangeAbove(Mutable<ILogicalOperator> opRef, IOptimizationContext context) throws AlgebricksException { AbstractLogicalOperator op = (AbstractLogicalOperator) opRef.getValue(); if (op.getOperatorTag() == LogicalOperatorTag.EXCHANGE) { return false; } boolean exchInserted = false; for (Mutable<ILogicalOperator> i : op.getInputs()) { AbstractLogicalOperator c = (AbstractLogicalOperator) i.getValue(); IPhysicalOperator cpop = c.getPhysicalOperator(); if (c.getOperatorTag() == LogicalOperatorTag.EXCHANGE || cpop == null) { continue; } if (!cpop.isMicroOperator()) { insertOneToOneExchange(i, context); exchInserted = true; } } return exchInserted; }
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; } }