- All Implemented Interfaces:
false) into a group of operators composed of
Rewrite: (GB-Union All-GB)-GB-UDTF (on all attributes)
R1 Intersect All R2
R3 = GB(R1 on all attributes, count(*) as c)
GB(R2 on all attributes, count(*) as c)
R4 = GB(R3 on all attributes, count(c) as cnt, min(c) as m)
Note that we do not need
min(c) in intersect distinct.
R5 = Filter(cnt == #branch)
If it is intersect all then
R6 = UDTF (R5) which will explode the tuples based on min(c)
R7 = Project(R6 on all attributes)
R6 = Proj(R5 on all attributes)
Nested Class SummaryModifier and TypeClassDescription
static interfaceRule configuration.
Nested classes/interfaces inherited from class org.apache.calcite.plan.RelRule
RelRule.Done, RelRule.MatchHandler<R extends RelOptRule>, RelRule.OperandBuilder, RelRule.OperandDetailBuilder<R extends RelNode>, RelRule.OperandTransform
Methods inherited from class org.apache.calcite.plan.RelOptRule
any, convert, convert, convert, convert, convertList, convertOperand, convertOperand, equals, equals, getOperand, getOperands, getOutConvention, getOutTrait, hashCode, matches, none, operand, operand, operand, operand, operand, operandJ, operandJ, some, toString, unordered
onMatchpublic void onMatch
(RelOptRuleCall call)Description copied from class:
RelOptRuleReceives notification about a rule match. At the time that this method is called,
call.relsholds the set of relational expressions which match the operands to the rule;
call.relsis 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>, org.apache.calcite.plan.RelHintsPropagator)to register the expression.