def run(&blck)
left_cursor = right_cursor = nil
left_cursor = session.left.create_cursor ProxyBlockCursor, left_table,
:row_buffer_size => scan_options[:row_buffer_size]
right_cursor = session.right.create_cursor ProxyBlockCursor, right_table,
:row_buffer_size => scan_options[:row_buffer_size]
update_progress 0
while left_cursor.next?
left_to, left_checksum, left_progress =
left_cursor.checksum :proxy_block_size => block_size
_ , right_checksum, right_progress =
right_cursor.checksum :max_row => left_to
combined_progress = left_progress + right_progress
if left_checksum != right_checksum
compare_blocks left_cursor, right_cursor do |type, row|
steps = type == :conflict ? 2 : 1
update_progress steps
combined_progress -= steps
yield type, row
end
end
update_progress combined_progress
end
while right_cursor.next?
update_progress 1
yield :right, right_cursor.next_row
end
ensure
session.left.destroy_cursor left_cursor if left_cursor
session.right.destroy_cursor right_cursor if right_cursor
end