|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.apache.derby.impl.sql.compile.QueryTreeNode
org.apache.derby.impl.sql.compile.JavaValueNode
org.apache.derby.impl.sql.compile.MethodCallNode
org.apache.derby.impl.sql.compile.StaticMethodCallNode
public class StaticMethodCallNode
A StaticMethodCallNode represents a static method call from a Class (as opposed to from an Object). For a procedure the call requires that the arguments be ? parameters. The parameter is *logically* passed into the method call a number of different ways.
For a application call like CALL MYPROC(?) the logically Java method call is
(in psuedo Java/SQL code) (examples with CHAR(10) parameter)
Fixed length IN parameters - com.acme.MyProcedureMethod(?)
Variable length IN parameters - com.acme.MyProcedureMethod(CAST (? AS CHAR(10))
Fixed length INOUT parameter -
String[] holder = new String[] {?}; com.acme.MyProcedureMethod(holder); ? = holder[0]
Variable length INOUT parameter -
String[] holder = new String[] {CAST (? AS CHAR(10)}; com.acme.MyProcedureMethod(holder); ? = CAST (holder[0] AS CHAR(10))
Fixed length OUT parameter -
String[] holder = new String[1]; com.acme.MyProcedureMethod(holder); ? = holder[0]
Variable length INOUT parameter -
String[] holder = new String[1]; com.acme.MyProcedureMethod(holder); ? = CAST (holder[0] AS CHAR(10))
For static method calls there is no pre-definition of an IN or INOUT parameter, so a call to CallableStatement.registerOutParameter() makes the parameter an INOUT parameter, provided: - the parameter is passed directly to the method call (no casts or expressions). - the method's parameter type is a Java array type. Since this is a dynmaic decision we compile in code to take both paths, based upon a boolean isINOUT which is dervied from the ParameterValueSet. Code is logically (only single parameter String[] shown here). Note, no casts can exist here. boolean isINOUT = getParameterValueSet().getParameterMode(0) == PARAMETER_IN_OUT; if (isINOUT) { String[] holder = new String[] {?}; com.acme.MyProcedureMethod(holder); ? = holder[0] } else { com.acme.MyProcedureMethod(?) }
Field Summary | |
---|---|
(package private) AliasDescriptor |
ad
|
private boolean |
alreadyBound
|
private int[] |
applicationParameterNumbers
|
private boolean |
isSystemCode
|
private LocalField[] |
outParamArrays
|
private TableName |
procedureName
|
private LocalField |
returnsNullOnNullState
Generated boolean field to hold the indicator for if any of the parameters to a RETURNS NULL ON NULL INPUT function are NULL. |
Fields inherited from class org.apache.derby.impl.sql.compile.MethodCallNode |
---|
actualMethodReturnType, internalCall, javaClassName, method, methodName, methodParameterTypes, methodParms, routineInfo, signature |
Fields inherited from class org.apache.derby.impl.sql.compile.JavaValueNode |
---|
forCallStatement, jsqlType |
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 | |
---|---|
StaticMethodCallNode()
|
Method Summary | |
---|---|
JavaValueNode |
bindExpression(FromList fromList,
SubqueryList subqueryList,
java.util.Vector aggregateVector)
Bind this expression. |
boolean |
categorize(JBitSet referencedTabs,
boolean simplePredsOnly)
Categorize this predicate. |
void |
generateExpression(ExpressionClassBuilder acb,
MethodBuilder mb)
Do code generation for this method call |
void |
generateOneParameter(ExpressionClassBuilder acb,
MethodBuilder mb,
int parameterNumber)
Push extra code to generate the casts within the arrays for the parameters passed as arrays. |
private void |
generateSetupNestedSessionContext(ActivationClassBuilder acb,
MethodBuilder mb)
Add code to set up the SQL session context for a stored procedure or function which needs a nested SQL session context (only needed for those which can contain SQL). |
(package private) int |
getPrivType()
Set default privilege of EXECUTE for this node. |
void |
init(java.lang.Object methodName,
java.lang.Object javaClassName)
Intializer for a NonStaticMethodCallNode |
private void |
optimizeDomainValueConversion()
If this SQL function has parameters which are SQLToJavaValueNode over JavaToSQLValueNode and the java value node underneath is a SQL function defined with CALLED ON NULL INPUT, then we can get rid of the wrapper nodes over the java value node for such parameters. |
private boolean |
permitsSQL(RoutineAliasInfo rai)
Returns true if the routine permits SQL. |
private void |
resolveRoutine(FromList fromList,
SubqueryList subqueryList,
java.util.Vector aggregateVector,
SchemaDescriptor sd)
Resolve a routine. |
java.lang.String |
toString()
Convert this object to a String. |
Methods inherited from class org.apache.derby.impl.sql.compile.MethodCallNode |
---|
acceptChildren, addParms, areParametersQueryInvariant, bindParameters, generateParameters, getCorrelationTables, getDataType, getIsParam, getJavaClassName, getMethodName, getMethodParameterClasses, getMethodParms, getObjectSignature, getOrderableVariantType, getParameterTypeName, getPrimitiveSignature, getResolvedMethod, getRoutineInfo, init, preprocess, printSubNodes, remapColumnReferencesToExpressions, resolveMethodCall, setNullParameterInfo, someParametersAreNull, throwNoMethodFound |
Methods inherited from class org.apache.derby.impl.sql.compile.JavaValueNode |
---|
castToPrimitive, checkReliability, generate, generateReceiver, generateReceiver, getCollationType, getConstantValueAsObject, getJavaTypeName, getJSQLType, getPrimitiveTypeName, getReceiverExpression, isPrimitiveType, mapToTypeID, markForCallStatement, markReturnValueDiscarded, mustCastToPrimitive, returnValueDiscarded, returnValueToSQLDomain, setCollationType, setJavaTypeName, valueReturnedToSQLDomain |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
private TableName procedureName
private LocalField[] outParamArrays
private int[] applicationParameterNumbers
private boolean isSystemCode
private boolean alreadyBound
private LocalField returnsNullOnNullState
AliasDescriptor ad
Constructor Detail |
---|
public StaticMethodCallNode()
Method Detail |
---|
public void init(java.lang.Object methodName, java.lang.Object javaClassName)
init
in class QueryTreeNode
methodName
- The name of the method to calljavaClassName
- The name of the java class that the static method belongs to.public JavaValueNode bindExpression(FromList fromList, SubqueryList subqueryList, java.util.Vector aggregateVector) throws StandardException
bindExpression
in class JavaValueNode
fromList
- The FROM list for the query this
expression is in, for binding columns.subqueryList
- The subquery list being built as we find SubqueryNodesaggregateVector
- The aggregate vector being built as we find AggregateNodes
StandardException
- Thrown on errorValueNode.bindExpression(org.apache.derby.impl.sql.compile.FromList, org.apache.derby.impl.sql.compile.SubqueryList, java.util.Vector)
private boolean permitsSQL(RoutineAliasInfo rai)
private void optimizeDomainValueConversion() throws StandardException
StandardException
private void resolveRoutine(FromList fromList, SubqueryList subqueryList, java.util.Vector aggregateVector, SchemaDescriptor sd) throws StandardException
fromList
- subqueryList
- aggregateVector
- sd
-
StandardException
private void generateSetupNestedSessionContext(ActivationClassBuilder acb, MethodBuilder mb)
acb
- activation class buildermb
- method builderLanguageConnectionContext.setupNestedSessionContext(org.apache.derby.iapi.sql.Activation)
public void generateOneParameter(ExpressionClassBuilder acb, MethodBuilder mb, int parameterNumber) throws StandardException
generateOneParameter
in class MethodCallNode
acb
- The ExpressionClassBuilder for the class we're generatingmb
- the method the expression will go intoparameterNumber
- Identifies which parameter to generate. 0 based.
StandardException
- Thrown on errorpublic boolean categorize(JBitSet referencedTabs, boolean simplePredsOnly) throws StandardException
categorize
in class MethodCallNode
referencedTabs
- JBitSet with bit map of referenced FromTablessimplePredsOnly
- Whether or not to consider method
calls, field references and conditional nodes
when building bit map
StandardException
- Thrown on errorValueNode.categorize(org.apache.derby.iapi.util.JBitSet, boolean)
public java.lang.String toString()
toString
in class MethodCallNode
public void generateExpression(ExpressionClassBuilder acb, MethodBuilder mb) throws StandardException
generateExpression
in class JavaValueNode
acb
- The ExpressionClassBuilder for the class we're generatingmb
- The method the expression will go into
StandardException
- Thrown on errorint getPrivType()
|
Built on Thu 2012-03-29 21:53:33+0000, from revision ??? | ||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |