Class: MysqlToSqlite::Importer

Inherits:
Object
  • Object
show all
Defined in:
lib/mysql_to_sqlite/importer.rb

Defined Under Namespace

Classes: SourceRecord, TargetRecord

Constant Summary collapse

INTERNAL_TABLES =
%w[ar_internal_metadata schema_migrations].freeze

Instance Method Summary collapse

Constructor Details

#initialize(source_url:, destination:, batch_size: 1_000, replace: false, ignore_source_only: false, output: $stdout) ⇒ Importer

Returns a new instance of Importer.

Raises:

  • (ArgumentError)


13
14
15
16
17
18
19
20
21
22
23
# File 'lib/mysql_to_sqlite/importer.rb', line 13

def initialize(source_url:, destination:, batch_size: 1_000, replace: false,
  ignore_source_only: false, output: $stdout)
  @source_url = source_url
  @destination = destination
  @batch_size = Integer(batch_size)
  raise ArgumentError, "batch size must be positive" unless @batch_size.positive?

  @replace = replace
  @ignore_source_only = ignore_source_only
  @output = output
end

Instance Method Details

#run!Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/mysql_to_sqlite/importer.rb', line 25

def run!
  connect!
  verify_databases!
  discover_tables!
  verify_migration_versions!
  verify_table_sets!
  verify_table_schemas!
  report_plan

  without_target_foreign_keys do
    TargetRecord.transaction do
      clear_target! if @replace
      verify_target_is_empty!
      reset_target_sequences!
      tables.each { |table| copy_table(table) }
      validate!
    end
  end

  output.puts "Import completed successfully."
ensure
  SourceRecord.connection_pool.disconnect! if SourceRecord.connected?
  TargetRecord.connection_pool.disconnect! if TargetRecord.connected?
end