Return-Path: Delivered-To: apmail-db-derby-commits-archive@www.apache.org Received: (qmail 39419 invoked from network); 25 Feb 2008 17:23:43 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 25 Feb 2008 17:23:43 -0000 Received: (qmail 41189 invoked by uid 500); 25 Feb 2008 17:23:38 -0000 Delivered-To: apmail-db-derby-commits-archive@db.apache.org Received: (qmail 41152 invoked by uid 500); 25 Feb 2008 17:23:38 -0000 Mailing-List: contact derby-commits-help@db.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: Reply-To: "Derby Development" List-Id: Delivered-To: mailing list derby-commits@db.apache.org Received: (qmail 41083 invoked by uid 99); 25 Feb 2008 17:23:38 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 25 Feb 2008 09:23:38 -0800 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 25 Feb 2008 17:22:59 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 162521A9832; Mon, 25 Feb 2008 09:23:19 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: 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 Date: Mon, 25 Feb 2008 17:23:17 -0000 To: derby-commits@db.apache.org From: mamta@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20080225172319.162521A9832@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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 {