Re: [PATCHES] absolute() error with jdbc7.1-1.2 - Mailing list pgsql-jdbc
From | Barry Lind |
---|---|
Subject | Re: [PATCHES] absolute() error with jdbc7.1-1.2 |
Date | |
Msg-id | 3BF1EF03.8040905@xythos.com Whole thread Raw |
In response to | absolute() error with jdbc7.1-1.2 (Robert Down <down@mind.net>) |
Responses |
Patch to fix getIndex for forte's transparent persistence
|
List | pgsql-jdbc |
Liam, I reviewed and applied your patch. It will be in beta3. thanks, --Barry Liam Stewart wrote: > Attached is a patch against the CVS repository that fixes the problem. > There's also a little fix for the getRow() method. While fixing > absolute(), I noticed that getRow() wasn't quite following the spec: it > wasn't returning 0 when the ResultSet wasn't positioned on a row. I've > started a ResultSet test case and included it as well. > > Liam > > On Mon, Nov 12, 2001 at 10:53:45AM -0800, Robert Down wrote: > >>with the lasttest driver, I can't use absolute() according to the spec. >> >>index = -1; >>rs.absolute(index); >> >>What it currently does: >>java.lang.ArrayIndexOutOfBoundsException: -2 < 0 >> >> >>What it should do according to the spec: >>======================================== >>public boolean absolute(int row) >> throws SQLExceptionMoves the cursor to the given row number >>in this ResultSet object. >> >>If the row number is positive, the cursor moves to the given row number with >>respect to the beginning of the result set. The first row is row 1, the >>second is row 2, and so on. >> >>If the given row number is negative, the cursor moves to an absolute row >>position with respect to the end of the result set. For example, calling the >>method absolute(-1) positions the cursor on the last row; calling the method >>absolute(-2) moves the cursor to the next-to-last row, and so on. >> >>An attempt to position the cursor beyond the first/last row in the result set >>leaves the cursor before the first row or after the last row. >>=========================================== >> >>Please note the important fact that you can use (-1) as a position. This is >>very important. >> >>Thanks! >> >>---------------------------(end of broadcast)--------------------------- >>TIP 3: if posting/reading through Usenet, please send an appropriate >>subscribe-nomail command to majordomo@postgresql.org so that your >>message can get through to the mailing list cleanly >> > > > ------------------------------------------------------------------------ > > package org.postgresql.test.jdbc2; > > import org.postgresql.test.JDBC2Tests; > import junit.framework.TestCase; > import java.io.*; > import java.sql.*; > > /** > * ResultSet tests. > */ > public class ResultSetTest extends TestCase > { > private Connection con; > > public ResultSetTest(String name) > { > super(name); > } > > protected void setUp() throws Exception > { > con = JDBC2Tests.openDB(); > Statement stmt = con.createStatement(); > > JDBC2Tests.createTable(con, "testrs", "id integer"); > > stmt.executeUpdate("INSERT INTO testrs VALUES (1)"); > stmt.executeUpdate("INSERT INTO testrs VALUES (2)"); > stmt.executeUpdate("INSERT INTO testrs VALUES (3)"); > stmt.executeUpdate("INSERT INTO testrs VALUES (4)"); > stmt.executeUpdate("INSERT INTO testrs VALUES (6)"); > stmt.executeUpdate("INSERT INTO testrs VALUES (9)"); > > stmt.close(); > } > > protected void tearDown() throws Exception > { > JDBC2Tests.dropTable(con, "testrs"); > JDBC2Tests.closeDB(con); > } > > public void testAbsolute() throws Exception > { > Statement stmt = con.createStatement(); > ResultSet rs = stmt.executeQuery("SELECT * FROM testrs"); > > assertTrue(rs.absolute(-1)); > assertEquals(6, rs.getRow()); > > assertTrue(rs.absolute(1)); > assertEquals(1, rs.getRow()); > > assertTrue(!rs.absolute(-10)); > assertEquals(0, rs.getRow()); > assertTrue(rs.next()); > assertEquals(1, rs.getRow()); > > assertTrue(!rs.absolute(10)); > assertEquals(0, rs.getRow()); > assertTrue(rs.previous()); > assertEquals(6, rs.getRow()); > > stmt.close(); > } > } > > > ------------------------------------------------------------------------ > > Index: src/interfaces/jdbc/org/postgresql/jdbc2/ResultSet.java > =================================================================== > RCS file: /projects/cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc2/ResultSet.java,v > retrieving revision 1.41 > diff -c -r1.41 ResultSet.java > *** src/interfaces/jdbc/org/postgresql/jdbc2/ResultSet.java 2001/11/12 19:59:46 1.41 > --- src/interfaces/jdbc/org/postgresql/jdbc2/ResultSet.java 2001/11/13 21:22:01 > *************** > *** 836,841 **** > --- 836,842 ---- > //if index<0, count from the end of the result set, but check > //to be sure that it is not beyond the first index > if (index < 0) > + { > if (index >= -rows_size) > internalIndex = rows_size + index; > else > *************** > *** 843,858 **** > beforeFirst(); > return false; > } > ! > ! //must be the case that index>0, > ! //find the correct place, assuming that > ! //the index is not too large > ! if (index <= rows_size) > ! internalIndex = index - 1; > else > { > ! afterLast(); > ! return false; > } > > current_row = internalIndex; > --- 844,862 ---- > beforeFirst(); > return false; > } > ! } > else > { > ! //must be the case that index>0, > ! //find the correct place, assuming that > ! //the index is not too large > ! if (index <= rows_size) > ! internalIndex = index - 1; > ! else > ! { > ! afterLast(); > ! return false; > ! } > } > > current_row = internalIndex; > *************** > *** 1074,1079 **** > --- 1078,1088 ---- > > public int getRow() throws SQLException > { > + final int rows_size = rows.size(); > + > + if (current_row < 0 || current_row >= rows_size) > + return 0; > + > return current_row + 1; > } > > Index: src/interfaces/jdbc/org/postgresql/test/JDBC2Tests.java > =================================================================== > RCS file: /projects/cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/test/JDBC2Tests.java,v > retrieving revision 1.8 > diff -c -r1.8 JDBC2Tests.java > *** src/interfaces/jdbc/org/postgresql/test/JDBC2Tests.java 2001/10/25 05:59:59 1.8 > --- src/interfaces/jdbc/org/postgresql/test/JDBC2Tests.java 2001/11/13 21:22:01 > *************** > *** 205,210 **** > --- 205,211 ---- > // Connectivity/Protocols > > // ResultSet > + suite.addTestSuite(ResultSetTest.class); > > // Time, Date, Timestamp > suite.addTestSuite(DateTest.class); > > > ------------------------------------------------------------------------ > > > ---------------------------(end of broadcast)--------------------------- > TIP 3: if posting/reading through Usenet, please send an appropriate > subscribe-nomail command to majordomo@postgresql.org so that your > message can get through to the mailing list cleanly >
pgsql-jdbc by date: