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 ma...@apache.org on 2008/02/25 18:23:17 UTC
svn commit: r630941 - in /db/derby/code/branches/10.3/java:
engine/org/apache/derby/impl/jdbc/EmbedDatabaseMetaData40.java
testing/org/apache/derbyTesting/functionTests/tests/jdbc4/TestDbMetaData.java
Author: mamta
Date: Mon Feb 25 09:22:58 2008
New Revision: 630941
URL: http://svn.apache.org/viewvc?rev=630941&view=rev
Log:
Merging revision 629395 from trunk into 10.3 codeline. The reason for merge is I would like
to merge changes for DERBY-3304 (629926) into trunk but that revision depends on
DERBY-3404 (629712) which depends on DERBY-3422 (629395)
The commit comments for 629395 were as follows
DERBY-3422: Embedded returns wrong value for DatabaseMetaData.autoCommitFailureClosesAllResultSets()
Return the correct value (true) and update the test so that it is able
to detect differences between returned value and actual behaviour.
Modified:
db/derby/code/branches/10.3/java/engine/org/apache/derby/impl/jdbc/EmbedDatabaseMetaData40.java
db/derby/code/branches/10.3/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/TestDbMetaData.java
Modified: db/derby/code/branches/10.3/java/engine/org/apache/derby/impl/jdbc/EmbedDatabaseMetaData40.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.3/java/engine/org/apache/derby/impl/jdbc/EmbedDatabaseMetaData40.java?rev=630941&r1=630940&r2=630941&view=diff
==============================================================================
--- db/derby/code/branches/10.3/java/engine/org/apache/derby/impl/jdbc/EmbedDatabaseMetaData40.java (original)
+++ db/derby/code/branches/10.3/java/engine/org/apache/derby/impl/jdbc/EmbedDatabaseMetaData40.java Mon Feb 25 09:22:58 2008
@@ -64,10 +64,16 @@
public boolean supportsStoredFunctionsUsingCallSyntax() throws SQLException {
return true;
}
-
+
+ /**
+ * Returns whether or not all open {@code ResultSet}s on a {@code
+ * Connection} are closed if an error occurs when auto-commit in enabled.
+ *
+ * @return {@code true}, since the embedded driver will close the open
+ * {@code ResultSet}s
+ */
public boolean autoCommitFailureClosesAllResultSets() throws SQLException {
- // TODO - find out what this really should be
- return false;
+ return true;
}
public boolean providesQueryObjectGenerator() throws SQLException {
Modified: db/derby/code/branches/10.3/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/TestDbMetaData.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.3/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/TestDbMetaData.java?rev=630941&r1=630940&r2=630941&view=diff
==============================================================================
--- db/derby/code/branches/10.3/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/TestDbMetaData.java (original)
+++ db/derby/code/branches/10.3/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/TestDbMetaData.java Mon Feb 25 09:22:58 2008
@@ -99,7 +99,11 @@
}
public void testAutoCommitFailureClosesAllResultSets() throws SQLException {
- assertFalse(meta.autoCommitFailureClosesAllResultSets());
+ if (usingEmbedded()) {
+ assertTrue(meta.autoCommitFailureClosesAllResultSets());
+ } else {
+ assertFalse(meta.autoCommitFailureClosesAllResultSets());
+ }
}
public void testGetClientInfoProperties() throws SQLException {
@@ -464,33 +468,57 @@
* @exception SQLException if an unexpected database error occurs
*/
public void testAutoCommitFailure() throws SQLException {
- Connection con = getConnection();
- con.setAutoCommit(true);
- Statement s1 =
- con.createStatement(ResultSet.TYPE_FORWARD_ONLY,
- ResultSet.CONCUR_READ_ONLY,
- ResultSet.HOLD_CURSORS_OVER_COMMIT);
- ResultSet resultSet = s1.executeQuery("VALUES (1, 2), (3, 4)");
+ // IMPORTANT: use auto-commit
+ getConnection().setAutoCommit(true);
+
+ ResultSet[] rss = new ResultSet[2];
+ // Use different statements so that both result sets are kept open
+ rss[0] = createStatement().executeQuery("VALUES 1, 2, 3, 4");
+ rss[1] = createStatement().executeQuery(
+ "SELECT * FROM SYSIBM.SYSDUMMY1");
+
+ // We want to test holdable result sets
+ for (ResultSet rs : rss) {
+ assertEquals("ResultSet should be holdable",
+ ResultSet.HOLD_CURSORS_OVER_COMMIT,
+ rs.getHoldability());
+ }
- Statement s2 = con.createStatement();
try {
String query =
"SELECT dummy, nonexistent, phony FROM imaginarytable34521";
- s2.execute(query);
+ // Create a new statement so we don't close any of the open result
+ // sets by re-executing a statement.
+ createStatement().execute(query);
fail("Query didn't fail.");
} catch (SQLException e) {
// should fail, but we don't care how
}
+ int closedResultSets = 0;
+ for (ResultSet rs : rss) {
+ // check if an operation fails with "ResultSet is closed"
+ try {
+ rs.next();
+ // OK, didn't fail, ResultSet wasn't closed
+ } catch (SQLException sqle) {
+ assertSQLState("XCL16", sqle);
+ // OK, ResultSet is closed, increase counter
+ closedResultSets++;
+ }
+ }
+
+ boolean allResultSetsWereClosed = (closedResultSets == rss.length);
+
assertEquals("autoCommitFailureClosesAllResultSets() returned value " +
"which doesn't match actual behaviour.",
- resultSet.isClosed(),
+ allResultSetsWereClosed,
meta.autoCommitFailureClosesAllResultSets());
- resultSet.close();
- s1.close();
- s2.close();
+ for (ResultSet rs : rss) {
+ rs.close();
+ }
}
public void testIsWrapperForPositive() throws SQLException {