# File lib/rubyrep/table_sync.rb, line 63
    def run
      success = false

      scan_class = TableScanHelper.scan_class(session)
      scan = scan_class.new(session, left_table, right_table)
      scan.progress_printer = progress_printer

      self.helper = SyncHelper.new(self)
      syncer = Syncers.configured_syncer(sync_options).new(helper)
    
      execute_sync_hook :before_table_sync

      scan.run do |type, row|
        yield type, row if block_given? # To enable progress reporting
        unless event_filtered?(type, row)
          syncer.sync_difference type, row
        end
      end
      
      execute_sync_hook :after_table_sync

      success = true # considered to be successful if we get till here
    ensure
      helper.finalize success if helper
    end