Class CassandraRules.CassandraFilterRule
- java.lang.Object
-
- org.apache.calcite.plan.RelOptRule
-
- org.apache.calcite.adapter.cassandra.CassandraRules.CassandraFilterRule
-
- Enclosing class:
- CassandraRules
private static class CassandraRules.CassandraFilterRule extends RelOptRule
Rule to convert aLogicalFilter
to aCassandraFilter
.
-
-
Field Summary
Fields Modifier and Type Field Description private static CassandraRules.CassandraFilterRule
INSTANCE
private static java.util.function.Predicate<LogicalFilter>
PREDICATE
-
Fields inherited from class org.apache.calcite.plan.RelOptRule
description, operands, relBuilderFactory
-
-
Constructor Summary
Constructors Modifier Constructor Description private
CassandraFilterRule()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description 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.RelNode
convert(LogicalFilter filter, CassandraTableScan scan)
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).boolean
matches(RelOptRuleCall call)
Returns whether this rule could possibly match the given operands.void
onMatch(RelOptRuleCall call)
Receives notification about a rule match.-
Methods inherited from class org.apache.calcite.plan.RelOptRule
any, convert, convert, convertList, convertOperand, convertOperand, equals, equals, getOperand, getOperands, getOutConvention, getOutTrait, hashCode, none, operand, operand, operand, operand, operand, operandJ, operandJ, some, toString, unordered
-
-
-
-
Field Detail
-
PREDICATE
private static final java.util.function.Predicate<LogicalFilter> PREDICATE
-
INSTANCE
private static final CassandraRules.CassandraFilterRule INSTANCE
-
-
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 callingRelOptRule.onMatch(RelOptRuleCall)
.In implementations of
RelOptPlanner
which may queue up a matchedRelOptRuleCall
for a long time before callingRelOptRule.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 haveRelOptRule.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 classRelOptRule
- 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 checkfieldNames
- Names of all columns in the tablepartitionKeys
- Names of primary key columnsclusteringKeys
- 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 equalityright
- Right operand of the equalityfieldNames
- Names of all columns in the table- Returns:
- The field being compared or null if there is no key equality
-
onMatch
public void onMatch(RelOptRuleCall call)
Description copied from class:RelOptRule
Receives notification about a rule match. At the time that this method is called,call.rels
holds the set of relational expressions which match the operands to the rule;call.rels[0]
is the root expression.Typically a rule would check that the nodes are valid matches, creates a new expression, then calls back
RelOptRuleCall.transformTo(org.apache.calcite.rel.RelNode, java.util.Map<org.apache.calcite.rel.RelNode, org.apache.calcite.rel.RelNode>)
to register the expression.- Specified by:
onMatch
in classRelOptRule
- Parameters:
call
- Rule call- See Also:
ConverterRule
-
convert
public RelNode convert(LogicalFilter filter, CassandraTableScan scan)
-
-