# File lib/rubyrep/proxied_table_scan.rb, line 139
    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 # ensures progress bar is printed even if there are no records
      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