net.sf.farrago.query
Class IteratorToFennelConverter

java.lang.Object
  extended by org.eigenbase.rel.AbstractRelNode
      extended by org.eigenbase.rel.SingleRel
          extended by org.eigenbase.rel.convert.ConverterRelImpl
              extended by net.sf.farrago.query.IteratorToFennelConverter
All Implemented Interfaces:
Cloneable, FennelRel, ConverterRel, RelNode

public class IteratorToFennelConverter
extends ConverterRelImpl
implements FennelRel, ConverterRel

IteratorToFennelConverter is a Converter from the iterator calling convention to the fennel calling convention.

Version:
$Id: //open/dev/farrago/src/net/sf/farrago/query/IteratorToFennelConverter.java#42 $
Author:
John V. Sichi

Nested Class Summary
private static class IteratorToFennelConverter.ChildStream
           
private static class IteratorToFennelConverter.IteratorToFennelPullRule
          Rule which converts a RelNode of Fennel calling convention to iterator calling convention by adding a IteratorToFennelConverter.
 
Field Summary
private  Map<List<FarragoRelImplementor.RelPathEntry>,List<IteratorToFennelConverter.ChildStream>> childStreamDefsMap
           
static String CONNECTION_VAR_NAME
           
private  Map<List<FarragoRelImplementor.RelPathEntry>,String> farragoTransformClassNameMap
           
(package private)  List<FarragoRelImplementor.RelPathEntry> fennelRelPath
          The RelNode path that leads to this node when invoking this node to setup the Fennel child streams
static String INPUT_BINDINGS_VAR_NAME
           
(package private)  List<FarragoRelImplementor.RelPathEntry> javaRelPath
          The RelNode path that leads to this node when invoking this node to generate Java code
static IteratorToFennelConverter.IteratorToFennelPullRule Rule
           
static String STREAM_NAME_VAR_NAME
           
protected static Logger tracer
           
 
Fields inherited from class org.eigenbase.rel.convert.ConverterRelImpl
inTraits, traitDef
 
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
 
Fields inherited from interface org.eigenbase.rel.RelNode
emptyArray
 
Constructor Summary
IteratorToFennelConverter(RelOptCluster cluster, RelNode child)
          Creates a new IteratorToFennelConverter object.
 
Method Summary
 IteratorToFennelConverter clone()
          Clones this RelNode.
private static ClassDeclaration generateTransformer(FarragoPreparingStmt stmt, String className, FarragoRelImplementor implementor, Expression tupleWriterExpression, Expression childExp)
           
static Expression generateTupleWriter(FarragoPreparingStmt stmt, JavaRelImplementor implementor, RelDataType rowType)
           
 RelFieldCollation[] getCollations()
          TODO: jhyde, 2006/3/28: unify with RelNode.getCollationList()
 Object implementFennelChild(FennelRelImplementor implementor)
          Visits this relational expression as part of the implementation process.
protected  void initFennelInvocation(List<FarragoRelImplementor.RelPathEntry> relPath)
           
protected  void initJavaInvocation(List<FarragoRelImplementor.RelPathEntry> relPath)
           
protected  FemJavaTransformStreamDef newJavaTransformStreamDef(FennelRelImplementor implementor)
           
static void register(RelOptPlanner planner)
          Registers this relational expression and rule(s) with the planner, as per AbstractRelNode.register(org.eigenbase.relopt.RelOptPlanner).
(package private)  void registerChildStreamDef(FemExecutionStreamDef childStreamDef, boolean implicit)
          Registers the FemExecutionStreamDef(s) that provide input to this converter's FemExecutionStreamDef (either explicitly or implicitly).
protected  void setFarragoTransformClassName(String className)
           
 FemExecutionStreamDef toStreamDef(FennelRelImplementor implementor)
          Converts this relational expression to FemExecutionStreamDef form.
 
Methods inherited from class org.eigenbase.rel.convert.ConverterRelImpl
cannotImplement, computeSelfCost, convertTraits, getInputConvention, getInputTraits, getTraitDef, isDistinct
 
Methods inherited from class org.eigenbase.rel.SingleRel
childrenAccept, deriveRowType, explain, getChild, getInputs, getRows, replaceInput
 
Methods inherited from class org.eigenbase.rel.AbstractRelNode
cloneTraits, collectVariablesSet, collectVariablesUsed, computeDigest, getChildExps, getCluster, getCollationList, getConvention, getCorrelVariable, getDescription, getDigest, getExpectedInputRowType, getId, getInput, getOrCreateCorrelVariable, getQuery, getRelTypeName, getRowType, getTable, getTraits, getVariablesStopped, inheritTraitsFrom, isAccessTo, isValid, onRegister, recomputeDigest, registerCorrelVariable, 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, computeSelfCost, explain, 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
 
Methods inherited from interface org.eigenbase.rel.convert.ConverterRel
getChild, getInputTraits, getTraitDef
 
Methods inherited from interface org.eigenbase.rel.RelNode
childrenAccept, collectVariablesSet, collectVariablesUsed, computeSelfCost, explain, 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

CONNECTION_VAR_NAME

public static final String CONNECTION_VAR_NAME
See Also:
Constant Field Values

INPUT_BINDINGS_VAR_NAME

public static final String INPUT_BINDINGS_VAR_NAME
See Also:
Constant Field Values

STREAM_NAME_VAR_NAME

public static final String STREAM_NAME_VAR_NAME
See Also:
Constant Field Values

Rule

public static final IteratorToFennelConverter.IteratorToFennelPullRule Rule

tracer

protected static final Logger tracer

javaRelPath

List<FarragoRelImplementor.RelPathEntry> javaRelPath
The RelNode path that leads to this node when invoking this node to generate Java code


fennelRelPath

List<FarragoRelImplementor.RelPathEntry> fennelRelPath
The RelNode path that leads to this node when invoking this node to setup the Fennel child streams


farragoTransformClassNameMap

private Map<List<FarragoRelImplementor.RelPathEntry>,String> farragoTransformClassNameMap

childStreamDefsMap

private Map<List<FarragoRelImplementor.RelPathEntry>,List<IteratorToFennelConverter.ChildStream>> childStreamDefsMap
Constructor Detail

IteratorToFennelConverter

public IteratorToFennelConverter(RelOptCluster cluster,
                                 RelNode child)
Creates a new IteratorToFennelConverter object.

Parameters:
cluster - RelOptCluster for this rel
child - input rel producing rows to be converted to Fennel
Method Detail

clone

public IteratorToFennelConverter 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

generateTupleWriter

public static Expression generateTupleWriter(FarragoPreparingStmt stmt,
                                             JavaRelImplementor implementor,
                                             RelDataType rowType)

generateTransformer

private static ClassDeclaration generateTransformer(FarragoPreparingStmt stmt,
                                                    String className,
                                                    FarragoRelImplementor implementor,
                                                    Expression tupleWriterExpression,
                                                    Expression childExp)

initJavaInvocation

protected void initJavaInvocation(List<FarragoRelImplementor.RelPathEntry> relPath)

initFennelInvocation

protected void initFennelInvocation(List<FarragoRelImplementor.RelPathEntry> relPath)

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

registerChildStreamDef

void registerChildStreamDef(FemExecutionStreamDef childStreamDef,
                            boolean implicit)
Registers the FemExecutionStreamDef(s) that provide input to this converter's FemExecutionStreamDef (either explicitly or implicitly).

Parameters:
childStreamDef - child stream def to register
implicit - true if dataflow is implicit via a UDX reading from a cursor; false if explicit as an input into this converter's FemExecutionStreamDef

setFarragoTransformClassName

protected void setFarragoTransformClassName(String className)

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

newJavaTransformStreamDef

protected FemJavaTransformStreamDef newJavaTransformStreamDef(FennelRelImplementor implementor)

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.

register

public static void register(RelOptPlanner planner)
Registers this relational expression and rule(s) with the planner, as per AbstractRelNode.register(org.eigenbase.relopt.RelOptPlanner).

Parameters:
planner - Planner