Class DataReadQuery

  • All Implemented Interfaces:
    java.io.Serializable, java.lang.Cloneable
    Direct Known Subclasses:
    DirectReadQuery

    public class DataReadQuery
    extends ReadQuery

    Purpose: Concrete class to perform read using raw SQL.

    Responsibilities: Execute a selecting raw SQL string. This returns a Collection of the Records representing the result set.

    See Also:
    Serialized Form
    Author:
    Yvon Lavoie
    Since:
    TOPLink/Java 1.0
    • Field Detail

      • containerPolicy

        protected org.eclipse.persistence.internal.queries.ContainerPolicy containerPolicy
      • resultType

        protected int resultType
        Allow return type to be configured, MAP, ARRAY, VALUE, ATTRIBUTE (MAP is the default, i.e. DatabaseRecord).
      • MAP

        public static final int MAP
        A Map (DatabaseRecord) is returned for each row.
        See Also:
        Constant Field Values
      • ARRAY

        public static final int ARRAY
        An Object[] of values is returned for each row.
        See Also:
        Constant Field Values
      • ATTRIBUTE

        public static final int ATTRIBUTE
        A single value is returned for each row.
        See Also:
        Constant Field Values
      • AUTO

        public static final int AUTO
        Auto, a single value if a single field is selected, otherwise an Object[] (JPA default).
        See Also:
        Constant Field Values
    • Constructor Detail

      • DataReadQuery

        public DataReadQuery()
        PUBLIC: Initialize the state of the query.
      • DataReadQuery

        public DataReadQuery​(java.lang.String sqlString)
        PUBLIC: Initialize the query to use the specified SQL string. Warning: Allowing an unverified SQL string to be passed into this method makes your application vulnerable to SQL injection attacks.
      • DataReadQuery

        public DataReadQuery​(Call call)
        PUBLIC: Initialize the query to use the specified call.
    • Method Detail

      • cacheResult

        public void cacheResult​(java.lang.Object results)
        INTERNAL:

        This method is called by the object builder when building an original. It will cause the original to be cached in the query results if the query is set to do so.

        Specified by:
        cacheResult in class ReadQuery
      • clone

        public java.lang.Object clone()
        INTERNAL: Clone the query.
        Overrides:
        clone in class DatabaseQuery
      • execute

        public java.lang.Object execute​(org.eclipse.persistence.internal.sessions.AbstractSession session,
                                        org.eclipse.persistence.internal.sessions.AbstractRecord row)
                                 throws DatabaseException
        INTERNAL: Execute the query. If there are cached results return those. This must override the super to support result caching.
        Overrides:
        execute in class DatabaseQuery
        Parameters:
        session - - the session in which the receiver will be executed.
        Returns:
        An object or collection, the result of executing the query.
        Throws:
        DatabaseException - - an error has occurred on the database
      • executeDatabaseQuery

        public java.lang.Object executeDatabaseQuery()
                                              throws DatabaseException
        INTERNAL: Execute the query. Perform the work to execute the SQL string.
        Specified by:
        executeDatabaseQuery in class DatabaseQuery
        Returns:
        a collection or cursor of Records representing the result set
        Throws:
        DatabaseException - an error has occurred on the database
      • getValueConverter

        public Converter getValueConverter()
        INTERNAL: Conversion not supported.
      • buildObject

        public java.lang.Object buildObject​(org.eclipse.persistence.internal.sessions.AbstractRecord row)
        INTERNAL: Build the result value for the row.
        Overrides:
        buildObject in class ReadQuery
      • executeNonCursor

        protected java.lang.Object executeNonCursor()
                                             throws DatabaseException
        INTERNAL: The results are *not* in a cursor, build the collection. Cache the results in temporaryCachedQueryResults.
        Throws:
        DatabaseException
      • getContainerPolicy

        public org.eclipse.persistence.internal.queries.ContainerPolicy getContainerPolicy()
        PUBLIC: Return the query's ContainerPolicy.
      • isDataReadQuery

        public boolean isDataReadQuery()
        PUBLIC: Return if this is a data read query.
        Overrides:
        isDataReadQuery in class DatabaseQuery
      • prepare

        protected void prepare()
        INTERNAL: Prepare the receiver for execution in a session.
        Overrides:
        prepare in class ReadQuery
      • remoteExecute

        public java.lang.Object remoteExecute()
        INTERNAL: Used by RemoteSession.
        Overrides:
        remoteExecute in class DatabaseQuery
      • setContainerPolicy

        public void setContainerPolicy​(org.eclipse.persistence.internal.queries.ContainerPolicy containerPolicy)
        PUBLIC: Set the container policy.
      • useCollectionClass

        public void useCollectionClass​(java.lang.Class concreteClass)
        PUBLIC: Configure the query to use an instance of the specified container class to hold the target objects. The container class must implement (directly or indirectly) the Collection interface.
      • useCursoredStream

        public void useCursoredStream()
        PUBLIC: Use a CursoredStream as the result collection. The initial read size is 10 and page size is 5.
      • getResultType

        public int getResultType()
        Return the result type to be configured, MAP, ARRAY, VALUE, ATTRIBUTE (MAP is the default, DatabaseRecord).
        See Also:
        ResultType
      • setResultType

        public void setResultType​(int resultType)
        Set the result type to be configured, MAP, ARRAY, VALUE, ATTRIBUTE (MAP is the default, DatabaseRecord).
      • setResultType

        public void setResultType​(java.lang.String resultType)
        Set the result type to be configured, Map, Array, Value, Attribute (Map is the default, DatabaseRecord).
        See Also:
        ResultType
      • useCursoredStream

        public void useCursoredStream​(int initialReadSize,
                                      int pageSize)
        PUBLIC: Use a CursoredStream as the result collection.
        Parameters:
        initialReadSize - the initial number of objects to read
        pageSize - the number of objects to read when more objects are needed from the database
      • useCursoredStream

        public void useCursoredStream​(int initialReadSize,
                                      int pageSize,
                                      ValueReadQuery sizeQuery)
        PUBLIC: Use a CursoredStream as the result collection.
        Parameters:
        initialReadSize - the initial number of objects to read
        pageSize - the number of objects to read when more objects are needed from the database
        sizeQuery - a query that will return the size of the result set; this must be set if an expression is not used (i.e. custom SQL)
      • useScrollableCursor

        public void useScrollableCursor()
        PUBLIC: Use a ScrollableCursor as the result collection.
      • useScrollableCursor

        public void useScrollableCursor​(int pageSize)
        PUBLIC: Use a ScrollableCursor as the result collection.
        Parameters:
        pageSize - the number of elements to be read into a the cursor when more elements are needed from the database.
      • useScrollableCursor

        public void useScrollableCursor​(ScrollableCursorPolicy policy)
        PUBLIC: Use a ScrollableCursor as the result collection.
        Parameters:
        policy - the scrollable cursor policy allows for additional result set options. Example:

        ScrollableCursorPolicy policy = new ScrollableCursorPolicy()

        policy.setResultSetType(ScrollableCursorPolicy.TYPE_SCROLL_INSENSITIVE);

        query.useScrollableCursor(policy);