提交 d3ef7536 编写于 作者: B Bruce Momjian

This patch fixes the 0-based/1-based result set indexing problem for

absolute.  It also makes it more compliant with the interface
specification in Sun's documentation;

1. absolute(0) should throw an exception.
2. absolute(>num-records) should set the current row to after the last
record in addition to returning false.
3. absolute(<num-records) should set the current row to before the first
record in addition to returning false.

These operations in the existing code just return false and don't change
current_row.

These changes required a minor change to relative(int) since it calls
absolute(int)

The attached patch is against the cvs repository tree as of this morning.

Also, who is in charge of maintaining the jdbc driver?  I'm working on
getArray for the jdbc2 driver, but it's going to require three more
classes to be added to the driver, and thus three more source files
in the repository.  Is there someone I can contact directly to ask about
this?

Travis Bauer | CS Grad Student | IU |www.cs.indiana.edu/~trbauer
上级 bd29cb0e
......@@ -801,16 +801,34 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu
public boolean absolute(int index) throws SQLException
{
// Peter: Added because negative indices read from the end of the
// ResultSet
if(index<0)
index=rows.size()+index;
if (index > rows.size())
// index is 1-based, but internally we use 0-based indices
int internalIndex;
if (index==0)
throw new SQLException("Cannot move to index of 0");
//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 {
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=index;
this_row = (byte [][])rows.elementAt(index);
}
current_row=internalIndex;
this_row = (byte [][])rows.elementAt(internalIndex);
return true;
}
......@@ -1041,7 +1059,8 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu
// Peter: Implemented in 7.0
public boolean relative(int rows) throws SQLException
{
return absolute(current_row+rows);
//have to add 1 since absolute expects a 1-based index
return absolute(current_row+1+rows);
}
public boolean rowDeleted() throws SQLException
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册