def checksum(options = {})
reset_checksum
return_row = row = nil
row_count = 0
if options.include? :proxy_block_size
block_size = options[:proxy_block_size]
raise ":proxy_block_size must be greater than 0" unless block_size > 0
while row_count < block_size and next?
row = next_row
update_checksum(row)
row_count += 1
end
return_row = row
elsif options.include? :max_row
max_row = options[:max_row]
while next?
row = next_row
rank = rank_rows row, max_row
if rank > 0
self.last_row = row
break
end
row_count += 1
update_checksum(row)
return_row, row = row, nil
end
else
raise "options must include either :proxy_block_size or :max_row"
end
return_keys = return_row.reject {|key, | not primary_key_names.include? key} if return_row
return return_keys, current_checksum, row_count
end