Class JavaValueNode
java.lang.Object
org.apache.derby.impl.sql.compile.QueryTreeNode
org.apache.derby.impl.sql.compile.JavaValueNode
- All Implemented Interfaces:
Visitable
- Direct Known Subclasses:
GetCurrentConnectionNode
,MethodCallNode
,SQLToJavaValueNode
,StaticClassFieldReferenceNode
This abstract node class represents a data value in the Java domain.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate int
protected boolean
protected JSQLType
private boolean
private LocalField
private boolean
private boolean
Fields inherited from class org.apache.derby.impl.sql.compile.QueryTreeNode
AUTOINCREMENT_CREATE_MODIFY, AUTOINCREMENT_CYCLE, AUTOINCREMENT_INC_INDEX, AUTOINCREMENT_IS_AUTOINCREMENT_INDEX, AUTOINCREMENT_START_INDEX
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription(package private) abstract JavaValueNode
bindExpression
(FromList fromList, SubqueryList subqueryList, List<AggregateNode> aggregates) (package private) final void
castToPrimitive
(boolean booleanValue) Toggles whether the code generator should add a cast to extract a primitive value from an object.(package private) abstract boolean
categorize
(JBitSet referencedTabs, boolean simplePredsOnly) (package private) void
checkReliability
(ValueNode sqlNode) Check the reliability type of this java value.(package private) final void
generate
(ActivationClassBuilder acb, MethodBuilder mb) Do the code generation for this node.(package private) abstract void
General logic shared by Core compilation and by the Replication Filter compiler.(package private) boolean
Generate the expression that evaluates to the receiver.(package private) final boolean
generateReceiver
(ExpressionClassBuilder acb, MethodBuilder mb, JavaValueNode receiver) Generate the expression that evaluates to the receiver.(package private) int
(package private) Object
(package private) DataTypeDescriptor
Get the resolved data type of this node.(package private) String
(package private) JSQLType
Get the JSQLType that corresponds to this node.(package private) int
Return the variant type for the underlying expression.(package private) String
(package private) final void
getReceiverExpression
(ExpressionClassBuilder acb, MethodBuilder mb, JavaValueNode receiver) Get an expression that has the value of the receiver.(package private) final boolean
(package private) static TypeId
mapToTypeID
(JSQLType jsqlType) Map a JSQLType to a compilation type id.(package private) final void
Mark this node as being for a CALL Statement.(package private) void
Tell this node that nothing is done with the returned value(package private) final boolean
Reports whether the code generator should add a cast to extract a primitive value from an object.(package private) abstract void
preprocess
(int numTables, FromList outerFromList, SubqueryList outerSubqueryList, PredicateList outerPredicateList) (package private) abstract JavaValueNode
(package private) boolean
Tell whether the return value from this node is discarded(package private) void
Inform this node that it returns its value to the SQL domain(package private) void
setCollationType
(int type) Set the collation type.(package private) final void
setJavaTypeName
(String javaTypeName) (package private) boolean
Tell whether this node returns its value to the SQL domainMethods inherited from class org.apache.derby.impl.sql.compile.QueryTreeNode
accept, acceptChildren, addTag, addUDTUsagePriv, addUDTUsagePriv, bindOffsetFetch, bindRowMultiSet, bindUserCatalogType, bindUserType, checkReliability, checkReliability, convertDefaultNode, copyTagsFrom, createTypeDependency, debugFlush, debugPrint, disablePrivilegeCollection, formatNodeString, generateAuthorizeCheck, getBeginOffset, getClassFactory, getCompilerContext, getContext, getContextManager, getDataDictionary, getDependencyManager, getEndOffset, getExecutionFactory, getGenericConstantActionFactory, getIntProperty, getLanguageConnectionContext, getLongProperty, getNullNode, getOffsetOrderedNodes, getOptimizerFactory, getOptimizerTracer, getParameterTypes, getSchemaDescriptor, getSchemaDescriptor, getStatementType, getTableDescriptor, getTypeCompiler, getUDTDesc, isAtomic, isPrivilegeCollectionRequired, isSessionSchema, isSessionSchema, makeConstantAction, makeTableName, makeTableName, nodeHeader, optimizerTracingIsOn, orReliability, parseSearchCondition, parseStatement, printLabel, printSubNodes, referencesSessionSchema, resolveTableToSynonym, setBeginOffset, setEndOffset, setRefActionInfo, stackPrint, taggedWith, toString, treePrint, treePrint, verifyClassExist
-
Field Details
-
mustCastToPrimitive
private boolean mustCastToPrimitive -
forCallStatement
protected boolean forCallStatement -
valueReturnedToSQLDomain
private boolean valueReturnedToSQLDomain -
returnValueDiscarded
private boolean returnValueDiscarded -
jsqlType
-
receiverField
-
collationType
private int collationType
-
-
Constructor Details
-
JavaValueNode
JavaValueNode(ContextManager cm)
-
-
Method Details
-
getDataType
Get the resolved data type of this node. May be overridden by descendants.- Throws:
StandardException
-
isPrimitiveType
- Throws:
StandardException
-
getJavaTypeName
- Throws:
StandardException
-
setJavaTypeName
-
getPrimitiveTypeName
- Throws:
StandardException
-
castToPrimitive
final 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
final 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
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
Map a JSQLType to a compilation type id.- Parameters:
jsqlType
- the universal type to map- Returns:
- the corresponding compilation type id
- Throws:
StandardException
-
markForCallStatement
final void markForCallStatement()Mark this node as being for a CALL Statement. (void methods are only okay for CALL Statements) -
remapColumnReferencesToExpressions
- Throws:
StandardException
- Thrown on error- See Also:
-
categorize
abstract boolean categorize(JBitSet referencedTabs, boolean simplePredsOnly) throws StandardException - Throws:
StandardException
- Thrown on error- See Also:
-
bindExpression
abstract JavaValueNode bindExpression(FromList fromList, SubqueryList subqueryList, List<AggregateNode> aggregates) throws StandardException - Returns:
- the new node, usually this
- Throws:
StandardException
- Thrown on error- See Also:
-
preprocess
abstract void preprocess(int numTables, FromList outerFromList, SubqueryList outerSubqueryList, PredicateList outerPredicateList) throws StandardException - Throws:
StandardException
- Thrown on error- See Also:
-
getConstantValueAsObject
- Throws:
StandardException
- Thrown on error- See Also:
-
generate
Do the code generation for this node. Call the more general routine that generates expressions.- Overrides:
generate
in classQueryTreeNode
- Parameters:
acb
- The ActivationClassBuilder for the class being builtmb
- the method the expression will go into- Throws:
StandardException
- Thrown on error
-
generateReceiver
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 builtmb
- the method the expression will go into- Returns:
- True if has compiled receiver.
- Throws:
StandardException
- Thrown on error
-
getOrderableVariantType
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
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 builtmb
- the method the expression will go into- Throws:
StandardException
- Thrown on error
-
generateReceiver
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 builtmb
- the method the expression will go intoreceiver
- The query tree form of the receiver expression- Returns:
- The compiled receiver, if any.
- Throws:
StandardException
- Thrown on error
-
getReceiverExpression
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 generatingmb
- the method the expression will go intoreceiver
- The query tree form of the receiver expression- Throws:
StandardException
- Thrown on error
-
returnValueToSQLDomain
void returnValueToSQLDomain()Inform this node that it returns its value to the SQL domain -
valueReturnedToSQLDomain
boolean valueReturnedToSQLDomain()Tell whether this node returns its value to the SQL domain -
markReturnValueDiscarded
void markReturnValueDiscarded()Tell this node that nothing is done with the returned value -
returnValueDiscarded
boolean returnValueDiscarded()Tell whether the return value from this node is discarded -
checkReliability
Check the reliability type of this java value.- Throws:
StandardException
- Thrown on error- See Also:
-
getCollationType
int getCollationType()- Returns:
- collationType as set by setCollationType
-
setCollationType
void setCollationType(int type) Set the collation type. This will be used to determine the collation type for the SQLToJavaValueNode.- Parameters:
type
- one ofStringDataValue.COLLATION_TYPE_UCS_BASIC
orStringDataValue.COLLATION_TYPE_TERRITORY_BASED
-