From d3ef753686384256c0a1439b3afb023bd96589ff Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Fri, 9 Jun 2000 17:27:57 +0000 Subject: [PATCH] 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( 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