public class IntersectToDistinctRule extends RelOptRule
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)
|Modifier and Type||Field||Description|
Creates an IntersectToDistinctRule.
|Modifier and Type||Method||Description|
Receives notification about a rule match.
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
public static final IntersectToDistinctRule INSTANCE
public void onMatch(RelOptRuleCall call)
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>) to
register the expression.
Copyright © 2012–2017 The Apache Software Foundation. All rights reserved.