public class StaticMethodCallNode extends MethodCallNode
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(?) }
javaClassName, methodName, methodParms
forCallStatement, jsqlType
AUTOINCREMENT_CREATE_MODIFY, AUTOINCREMENT_INC_INDEX, AUTOINCREMENT_IS_AUTOINCREMENT_INDEX, AUTOINCREMENT_START_INDEX
Constructor and Description |
---|
StaticMethodCallNode() |
Modifier and Type | Method and Description |
---|---|
void |
copyFrom(QueryTreeNode node)
Fill this node with a deep copy of the given node.
|
TableName |
getProcedureName() |
void |
init(java.lang.Object methodName,
java.lang.Object javaClassName)
Intializer for a NonStaticMethodCallNode
|
java.lang.String |
toString()
Convert this object to a String.
|
addParms, getJavaClassName, getMethodName, getMethodParameters, init, printSubNodes, setJavaClassName
castToPrimitive, getJavaTypeName, getJSQLType, getPrimitiveTypeName, getType, isPrimitiveType, mapToTypeID, markForCallStatement, markReturnValueDiscarded, mustCastToPrimitive, returnValueDiscarded, returnValueToSQLDomain, setJavaTypeName, valueReturnedToSQLDomain
accept, convertDefaultNode, debugFlush, debugPrint, formatNodeString, getBeginOffset, getDebugOutput, getEndOffset, getNodeFactory, getNodeType, getNullNode, getParserContext, getStatementType, getUserData, init, init, init, init, init, init, init, init, init, init, init, init, isInstanceOf, makeTableName, makeTableName, nodeHeader, printLabel, setBeginOffset, setDebugOutput, setEndOffset, setNodeType, setParserContext, setUserData, stackPrint, treePrint, treePrint, treePrint
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 TableName getProcedureName()
public void copyFrom(QueryTreeNode node) throws StandardException
copyFrom
in class MethodCallNode
StandardException
public java.lang.String toString()
toString
in class MethodCallNode
Copyright © 2013. All Rights Reserved.