public final static List<IAlgebraicRewriteRule> buildJoinInferenceRuleCollection() { List<IAlgebraicRewriteRule> joinInference = new LinkedList<IAlgebraicRewriteRule>(); joinInference.add(new InlineVariablesRule()); joinInference.add(new ComplexJoinInferenceRule()); return joinInference; }
private static void cleanupJoins(SubplanOperator s) { for (ILogicalPlan p : s.getNestedPlans()) { for (Mutable<ILogicalOperator> r : p.getRoots()) { cleanupJoins(r); } } }
if (subplanHasFreeVariables(subplan)) { return false; ntsToEtsInSubplan(subplan, context); cleanupJoins(subplan); InnerJoinOperator join = new InnerJoinOperator(new MutableObject<ILogicalExpression>(ConstantExpression.TRUE)); join.setSourceLocation(op.getSourceLocation());
/** clean up joins that have one input branch that is empty tuple source */ private static void cleanupJoins(Mutable<ILogicalOperator> opRef) { if (opRef.getValue() instanceof AbstractBinaryJoinOperator) { for (Mutable<ILogicalOperator> inputRef : opRef.getValue().getInputs()) { if (inputRef.getValue().getOperatorTag() == LogicalOperatorTag.EMPTYTUPLESOURCE) { opRef.getValue().getInputs().remove(inputRef); opRef.setValue(opRef.getValue().getInputs().get(0).getValue()); break; } } } for (Mutable<ILogicalOperator> inputRef : opRef.getValue().getInputs()) { cleanupJoins(inputRef); } }
/** * Unnest more complex structures. * * @return List of algebraic rewrite rules. */ public final static List<IAlgebraicRewriteRule> buildUnnestingRuleCollection() { List<IAlgebraicRewriteRule> xquery = new LinkedList<IAlgebraicRewriteRule>(); xquery.add(new PushSelectDownRule()); xquery.add(new SimpleUnnestToProductRule()); xquery.add(new ComplexUnnestToProductRule()); xquery.add(new ComplexJoinInferenceRule()); xquery.add(new PushSelectIntoJoinRule()); xquery.add(new IntroJoinInsideSubplanRule()); xquery.add(new PushMapOperatorDownThroughProductRule()); xquery.add(new PushSubplanWithAggregateDownThroughProductRule()); xquery.add(new IntroduceGroupByForSubplanRule()); xquery.add(new SubplanOutOfGroupRule()); xquery.add(new InsertOuterJoinRule()); xquery.add(new ExtractFunctionsFromJoinConditionRule()); xquery.add(new RemoveRedundantVariablesRule()); xquery.add(new RemoveUnusedAssignAndAggregateRule()); xquery.add(new FactorRedundantGroupAndDecorVarsRule()); xquery.add(new EliminateSubplanRule()); xquery.add(new EliminateGroupByEmptyKeyRule()); xquery.add(new PushSubplanIntoGroupByRule()); xquery.add(new NestedSubplanToJoinRule()); xquery.add(new EliminateSubplanWithInputCardinalityOneRule()); return xquery; }