org.apache.derby.impl.sql.compile
Class UserTypeConstantNode
java.lang.Object
org.apache.derby.impl.sql.compile.QueryTreeNode
org.apache.derby.impl.sql.compile.ValueNode
org.apache.derby.impl.sql.compile.ConstantNode
org.apache.derby.impl.sql.compile.UserTypeConstantNode
- All Implemented Interfaces:
- Visitable
public class UserTypeConstantNode
- extends ConstantNode
User type constants. These are created by built-in types
that use user types as their implementation. This could also
potentially be used by an optimizer that wanted to store plans
for frequently-used parameter values.
This is also used to represent nulls in user types, which occurs
when NULL is inserted into or supplied as the update value for
a usertype column.
Field Summary |
(package private) java.lang.Object |
value
|
Method Summary |
(package private) void |
generateConstant(ExpressionClassBuilder acb,
MethodBuilder mb)
Should never be called for UserTypeConstantNode because
we have our own generateExpression(). |
void |
generateExpression(ExpressionClassBuilder acb,
MethodBuilder mb)
For a UserTypeConstantNode, we have to store away the object somewhere
and have a way to get it back at runtime. |
java.lang.Object |
getConstantValueAsObject()
Return an Object representing the bind time value of this
expression tree. |
java.lang.Object |
getObjectValue()
Return the object value of this user defined type. |
void |
init(java.lang.Object arg1)
Initializer for a typed null node
or a date, time, or timestamp value. |
boolean |
isNull()
Return whether or not this node represents a typed null constant. |
Methods inherited from class org.apache.derby.impl.sql.compile.ConstantNode |
bindExpression, constantExpression, getClone, getOrderableVariantType, getValue, init, isCloneable, isConstantExpression, isEquivalent, setValue, toString |
Methods inherited from class org.apache.derby.impl.sql.compile.ValueNode |
bindExpression, categorize, changeToCNF, checkIsBoolean, checkTopPredicatesForEqualsConditions, copyFields, eliminateNots, evaluateConstantExpressions, genEqualsFalseTree, generate, generateFilter, genIsNullTree, genSQLJavaSQLTree, getColumnName, getDataValueFactory, getSchemaName, getSourceResultColumn, getTableName, getTablesReferenced, getTransformed, getTypeCompiler, getTypeId, getTypeServices, init, isBinaryEqualsOperatorNode, isBooleanFalse, isBooleanTrue, isInListProbeNode, isParameterNode, isRelationalOperator, isSameNodeType, optimizableEqualityNode, preprocess, putAndsOnTop, remapColumnReferencesToExpressions, requiresTypeFromContext, selectivity, setCollationInfo, setCollationInfo, setCollationUsingCompilationSchema, setCollationUsingCompilationSchema, setNullability, setTransformed, setType, setType, setType, updatableByCursor, verifyChangeToCNF, verifyEliminateNots, verifyPutAndsOnTop |
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, isAtomic, isInstanceOf, isPrivilegeCollectionRequired, isSessionSchema, isSessionSchema, makeConstantAction, makeTableName, makeTableName, nodeHeader, orReliability, parseStatement, printLabel, printSubNodes, referencesSessionSchema, resolveTableToSynonym, setBeginOffset, setContextManager, setEndOffset, setNodeType, setRefActionInfo, stackPrint, treePrint, treePrint, verifyClassExist |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
value
java.lang.Object value
UserTypeConstantNode
public UserTypeConstantNode()
init
public void init(java.lang.Object arg1)
throws StandardException
- Initializer for a typed null node
or a date, time, or timestamp value. Parameters may be:
- arg1 The TypeId for the type of the node
- arg2 The factory to get the TypeId and DataTypeServices factories from.
- OR -
- arg1 the date, time, or timestamp value
- Overrides:
init
in class QueryTreeNode
- Throws:
StandardException
- thrown on failure
getObjectValue
public java.lang.Object getObjectValue()
- Return the object value of this user defined type.
- Returns:
- the value of this constant. can't use getValue() for this.
getValue() returns the DataValueDescriptor for the built-in
types that are implemented as user types (date, time, timestamp)
isNull
public boolean isNull()
- Return whether or not this node represents a typed null constant.
- Overrides:
isNull
in class ConstantNode
getConstantValueAsObject
public java.lang.Object getConstantValueAsObject()
- Return an Object representing the bind time value of this
expression tree. If the expression tree does not evaluate to
a constant at bind time then we return null.
This is useful for bind time resolution of VTIs.
RESOLVE: What do we do for primitives?
- Overrides:
getConstantValueAsObject
in class ValueNode
- Returns:
- An Object representing the bind time value of this expression tree.
(null if not a bind time constant.)
generateExpression
public void generateExpression(ExpressionClassBuilder acb,
MethodBuilder mb)
throws StandardException
- For a UserTypeConstantNode, we have to store away the object somewhere
and have a way to get it back at runtime.
These objects are serializable. This gives us at least two options:
1) serialize it out into a byte array field, and serialize
it back in when needed, from the field.
2) have an array of objects in the prepared statement and a #,
to find the object directly. Because it is serializable, it
will store with the rest of the executable just fine.
Choice 2 gives better performance -- the ser/deser cost is paid
on database access for the statement, not for each execution of it.
However, it requires some infrastructure support from prepared
statements. For now, we take choice 3, and make some assumptions
about available methods on the user type. This choice has the
shortcoming that it will not work for arbitrary user types.
REVISIT and implement choice 2 when a general solution is needed.
A null is generated as a Null value cast to the type of
the constant node.
- Overrides:
generateExpression
in class ConstantNode
- Parameters:
acb
- The ExpressionClassBuilder for the class being builtmb
- The method the expression will go into
- Throws:
StandardException
- Thrown on error
generateConstant
void generateConstant(ExpressionClassBuilder acb,
MethodBuilder mb)
throws StandardException
- Should never be called for UserTypeConstantNode because
we have our own generateExpression().
- Specified by:
generateConstant
in class ConstantNode
- Parameters:
acb
- The ExpressionClassBuilder for the class being builtmb
- The method the expression will go into
- Throws:
StandardException
- Thrown on error
Apache Derby V10.6 Internals - Copyright © 2004,2007 The Apache Software Foundation. All Rights Reserved.