Class JdbcRules.JdbcJoinRule

Enclosing class:
JdbcRules

public static class JdbcRules.JdbcJoinRule extends ConverterRule
Rule that converts a join to JDBC.
  • Constructor Details

  • Method Details

    • create

      public static JdbcRules.JdbcJoinRule create(JdbcConvention out)
      Creates a JdbcJoinRule.
    • convert

      public @Nullable RelNode convert(RelNode rel)
      Description copied from class: ConverterRule
      Converts a relational expression to the target trait(s) of this rule.

      Returns null if conversion is not possible.

      Specified by:
      convert in class ConverterRule
    • convert

      public @Nullable RelNode convert(Join join, boolean convertInputTraits)
      Converts a Join into a JdbcJoin.
      Parameters:
      join - Join operator to convert
      convertInputTraits - Whether to convert input to join's JDBC convention
      Returns:
      A new JdbcJoin
    • 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