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 be...@apache.org on 2006/04/03 23:26:57 UTC
svn commit: r391153 - in /db/derby/code/trunk/java:
engine/org/apache/derby/impl/sql/execute/
testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/
Author: bernt
Date: Mon Apr 3 14:26:55 2006
New Revision: 391153
URL: http://svn.apache.org/viewcvs?rev=391153&view=rev
Log:
DERBY-1172 incorrect error message in updateRow() after a commit on a held scroll insensitive resultset. Submitted by Andreas Korneliussen
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/TableScanResultSet.java
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/HoldabilityTest.java
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/SURBaseTest.java
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/TableScanResultSet.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/TableScanResultSet.java?rev=391153&r1=391152&r2=391153&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/TableScanResultSet.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/TableScanResultSet.java Mon Apr 3 14:26:55 2006
@@ -914,7 +914,17 @@
if (rlTemplate == null)
rlTemplate = scanController.newRowLocationTemplate();
rl = rlTemplate;
- scanController.fetchLocation(rl);
+ try {
+ scanController.fetchLocation(rl);
+ } catch (StandardException se) {
+ if (se.getMessageId().equals(SQLState.AM_SCAN_NOT_POSITIONED)) {
+
+ //Have a easier to understand error message than what
+ //we get from store
+ throw StandardException.
+ newException(SQLState.NO_CURRENT_ROW);
+ }
+ }
} else {
rl = null;
}
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/HoldabilityTest.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/HoldabilityTest.java?rev=391153&r1=391152&r2=391153&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/HoldabilityTest.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/HoldabilityTest.java Mon Apr 3 14:26:55 2006
@@ -317,6 +317,60 @@
}
/**
+ * Test that updateRow() after a commit requires a renavigation
+ * on a held forward only ResulTset.
+ */
+ public void testUpdateRowAfterCommitOnHeldForwardOnlyResultSet()
+ throws SQLException
+ {
+ Statement s = con.createStatement(ResultSet.TYPE_FORWARD_ONLY,
+ ResultSet.CONCUR_UPDATABLE);
+ ResultSet rs = s.executeQuery(selectStatement);
+
+ if (rs.getConcurrency()==ResultSet.CONCUR_READ_ONLY) {
+ println("Test disabled");
+ return;
+ }
+ rs.next();
+ con.commit();
+ try {
+ rs.updateInt(2, -100);
+ rs.updateRow();
+ assertTrue("Expected updateRow() to throw exception", false);
+ } catch (SQLException e) {
+ assertEquals("Unexpected SQLState",
+ INVALID_CURSOR_STATE_NO_CURRENT_ROW, e.getSQLState());
+ }
+ }
+
+ /**
+ * Test that updateRow() after a commit requires a renavigation
+ * on a held scrollinsensitve ResulTset.
+ */
+ public void testUpdateRowAfterCommitOnHeldScrollInsensitiveResultSet()
+ throws SQLException
+ {
+ Statement s = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
+ ResultSet.CONCUR_UPDATABLE);
+ ResultSet rs = s.executeQuery(selectStatement);
+
+ if (rs.getConcurrency()==ResultSet.CONCUR_READ_ONLY) {
+ println("Test disabled");
+ return;
+ }
+ rs.next();
+ con.commit();
+ try {
+ rs.updateInt(2, -100);
+ rs.updateRow();
+ assertTrue("Expected updateRow() to throw exception", false);
+ } catch (SQLException e) {
+ assertEquals("Unexpected SQLState",
+ INVALID_CURSOR_STATE_NO_CURRENT_ROW, e.getSQLState());
+ }
+ }
+
+ /**
* Test that running a compress on a holdable scrollable updatable
* resultset will not invalidate the ResultSet from doing updates,
* if the scan is initialized
@@ -494,7 +548,8 @@
rs.updateRow();
SQLWarning warn = rs.getWarnings();
assertNotNull("Expected warning when updating deleted tuple", warn);
- assertEquals("Unexpected SQL State on warning", "01001",
+ assertEquals("Unexpected SQL State on warning",
+ CURSOR_OPERATION_CONFLICT,
warn.getSQLState());
rs.clearWarnings();
@@ -504,7 +559,8 @@
updateTuple(rs);
warn = rs.getWarnings();
assertNotNull("Expected warning when updating deleted tuple", warn);
- assertEquals("Unexpected SQL State on warning", "01001",
+ assertEquals("Unexpected SQL State on warning",
+ CURSOR_OPERATION_CONFLICT,
warn.getSQLState());
con.commit();
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/SURBaseTest.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/SURBaseTest.java?rev=391153&r1=391152&r2=391153&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/SURBaseTest.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/SURBaseTest.java Mon Apr 3 14:26:55 2006
@@ -286,4 +286,6 @@
final static String RESULTSET_NOT_UPDATABLE_SQL_STATE = "XJ083";
final static String LOCK_TIMEOUT_SQL_STATE = "40XL1";
final static String LOCK_TIMEOUT_EXPRESSION_SQL_STATE = "38000";
+ final static String INVALID_CURSOR_STATE_NO_CURRENT_ROW = "24000";
+ final static String CURSOR_OPERATION_CONFLICT = "01001";
}