You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by kr...@apache.org on 2008/02/29 11:19:52 UTC
svn commit: r632279 -
/db/derby/code/trunk/java/client/org/apache/derby/client/am/Connection.java
Author: kristwaa
Date: Fri Feb 29 02:19:45 2008
New Revision: 632279
URL: http://svn.apache.org/viewvc?rev=632279&view=rev
Log:
DERBY-3441 (partial): Determine and implement a proper procedure for resetting a prepared statement for reuse in a statement pool.
Extracted an internal method setTransactionIsolationX from setTransactionIsolation, basically to avoid checking for closed connection multiple times.
Also cleaned up JavaDoc and some formatting issues.
Patch file: derby-3441-3a-extract_setTransactionIsolationX.diff
Modified:
db/derby/code/trunk/java/client/org/apache/derby/client/am/Connection.java
Modified: db/derby/code/trunk/java/client/org/apache/derby/client/am/Connection.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/client/org/apache/derby/client/am/Connection.java?rev=632279&r1=632278&r2=632279&view=diff
==============================================================================
--- db/derby/code/trunk/java/client/org/apache/derby/client/am/Connection.java (original)
+++ db/derby/code/trunk/java/client/org/apache/derby/client/am/Connection.java Fri Feb 29 02:19:45 2008
@@ -940,68 +940,85 @@
private static String DERBY_TRANSACTION_READ_UNCOMMITTED = "UR";
synchronized public void setTransactionIsolation(int level) throws SQLException {
- try
- {
- if (agent_.loggingEnabled()) {
- agent_.logWriter_.traceEntry(this, "setTransactionIsolation", level);
- }
+ if (agent_.loggingEnabled()) {
+ agent_.logWriter_.traceEntry(this, "setTransactionIsolation", level);
+ }
+ try {
// Per jdbc spec (see java.sql.Connection.close() javadoc).
checkForClosedConnection();
+ setTransactionIsolationX(level);
+ } catch (SqlException se) {
+ throw se.getSQLException();
+ }
+ }
- // Javadoc for this method:
- // If this method is called during a transaction, the result is implementation-defined.
- //
- //
- // REPEATABLE_READ = JDBC: TRANSACTION_SERIALIZABLE, DERBY: RR, PROTOCOL: repeatable read
- // READ_STABILITY = JDBC: TRANSACTION_REPEATABLE_READ, DERBY: RS, PROTOCOL: All
- // CURSOR_STABILITY = JDBC: TRANSACTION_READ_COMMITTED, DERBY: CS, PROTOCOL: Cursor stability
- // UNCOMMITTED_READ = JDBC: TRANSACTION_READ_UNCOMMITTED, DERBY: UR , PROTOCOL: Change
- // NO_COMMIT = JDBC: TRANSACTION_NONE, DERBY: NC, PROTOCOL: No commit
- //
- String levelString = null;
- switch (level) {
- case java.sql.Connection.TRANSACTION_REPEATABLE_READ:
- levelString = DERBY_TRANSACTION_REPEATABLE_READ;
- break;
- case java.sql.Connection.TRANSACTION_READ_COMMITTED:
- levelString = DERBY_TRANSACTION_READ_COMMITTED;
- break;
- case java.sql.Connection.TRANSACTION_SERIALIZABLE:
- levelString = DERBY_TRANSACTION_SERIALIZABLE;
- break;
- case java.sql.Connection.TRANSACTION_READ_UNCOMMITTED:
- levelString = DERBY_TRANSACTION_READ_UNCOMMITTED;
- break;
- // Per javadoc:
- // Note that Connection.TRANSACTION_NONE cannot be used because it specifies that transactions are not supported.
- case java.sql.Connection.TRANSACTION_NONE:
- default:
- throw new SqlException(agent_.logWriter_,
- new ClientMessageId (SQLState.UNIMPLEMENTED_ISOLATION_LEVEL),
- new Integer(level));
- }
- if (setTransactionIsolationStmt == null ||
- !(setTransactionIsolationStmt.openOnClient_ &&
- setTransactionIsolationStmt.openOnServer_)) {
- setTransactionIsolationStmt =
- createStatementX(java.sql.ResultSet.TYPE_FORWARD_ONLY,
- java.sql.ResultSet.CONCUR_READ_ONLY,
- holdability());
- }
+ /**
+ * Set the transaction isolation level as specified.
+ * <p>
+ * If this method is called during a transaction, the result is
+ * implementation-defined.
+ * <p>
+ * Information about Derby specific isolation level handling:
+ * <ul> <li>REPEATABLE_READ = JDBC: TRANSACTION_SERIALIZABLE, DERBY: RR,
+ * PROTOCOL: repeatable read</li>
+ * <li>READ_STABILITY = JDBC: TRANSACTION_REPEATABLE_READ, DERBY: RS,
+ * PROTOCOL: All</li>
+ * <li>CURSOR_STABILITY = JDBC: TRANSACTION_READ_COMMITTED, DERBY: CS,
+ * PROTOCOL: Cursor stability</li>
+ * <li>UNCOMMITTED_READ = JDBC: TRANSACTION_READ_UNCOMMITTED,
+ * DERBY: UR, PROTOCOL: Change</li>
+ * <li>NO_COMMIT = JDBC: TRANSACTION_NONE, DERBY: NC, PROTOCOL:
+ * No commit</li>
+ * </ul>
+ */
+ //@GuardedBy("this")
+ private void setTransactionIsolationX(int level)
+ throws SqlException {
+ String levelString = null;
+ switch (level) {
+ case java.sql.Connection.TRANSACTION_REPEATABLE_READ:
+ levelString = DERBY_TRANSACTION_REPEATABLE_READ;
+ break;
+ case java.sql.Connection.TRANSACTION_READ_COMMITTED:
+ levelString = DERBY_TRANSACTION_READ_COMMITTED;
+ break;
+ case java.sql.Connection.TRANSACTION_SERIALIZABLE:
+ levelString = DERBY_TRANSACTION_SERIALIZABLE;
+ break;
+ case java.sql.Connection.TRANSACTION_READ_UNCOMMITTED:
+ levelString = DERBY_TRANSACTION_READ_UNCOMMITTED;
+ break;
+ // Per javadoc:
+ // Note that Connection.TRANSACTION_NONE cannot be used because it
+ // specifies that transactions are not supported.
+ case java.sql.Connection.TRANSACTION_NONE:
+ default:
+ throw new SqlException(agent_.logWriter_,
+ new ClientMessageId (SQLState.UNIMPLEMENTED_ISOLATION_LEVEL),
+ new Integer(level));
+ }
+ if (setTransactionIsolationStmt == null ||
+ !(setTransactionIsolationStmt.openOnClient_ &&
+ setTransactionIsolationStmt.openOnServer_)) {
+ setTransactionIsolationStmt =
+ createStatementX(java.sql.ResultSet.TYPE_FORWARD_ONLY,
+ java.sql.ResultSet.CONCUR_READ_ONLY,
+ holdability());
+ }
- setTransactionIsolationStmt.executeUpdate("SET CURRENT ISOLATION = " + levelString);
+ try {
+ setTransactionIsolationStmt.executeUpdate(
+ "SET CURRENT ISOLATION = " + levelString);
+ } catch (SQLException sqle) {
+ throw new SqlException(sqle);
+ }
- // The server has now implicitely committed the
- // transaction so we have to clean up locally.
- completeLocalCommit();
+ // The server has now implicitly committed the
+ // transaction so we have to clean up locally.
+ completeLocalCommit();
- if (SanityManager.DEBUG && supportsSessionDataCaching()) {
- SanityManager.ASSERT(isolation_ == level);
- }
- }
- catch ( SqlException se )
- {
- throw se.getSQLException();
+ if (SanityManager.DEBUG && supportsSessionDataCaching()) {
+ SanityManager.ASSERT(isolation_ == level);
}
}