db_transformer 0.1.1 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4505ba9e58a294adaa2f6fdaf35a32a48b7724bfee8eef2cfd9e988ba622ee19
4
- data.tar.gz: 13a7bdae63b854f5f0a3c3f7fae94f51cf6d54007c506d13523d6789b334f2f9
3
+ metadata.gz: 8d2236af8444060803e3686c50de8f3c896ee9be89f66a55e2c8c9442a1d5262
4
+ data.tar.gz: 69e2269761ce200030076d2a149c53eef68716cb2988464439b54702fd9185f3
5
5
  SHA512:
6
- metadata.gz: bf3c975771fc66fef76c2f448a78400a98db325275f1daecf2f86d90c5abcb85ee1ac223a78a600337385754e34e153edb4ef88554564e89a96398d17ad305b2
7
- data.tar.gz: 5943deccbde9e43e6e586f1b604846edb092a01c365dd2ba496b8c071807b485aa072e29fb27959fa31e539b45b2ad4dffec55ad52f74816fe6a722401450c5f
6
+ metadata.gz: 98937bca4d0b1a3868d699483b291f77e58760c68069651a0d42da2013460f55eb184ea87d88049970a4d44fe7be5e7541bf950ed543d0589f5b20e5fa0b289a
7
+ data.tar.gz: 6e2fe13bfaa96b3668bcd5b46a46a383c2e98d1b02b10c1d1ef43f9877bcbbe7c90d772f946f29ca5a9baf27d31900608dd5aa74a49d6d4ebf2399246f58368e
data/Gemfile.lock CHANGED
@@ -1,22 +1,24 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- db_transformer (0.1.0)
4
+ db_transformer (0.1.4)
5
5
  faker
6
6
  mysql2 (~> 0.5.0)
7
+ parallel (~> 1.22)
7
8
  sequel (~> 5.56)
8
9
  thor (~> 1.2)
9
10
 
10
11
  GEM
11
12
  remote: https://rubygems.org/
12
13
  specs:
13
- concurrent-ruby (1.1.9)
14
+ concurrent-ruby (1.1.10)
14
15
  diff-lcs (1.5.0)
15
- faker (2.17.0)
16
- i18n (>= 1.6, < 2)
17
- i18n (1.8.11)
16
+ faker (2.21.0)
17
+ i18n (>= 1.8.11, < 2)
18
+ i18n (1.10.0)
18
19
  concurrent-ruby (~> 1.0)
19
20
  mysql2 (0.5.4)
21
+ parallel (1.22.1)
20
22
  rake (13.0.6)
21
23
  rspec (3.11.0)
22
24
  rspec-core (~> 3.11.0)
@@ -33,6 +33,7 @@ Gem::Specification.new do |spec|
33
33
  spec.add_dependency 'mysql2', "~> 0.5.0"
34
34
  spec.add_dependency 'sequel', '~> 5.56'
35
35
  spec.add_dependency 'thor', '~> 1.2'
36
+ spec.add_dependency 'parallel', '~> 1.22'
36
37
 
37
38
  # For more information and examples about making a new gem, checkout our
38
39
  # guide at: https://bundler.io/guides/creating_gem.html
@@ -10,15 +10,19 @@ module DbTransformer
10
10
  destination_database_client.run('SET foreign_key_checks = 0;')
11
11
 
12
12
  tables.each do |table_name|
13
- logger.info("Start copying `#{table_name}`")
14
-
15
13
  if @settings.dig('destination', 'options', 'force_replace')
16
- destination_database_client.run("DROP TABLE #{table_name}")
14
+ destination_database_client.run("DROP TABLE IF EXISTS #{table_name}")
17
15
  end
18
16
 
19
17
  create_table_query = source_database_client.fetch('SHOW CREATE TABLE ?', table_name).first[:'Create Table']
20
18
  create_table_query = create_table_query.gsub('CREATE TABLE', 'CREATE TABLE IF NOT EXISTS')
21
19
  destination_database_client.run(create_table_query)
20
+ end
21
+
22
+ Parallel.each(tables, in_threads: [source_database_max_connection, destination_database_max_connection].min) do |table_name|
23
+ destination_database_client.run('SET foreign_key_checks = 0;')
24
+
25
+ logger.info("Start copying `#{table_name}`")
22
26
 
23
27
  offset = 0
24
28
  loop do
@@ -53,13 +57,21 @@ module DbTransformer
53
57
  end
54
58
 
55
59
  def tables
56
- source_database_client.tables
60
+ source_database_client.tables - skip_tables
57
61
  end
58
62
 
59
63
  def source_database_client
60
64
  @source_database_client ||= Sequel.mysql2(@settings['source'])
61
65
  end
62
66
 
67
+ def skip_tables
68
+ @skip_tables ||= @settings.dig('source', 'options', 'skip_tables').map(&:to_sym) || []
69
+ end
70
+
71
+ def source_database_settings
72
+ @source_database_settings ||= @settings['source'].reject { |k, _| k == 'options' }
73
+ end
74
+
63
75
  def destination_database_client
64
76
  @destination_database_client ||= Sequel.mysql2(destination_database_settings)
65
77
  end
@@ -72,6 +84,14 @@ module DbTransformer
72
84
  @destination_database_settings ||= @settings['destination'].reject { |k, _| k == 'options' }
73
85
  end
74
86
 
87
+ def source_database_max_connection
88
+ @settings['source']['max_connections'] || 4
89
+ end
90
+
91
+ def destination_database_max_connection
92
+ @settings['destination']['max_connections'] || 4
93
+ end
94
+
75
95
  def rules
76
96
  @settings['rules']
77
97
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DbTransformer
4
- VERSION = '0.1.1'
4
+ VERSION = '0.1.4'
5
5
  end
@@ -3,6 +3,7 @@
3
3
  require 'erb'
4
4
  require 'sequel'
5
5
  require 'logger'
6
+ require 'parallel'
6
7
  require 'yaml'
7
8
 
8
9
  require_relative 'db_transformer/version'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: db_transformer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomoki Ichikawa
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '1.2'
69
+ - !ruby/object:Gem::Dependency
70
+ name: parallel
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.22'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.22'
69
83
  description: ''
70
84
  email:
71
85
  - ichikawa@1060ki.com