mirror of
https://github.com/postgres/postgres.git
synced 2025-04-29 13:56:47 +03:00
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
This commit is contained in:
parent
c97a787e85
commit
ebb93323bb
@ -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
|
|||||||
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
|
|||||||
|
|
||||||
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
|
|||||||
// Connectivity/Protocols
|
// Connectivity/Protocols
|
||||||
|
|
||||||
// ResultSet
|
// ResultSet
|
||||||
|
suite.addTestSuite(ResultSetTest.class);
|
||||||
|
|
||||||
// Time, Date, Timestamp
|
// Time, Date, Timestamp
|
||||||
suite.addTestSuite(DateTest.class);
|
suite.addTestSuite(DateTest.class);
|
||||||
|
@ -0,0 +1,66 @@
|
|||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user