public class ExchangeRemoveConstantKeysRule extends RelOptRule
Exchange
if those keys are known to be constant.
For example,
SELECT key,value FROM (SELECT 1 AS key, value FROM src) r DISTRIBUTE
BY key
can be reduced to
SELECT 1 AS key, value FROM src
.
Modifier and Type | Class and Description |
---|---|
static class |
ExchangeRemoveConstantKeysRule.SortExchangeRemoveConstantKeysRule
Rule that reduces constants inside a
SortExchange . |
Modifier and Type | Field and Description |
---|---|
static ExchangeRemoveConstantKeysRule |
EXCHANGE_INSTANCE
Singleton rule that removes constants inside a
LogicalExchange . |
static ExchangeRemoveConstantKeysRule |
SORT_EXCHANGE_INSTANCE
Singleton rule that removes constants inside a
LogicalSortExchange . |
description, operands, relBuilderFactory
Modifier | Constructor and Description |
---|---|
private |
ExchangeRemoveConstantKeysRule(java.lang.Class<? extends RelNode> clazz,
java.lang.String description) |
Modifier and Type | Method and Description |
---|---|
boolean |
matches(RelOptRuleCall call)
Returns whether this rule could possibly match the given operands.
|
void |
onMatch(RelOptRuleCall call)
Receives notification about a rule match.
|
protected static java.util.List<java.lang.Integer> |
simplifyDistributionKeys(RelDistribution distribution,
java.util.Set<java.lang.Integer> constants)
Removes constant in distribution keys.
|
any, convert, convert, convertList, convertOperand, convertOperand, equals, equals, getOperand, getOperands, getOutConvention, getOutTrait, hashCode, none, operand, operand, operand, operand, operand, operandJ, operandJ, some, toString, unordered
public static final ExchangeRemoveConstantKeysRule EXCHANGE_INSTANCE
LogicalExchange
.public static final ExchangeRemoveConstantKeysRule SORT_EXCHANGE_INSTANCE
LogicalSortExchange
.private ExchangeRemoveConstantKeysRule(java.lang.Class<? extends RelNode> clazz, java.lang.String description)
protected static java.util.List<java.lang.Integer> simplifyDistributionKeys(RelDistribution distribution, java.util.Set<java.lang.Integer> constants)
public boolean matches(RelOptRuleCall call)
RelOptRule
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
matches
in class RelOptRule
call
- Rule call which has been determined to match all operands of
this rulepublic void onMatch(RelOptRuleCall call)
RelOptRule
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.
onMatch
in class RelOptRule
call
- Rule callRelOptRule.matches(RelOptRuleCall)
Copyright © 2012–2019 The Apache Software Foundation. All rights reserved.