com.lucidera.lcs
Class LcsIndexAggRule

java.lang.Object
  extended by org.eigenbase.relopt.RelOptRule
      extended by com.lucidera.lcs.LcsIndexAggRule

public class LcsIndexAggRule
extends RelOptRule

A rule for directly aggregating off of an unclustered index scan.

Version:
$Id: //open/dev/farrago/src/com/lucidera/lcs/LcsIndexAggRule.java#14 $
Author:
John Pham

Field Summary
static LcsIndexAggRule instanceNormalizer
           
static LcsIndexAggRule instanceRowScan
          The singletons
 
Fields inherited from class org.eigenbase.relopt.RelOptRule
ANY, description, operands
 
Constructor Summary
LcsIndexAggRule(RelOptRuleOperand operand, String id)
          Creates an LcsIndexAggRule.
 
Method Summary
 CallingConvention getOutConvention()
          Returns the calling convention of the result of firing this rule, null if not known.
 void onMatch(RelOptRuleCall call)
          Receives notification about a rule match.
private  boolean projectionSatisfiesGroupBy(Integer[] proj, int groupCount)
          Determines whether a projection from an index scan can meet the group by requirements of an aggregate.
 
Methods inherited from class org.eigenbase.relopt.RelOptRule
convert, equals, equals, getOperand, getOperands, getOutTrait, hashCode, matches, mergeTraitsAndConvert, mergeTraitsAndConvert, toString
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

instanceRowScan

public static final LcsIndexAggRule instanceRowScan
The singletons

TODO: handle CalcRel after sort order has been cleaned up


instanceNormalizer

public static final LcsIndexAggRule instanceNormalizer
Constructor Detail

LcsIndexAggRule

public LcsIndexAggRule(RelOptRuleOperand operand,
                       String id)
Creates an LcsIndexAggRule.

Parameters:
operand - Root operand, must not be null
id - Description of rule
Method Detail

getOutConvention

public CallingConvention getOutConvention()
Description copied from class: RelOptRule
Returns the calling convention of the result of firing this rule, null if not known.

Overrides:
getOutConvention in class RelOptRule

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.eigenbase.rel.RelNode) to register the expression.

Specified by:
onMatch in class RelOptRule
Parameters:
call - Rule call
See Also:
RelOptRule.matches(RelOptRuleCall)

projectionSatisfiesGroupBy

private boolean projectionSatisfiesGroupBy(Integer[] proj,
                                           int groupCount)
Determines whether a projection from an index scan can meet the group by requirements of an aggregate. The index scan columns are sorted in order, and the group by columns are required to be sorted in order, so the index scan projection should be a prefix of the index scan: 0, 1, 2, ... etc.

Parameters:
proj - the projection from an index
groupCount - the number of columns to be grouped. the columns are assumed to be the prefix of input to the aggregate
Returns:
whether the projection can meet the group by requirements of an aggregate