org.eigenbase.rel
Class ValuesRelBase

java.lang.Object
  extended by org.eigenbase.rel.AbstractRelNode
      extended by org.eigenbase.rel.ValuesRelBase
All Implemented Interfaces:
Cloneable, RelNode
Direct Known Subclasses:
FennelValuesRel, ValuesRel

public abstract class ValuesRelBase
extends AbstractRelNode

ValuesRelBase is an abstract base class for implementations of ValuesRel.

Version:
$Id: //open/dev/farrago/src/org/eigenbase/rel/ValuesRelBase.java#11 $
Author:
John V. Sichi

Field Summary
protected  List<List<RexLiteral>> tuples
           
 
Fields inherited from class org.eigenbase.rel.AbstractRelNode
digest, id, nextId, rowType, traits
 
Fields inherited from interface org.eigenbase.rel.RelNode
emptyArray
 
Constructor Summary
protected ValuesRelBase(RelOptCluster cluster, RelDataType rowType, List<List<RexLiteral>> tuples, RelTraitSet traits)
          Creates a new ValuesRelBase.
 
Method Summary
private  boolean assertRowType()
           
 ValuesRelBase clone()
          Clones this RelNode.
 RelOptCost computeSelfCost(RelOptPlanner planner)
          Returns the cost of this plan (not including children).
protected  RelDataType deriveRowType()
           
 void explain(RelOptPlanWriter pw)
           
 double getRows()
          Returns an estimate of the number of rows this relational expression will return.
 List<List<RexLiteral>> getTuples()
           
 
Methods inherited from class org.eigenbase.rel.AbstractRelNode
childrenAccept, cloneTraits, collectVariablesSet, collectVariablesUsed, computeDigest, getChildExps, getCluster, getCollationList, getConvention, getCorrelVariable, getDescription, getDigest, getExpectedInputRowType, getId, getInput, getInputs, getOrCreateCorrelVariable, getQuery, getRelTypeName, getRowType, getTable, 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
 

Field Detail

tuples

protected final List<List<RexLiteral>> tuples
Constructor Detail

ValuesRelBase

protected ValuesRelBase(RelOptCluster cluster,
                        RelDataType rowType,
                        List<List<RexLiteral>> tuples,
                        RelTraitSet traits)
Creates a new ValuesRelBase. Note that tuples passed in become owned by this rel (without a deep copy), so caller must not modify them after this call, otherwise bad things will happen.

Parameters:
cluster - .
rowType - row type for tuples produced by this rel
tuples - 2-dimensional array of tuple values to be produced; outer list contains tuples; each inner list is one tuple; all tuples must be of same length, conforming to rowType
Method Detail

getTuples

public List<List<RexLiteral>> getTuples()
Returns:
rows of literals represented by this rel

assertRowType

private boolean assertRowType()
Returns:
true if all tuples match rowType; otherwise, assert on mismatch

clone

public ValuesRelBase 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
Specified by:
clone in class AbstractRelNode
Returns:
a clone of this RelNode

deriveRowType

protected RelDataType deriveRowType()
Overrides:
deriveRowType in class AbstractRelNode

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 AbstractRelNode

getRows

public double getRows()
Description copied from interface: RelNode
Returns an estimate of the number of rows this relational expression will return.

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

Specified by:
getRows in interface RelNode
Overrides:
getRows in class AbstractRelNode

explain

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