Class LogicalStatementEntity

  • All Implemented Interfaces:
    java.lang.AutoCloseable, java.sql.Statement, java.sql.Wrapper
    Direct Known Subclasses:
    LogicalPreparedStatement

    abstract class LogicalStatementEntity
    extends java.lang.Object
    implements java.sql.Statement
    Common class interacting with the JDBC statement cache for logical prepared statements and logical callable statements.

    Note that getPhysPs() and getPhysCs() takes care of checking if the logical statement has been closed. The physical statement will take care of validating itself.

    Beside from the above, special treatment of logical entities happens on close. This is the point where cache interaction takes place, and also where the appropriate methods are called on the physical statement to perform the necessary clean up for later reuse.

    A note regarding the thread safety of this class, is that access to physicalPs and physicalCs is guarded by the instance of this class, but it is assumed that operation on/within the physical statement is synchronized in the physical statement itself .

    • Field Summary

      Fields 
      Modifier and Type Field Description
      private JDBCStatementCache cache
      Cache for physical statements.
      private boolean hasCallableStmt
      Tells if we're holding a callable statement or not.
      private StatementCacheInteractor owner
      The owner of this logical entity.
      private java.sql.CallableStatement physicalCs
      Associated physical callable statement, if any.
      private java.sql.PreparedStatement physicalPs
      Associated physical prepared statement.
      private StatementKey stmtKey
      The key for the associated statement.
      • Fields inherited from interface java.sql.Statement

        CLOSE_ALL_RESULTS, CLOSE_CURRENT_RESULT, EXECUTE_FAILED, KEEP_CURRENT_RESULT, NO_GENERATED_KEYS, RETURN_GENERATED_KEYS, SUCCESS_NO_INFO
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void close()
      Close the logical statement.
      void closeOnCompletion()  
      long[] executeLargeBatch()  
      long executeLargeUpdate​(java.lang.String sql)  
      long executeLargeUpdate​(java.lang.String sql, int autoGeneratedKeys)  
      long executeLargeUpdate​(java.lang.String sql, int[] columnIndexes)  
      long executeLargeUpdate​(java.lang.String sql, java.lang.String[] columnNames)  
      long getLargeMaxRows()  
      long getLargeUpdateCount()  
      (package private) java.sql.CallableStatement getPhysCs()
      Returns the associated physical callable statement.
      (package private) java.sql.PreparedStatement getPhysPs()
      Returns the associated physical prepared statement.
      private java.sql.Statement getPhysStmt()
      Returns the associated physical statement.
      boolean isCloseOnCompletion()  
      (package private) boolean isLogicalEntityClosed()
      Tells if the logical entity is closed.
      boolean isWrapperFor​(java.lang.Class<?> iface)
      Check whether this instance wraps an object that implements the interface specified by iface.
      void setLargeMaxRows​(long maxRows)  
      <T> T unwrap​(java.lang.Class<T> iface)
      Returns an instance of the specified interface if this instance is a wrapper for the interface.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • Methods inherited from interface java.sql.Statement

        addBatch, cancel, clearBatch, clearWarnings, enquoteIdentifier, enquoteLiteral, enquoteNCharLiteral, execute, execute, execute, execute, executeBatch, executeQuery, executeUpdate, executeUpdate, executeUpdate, executeUpdate, getConnection, getFetchDirection, getFetchSize, getGeneratedKeys, getMaxFieldSize, getMaxRows, getMoreResults, getMoreResults, getQueryTimeout, getResultSet, getResultSetConcurrency, getResultSetHoldability, getResultSetType, getUpdateCount, getWarnings, isClosed, isPoolable, isSimpleIdentifier, setCursorName, setEscapeProcessing, setFetchDirection, setFetchSize, setMaxFieldSize, setMaxRows, setPoolable, setQueryTimeout
    • Field Detail

      • hasCallableStmt

        private final boolean hasCallableStmt
        Tells if we're holding a callable statement or not.

        Used for sanity checking.

      • physicalPs

        private java.sql.PreparedStatement physicalPs
        Associated physical prepared statement.

        If this is null, the logical entity is closed.

      • physicalCs

        private java.sql.CallableStatement physicalCs
        Associated physical callable statement, if any.

        This is a convenience reference, to avoid having to cast on every invocation of getPhysCs() if the logical entity represents a callable statement.

      • stmtKey

        private final StatementKey stmtKey
        The key for the associated statement.
    • Constructor Detail

      • LogicalStatementEntity

        protected LogicalStatementEntity​(java.sql.PreparedStatement physicalPs,
                                         StatementKey stmtKey,
                                         StatementCacheInteractor cacheInteractor)
        Create a logical entity for a PreparedStatement.
        Parameters:
        physicalPs - a physical PreparedStatement
        stmtKey - cache key for the physical statement
        cacheInteractor - creating statement cache interactor
        Throws:
        java.lang.IllegalArgumentException - if cache is null
    • Method Detail

      • getPhysPs

        java.sql.PreparedStatement getPhysPs()
                                      throws java.sql.SQLException
        Returns the associated physical prepared statement.
        Returns:
        A prepared statement.
        Throws:
        java.sql.SQLException - if the logical statement has been closed
      • getPhysCs

        java.sql.CallableStatement getPhysCs()
                                      throws java.sql.SQLException
        Returns the associated physical callable statement.
        Returns:
        A callable statement.
        Throws:
        java.sql.SQLException - if the logical statement has been closed
      • getPhysStmt

        private java.sql.Statement getPhysStmt()
                                        throws java.sql.SQLException
        Returns the associated physical statement.
        Returns:
        A statement.
        Throws:
        java.sql.SQLException - if the logical statement has been closed
      • close

        public void close()
                   throws java.sql.SQLException
        Close the logical statement.
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.sql.Statement
        Throws:
        java.sql.SQLException - if closing the statement fails
      • isLogicalEntityClosed

        boolean isLogicalEntityClosed()
        Tells if the logical entity is closed.

        If this method is used to avoid the possibility of raising an exception because the logical statement has been closed and then invoke a method on the physical statement, one must synchronize on this instance in the calling code.

        Returns:
        true if closed, false if open.
      • isWrapperFor

        public boolean isWrapperFor​(java.lang.Class<?> iface)
                             throws java.sql.SQLException
        Check whether this instance wraps an object that implements the interface specified by iface.
        Specified by:
        isWrapperFor in interface java.sql.Wrapper
        Parameters:
        iface - a class defining an interface
        Returns:
        true if this instance implements iface, or false otherwise
        Throws:
        java.sql.SQLException - if an error occurs while determining if this instance implements iface
      • unwrap

        public <T> T unwrap​(java.lang.Class<T> iface)
                     throws java.sql.SQLException
        Returns an instance of the specified interface if this instance is a wrapper for the interface.
        Specified by:
        unwrap in interface java.sql.Wrapper
        Parameters:
        iface - a class defining an interface
        Returns:
        an object that implements the interface
        Throws:
        java.sql.SQLException - if no object is found that implements the interface
      • closeOnCompletion

        public void closeOnCompletion()
                               throws java.sql.SQLException
        Specified by:
        closeOnCompletion in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • isCloseOnCompletion

        public boolean isCloseOnCompletion()
                                    throws java.sql.SQLException
        Specified by:
        isCloseOnCompletion in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • executeLargeBatch

        public long[] executeLargeBatch()
                                 throws java.sql.SQLException
        Specified by:
        executeLargeBatch in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • executeLargeUpdate

        public long executeLargeUpdate​(java.lang.String sql)
                                throws java.sql.SQLException
        Specified by:
        executeLargeUpdate in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • executeLargeUpdate

        public long executeLargeUpdate​(java.lang.String sql,
                                       int autoGeneratedKeys)
                                throws java.sql.SQLException
        Specified by:
        executeLargeUpdate in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • executeLargeUpdate

        public long executeLargeUpdate​(java.lang.String sql,
                                       int[] columnIndexes)
                                throws java.sql.SQLException
        Specified by:
        executeLargeUpdate in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • executeLargeUpdate

        public long executeLargeUpdate​(java.lang.String sql,
                                       java.lang.String[] columnNames)
                                throws java.sql.SQLException
        Specified by:
        executeLargeUpdate in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • getLargeUpdateCount

        public long getLargeUpdateCount()
                                 throws java.sql.SQLException
        Specified by:
        getLargeUpdateCount in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • getLargeMaxRows

        public long getLargeMaxRows()
                             throws java.sql.SQLException
        Specified by:
        getLargeMaxRows in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • setLargeMaxRows

        public void setLargeMaxRows​(long maxRows)
                             throws java.sql.SQLException
        Specified by:
        setLargeMaxRows in interface java.sql.Statement
        Throws:
        java.sql.SQLException