org.eigenbase.rel
Class UncollectRel

java.lang.Object
  extended by org.eigenbase.rel.AbstractRelNode
      extended by org.eigenbase.rel.SingleRel
          extended by org.eigenbase.rel.UncollectRel
All Implemented Interfaces:
Cloneable, RelNode

public final class UncollectRel
extends SingleRel

A relational expression which unnests its input's sole column into a relation.

Like its inverse operation CollectRel, UncollectRel is generally invoked in a nested loop, driven by CorrelatorRel or similar.

Since:
Dec 12, 2004
Version:
$Id: //open/dev/farrago/src/org/eigenbase/rel/UncollectRel.java#17 $
Author:
Wael Chatila

Field Summary
 
Fields inherited from class org.eigenbase.rel.AbstractRelNode
digest, id, nextId, rowType, traits
 
Fields inherited from interface org.eigenbase.rel.RelNode
emptyArray
 
Constructor Summary
UncollectRel(RelOptCluster cluster, RelNode child)
          Creates an UncollectRel.
 
Method Summary
 UncollectRel clone()
          Clones this RelNode.
protected  RelDataType deriveRowType()
           
static RelDataType deriveUncollectRowType(RelNode rel)
          Returns the row type returned by applying the 'UNNEST' operation to a relational expression.
 
Methods inherited from class org.eigenbase.rel.SingleRel
childrenAccept, explain, getChild, getInputs, getRows, replaceInput
 
Methods inherited from class org.eigenbase.rel.AbstractRelNode
cloneTraits, collectVariablesSet, collectVariablesUsed, computeDigest, computeSelfCost, getChildExps, getCluster, getCollationList, getConvention, getCorrelVariable, getDescription, getDigest, getExpectedInputRowType, getId, getInput, getOrCreateCorrelVariable, getQuery, getRelTypeName, getRowType, getTable, getTraits, getVariablesStopped, inheritTraitsFrom, isAccessTo, isDistinct, isValid, onRegister, recomputeDigest, register, registerCorrelVariable, setCorrelVariable, toString
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

UncollectRel

public UncollectRel(RelOptCluster cluster,
                    RelNode child)
Creates an UncollectRel.

The row type of the child relational expression must contain precisely one column, that column must be a multiset of records.

Parameters:
cluster - Cluster the relational expression belongs to
child - Child relational expression
Method Detail

clone

public UncollectRel 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 SingleRel

deriveUncollectRowType

public static RelDataType deriveUncollectRowType(RelNode rel)
Returns the row type returned by applying the 'UNNEST' operation to a relational expression. The relational expression must have precisely one column, whose type must be a multiset of structs. The return type is the type of that column.