org.apache.derby.impl.sql.compile
Class JavaValueNode

java.lang.Object
  extended by org.apache.derby.impl.sql.compile.QueryTreeNode
      extended by org.apache.derby.impl.sql.compile.JavaValueNode
All Implemented Interfaces:
Visitable
Direct Known Subclasses:
GetCurrentConnectionNode, MethodCallNode, SQLToJavaValueNode, StaticClassFieldReferenceNode

abstract class JavaValueNode
extends QueryTreeNode

This abstract node class represents a data value in the Java domain.


Field Summary
private  int collationType
           
protected  boolean forCallStatement
           
protected  JSQLType jsqlType
           
private  boolean mustCastToPrimitive
           
private  LocalField receiverField
           
private  boolean returnValueDiscarded
           
private  boolean valueReturnedToSQLDomain
           
 
Fields inherited from class org.apache.derby.impl.sql.compile.QueryTreeNode
AUTOINCREMENT_CREATE_MODIFY, AUTOINCREMENT_INC_INDEX, AUTOINCREMENT_IS_AUTOINCREMENT_INDEX, AUTOINCREMENT_START_INDEX, isPrivilegeCollectionRequired
 
Constructor Summary
JavaValueNode()
           
 
Method Summary
(package private) abstract  JavaValueNode bindExpression(FromList fromList, SubqueryList subqueryList, java.util.Vector aggregateVector)
           
 void castToPrimitive(boolean booleanValue)
          Toggles whether the code generator should add a cast to extract a primitive value from an object.
abstract  boolean categorize(JBitSet referencedTabs, boolean simplePredsOnly)
           
 void checkReliability(ValueNode sqlNode)
          Check the reliability type of this java value.
protected  void generate(ActivationClassBuilder acb, MethodBuilder mb)
          Do the code generation for this node.
protected abstract  void generateExpression(ExpressionClassBuilder acb, MethodBuilder mb)
          General logic shared by Core compilation and by the Replication Filter compiler.
protected  boolean generateReceiver(ExpressionClassBuilder acb, MethodBuilder mb)
          Generate the expression that evaluates to the receiver.
protected  boolean generateReceiver(ExpressionClassBuilder acb, MethodBuilder mb, JavaValueNode receiver)
          Generate the expression that evaluates to the receiver.
 int getCollationType()
           
(package private)  java.lang.Object getConstantValueAsObject()
           
 DataTypeDescriptor getDataType()
          Get the resolved data type of this node.
 java.lang.String getJavaTypeName()
           
 JSQLType getJSQLType()
          Get the JSQLType that corresponds to this node.
protected  int getOrderableVariantType()
          Return the variant type for the underlying expression.
 java.lang.String getPrimitiveTypeName()
           
protected  void getReceiverExpression(ExpressionClassBuilder acb, MethodBuilder mb, JavaValueNode receiver)
          Get an expression that has the value of the receiver.
 boolean isPrimitiveType()
           
 TypeId mapToTypeID(JSQLType jsqlType)
          Map a JSQLType to a compilation type id.
 void markForCallStatement()
          Mark this node as being for a CALL Statement.
protected  void markReturnValueDiscarded()
          Tell this node that nothing is done with the returned value
 boolean mustCastToPrimitive()
          Reports whether the code generator should add a cast to extract a primitive value from an object.
abstract  void preprocess(int numTables, FromList outerFromList, SubqueryList outerSubqueryList, PredicateList outerPredicateList)
           
abstract  JavaValueNode remapColumnReferencesToExpressions()
           
protected  boolean returnValueDiscarded()
          Tell whether the return value from this node is discarded
protected  void returnValueToSQLDomain()
          Inform this node that it returns its value to the SQL domain
 void setCollationType(int type)
          Set the collation type.
 void setJavaTypeName(java.lang.String javaTypeName)
           
protected  boolean valueReturnedToSQLDomain()
          Tell whether this node returns its value to the SQL domain
 
Methods inherited from class org.apache.derby.impl.sql.compile.QueryTreeNode
accept, acceptChildren, bindOffsetFetch, bindRowMultiSet, bindUserType, checkReliability, checkReliability, convertDefaultNode, createTypeDependency, debugFlush, debugPrint, disablePrivilegeCollection, formatNodeString, foundString, generateAuthorizeCheck, getBeginOffset, getClassFactory, getCompilerContext, getContextManager, getCursorInfo, getDataDictionary, getDependencyManager, getEndOffset, getExecutionFactory, getGenericConstantActionFactory, getIntProperty, getLanguageConnectionContext, getNodeFactory, getNodeType, getNullNode, getParameterTypes, getRowEstimate, getSchemaDescriptor, getSchemaDescriptor, getStatementType, getTableDescriptor, getTypeCompiler, init, init, init, init, init, init, init, init, init, init, init, init, init, init, isAtomic, isInstanceOf, isPrivilegeCollectionRequired, isSessionSchema, isSessionSchema, makeConstantAction, makeTableName, makeTableName, nodeHeader, orReliability, parseStatement, printLabel, printSubNodes, referencesSessionSchema, resolveTableToSynonym, setBeginOffset, setContextManager, setEndOffset, setNodeType, setRefActionInfo, stackPrint, toString, treePrint, treePrint, verifyClassExist
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

mustCastToPrimitive

private boolean mustCastToPrimitive

forCallStatement

protected boolean forCallStatement

valueReturnedToSQLDomain

private boolean valueReturnedToSQLDomain

returnValueDiscarded

private boolean returnValueDiscarded

jsqlType

protected JSQLType jsqlType

receiverField

private LocalField receiverField

collationType

private int collationType
Constructor Detail

JavaValueNode

JavaValueNode()
Method Detail

getDataType

public DataTypeDescriptor getDataType()
                               throws StandardException
Get the resolved data type of this node. May be overridden by descendants.

Throws:
StandardException

isPrimitiveType

public boolean isPrimitiveType()
                        throws StandardException
Throws:
StandardException

getJavaTypeName

public java.lang.String getJavaTypeName()
                                 throws StandardException
Throws:
StandardException

setJavaTypeName

public void setJavaTypeName(java.lang.String javaTypeName)

getPrimitiveTypeName

public java.lang.String getPrimitiveTypeName()
                                      throws StandardException
Throws:
StandardException

castToPrimitive

public void castToPrimitive(boolean booleanValue)
Toggles whether the code generator should add a cast to extract a primitive value from an object.

Parameters:
booleanValue - true if we want the code generator to add a cast false otherwise

mustCastToPrimitive

public boolean mustCastToPrimitive()
Reports whether the code generator should add a cast to extract a primitive value from an object.

Returns:
true if we want the code generator to add a cast false otherwise

getJSQLType

public JSQLType getJSQLType()
                     throws StandardException
Get the JSQLType that corresponds to this node. Could be a SQLTYPE, a Java primitive, or a Java class.

Returns:
the corresponding JSQLType
Throws:
StandardException

mapToTypeID

public TypeId mapToTypeID(JSQLType jsqlType)
                   throws StandardException
Map a JSQLType to a compilation type id.

Parameters:
jsqlType - the universal type to map
Returns:
the corresponding compilation type id
Throws:
StandardException

markForCallStatement

public void markForCallStatement()
Mark this node as being for a CALL Statement. (void methods are only okay for CALL Statements)


remapColumnReferencesToExpressions

public abstract JavaValueNode remapColumnReferencesToExpressions()
                                                          throws StandardException
Throws:
StandardException - Thrown on error
See Also:
ValueNode.remapColumnReferencesToExpressions()

categorize

public abstract boolean categorize(JBitSet referencedTabs,
                                   boolean simplePredsOnly)
                            throws StandardException
Throws:
StandardException - Thrown on error
See Also:
ValueNode.categorize(org.apache.derby.iapi.util.JBitSet, boolean)

bindExpression

abstract JavaValueNode bindExpression(FromList fromList,
                                      SubqueryList subqueryList,
                                      java.util.Vector aggregateVector)
                               throws StandardException
Returns:
the new node, usually this
Throws:
StandardException - Thrown on error
See Also:
ValueNode.bindExpression(org.apache.derby.impl.sql.compile.FromList, org.apache.derby.impl.sql.compile.SubqueryList, java.util.Vector)

preprocess

public abstract void preprocess(int numTables,
                                FromList outerFromList,
                                SubqueryList outerSubqueryList,
                                PredicateList outerPredicateList)
                         throws StandardException
Throws:
StandardException - Thrown on error
See Also:
ValueNode.preprocess(int, org.apache.derby.impl.sql.compile.FromList, org.apache.derby.impl.sql.compile.SubqueryList, org.apache.derby.impl.sql.compile.PredicateList)

getConstantValueAsObject

java.lang.Object getConstantValueAsObject()
                                    throws StandardException
Throws:
StandardException - Thrown on error
See Also:
ValueNode.getConstantValueAsObject()

generate

protected final void generate(ActivationClassBuilder acb,
                              MethodBuilder mb)
                       throws StandardException
Do the code generation for this node. Call the more general routine that generates expressions.

Overrides:
generate in class QueryTreeNode
Parameters:
acb - The ActivationClassBuilder for the class being built
mb - the method the expression will go into
Throws:
StandardException - Thrown on error

generateReceiver

protected boolean generateReceiver(ExpressionClassBuilder acb,
                                   MethodBuilder mb)
                            throws StandardException
Generate the expression that evaluates to the receiver. This is for the case where a java expression is being returned to the SQL domain, and we need to check whether the receiver is null (if so, the SQL value should be set to null, and this Java expression not evaluated). Instance method calls and field references have receivers, while class method calls and calls to constructors do not. If this Java expression does not have a receiver, this method returns null. The implementation of this method should only generate the receiver once and cache it in a field. This is because there will be two references to the receiver, and we want to evaluate it only once.

Parameters:
acb - The ExpressionClassBuilder for the class being built
mb - the method the expression will go into
Returns:
True if has compiled receiver.
Throws:
StandardException - Thrown on error

getOrderableVariantType

protected int getOrderableVariantType()
                               throws StandardException
Return the variant type for the underlying expression. The variant type can be: VARIANT - variant within a scan (method calls and non-static field access) SCAN_INVARIANT - invariant within a scan (column references from outer tables) QUERY_INVARIANT - invariant within the life of a query (constant expressions)

Returns:
The variant type for the underlying expression.
Throws:
StandardException

generateExpression

protected abstract void generateExpression(ExpressionClassBuilder acb,
                                           MethodBuilder mb)
                                    throws StandardException
General logic shared by Core compilation and by the Replication Filter compiler. Every child of ValueNode must implement one of these methods.

Parameters:
acb - The ExpressionClassBuilder for the class being built
mb - the method the expression will go into
Throws:
StandardException - Thrown on error

generateReceiver

protected final boolean generateReceiver(ExpressionClassBuilder acb,
                                         MethodBuilder mb,
                                         JavaValueNode receiver)
                                  throws StandardException
Generate the expression that evaluates to the receiver. This is for the case where a java expression is being returned to the SQL domain, and we need to check whether the receiver is null (if so, the SQL value should be set to null, and this Java expression not evaluated). Instance method calls and field references have receivers, while class method calls and calls to constructors do not. If this Java expression does not have a receiver, this method returns null. This also covers the case where a java expression is being returned to the Java domain. In this case, we need to check whether the receiver is null only if the value returned by the Java expression is an object (not a primitive type). We don't want to generate the expression here if we are returning a primitive type to the Java domain, because there's no point in checking whether the receiver is null in this case (we can't make the expression return a null value). Only generate the receiver once and cache it in a field. This is because there will be two references to the receiver, and we want to evaluate it only once.

Parameters:
acb - The ActivationClassBuilder for the class being built
mb - the method the expression will go into
receiver - The query tree form of the receiver expression
Returns:
The compiled receiver, if any.
Throws:
StandardException - Thrown on error

getReceiverExpression

protected final void getReceiverExpression(ExpressionClassBuilder acb,
                                           MethodBuilder mb,
                                           JavaValueNode receiver)
                                    throws StandardException
Get an expression that has the value of the receiver. If a field holding the receiver value was already generated, use that. If not, generate the receiver value.

Parameters:
acb - The ExpressionClassBuilder for the class we're generating
mb - the method the expression will go into
receiver - The query tree form of the receiver expression
Throws:
StandardException - Thrown on error

returnValueToSQLDomain

protected void returnValueToSQLDomain()
Inform this node that it returns its value to the SQL domain


valueReturnedToSQLDomain

protected boolean valueReturnedToSQLDomain()
Tell whether this node returns its value to the SQL domain


markReturnValueDiscarded

protected void markReturnValueDiscarded()
Tell this node that nothing is done with the returned value


returnValueDiscarded

protected boolean returnValueDiscarded()
Tell whether the return value from this node is discarded


checkReliability

public void checkReliability(ValueNode sqlNode)
                      throws StandardException
Check the reliability type of this java value.

Throws:
StandardException - Thrown on error
See Also:
CompilerContext

getCollationType

public int getCollationType()
Returns:
collationType as set by setCollationType

setCollationType

public void setCollationType(int type)
Set the collation type. This will be used to determine the collation type for the SQLToJavaValueNode.

Parameters:
type - one of StringDataValue.COLLATION_TYPE_UCS_BASIC or StringDataValue.COLLATION_TYPE_TERRITORY_BASED

Built on Thu 2010-12-23 20:49:13+0000, from revision ???

Apache Derby V10.6 Internals - Copyright © 2004,2007 The Apache Software Foundation. All Rights Reserved.