Class CassandraRules.CassandraFilterRule

    • Constructor Detail

      • CassandraFilterRule

        private CassandraFilterRule()
    • 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
      • isEqualityOnKey

        private boolean isEqualityOnKey​(RexNode node,
                                        java.util.List<java.lang.String> fieldNames,
                                        java.util.Set<java.lang.String> partitionKeys,
                                        java.util.List<java.lang.String> clusteringKeys)
        Check if the node is a supported predicate (primary key equality).
        Parameters:
        node - Condition node to check
        fieldNames - Names of all columns in the table
        partitionKeys - Names of primary key columns
        clusteringKeys - Names of primary key columns
        Returns:
        True if the node represents an equality predicate on a primary key
      • compareFieldWithLiteral

        private java.lang.String compareFieldWithLiteral​(RexNode left,
                                                         RexNode right,
                                                         java.util.List<java.lang.String> fieldNames)
        Check if an equality operation is comparing a primary key column with a literal.
        Parameters:
        left - Left operand of the equality
        right - Right operand of the equality
        fieldNames - Names of all columns in the table
        Returns:
        The field being compared or null if there is no key equality