org.apache.derby.client.am
Class LogicalStatementEntity

java.lang.Object
  extended by org.apache.derby.client.am.LogicalStatementEntity
All Implemented Interfaces:
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
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
          Assoicated 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
 
Constructor Summary
protected LogicalStatementEntity(java.sql.PreparedStatement physicalPs, StatementKey stmtKey, StatementCacheInteractor cacheInteractor)
          Create a logical entity for a PreparedStatement.
 
Method Summary
 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.
(package 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, 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, 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
Assoicated physical callable statement, if any.

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


owner

private StatementCacheInteractor owner
The owner of this logical entity.


stmtKey

private final StatementKey stmtKey
The key for the associated statement.


cache

private final JDBCStatementCache cache
Cache for physical statements.

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

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.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
Throws:
java.sql.SQLException

isCloseOnCompletion

public boolean isCloseOnCompletion()
                            throws java.sql.SQLException
Throws:
java.sql.SQLException

executeLargeBatch

public long[] executeLargeBatch()
                         throws java.sql.SQLException
Throws:
java.sql.SQLException

executeLargeUpdate

public long executeLargeUpdate(java.lang.String sql)
                        throws java.sql.SQLException
Throws:
java.sql.SQLException

executeLargeUpdate

public long executeLargeUpdate(java.lang.String sql,
                               int autoGeneratedKeys)
                        throws java.sql.SQLException
Throws:
java.sql.SQLException

executeLargeUpdate

public long executeLargeUpdate(java.lang.String sql,
                               int[] columnIndexes)
                        throws java.sql.SQLException
Throws:
java.sql.SQLException

executeLargeUpdate

public long executeLargeUpdate(java.lang.String sql,
                               java.lang.String[] columnNames)
                        throws java.sql.SQLException
Throws:
java.sql.SQLException

getLargeUpdateCount

public long getLargeUpdateCount()
                         throws java.sql.SQLException
Throws:
java.sql.SQLException

getLargeMaxRows

public long getLargeMaxRows()
                     throws java.sql.SQLException
Throws:
java.sql.SQLException

setLargeMaxRows

public void setLargeMaxRows(long maxRows)
                     throws java.sql.SQLException
Throws:
java.sql.SQLException

Built on Wed 2013-06-12 15:21:56+0000, from revision ???

Apache Derby V10.10 Internals - Copyright © 2004,2013 The Apache Software Foundation. All Rights Reserved.