Class SortUnionTransposeRule


  • public class SortUnionTransposeRule
    extends RelOptRule
    Planner rule that pushes a Sort past a Union.
    • Field Detail

      • INSTANCE

        public static final SortUnionTransposeRule INSTANCE
        Rule instance for Union implementation that does not preserve the ordering of its inputs. Thus, it makes no sense to match this rule if the Sort does not have a limit, i.e., Sort.fetch is null.
      • MATCH_NULL_FETCH

        public static final SortUnionTransposeRule MATCH_NULL_FETCH
        Rule instance for Union implementation that preserves the ordering of its inputs. It is still worth applying this rule even if the Sort does not have a limit, for the merge of already sorted inputs that the Union can do is usually cheap.
      • matchNullFetch

        private final boolean matchNullFetch
        Whether to match a Sort whose Sort.fetch is null. Generally this only makes sense if the Union preserves order (and merges).
    • Constructor Detail

      • SortUnionTransposeRule

        private SortUnionTransposeRule​(boolean matchNullFetch)
      • SortUnionTransposeRule

        public SortUnionTransposeRule​(java.lang.Class<? extends Sort> sortClass,
                                      java.lang.Class<? extends Union> unionClass,
                                      boolean matchNullFetch,
                                      RelBuilderFactory relBuilderFactory,
                                      java.lang.String description)
        Creates a SortUnionTransposeRule.
    • Method Detail

      • matches

        public boolean matches​(RelOptRuleCall call)
        Description copied from class: RelOptRule
        Returns whether this rule could possibly match the given operands.

        This method is an opportunity to apply side-conditions to a rule. The RelOptPlanner calls this method after matching all operands of the rule, and before calling RelOptRule.onMatch(RelOptRuleCall).

        In implementations of RelOptPlanner which may queue up a matched RelOptRuleCall for a long time before calling RelOptRule.onMatch(RelOptRuleCall), this method is beneficial because it allows the planner to discard rules earlier in the process.

        The default implementation of this method returns true. It is acceptable for any implementation of this method to give a false positives, that is, to say that the rule matches the operands but have RelOptRule.onMatch(RelOptRuleCall) subsequently not generate any successors.

        The following script is useful to identify rules which commonly produce no successors. You should override this method for these rules:

        awk '
         /Apply rule/ {rule=$4; ruleCount[rule]++;}
         /generated 0 successors/ {ruleMiss[rule]++;}
         END {
           printf "%-30s %s %s\n", "Rule", "Fire", "Miss";
           for (i in ruleCount) {
             printf "%-30s %5d %5d\n", i, ruleCount[i], ruleMiss[i];
           }
         } ' FarragoTrace.log
        Overrides:
        matches in class RelOptRule
        Parameters:
        call - Rule call which has been determined to match all operands of this rule
        Returns:
        whether this RelOptRule matches a given RelOptRuleCall