def fetch_scroll( direction, offset )
case direction
when DBI::SQL_FETCH_NEXT
fetch
when DBI::SQL_FETCH_PRIOR
if @row_pos.nil?
@row_pos = @res_handle.num_rows-1
@res_handle.data_seek(@row_pos)
fetch
elsif @row_pos == 0
nil
else
@row_pos -= 1
@res_handle.data_seek(@row_pos)
fetch
end
when DBI::SQL_FETCH_FIRST
@row_pos = 0
@res_handle.data_seek(@row_pos)
fetch
when DBI::SQL_FETCH_LAST
@res_handle.data_seek(@res_handle.num_rows-1)
@row_pos = nil
@res_handle.fetch_row
when DBI::SQL_FETCH_ABSOLUTE
@row_pos = offset
@res_handle.data_seek(@row_pos)
fetch
when DBI::SQL_FETCH_RELATIVE
if @row_pos.nil?
@row_pos = @res_handle.num_rows
end
@row_pos += offset
@res_handle.data_seek(@row_pos)
fetch
end
rescue MyError => err
raise DBI::DatabaseError.new(err.message)
end