net.sf.farrago.namespace.ftrs
Class FtrsIndexScanRel

java.lang.Object
  extended by org.eigenbase.rel.AbstractRelNode
      extended by org.eigenbase.rel.TableAccessRelBase
          extended by net.sf.farrago.namespace.ftrs.FtrsIndexScanRel
All Implemented Interfaces:
Cloneable, FennelRel, RelNode

 class FtrsIndexScanRel
extends TableAccessRelBase
implements FennelRel

FtrsIndexScanRel is the relational expression corresponding to a scan via a particular index over the contents of a table stored in FTRS format.

Version:
$Id: //open/dev/farrago/src/net/sf/farrago/namespace/ftrs/FtrsIndexScanRel.java#31 $
Author:
John V. Sichi

Field Summary
(package private)  FtrsTable ftrsTable
          Refinement for super.table.
(package private)  FemLocalIndex index
          Index to use for access.
private  FtrsIndexGuide indexGuide
           
(package private)  boolean isOrderPreserving
           
(package private)  Integer[] projectedColumns
          Array of 0-based flattened column ordinals to project; if null, project all columns.
 
Fields inherited from class org.eigenbase.rel.TableAccessRelBase
connection, table
 
Fields inherited from class org.eigenbase.rel.AbstractRelNode
digest, id, rowType, traits
 
Fields inherited from interface net.sf.farrago.query.FennelRel
FENNEL_EXEC_CONVENTION
 
Fields inherited from interface org.eigenbase.rel.RelNode
emptyArray
 
Constructor Summary
FtrsIndexScanRel(RelOptCluster cluster, FtrsTable ftrsTable, FemLocalIndex index, RelOptConnection connection, Integer[] projectedColumns, boolean isOrderPreserving)
          Creates a new FtrsIndexScanRel object.
 
Method Summary
 FtrsIndexScanRel clone()
          Clones this RelNode.
(package private)  RelOptCost computeCost(RelOptPlanner planner, double dRows)
           
private  Integer[] computeProjectedColumns()
           
 RelOptCost computeSelfCost(RelOptPlanner planner)
          Returns the cost of this plan (not including children).
(package private)  void defineScanStream(FemIndexScanDef scanStream)
          Fills in a stream definition for this scan.
 RelDataType deriveRowType()
           
 void explain(RelOptPlanWriter pw)
           
 RelFieldCollation[] getCollations()
          TODO: jhyde, 2006/3/28: unify with RelNode.getCollationList()
 FemAbstractColumn getColumnForFieldAccess(int fieldOrdinal)
          Gets the column referenced by a FieldAccess relative to this scan.
 FtrsIndexGuide getIndexGuide()
           
 Object implementFennelChild(FennelRelImplementor implementor)
          Visits this relational expression as part of the implementation process.
 FemExecutionStreamDef toStreamDef(FennelRelImplementor implementor)
          Converts this relational expression to FemExecutionStreamDef form.
 
Methods inherited from class org.eigenbase.rel.TableAccessRelBase
getCollationList, getConnection, getRows, getTable
 
Methods inherited from class org.eigenbase.rel.AbstractRelNode
childrenAccept, cloneTraits, collectVariablesSet, collectVariablesUsed, computeDigest, getChildExps, getCluster, getConvention, getCorrelVariable, getDescription, getDigest, getExpectedInputRowType, getId, getInput, getInputs, getOrCreateCorrelVariable, getQuery, getRelTypeName, getRowType, getTraits, getVariablesStopped, inheritTraitsFrom, isAccessTo, isDistinct, isValid, onRegister, recomputeDigest, register, registerCorrelVariable, replaceInput, setCorrelVariable, toString
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.eigenbase.rel.RelNode
childrenAccept, collectVariablesSet, collectVariablesUsed, getChildExps, getCluster, getCollationList, getConvention, getCorrelVariable, getDescription, getDigest, getExpectedInputRowType, getId, getInput, getInputs, getOrCreateCorrelVariable, getQuery, getRelTypeName, getRows, getRowType, getTable, getTraits, getVariablesStopped, isAccessTo, isDistinct, isValid, onRegister, recomputeDigest, registerCorrelVariable, replaceInput, setCorrelVariable
 

Field Detail

index

final FemLocalIndex index
Index to use for access.


ftrsTable

final FtrsTable ftrsTable
Refinement for super.table.


projectedColumns

final Integer[] projectedColumns
Array of 0-based flattened column ordinals to project; if null, project all columns. Note that these ordinals are relative to the table, not the index.


isOrderPreserving

final boolean isOrderPreserving

indexGuide

private FtrsIndexGuide indexGuide
Constructor Detail

FtrsIndexScanRel

public FtrsIndexScanRel(RelOptCluster cluster,
                        FtrsTable ftrsTable,
                        FemLocalIndex index,
                        RelOptConnection connection,
                        Integer[] projectedColumns,
                        boolean isOrderPreserving)
Creates a new FtrsIndexScanRel object.

Parameters:
cluster - RelOptCluster for this rel
ftrsTable - table being scanned
index - index to use for table access
connection - connection
projectedColumns - array of 0-based table-relative column ordinals, or null to project all columns
isOrderPreserving - if true, returned rows must be in index order; if false, rows can be returned out of order
Method Detail

getIndexGuide

public FtrsIndexGuide getIndexGuide()

getColumnForFieldAccess

public FemAbstractColumn getColumnForFieldAccess(int fieldOrdinal)
Gets the column referenced by a FieldAccess relative to this scan.

Parameters:
fieldOrdinal - 0-based ordinal of an output field of the scan
Returns:
underlying column

clone

public FtrsIndexScanRel clone()
Description copied from interface: RelNode
Clones this RelNode.

Traits of the RelNode must be explicitly cloned, using AbstractRelNode.inheritTraitsFrom(AbstractRelNode), as the RelNode may have traits of which it has no knowledge. Example implementation:

     public MyRelNode clone()
     {
         MyRelNode clone = new MyRelNode(...);
         clone.inheritTraitsFrom(this);
         return clone;
     }
 
N.B.: This method must be overridden whenever an existing, concrete RelNode is extended. Otherwise, calling clone() will produce a differently typed RelNode, resulting in invalid or incorrect query plans.

Specified by:
clone in interface RelNode
Overrides:
clone in class TableAccessRelBase
Returns:
a clone of this RelNode

computeSelfCost

public RelOptCost computeSelfCost(RelOptPlanner planner)
Description copied from interface: RelNode
Returns the cost of this plan (not including children). The base implementation throws an error; derived classes should override.

NOTE jvs 29-Mar-2006: Don't call this method directly. Instead, use RelMetadataQuery.getNonCumulativeCost(org.eigenbase.rel.RelNode), which gives plugins a chance to override the rel's default ideas about cost.

Specified by:
computeSelfCost in interface RelNode
Overrides:
computeSelfCost in class TableAccessRelBase

deriveRowType

public RelDataType deriveRowType()
Overrides:
deriveRowType in class TableAccessRelBase

explain

public void explain(RelOptPlanWriter pw)
Specified by:
explain in interface RelNode
Overrides:
explain in class TableAccessRelBase

implementFennelChild

public Object implementFennelChild(FennelRelImplementor implementor)
Description copied from interface: FennelRel
Visits this relational expression as part of the implementation process. Fennel relational expressions are implemented in a two-phase process: first call this method, then call FennelRel.toStreamDef(net.sf.farrago.query.FennelRelImplementor).

Specified by:
implementFennelChild in interface FennelRel

toStreamDef

public FemExecutionStreamDef toStreamDef(FennelRelImplementor implementor)
Description copied from interface: FennelRel
Converts this relational expression to FemExecutionStreamDef form. In the process, the relational expression will almost certainly call FennelRelImplementor.visitFennelChild(net.sf.farrago.query.FennelRel, int) on each of its children.

Specified by:
toStreamDef in interface FennelRel
Parameters:
implementor - for generating Java code
Returns:
generated FemExecutionStreamDef

computeCost

RelOptCost computeCost(RelOptPlanner planner,
                       double dRows)

defineScanStream

void defineScanStream(FemIndexScanDef scanStream)
Fills in a stream definition for this scan.

Parameters:
scanStream - stream definition to fill in

computeProjectedColumns

private Integer[] computeProjectedColumns()

getCollations

public RelFieldCollation[] getCollations()
Description copied from interface: FennelRel

TODO: jhyde, 2006/3/28: unify with RelNode.getCollationList()

Specified by:
getCollations in interface FennelRel
Returns:
the sort order produced by this FennelRel, or an empty array if the output is not guaranteed to be in any particular order.