Class SQLCall

java.lang.Object
org.eclipse.persistence.internal.databaseaccess.DatasourceCall
org.eclipse.persistence.internal.databaseaccess.DatabaseCall
org.eclipse.persistence.queries.SQLCall
All Implemented Interfaces:
Serializable, Cloneable, org.eclipse.persistence.internal.databaseaccess.QueryStringCall, Call

public class SQLCall extends org.eclipse.persistence.internal.databaseaccess.DatabaseCall implements org.eclipse.persistence.internal.databaseaccess.QueryStringCall
Purpose: Used as an abstraction of an SQL call. A call is an SQL string with parameters.
See Also:
  • Nested Class Summary

    Nested classes/interfaces inherited from class org.eclipse.persistence.internal.databaseaccess.DatasourceCall

    org.eclipse.persistence.internal.databaseaccess.DatasourceCall.ParameterType
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected boolean
     
    protected boolean
     

    Fields inherited from class org.eclipse.persistence.internal.databaseaccess.DatabaseCall

    executeReturnValue, fields, fieldsArray, firstResult, FIRSTRESULT_FIELD, generatedKeys, hasAllocatedConnection, hasMultipleResultSets, hasOptimisticLock, ignoreFirstRowSetting, ignoreMaxResultsSetting, isBatchExecutionSupported, isCallableStatementRequired, isCursorOutputProcedure, isFieldMatchingRequired, isMultipleCursorOutputProcedure, isResultSetScrollable, MAXROW_FIELD, maxRows, queryTimeout, queryTimeoutUnit, result, resultSetConcurrency, resultSetFetchSize, resultSetType, returnMultipleResultSetCollections, returnsResultSet, shouldBuildOutputRow, shouldCacheStatement, shouldReturnGeneratedKeys, sqlString, statement, usesBinding

    Fields inherited from class org.eclipse.persistence.internal.databaseaccess.DatasourceCall

    EXECUTE_UPDATE, isNativeConnectionRequired, isPrepared, NO_RETURN, outputCursors, parameterBindings, parameters, parameterTypes, query, RETURN_CURSOR, RETURN_MANY_ROWS, RETURN_ONE_ROW, returnType, shouldProcessTokenInQuotes
  • Constructor Summary

    Constructors
    Constructor
    Description
    PUBLIC: Create a new SQL call.
    SQLCall(String sqlString)
    PUBLIC: Create a new SQL call.
  • Method Summary

    Modifier and Type
    Method
    Description
    protected void
    afterTranslateCustomQuery(List updatedParameters, List<org.eclipse.persistence.internal.databaseaccess.DatasourceCall.ParameterType> updatedParameterTypes)
    INTERNAL: Set the data passed through setCustomSQLArgumentType and useCustomSQLCursorOutputAsResultSet methods.
    protected org.eclipse.persistence.internal.helper.DatabaseField
    afterTranslateCustomQueryUpdateParameter(org.eclipse.persistence.internal.helper.DatabaseField field, int index, org.eclipse.persistence.internal.databaseaccess.DatasourceCall.ParameterType parameterType, List updatedParameters, List<org.eclipse.persistence.internal.databaseaccess.DatasourceCall.ParameterType> updatedParameterTypes)
    INTERNAL: Set the data passed through setCustomSQLArgumentType and useCustomSQLCursorOutputAsResultSet methods.
    void
    appendTranslationParameter(Writer writer, org.eclipse.persistence.internal.expressions.ParameterExpression expression, org.eclipse.persistence.internal.databaseaccess.DatabasePlatform platform, org.eclipse.persistence.internal.sessions.AbstractRecord record)
    INTERNAL: All values are printed as ? to allow for parameter binding or translation during the execute of the call.
    boolean
    INTERNAL: Used to avoid misinterpreting the # in custom SQL.
    boolean
    Should return true.
    boolean
     
    protected void
    prepareInternal(org.eclipse.persistence.internal.sessions.AbstractSession session)
    INTERNAL: Called by prepare method only.
    void
    setCustomSQLArgumentType(String argumentFieldName, int type)
    PUBLIC: This method should only be used with custom SQL: it sets a type to IN, OUT or INOUT parameter (prefixed with #, ### or #### in custom SQL string).
    void
    setCustomSQLArgumentType(String argumentFieldName, int type, String typeName)
    PUBLIC: This method should only be used with custom SQL: it sets a type to IN, OUT or INOUT parameter (prefixed with #, ### or #### in custom SQL string).
    void
    setCustomSQLArgumentType(String argumentFieldName, int type, String typeName, Class javaType)
    PUBLIC: This method should only be used with custom SQL: it sets a type to IN, OUT or INOUT parameter (prefixed with #, ### or #### in custom SQL string).
    void
    setCustomSQLArgumentType(String argumentFieldName, int type, String typeName, Class javaType, org.eclipse.persistence.internal.helper.DatabaseField nestedType)
    PUBLIC: This method should only be used with custom SQL: it sets a type to IN, OUT or INOUT parameter (prefixed with #, ### or #### in custom SQL string).
    void
    setCustomSQLArgumentType(String argumentFieldName, int type, String typeName, org.eclipse.persistence.internal.helper.DatabaseField nestedType)
    PUBLIC: This method should only be used with custom SQL: it sets a type to IN, OUT or INOUT parameter (prefixed with #, ### or #### in custom SQL string).
    void
    setCustomSQLArgumentType(String customParameterName, Class type)
    PUBLIC: This method should only be used with custom SQL: it sets a type to IN, OUT or INOUT parameter (prefixed with #, ### or #### in custom SQL string).
    void
    setHasCustomSQLArguments(boolean hasCustomSQLArguments)
    INTERNAL: Used to avoid misinterpreting the # in custom SQL.
    void
    setSQLString(String sqlString)
    Set the SQL string.
    void
    INTERNAL: Keep track of the fact that this call has been translated.
    void
    INTERNAL: Only translate the call if it was not previously translated This code ensures the translation code for a custom SQLCall is only run once In the case of inheritance we will try to call the translation code once to get the list of types and again for each subclass
    void
    PUBLIC: This method should only be used with custom SQL: Used for Oracle result sets through procedures.

    Methods inherited from class org.eclipse.persistence.internal.databaseaccess.DatabaseCall

    addContext, appendLogParameters, appendParameter, bindParameter, buildNewQueryMechanism, buildOutputRow, buildQueryMechanism, createInOutParameter, getCallString, getContexts, getCursorOutIndex, getExecuteReturnValue, getFields, getFieldsArray, getFieldWithTypeFromDescriptor, getFirstResult, getGeneratedKeys, getLogString, getMaxRows, getOutputParameterValue, getOutputParameterValue, getOutputRowFields, getQueryString, getQueryTimeout, getResult, getResultSetConcurrency, getResultSetFetchSize, getResultSetType, getReturnsResultSet, getSQLString, getStatement, hasAllocatedConnection, hasMultipleResultSets, hasOptimisticLock, isBatchExecutionSupported, isCallableStatementRequired, isCursorOutputProcedure, isCursorReturned, isDynamicCall, isFieldMatchingRequired, isFinished, isLOBLocatorNeeded, isMultipleCursorOutputProcedure, isNonCursorOutputProcedure, isResultSetScrollable, matchFieldOrder, prepare, prepareInternalParameters, prepareStatement, returnMultipleResultSetCollections, setBatchExecutionSupported, setContexts, setExecuteReturnValue, setFields, setFirstResult, setGeneratedKeys, setHasAllocatedConnection, setHasMultipleResultSets, setHasOptimisticLock, setIgnoreFirstRowSetting, setIgnoreMaxResultsSetting, setIsCallableStatementRequired, setIsCursorOutputProcedure, setIsFieldMatchingRequired, setIsMultipleCursorOutputProcedure, setIsResultSetScrollable, setMaxRows, setQueryString, setQueryTimeout, setQueryTimeoutUnit, setResult, setResultSetConcurrency, setResultSetFetchSize, setResultSetType, setReturnMultipleResultSetCollections, setReturnsResultSet, setShouldBuildOutputRow, setShouldCacheStatement, setShouldReturnGeneratedKeys, setSQLStringInternal, setStatement, shouldBuildOutputRow, shouldCacheStatement, shouldCacheStatement, shouldIgnoreFirstRowSetting, shouldIgnoreMaxResultsSetting, shouldReturnGeneratedKeys, toString, translate, useUnnamedCursorOutputAsResultSet

    Methods inherited from class org.eclipse.persistence.internal.databaseaccess.DatasourceCall

    appendIn, appendIn, appendIn, appendInOut, appendInOut, appendInOut, appendInOut, appendInOut, appendLiteral, appendLiteral, appendLiteral, appendModify, appendModify, appendModify, appendOut, appendOut, appendOut, appendOutCursor, appendOutCursor, appendTranslation, appendTranslation, appendTranslation, areManyRowsReturned, argumentMarker, clone, createField, getOutputCursors, getParameterBindings, getParameters, getParameterTypes, getQuery, getReturnType, getValueForInOutParameter, getValueForInParameter, hasOutputCursors, hasParameters, isEISInteraction, isExecuteUpdate, isJPQLCall, isNativeConnectionRequired, isNothingReturned, isOneRowReturned, isOutputParameterType, isPrepared, isReturnSet, isStoredFunctionCall, isStoredPLSQLFunctionCall, isStoredPLSQLProcedureCall, isStoredProcedureCall, isUsesBindingSet, returnCursor, returnManyRows, returnNothing, returnOneRow, setExecuteUpdate, setIsNativeConnectionRequired, setIsPrepared, setParameterBindings, setParameters, setParameterTypes, setQuery, setReturnType, setUsesBinding, translateQueryString, translateQueryStringAndBindParameters, translateQueryStringForParameterizedIN, usesBinding, usesBinding, usesBinding, whitespace

    Methods inherited from class java.lang.Object

    equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

    Methods inherited from interface org.eclipse.persistence.queries.Call

    buildNewQueryMechanism, buildQueryMechanism, clone, getLogString, isFinished, isNothingReturned, isOneRowReturned

    Methods inherited from interface org.eclipse.persistence.internal.databaseaccess.QueryStringCall

    appendLiteral, appendModify, appendParameter, appendTranslation, getParameterBindings, getParameters, getParameterTypes, getQueryString, hasParameters, prepare, setQueryString, translate, translateQueryString
  • Field Details

    • hasCustomSQLArguments

      protected boolean hasCustomSQLArguments
    • isTranslatedCustomQuery

      protected transient boolean isTranslatedCustomQuery
  • Constructor Details

    • SQLCall

      public SQLCall()
      PUBLIC: Create a new SQL call.
    • SQLCall

      public SQLCall(String sqlString)
      PUBLIC: Create a new SQL call. Warning: Allowing an unverified SQL string to be passed into this method makes your application vulnerable to SQL injection attacks.
  • Method Details

    • afterTranslateCustomQuery

      protected void afterTranslateCustomQuery(List updatedParameters, List<org.eclipse.persistence.internal.databaseaccess.DatasourceCall.ParameterType> updatedParameterTypes)
      INTERNAL: Set the data passed through setCustomSQLArgumentType and useCustomSQLCursorOutputAsResultSet methods.
    • afterTranslateCustomQueryUpdateParameter

      protected org.eclipse.persistence.internal.helper.DatabaseField afterTranslateCustomQueryUpdateParameter(org.eclipse.persistence.internal.helper.DatabaseField field, int index, org.eclipse.persistence.internal.databaseaccess.DatasourceCall.ParameterType parameterType, List updatedParameters, List<org.eclipse.persistence.internal.databaseaccess.DatasourceCall.ParameterType> updatedParameterTypes)
      INTERNAL: Set the data passed through setCustomSQLArgumentType and useCustomSQLCursorOutputAsResultSet methods. This will return the null if the user did not add the field/type using the setCustomSQLArgumentType method
    • hasCustomSQLArguments

      public boolean hasCustomSQLArguments()
      INTERNAL: Used to avoid misinterpreting the # in custom SQL.
    • isSQLCall

      public boolean isSQLCall()
      Overrides:
      isSQLCall in class org.eclipse.persistence.internal.databaseaccess.DatasourceCall
    • isQueryStringCall

      public boolean isQueryStringCall()
      Description copied from interface: org.eclipse.persistence.internal.databaseaccess.QueryStringCall
      Should return true.
      Specified by:
      isQueryStringCall in interface org.eclipse.persistence.internal.databaseaccess.QueryStringCall
      Overrides:
      isQueryStringCall in class org.eclipse.persistence.internal.databaseaccess.DatasourceCall
    • prepareInternal

      protected void prepareInternal(org.eclipse.persistence.internal.sessions.AbstractSession session)
      INTERNAL: Called by prepare method only.
      Overrides:
      prepareInternal in class org.eclipse.persistence.internal.databaseaccess.DatabaseCall
    • setHasCustomSQLArguments

      public void setHasCustomSQLArguments(boolean hasCustomSQLArguments)
      INTERNAL: Used to avoid misinterpreting the # in custom SQL.
    • setCustomSQLArgumentType

      public void setCustomSQLArgumentType(String customParameterName, Class type)
      PUBLIC: This method should only be used with custom SQL: it sets a type to IN, OUT or INOUT parameter (prefixed with #, ### or #### in custom SQL string).
    • setCustomSQLArgumentType

      public void setCustomSQLArgumentType(String argumentFieldName, int type)
      PUBLIC: This method should only be used with custom SQL: it sets a type to IN, OUT or INOUT parameter (prefixed with #, ### or #### in custom SQL string). The argumentFieldName is the field or argument name used in the SQL. The type is the JDBC type code for the parameter.
    • setCustomSQLArgumentType

      public void setCustomSQLArgumentType(String argumentFieldName, int type, String typeName)
      PUBLIC: This method should only be used with custom SQL: it sets a type to IN, OUT or INOUT parameter (prefixed with #, ### or #### in custom SQL string). The argumentFieldName is the field or argument name used in the SQL. The type is the JDBC type code for the parameter. The typeName is the JDBC type name, this may be required for ARRAY or STRUCT types.
    • setCustomSQLArgumentType

      public void setCustomSQLArgumentType(String argumentFieldName, int type, String typeName, Class javaType)
      PUBLIC: This method should only be used with custom SQL: it sets a type to IN, OUT or INOUT parameter (prefixed with #, ### or #### in custom SQL string). TThe argumentFieldName is the field or argument name used in the SQL. The type is the JDBC type code for the parameter. The typeName is the JDBC type name, this may be required for ARRAY or STRUCT types. The javaType is the java class to return instead of the ARRAY and STRUCT types if a conversion is possible.
    • setCustomSQLArgumentType

      public void setCustomSQLArgumentType(String argumentFieldName, int type, String typeName, org.eclipse.persistence.internal.helper.DatabaseField nestedType)
      PUBLIC: This method should only be used with custom SQL: it sets a type to IN, OUT or INOUT parameter (prefixed with #, ### or #### in custom SQL string). TThe argumentFieldName is the field or argument name used in the SQL. The type is the JDBC type code for the parameter. The typeName is the JDBC type name, this may be required for ARRAY or STRUCT types. The nestedType is a DatabaseField with type information set to match the VARRAYs object types
    • setCustomSQLArgumentType

      public void setCustomSQLArgumentType(String argumentFieldName, int type, String typeName, Class javaType, org.eclipse.persistence.internal.helper.DatabaseField nestedType)
      PUBLIC: This method should only be used with custom SQL: it sets a type to IN, OUT or INOUT parameter (prefixed with #, ### or #### in custom SQL string). TThe argumentFieldName is the field or argument name used in the SQL. The type is the JDBC type code for the parameter. The typeName is the JDBC type name, this may be required for ARRAY or STRUCT types. The javaType is the java class to return instead of the ARRAY and STRUCT types if a conversion is possible. The nestedType is a DatabaseField with type information set to match the VARRAYs object types
    • setSQLString

      public void setSQLString(String sqlString)
      Set the SQL string. Warning: Allowing an unverified SQL string to be passed into this method makes your application vulnerable to SQL injection attacks.
    • translateCustomQuery

      public void translateCustomQuery()
      INTERNAL: Keep track of the fact that this call has been translated. This information is used to ensure the translation code for a custom SQLCall is only run once In the case of inheritance we will try to call the translation code once to get the list of types and again for each subclass
      Specified by:
      translateCustomQuery in interface org.eclipse.persistence.internal.databaseaccess.QueryStringCall
      Overrides:
      translateCustomQuery in class org.eclipse.persistence.internal.databaseaccess.DatasourceCall
    • translatePureSQLCustomQuery

      public void translatePureSQLCustomQuery()
      INTERNAL: Only translate the call if it was not previously translated This code ensures the translation code for a custom SQLCall is only run once In the case of inheritance we will try to call the translation code once to get the list of types and again for each subclass
      Overrides:
      translatePureSQLCustomQuery in class org.eclipse.persistence.internal.databaseaccess.DatasourceCall
    • appendTranslationParameter

      public void appendTranslationParameter(Writer writer, org.eclipse.persistence.internal.expressions.ParameterExpression expression, org.eclipse.persistence.internal.databaseaccess.DatabasePlatform platform, org.eclipse.persistence.internal.sessions.AbstractRecord record) throws IOException
      INTERNAL: All values are printed as ? to allow for parameter binding or translation during the execute of the call.
      Throws:
      IOException
    • useCustomSQLCursorOutputAsResultSet

      public void useCustomSQLCursorOutputAsResultSet(String customParameterName)
      PUBLIC: This method should only be used with custom SQL: Used for Oracle result sets through procedures. It defines OUT parameter (prefixed with ### in custom SQL string) as a cursor output.