Commit ebb93323 authored by Barry Lind's avatar Barry Lind

Attached is a patch against the CVS repository that fixes the ResultSet absolute() 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 Stewart
parent c97a787e
...@@ -836,6 +836,7 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu ...@@ -836,6 +836,7 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu
//if index<0, count from the end of the result set, but check //if index<0, count from the end of the result set, but check
//to be sure that it is not beyond the first index //to be sure that it is not beyond the first index
if (index < 0) if (index < 0)
{
if (index >= -rows_size) if (index >= -rows_size)
internalIndex = rows_size + index; internalIndex = rows_size + index;
else else
...@@ -843,16 +844,19 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu ...@@ -843,16 +844,19 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu
beforeFirst(); beforeFirst();
return false; 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 else
{ {
afterLast(); //must be the case that index>0,
return false; //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; current_row = internalIndex;
...@@ -1074,6 +1078,11 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu ...@@ -1074,6 +1078,11 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu
public int getRow() throws SQLException 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; return current_row + 1;
} }
......
...@@ -205,6 +205,7 @@ public class JDBC2Tests extends TestSuite ...@@ -205,6 +205,7 @@ public class JDBC2Tests extends TestSuite
// Connectivity/Protocols // Connectivity/Protocols
// ResultSet // ResultSet
suite.addTestSuite(ResultSetTest.class);
// Time, Date, Timestamp // Time, Date, Timestamp
suite.addTestSuite(DateTest.class); suite.addTestSuite(DateTest.class);
......
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();
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment