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 km...@apache.org on 2007/04/17 01:01:48 UTC
svn commit: r529435 - in
/db/derby/code/trunk/java/testing/org/apache/derbyTesting:
functionTests/master/ functionTests/master/DerbyNet/
functionTests/master/DerbyNetClient/ functionTests/suites/
functionTests/tests/lang/ junit/
Author: kmarsden
Date: Mon Apr 16 16:01:46 2007
New Revision: 529435
URL: http://svn.apache.org/viewvc?view=rev&rev=529435
Log:
DERBY-2542 convert lang/scrollCursors1.sql to junit
Added:
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ScrollCursors1.java (with props)
Removed:
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/scrollCursors1.out
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/scrollCursors1.out
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/scrollCursors1.out
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/scrollCursors3.out
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/scrollCursors3.sql
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/scrollCursors3_app.properties
Modified:
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNet.exclude
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetClient.exclude
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetClientUseprocess.exclude
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetUseprocess.exclude
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/jdbc20.runall
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/_Suite.java
db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/RuntimeStatisticsParser.java
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNet.exclude
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNet.exclude?view=diff&rev=529435&r1=529434&r2=529435
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNet.exclude (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNet.exclude Mon Apr 16 16:01:46 2007
@@ -11,7 +11,6 @@
# see DERBY-326 and DERBY-550 issues
jdbcapi/resultsetStream.java
lang/errorStream.java
-lang/scrollCursors2.java
jdbcapi/statementJdbc20.java
jdbcapi/testRelative.java
jdbcapi/rsgetXXXcolumnNames.java
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetClient.exclude
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetClient.exclude?view=diff&rev=529435&r1=529434&r2=529435
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetClient.exclude (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetClient.exclude Mon Apr 16 16:01:46 2007
@@ -6,7 +6,6 @@
# excluding largedata/LobLimits.java to run with the network server because currently lobs are materialized and this test tests for 2G lobs.
# see DERBY-326 and DERBY-550 issues
lang/errorStream.java
-# lang/scrollCursors2.java
#
jdbcapi/statementJdbc20.java
jdbcapi/statementJdbc30.java
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetClientUseprocess.exclude
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetClientUseprocess.exclude?view=diff&rev=529435&r1=529434&r2=529435
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetClientUseprocess.exclude (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetClientUseprocess.exclude Mon Apr 16 16:01:46 2007
@@ -23,7 +23,6 @@
# lang/wisconsin.java
# jdbcapi/derbyStress.java
# jdbcapi/maxfieldsize.java
-# lang/scrollCursors1.sql
#
jdbcapi/HoldabilityTest.junit
jdbcapi/bestrowidentifier.sql
@@ -44,4 +43,3 @@
lang/wisconsin.java
jdbcapi/derbyStress.java
jdbcapi/maxfieldsize.java
-lang/scrollCursors1.sql
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetUseprocess.exclude
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetUseprocess.exclude?view=diff&rev=529435&r1=529434&r2=529435
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetUseprocess.exclude (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetUseprocess.exclude Mon Apr 16 16:01:46 2007
@@ -19,7 +19,6 @@
# lang/wisconsin.java - checks depend on dir structure
# jdbcapi/nullSQLText.java - fails...?? (but not when run by itself)
# jdbcapi/maxfieldsize.java - fails...??? (but not when run by itself)
-# lang/scrollCursors1.sql - fails...??? (but not when run by itself)
#
jdbcapi/maxfieldsize.java
jdbcapi/HoldabilityTest.junit
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/jdbc20.runall
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/jdbc20.runall?view=diff&rev=529435&r1=529434&r2=529435
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/jdbc20.runall (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/jdbc20.runall Mon Apr 16 16:01:46 2007
@@ -1,4 +1,2 @@
-lang/scrollCursors1.sql
-lang/scrollCursors3.sql
jdbcapi/getCurConnJdbc20.sql
jdbcapi/dataSourceReference.java
Added: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ScrollCursors1.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ScrollCursors1.java?view=auto&rev=529435
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ScrollCursors1.java (added)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ScrollCursors1.java Mon Apr 16 16:01:46 2007
@@ -0,0 +1,646 @@
+/**
+ * Derby - Class org.apache.derbyTesting.functionTests.tests.lang.ScrollCursors1
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.derbyTesting.functionTests.tests.lang;
+
+import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.apache.derbyTesting.junit.BaseJDBCTestCase;
+import org.apache.derbyTesting.junit.CleanDatabaseTestSetup;
+import org.apache.derbyTesting.junit.JDBC;
+import org.apache.derbyTesting.junit.RuntimeStatisticsParser;
+import org.apache.derbyTesting.junit.TestConfiguration;
+
+import java.sql.Connection;
+
+public class ScrollCursors1 extends BaseJDBCTestCase {
+
+ public ScrollCursors1(String name) {
+ super(name);
+
+ }
+
+ public void testForwardOnlyNegative() throws SQLException {
+ Connection conn = getConnection();
+ PreparedStatement ps_c1 = conn.prepareStatement("select i from t1");
+ ResultSet rs = ps_c1.executeQuery();
+ try {
+ rs.getRow();
+ // client and embedded differ on getRow().
+ // spec says getRow is optional for forward only cursors.
+ if (usingEmbedded())
+ fail("getRow succeeded on forward only cursor");
+ } catch (SQLException se) {
+ assertSQLState("XJ061",se);
+
+ }
+ try {
+ rs.first();
+ fail("first() not allowed on forward only result set");
+ } catch(SQLException se) {
+ if (usingEmbedded())
+ assertSQLState("XJ061",se);
+ else
+ assertSQLState("XJ125",se);
+ }
+ try {
+ rs.last();
+ fail("last() not allowed on forward only result set");
+ } catch(SQLException se) {
+ if (usingEmbedded())
+ assertSQLState("XJ061",se);
+ else
+ assertSQLState("XJ125",se);
+ }
+ try {
+ rs.previous();
+ fail("previous() not allowed on forward only result set");
+ } catch(SQLException se) {
+ if (usingEmbedded())
+ assertSQLState("XJ061",se);
+ else
+ assertSQLState("XJ125",se);
+ }
+ try {
+ rs.beforeFirst();
+ fail("beforeFirst() not allowed on forward only result set");
+ } catch(SQLException se) {
+ if (usingEmbedded())
+ assertSQLState("XJ061",se);
+ else
+ assertSQLState("XJ125",se);
+ }
+ try {
+ rs.afterLast();
+ fail("afterLast() not allowed on forward only result set");
+ } catch(SQLException se) {
+ if (usingEmbedded())
+ assertSQLState("XJ061",se);
+ else
+ assertSQLState("XJ125",se);
+ }
+ try {
+ rs.absolute(1);
+ fail("absolute() not allowed on forward only result set");
+ } catch(SQLException se) {
+ if (usingEmbedded())
+ assertSQLState("XJ061",se);
+ else
+ assertSQLState("XJ125",se);
+ }
+ try {
+ rs.relative(1);
+ fail("relative() not allowed on forward only result set");
+ } catch(SQLException se) {
+ if (usingEmbedded())
+ assertSQLState("XJ061",se);
+ else
+ assertSQLState("XJ125",se);
+ }
+ rs.close();
+ ps_c1.close();
+ }
+
+ public void testScrollInsensitive() throws SQLException {
+ Connection conn = getConnection();
+ conn.setAutoCommit(false);
+ PreparedStatement ps_c1 = conn.prepareStatement("select * from t1",
+ ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY );
+ ResultSet rs = ps_c1.executeQuery();
+ rs.absolute(0);
+ assertNoCurrentRow(rs);
+ rs.close();
+
+ rs = ps_c1.executeQuery();
+ rs.relative(0);
+ assertNoCurrentRow(rs);
+ rs.close();
+ rs = ps_c1.executeQuery();
+
+ rs.relative(2);
+ assertEquals("c",rs.getString(1).trim());
+ assertEquals(3, rs.getInt(2));
+ rs.close();
+ rs = ps_c1.executeQuery();
+ rs.first();
+ assertEquals("b", rs.getString(1).trim());
+ assertEquals(2, rs.getInt(2));
+ assertEquals(1, rs.getRow());
+ rs.next();
+ assertEquals("c",rs.getString(1).trim());
+ assertEquals(3, rs.getInt(2));
+ assertEquals(2,rs.getRow());
+ assertEquals(2,rs.getRow());
+ rs.first();
+ assertEquals("b", rs.getString(1).trim());
+ assertEquals(2, rs.getInt(2));
+ assertEquals(1, rs.getRow());
+
+ rs.next();
+ assertEquals("c",rs.getString(1).trim());
+ assertEquals(3, rs.getInt(2));
+ assertEquals(2,rs.getRow());
+
+ rs.next();
+ assertEquals("d",rs.getString(1).trim());
+ assertEquals(4, rs.getInt(2));
+ assertEquals(3,rs.getRow());
+
+ rs.first();
+ assertEquals("b", rs.getString(1).trim());
+ assertEquals(2, rs.getInt(2));
+ assertEquals(1, rs.getRow());
+
+ rs.next();
+ assertEquals("c",rs.getString(1).trim());
+ assertEquals(3, rs.getInt(2));
+ assertEquals(2,rs.getRow());
+
+ rs.afterLast();
+ assertNoCurrentRow(rs);
+
+ assertEquals(0,rs.getRow());
+ assertFalse(rs.next());
+ assertNoCurrentRow(rs);
+
+ assertEquals(0,rs.getRow());
+
+ rs.previous();
+ assertEquals("m",rs.getString(1).trim());
+ assertEquals(13, rs.getInt(2));
+ assertEquals(12, rs.getRow());
+ rs.previous();
+ assertEquals("l",rs.getString(1).trim());
+ assertEquals(12, rs.getInt(2));
+ assertEquals(11, rs.getRow());
+
+ rs.last();
+ assertEquals("m",rs.getString(1).trim());
+ assertEquals(13, rs.getInt(2));
+ assertEquals(12, rs.getRow());
+ rs.beforeFirst();
+ assertNoCurrentRow(rs);
+ assertEquals(0,rs.getRow());
+ rs.next();
+ assertEquals("b", rs.getString(1).trim());
+ assertEquals(2, rs.getInt(2));
+ assertEquals(1, rs.getRow());
+
+ rs.absolute(12);
+ assertEquals("m",rs.getString(1).trim());
+ assertEquals(13, rs.getInt(2));
+ assertEquals(12, rs.getRow());
+
+ rs.absolute(-11);
+ assertEquals("c",rs.getString(1).trim());
+ assertEquals(3, rs.getInt(2));
+ assertEquals(2,rs.getRow());
+
+ rs.absolute(13);
+ assertNoCurrentRow(rs);
+ assertEquals(0,rs.getRow());
+
+
+ rs.absolute(-1);
+ assertEquals("m",rs.getString(1).trim());
+ assertEquals(13, rs.getInt(2));
+ assertEquals(12, rs.getRow());
+ rs.close();
+
+ rs = ps_c1.executeQuery();
+ // do last first
+ rs.last();
+ assertEquals("m",rs.getString(1).trim());
+ assertEquals(13, rs.getInt(2));
+ assertEquals(12, rs.getRow());
+
+ assertFalse(rs.next());
+ assertNoCurrentRow(rs);
+
+ rs.last();
+ assertEquals("m",rs.getString(1).trim());
+ assertEquals(13, rs.getInt(2));
+ assertEquals(12, rs.getRow());
+
+ rs.previous();
+ assertEquals("l",rs.getString(1).trim());
+ assertEquals(12, rs.getInt(2));
+ assertEquals(11, rs.getRow());
+
+ rs.first();
+ assertEquals("b", rs.getString(1).trim());
+ assertEquals(2, rs.getInt(2));
+ assertEquals(1, rs.getRow());
+
+ rs.previous();
+ assertNoCurrentRow(rs);
+ rs.next();
+ assertEquals("b", rs.getString(1).trim());
+ assertEquals(2, rs.getInt(2));
+ assertEquals(1, rs.getRow());
+ rs.close();
+
+ // afterLast first
+ rs = ps_c1.executeQuery();
+ rs.afterLast();
+ assertNoCurrentRow(rs);
+ rs.previous();
+
+ assertEquals("m",rs.getString(1).trim());
+ assertEquals(13, rs.getInt(2));
+ assertEquals(12, rs.getRow());
+
+ rs.previous();
+ assertEquals("l",rs.getString(1).trim());
+ assertEquals(12, rs.getInt(2));
+ assertEquals(11, rs.getRow());
+
+ rs.close();
+
+ // go to next to last row and then do next
+ ps_c1.close();
+ ps_c1 = conn.prepareStatement("select * from t1 where i >=11",
+ ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
+ rs = ps_c1.executeQuery();
+ rs.next();
+ assertEquals("k",rs.getString(1).trim());
+ assertEquals(11, rs.getInt(2));
+ assertEquals(1, rs.getRow());
+
+ rs.next();
+ assertEquals("l",rs.getString(1).trim());
+ assertEquals(12, rs.getInt(2));
+ assertEquals(2, rs.getRow());
+
+ rs.last();
+ assertEquals("m",rs.getString(1).trim());
+ assertEquals(13, rs.getInt(2));
+ assertEquals(3, rs.getRow());
+
+ rs.previous();
+ assertEquals("l",rs.getString(1).trim());
+ assertEquals(12, rs.getInt(2));
+ assertEquals(2, rs.getRow());
+
+ rs.afterLast();
+ assertNoCurrentRow(rs);
+
+ rs.previous();
+ assertEquals("m",rs.getString(1).trim());
+ assertEquals(13, rs.getInt(2));
+ assertEquals(3, rs.getRow());
+ rs.close();
+ // start at after ;ast/
+ rs = ps_c1.executeQuery();
+ rs.afterLast();
+ assertNoCurrentRow(rs);
+
+ rs.previous();
+ assertEquals("m",rs.getString(1).trim());
+ assertEquals(13, rs.getInt(2));
+ assertEquals(3, rs.getRow());
+ rs.close();
+ ps_c1.close();
+ // use absolute to get rows before scan would get to them.
+ ps_c1 = conn.prepareStatement("select i from t1", ResultSet.TYPE_SCROLL_INSENSITIVE,
+ ResultSet.CONCUR_READ_ONLY);
+ rs = ps_c1.executeQuery();
+ rs.absolute(5);
+ assertEquals(6, rs.getInt(1));
+ assertEquals(5, rs.getRow());
+
+ rs.absolute(-5);
+ assertEquals(9,rs.getInt(1));
+ assertEquals(8, rs.getRow());
+
+ rs.absolute(5);
+ assertEquals(6,rs.getInt(1));
+ assertEquals(5, rs.getRow());
+ rs.close();
+ rs = ps_c1.executeQuery();
+ rs.absolute(13);
+ assertNoCurrentRow(rs);
+
+ rs.previous();
+ assertEquals(13, rs.getInt(1));
+ assertEquals(12, rs.getRow());
+ rs.close();
+ rs = ps_c1.executeQuery();
+ rs.absolute(-13);
+ assertNoCurrentRow(rs);
+ rs.next();
+ assertEquals(2, rs.getInt(1));
+ assertEquals(1,rs.getRow());
+ rs.close();
+ rs = ps_c1.executeQuery();
+ rs.first();
+ assertEquals(2,rs.getInt(1));
+ assertEquals(1,rs.getRow());
+
+ rs.relative(11);
+ assertEquals(13, rs.getInt(1));
+ assertEquals(12, rs.getRow());
+
+ rs.relative(1);
+ assertNoCurrentRow(rs);
+ rs.last();
+ assertEquals(13, rs.getInt(1));
+ assertEquals(12,rs.getRow());
+
+ rs.relative(-11);
+ assertEquals(2,rs.getInt(1));
+ assertEquals(1,rs.getRow());
+ rs.close();
+ ps_c1.close();
+ conn.commit();
+ // scroll sensitive cursor becomes scroll insensitive.
+ ps_c1 = conn.prepareStatement("Select i from t1", ResultSet.TYPE_SCROLL_SENSITIVE,
+ ResultSet.CONCUR_READ_ONLY);
+
+ rs = ps_c1.executeQuery();
+ rs.first();
+ assertEquals(2,rs.getInt(1));
+ rs.next();
+ assertEquals(3,rs.getInt(1));
+ Statement s = conn.createStatement();
+ s.executeUpdate("update t1 set i = 666 where i = 2");
+ rs.first();
+ conn.rollback();
+ rs.close();
+ // verify that statement cache works correctly with scroll and forward only cursors.
+ // with the same query text.
+ ps_c1 = conn.prepareStatement("select i from t1", ResultSet.TYPE_SCROLL_INSENSITIVE,
+ ResultSet.CONCUR_READ_ONLY);
+ rs = ps_c1.executeQuery();
+ PreparedStatement ps_c2 = conn.prepareStatement("select i from t1");
+ ResultSet rs2 = ps_c2.executeQuery();
+ rs.first();
+ assertEquals(2,rs.getInt(1));
+ rs2.next();
+ assertEquals(2,rs2.getInt(1));
+ try {
+ rs2.first();
+ fail("first() not allowed on forward only result set");
+ } catch(SQLException se) {
+ if (usingEmbedded())
+ assertSQLState("XJ061",se);
+ else
+ assertSQLState("XJ125",se);
+ }
+ rs.close();
+ rs2.close();
+ ps_c1.close();
+ ps_c1.close();
+ // first, last, etc on empty result set
+ ps_c1 = conn.prepareStatement("select i from t1 where 1=0",
+ ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
+ rs = ps_c1.executeQuery();
+ rs.first();
+ assertNoCurrentRow(rs);
+ rs.previous();
+ assertNoCurrentRow(rs);
+ rs.next();
+ assertNoCurrentRow(rs);
+ rs.last();
+ assertNoCurrentRow(rs);
+ rs.previous();
+ assertNoCurrentRow(rs);
+ rs.absolute(1);
+ assertNoCurrentRow(rs);
+ rs.absolute(-1);
+ assertNoCurrentRow(rs);
+ assertEquals(0,rs.getRow());
+ rs.close();
+ rs = ps_c1.executeQuery();
+ rs.afterLast();
+ assertNoCurrentRow(rs);
+ rs.previous();
+ assertNoCurrentRow(rs);
+ rs.beforeFirst();
+ assertNoCurrentRow(rs);
+ rs.next();
+ assertNoCurrentRow(rs);
+ rs.close();
+ rs = ps_c1.executeQuery();
+ rs.absolute(1);
+ assertNoCurrentRow(rs);
+ rs.absolute(-1);
+ assertNoCurrentRow(rs);
+ rs.close();
+ rs = ps_c1.executeQuery();
+ rs.absolute(-1);
+ assertNoCurrentRow(rs);
+ rs.absolute(1);
+ assertNoCurrentRow(rs);
+ rs.close();
+ // with autocommit on
+ conn.setAutoCommit(false);
+ rs = ps_c1.executeQuery();
+ rs = ps_c1.executeQuery();
+ rs.first();
+ assertNoCurrentRow(rs);
+ rs.previous();
+ assertNoCurrentRow(rs);
+ rs.next();
+ assertNoCurrentRow(rs);
+ rs.last();
+ assertNoCurrentRow(rs);
+ rs.previous();
+ assertNoCurrentRow(rs);
+ rs.absolute(1);
+ assertNoCurrentRow(rs);
+ rs.absolute(-1);
+ assertNoCurrentRow(rs);
+ rs.next();
+ assertNoCurrentRow(rs);
+ rs.next();
+ assertNoCurrentRow(rs);
+ rs.close();
+ ps_c1.close();
+
+ // cursor on a sort
+ ps_c1 = conn.prepareStatement("select * from t1 order by i desc",ResultSet.TYPE_SCROLL_INSENSITIVE,
+ ResultSet.CONCUR_READ_ONLY);
+ rs = ps_c1.executeQuery();
+ rs.last();
+ assertEquals("b",rs.getString(1).trim());
+ assertEquals(2,rs.getInt(2));
+ rs.first();
+ assertEquals("m",rs.getString(1).trim());
+ assertEquals(13,rs.getInt(2));
+ rs.relative(11);
+ assertEquals("b",rs.getString(1).trim());
+ assertEquals(2,rs.getInt(2));
+ rs.previous();
+ assertEquals("c",rs.getString(1).trim());
+ assertEquals(3,rs.getInt(2));
+ rs.close();
+ ps_c1.close();
+ ps_c1 = conn.prepareStatement("select * from t1",
+ ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
+ CallableStatement cs = conn.prepareCall("call SYSCS_UTIL.SYSCS_SET_RUNTIMESTATISTICS(1)");
+ cs.execute();
+ cs.close();
+ rs = ps_c1.executeQuery();
+ rs.last();
+ assertEquals("m",rs.getString(1).trim());
+ assertEquals(13,rs.getInt(2));
+ rs.first();
+ assertEquals("b",rs.getString(1).trim());
+ assertEquals(2,rs.getInt(2));
+ rs.next();
+ assertEquals("c",rs.getString(1).trim());
+ assertEquals(3,rs.getInt(2));
+ rs.close();
+ rs2 = s.executeQuery("values SYSCS_UTIL.SYSCS_GET_RUNTIMESTATISTICS()");
+ rs2.next();
+
+ if (usingEmbedded())
+ {
+ // not sure why I get a null rts with network server.
+ RuntimeStatisticsParser rts = new RuntimeStatisticsParser(rs2.getString(1));
+ rs2.close();
+ assertEquals(Connection.TRANSACTION_READ_COMMITTED, rts.getIsolationLevel());
+ assertTrue(rts.usedTableScan());
+ assertTrue(rts.isScrollInsensitive());
+ }
+
+ rs.close();
+ ps_c1.close();
+ s.executeUpdate("drop table t1");
+ s.executeUpdate("drop table t2");
+ }
+
+ public void testNoHoldScrollableResults() throws SQLException{
+ Connection conn = getConnection();
+ conn.setHoldability(ResultSet.CLOSE_CURSORS_AT_COMMIT);
+ // Beetle 4551 - insensitive cursor uses estimated row count which
+ // might be pessimistic and will get out of memory error
+ Statement s = createStatement();
+ s.executeUpdate("create table big(a int generated always as identity (start with 1, increment by 1))");
+
+ for (int i = 0; i < 10; i++)
+ s.executeUpdate("insert into big values(default)");
+
+ PreparedStatement ps_c1 = conn.prepareStatement("select * from big b1 left outer join big b2 on b1.a = b2.a left outer join big b3 on b2.a = b3.a left outer join big b4 on b3.a = b4.a left outer join (big b5 left outer join (big b6 left outer join (big b7 left outer join big b8 on b7.a = b8.a) on b6.a=b7.a) on b5.a = b6.a) on b4.a = b5.a");
+ ResultSet rs = ps_c1.executeQuery();
+ s.executeUpdate("drop table big");
+ }
+
+ public void testScrollCursors3() throws SQLException {
+ Connection conn = getConnection();
+ Connection conn2 = openDefaultConnection();
+ Statement s = conn.createStatement();
+ s.executeUpdate("create table u1.t1(c1 int, c2 int)");
+ s.executeUpdate("insert into u1.t1 values (1, 2), (3, 4), (5, 6), (7, 8), (9, 10)");
+ PreparedStatement ps_c1 = conn.prepareStatement("select * from u1.t1", ResultSet.TYPE_SCROLL_INSENSITIVE,
+ ResultSet.CONCUR_READ_ONLY);
+ ResultSet rs = ps_c1.executeQuery();
+
+ // see what happens when other user when we close our cursor before
+ // they are done.
+ PreparedStatement ps_c2 = conn2.prepareStatement("select * from u1.t1", ResultSet.TYPE_SCROLL_INSENSITIVE,
+ ResultSet.CONCUR_READ_ONLY);
+ ResultSet rs2 = ps_c2.executeQuery();
+ rs.next();
+ assertEquals(1, rs.getInt(1));
+ assertEquals(2, rs.getInt(2));
+
+ rs2.next();
+ assertEquals(1, rs.getInt(1));
+ assertEquals(2, rs.getInt(2));
+ rs.last();
+ assertEquals(9, rs.getInt(1));
+ assertEquals(10, rs.getInt(2));
+ rs2.last();
+ assertEquals(9, rs.getInt(1));
+ assertEquals(10, rs.getInt(2));
+ rs.previous();
+ assertEquals(7, rs.getInt(1));
+ assertEquals(8, rs.getInt(2));
+ rs2.close();
+ rs.first();
+ assertEquals(1, rs.getInt(1));
+ assertEquals(2, rs.getInt(2));
+ rs.close();
+ s.executeUpdate("drop table t1");
+ }
+
+
+ private void assertNoCurrentRow(ResultSet rs) throws SQLException {
+ try {
+ rs.getString(1);
+ fail("getString not allowed after beforeFirst()");
+ }catch (SQLException se ){
+ if (usingEmbedded())
+ assertSQLState("24000",se);
+ else
+ assertSQLState("XJ121",se);
+ }
+ assertEquals(0,rs.getRow());
+ }
+
+
+ public static Test baseSuite(String name) {
+
+ TestSuite suite = new TestSuite(name);
+ suite.addTestSuite(ScrollCursors1.class);
+
+ return new CleanDatabaseTestSetup(suite) {
+
+ /**
+ * Create and populate table
+ *
+ * @see org.apache.derbyTesting.junit.CleanDatabaseTestSetup#decorateSQL(java.sql.Statement)
+ */
+ protected void decorateSQL(Statement s) throws SQLException {
+ s.executeUpdate("create table t1(c50 char(50), i int)");
+
+ s.executeUpdate(" create table t2(c50 char(50), i int)");
+
+ // populate tables
+
+ s.executeUpdate("insert into t1 values ('b', 2), ('c', 3), ('d', 4), "
+ + "('e', 5),"
+ + " ('f', 6), ('g', 7), ('h', 8), ('i', 9),"
+ + " ('j', 10), ('k', 11), ('l', 12), ('m', 13)");
+
+
+ getConnection().setAutoCommit(false);
+ }
+ };
+ }
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite("ScrollCursors1");
+ suite.addTest(baseSuite("ScrollCursors1:embedded"));
+ suite.addTest(TestConfiguration.clientServerDecorator(baseSuite("ScrollCursors1:client")));
+ return suite;
+
+ }
+}
Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ScrollCursors1.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/_Suite.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/_Suite.java?view=diff&rev=529435&r1=529434&r2=529435
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/_Suite.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/_Suite.java Mon Apr 16 16:01:46 2007
@@ -96,6 +96,7 @@
suite.addTest(CoalesceTest.suite());
suite.addTest(ProcedureInTriggerTest.suite());
suite.addTest(CollationTest.suite());
+ suite.addTest(ScrollCursors1.suite());
// Add the XML tests, which exist as a separate suite
// so that users can "run all XML tests" easily.
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/RuntimeStatisticsParser.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/RuntimeStatisticsParser.java?view=diff&rev=529435&r1=529434&r2=529435
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/RuntimeStatisticsParser.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/RuntimeStatisticsParser.java Mon Apr 16 16:01:46 2007
@@ -28,6 +28,7 @@
private boolean eliminatedDuplicates = false;
private boolean tableScan = false;
private String statistics = "";
+ private boolean scrollInsensitive = false;
/**
* Create a RuntimeStatistics object to parse the text and extract
@@ -59,6 +60,8 @@
if (rts.indexOf("Eliminate duplicates = true") > 0) {
eliminatedDuplicates = true;
}
+ if (rts.indexOf("Scroll Insensitive ResultSet:") > 0)
+ scrollInsensitive = true;
}
/**
@@ -91,4 +94,9 @@
public boolean eliminatedDuplicates() {
return eliminatedDuplicates;
}
+
+ public boolean isScrollInsensitive(){
+ return scrollInsensitive;
+ }
+
}