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 ka...@apache.org on 2006/05/04 10:17:01 UTC
svn commit: r399604 - in /db/derby/code/trunk/java:
engine/org/apache/derby/impl/jdbc/
testing/org/apache/derbyTesting/functionTests/tests/jdbc4/
Author: kahatlen
Date: Thu May 4 01:17:00 2006
New Revision: 399604
URL: http://svn.apache.org/viewcvs?rev=399604&view=rev
Log:
DERBY-1234 (partial) Make the methods in EmbedConnection raise an
exception when the connection is closed.
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedConnection.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedConnection40.java
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/ClosedObjectTest.java
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/ConnectionTest.java
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedConnection.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedConnection.java?rev=399604&r1=399603&r2=399604&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedConnection.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedConnection.java Thu May 4 01:17:00 2006
@@ -517,8 +517,7 @@
int resultSetHoldability)
throws SQLException
{
- if (isClosed())
- throw Util.noCurrentConnection();
+ checkIfClosed();
return factory.newEmbedStatement(this, false,
setResultSetType(resultSetType), resultSetConcurrency,
@@ -795,8 +794,7 @@
int resultSetConcurrency, int resultSetHoldability)
throws SQLException
{
- if (SanityManager.DEBUG)
- SanityManager.ASSERT(!isClosed(), "connection is closed");
+ checkIfClosed();
synchronized (getConnectionSynchronization())
{
@@ -824,7 +822,8 @@
* parameter placeholders
* @return the native form of this statement
*/
- public String nativeSQL(String sql) {
+ public String nativeSQL(String sql) throws SQLException {
+ checkIfClosed();
// we don't massage the strings at all, so this is easy:
return sql;
}
@@ -851,6 +850,7 @@
* @exception SQLException if a database-access error occurs.
*/
public void setAutoCommit(boolean autoCommit) throws SQLException {
+ checkIfClosed();
// Is this a nested connection
if (rootConnection != this) {
@@ -870,7 +870,8 @@
* @return Current state of auto-commit mode.
* @see #setAutoCommit
*/
- public boolean getAutoCommit() {
+ public boolean getAutoCommit() throws SQLException {
+ checkIfClosed();
return autoCommit;
}
@@ -1043,8 +1044,7 @@
* @exception SQLException if a database-access error occurs.
*/
public DatabaseMetaData getMetaData() throws SQLException {
- if (isClosed())
- throw Util.noCurrentConnection();
+ checkIfClosed();
if (dbMetadata == null) {
@@ -1068,8 +1068,8 @@
* or ResultSet.CLOSE_CURSORS_AT_COMMIT
*
*/
- public final int getHoldability()
- {
+ public final int getHoldability() throws SQLException {
+ checkIfClosed();
return connectionHoldAbility;
}
@@ -1083,8 +1083,8 @@
* or ResultSet.CLOSE_CURSORS_AT_COMMIT
*
*/
- public final void setHoldability(int holdability)
- {
+ public final void setHoldability(int holdability) throws SQLException {
+ checkIfClosed();
connectionHoldAbility = holdability;
}
@@ -1122,6 +1122,7 @@
*/
public final boolean isReadOnly() throws SQLException
{
+ checkIfClosed();
return getLanguageConnection().isReadOnly();
}
@@ -1133,6 +1134,7 @@
* @exception SQLException if a database-access error occurs.
*/
public void setCatalog(String catalog) throws SQLException {
+ checkIfClosed();
// silently ignoring this request like the javadoc said.
return;
}
@@ -1144,6 +1146,7 @@
* @exception SQLException if a database-access error occurs.
*/
public String getCatalog() throws SQLException {
+ checkIfClosed();
// we do not have support for Catalog, just return null as
// the JDBC specs mentions then.
return null;
@@ -1211,7 +1214,7 @@
* @exception SQLException if a database-access error occurs.
*/
public final int getTransactionIsolation() throws SQLException {
-
+ checkIfClosed();
return ExecutionContext.CS_TO_JDBC_ISOLATION_LEVEL_MAP[getLanguageConnection().getCurrentIsolationLevel()];
}
@@ -1227,7 +1230,8 @@
* Synchronization note: Warnings are synchronized
* on nesting level
*/
- public final synchronized SQLWarning getWarnings() {
+ public final synchronized SQLWarning getWarnings() throws SQLException {
+ checkIfClosed();
return topWarning;
}
@@ -1238,7 +1242,8 @@
* Synchronization node: Warnings are synchonized
* on nesting level
*/
- public final synchronized void clearWarnings() {
+ public final synchronized void clearWarnings() throws SQLException {
+ checkIfClosed();
topWarning = null;
}
@@ -1255,7 +1260,8 @@
* JDBC 2.0 - java.util.Map requires JDK 1
*
*/
- public java.util.Map getTypeMap() {
+ public java.util.Map getTypeMap() throws SQLException {
+ checkIfClosed();
// just return an immuntable empty map
return java.util.Collections.EMPTY_MAP;
}
@@ -1268,7 +1274,7 @@
* @exception SQLException Feature not implemented for now.
*/
public final void setTypeMap(java.util.Map map) throws SQLException {
-
+ checkIfClosed();
if( map == null)
throw Util.generateCsSQLException(SQLState.INVALID_API_PARAMETER,map,"map",
"java.sql.Connection.setTypeMap");
@@ -1319,6 +1325,17 @@
return getTR().getLcc();
}
+ /**
+ * Raises an exception if the connection is closed.
+ *
+ * @exception SQLException if the connection is closed
+ */
+ protected final void checkIfClosed() throws SQLException {
+ if (isClosed()) {
+ throw Util.noCurrentConnection();
+ }
+ }
+
//EmbedConnection30 overrides this method so it can release the savepoints array if
//the exception severity is transaction level
SQLException handleException(Throwable thrownException)
@@ -1493,8 +1510,7 @@
is in a finally block.
*/
- if (isClosed())
- throw Util.noCurrentConnection();
+ checkIfClosed();
getTR().setupContextStack();
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedConnection40.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedConnection40.java?rev=399604&r1=399603&r2=399604&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedConnection40.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedConnection40.java Thu May 4 01:17:00 2006
@@ -30,6 +30,8 @@
import java.sql.SQLException;
import java.sql.SQLXML;
import java.sql.Struct;
+import java.util.HashMap;
+import java.util.Map;
import java.util.Properties;
import org.apache.derby.jdbc.InternalDriver;
import org.apache.derby.iapi.reference.SQLState;
@@ -128,6 +130,27 @@
throws SQLException{
throw Util.notImplemented();
}
+
+ /**
+ * Returns the type map for this connection.
+ *
+ * @return type map for this connection
+ * @exception SQLException if a database access error occurs
+ */
+ public final Map<String, Class<?>> getTypeMap() throws SQLException {
+ // This method is already implemented with a non-generic
+ // signature in EmbedConnection. We could just use that method
+ // directly, but then we get a compiler warning (unchecked
+ // cast/conversion). Copy the map to avoid the compiler
+ // warning.
+ Map typeMap = super.getTypeMap();
+ if (typeMap == null) return null;
+ Map<String, Class<?>> genericTypeMap = new HashMap<String, Class<?>>();
+ for (Object key : typeMap.keySet()) {
+ genericTypeMap.put((String) key, (Class) typeMap.get(key));
+ }
+ return genericTypeMap;
+ }
/**
* This method forwards all the calls to default query object provided by
@@ -137,6 +160,7 @@
*/
public <T extends BaseQuery> T createQueryObject(Class<T> ifc)
throws SQLException {
+ checkIfClosed();
return QueryObjectFactory.createDefaultQueryObject (ifc, this);
}
@@ -152,6 +176,7 @@
* with the given interface.
*/
public boolean isWrapperFor(Class<?> interfaces) throws SQLException {
+ checkIfClosed();
return interfaces.isInstance(this);
}
@@ -165,6 +190,7 @@
*/
public <T> T unwrap(java.lang.Class<T> interfaces)
throws SQLException{
+ checkIfClosed();
//Derby does not implement non-standard methods on
//JDBC objects
//hence return this if this class implements the interface
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/ClosedObjectTest.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/ClosedObjectTest.java?rev=399604&r1=399603&r2=399604&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/ClosedObjectTest.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/ClosedObjectTest.java Thu May 4 01:17:00 2006
@@ -295,16 +295,22 @@
/**
* Checks whether a method expects an exception to be thrown
* when the object is closed. Currently, only
- * <code>close()</code> and <code>isClosed()</code> don't
- * expect exceptions.
+ * <code>close()</code>, <code>isClosed()</code> and
+ * <code>isValid()</code> don't expect exceptions.
*
* @param method a method
* @return <code>true</code> if an exception is expected
*/
public boolean expectsException(Method method) {
- return
- !(method.getName().equals("close") ||
- method.getName().equals("isClosed"));
+ final String[] exceptionLessMethods = {
+ "close",
+ "isClosed",
+ "isValid",
+ };
+ for (String name : exceptionLessMethods) {
+ if (name.equals(method.getName())) return false;
+ }
+ return true;
}
/**
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/ConnectionTest.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/ConnectionTest.java?rev=399604&r1=399603&r2=399604&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/ConnectionTest.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/ConnectionTest.java Thu May 4 01:17:00 2006
@@ -171,6 +171,15 @@
}
}
+ /**
+ * Tests that <code>getTypeMap()</code> returns an empty map when
+ * no type map has been installed.
+ * @exception SQLException if an error occurs
+ */
+ public void testGetTypeMapReturnsEmptyMap() throws SQLException {
+ assertTrue(con.getTypeMap().isEmpty());
+ }
+
public void testIsWrapperReturnsFalse()
throws SQLException {
assertFalse(con.isWrapperFor(ResultSet.class));