mssql_mysql_migrator 0.1.4 → 0.1.5

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
  SHA1:
3
- metadata.gz: c0bcb64c9fef0d76d644a351b29755f31abf68d3
4
- data.tar.gz: da2600300941f1648553aaf439bf8328bac9b1dc
3
+ metadata.gz: fedff8aeb75df313751c0ebdac9300142dff5b7d
4
+ data.tar.gz: b7d6ce173e45aa973875d0a5567c40285fb87e33
5
5
  SHA512:
6
- metadata.gz: 5f4a25be62eea077cdaae6c61acb749d61656392e086bb6ae2c4e83c2778cf65d3e8c12e73c0be951992a784e2498a53cd52ffa89c0b400360cf86072338725f
7
- data.tar.gz: e1da9c0bf3935753e91d69aee52c5f2f47679719b536c4809bf9e80bb88093b9002c416888df12fdadf0ed8dc21e5d77170a344310b2b8d0df3bed23fe764b5a
6
+ metadata.gz: 3620c9a610bd97ac9402863c2b68564daa62e553c590b5c54f24bf331bf7459e9322f5acc5b781bf25314f8b68f491e68f8202608a92777ea70d7aa906366ce4
7
+ data.tar.gz: e01d18e9e442d8dbef81106f205fc444e66bacb8af34ad263965616b30d00e02a26ec282fda21a2ae137534bc3db2ec8225579e002c8ca4acd72d0dca7ec8cc4
@@ -1,13 +1,12 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mssql_mysql_migrator (0.1.4)
4
+ mssql_mysql_migrator (0.1.5)
5
5
  ac-logger (~> 0.1.1)
6
6
  applix (~> 0.4.14)
7
7
  bundler (~> 1.10)
8
- mysql
9
- rake (~> 10.0)
10
- sequel
8
+ mysql (~> 2.9)
9
+ sequel (~> 4.22)
11
10
  tiny_tds (~> 0.6.3.rc1)
12
11
 
13
12
  GEM
@@ -43,9 +42,10 @@ PLATFORMS
43
42
  ruby
44
43
 
45
44
  DEPENDENCIES
46
- byebug
45
+ byebug (~> 5)
47
46
  mssql_mysql_migrator!
48
- rspec
47
+ rake (~> 10.0)
48
+ rspec (~> 3)
49
49
 
50
50
  BUNDLED WITH
51
- 1.10.3
51
+ 1.10.5
@@ -2,10 +2,9 @@
2
2
 
3
3
  require 'rubygems'
4
4
  require 'bundler'
5
- Bundler.setup(:default) #require 'bundler/setup'
6
- require 'ac/logger'
7
- require 'applix'
5
+ Bundler.setup
8
6
 
7
+ require 'applix'
9
8
  require 'mssql_mysql_migrator'
10
9
 
11
10
  $log = AC::Logger[]
@@ -53,20 +52,18 @@ end
53
52
 
54
53
  class MySQL < SequelDB
55
54
  def initialize params
56
- debugger rescue nil
57
55
  super(params.merge(adapter: 'mysql'))
58
56
  end
59
57
 
60
58
  def import_table(table_name, csv_path)
59
+ ds = db.run("DELETE FROM #{table_name}")
61
60
  sql = <<-SQL
62
- DELETE FROM #{table_name};
63
61
  LOAD DATA INFILE '#{csv_path}' INTO TABLE #{table_name}
64
62
  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
65
63
  IGNORE 1 LINES;
66
64
  SHOW WARNINGS
67
65
  SQL
68
66
  $log.debug "running mysql import: #{sql}"
69
- debugger rescue nil
70
67
  ds = db.run(sql)
71
68
  end
72
69
  end
@@ -108,9 +105,19 @@ class Main
108
105
  #
109
106
  # ... import-table test ad_locations $(pwd)/tmp/ad_locations.csv
110
107
  #
108
+ # options:
109
+ #
110
+ # --loaddir=<path> take path basename and prefix it with loaddir (this
111
+ # actually make sense in case of using transfer table)
112
+ #
111
113
  def import_table(db_name, table_name, csv_path)
112
114
  $log.debug "open destination datbabase(#{db_name})"
113
115
  dest_db = open_destination_db(db_name)
116
+
117
+ filename = File.basename(csv_path)
118
+ dirname = (@config[:loaddir] || File.dirname(csv_path))
119
+ csv_path = File.join(dirname, filename)
120
+
114
121
  dest_db.import_table(table_name, csv_path)
115
122
  end
116
123
 
@@ -135,8 +142,7 @@ class Main
135
142
  dump_table_as_csv(fd, table)
136
143
  fd.close
137
144
 
138
- dest_db = open_destination_db(name_dst)
139
- dest_db.import_table(table_name, fd.path)
145
+ import_table(name_dst, table_name, fd.path)
140
146
 
141
147
  []
142
148
  end
@@ -155,6 +161,10 @@ class Main
155
161
  #
156
162
  # when no table list is given all tables from src db are transfered
157
163
  #
164
+ # options:
165
+ #
166
+ # --loaddir=<path> take path basename and prefix it with loaddir
167
+ #
158
168
  def transfer(name_src, name_dst, *args)
159
169
  $log.debug "open source datbabase(#{name_src})"
160
170
  source_db= open_source_db(name_src)
@@ -208,17 +218,27 @@ class Main
208
218
  $log.debug "dumping #{table.count} rows as csv"
209
219
  table.each do |row|
210
220
  begin
211
- #debugger if row[:id] == 7047
212
- #r = c_names.map {|c| row[c]}
213
- #csv << prep_values(r)
214
221
  csv << prep_values(c_names.map {|c| row[c]})
215
222
  rescue => e
216
- debugger rescue nil
217
- $log.warn "bad row? #{row} -- #{e}"
223
+ $log.warn "bad row? #{row} -- #{e.class}::#{e}"
224
+ $log.debug "(callstack):\n\t#{e.backtrace.join "\n\t"}"
218
225
  end
219
226
  end
220
227
  end
221
228
 
229
+ # XXX: THIS IS A HORROR! DIRTY FIX!!! only justified by the fact that it is
230
+ # needed to repair a multiple broken encoding on strings in the current live
231
+ # database.
232
+ #
233
+ def reverse_totally_broken_string_data_encoding(val)
234
+ c = val.encode('CP1252').force_encoding('utf-8')
235
+ c.count('.')
236
+ c
237
+ rescue ArgumentError => e
238
+ $log.warn "encoding problem: >#{val}<>#{val.bytes}< -- #{e.class}::#{e}"
239
+ val.encode('utf-8')
240
+ end
241
+
222
242
  def prep_values(values)
223
243
  # In Csv I replaced all the "" with "\N" before I run the script, this
224
244
  # creates a null field in db
@@ -230,10 +250,9 @@ class Main
230
250
  when Time
231
251
  val.strftime("%Y-%m-%d %H:%M:%S")
232
252
  when String
233
- val.encode('CP1252').force_encoding('utf-8')
234
- #val.force_encoding('utf-8')
253
+ reverse_totally_broken_string_data_encoding(val)
235
254
  when true, false
236
- val ? 0 : 1
255
+ val ? 1 : 0
237
256
  else
238
257
  val
239
258
  end
@@ -1,3 +1,3 @@
1
1
  module MssqlMysqlMigrator
2
- VERSION = "0.1.4"
2
+ VERSION = '0.1.5'
3
3
  end
@@ -27,17 +27,14 @@ Gem::Specification.new do |spec|
27
27
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
28
  spec.require_paths = ["lib"]
29
29
 
30
- spec.add_dependency 'applix', '~>0.4.14'
31
- spec.add_dependency 'ac-logger', '~>0.1.1'
30
+ spec.add_runtime_dependency "bundler", "~> 1.10"
31
+ spec.add_runtime_dependency 'applix', '~>0.4.14'
32
+ spec.add_runtime_dependency 'ac-logger', '~>0.1.1'
33
+ spec.add_runtime_dependency 'mysql', '~>2.9'
34
+ spec.add_runtime_dependency 'sequel', '~>4.22'
35
+ spec.add_runtime_dependency 'tiny_tds', '~> 0.6.3.rc1'
32
36
 
33
- spec.add_dependency 'mysql'
34
- spec.add_dependency 'sequel'
35
- spec.add_dependency 'tiny_tds', '~> 0.6.3.rc1'
36
- spec.add_dependency "bundler", "~> 1.10"
37
- spec.add_dependency "rake", "~> 10.0"
38
- ## MSSQL for production server connection
39
- #spec.add_dependency 'activerecord-sqlserver-adapter'
40
-
41
- spec.add_development_dependency "rspec"
42
- spec.add_development_dependency "byebug"
37
+ spec.add_development_dependency "rake", "~> 10.0"
38
+ spec.add_development_dependency "rspec", "~> 3"
39
+ spec.add_development_dependency "byebug", "~> 5"
43
40
  end
metadata CHANGED
@@ -1,99 +1,99 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mssql_mysql_migrator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - dirk lüsebrink
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-06-23 00:00:00.000000000 Z
11
+ date: 2015-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: applix
14
+ name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.4.14
19
+ version: '1.10'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.4.14
26
+ version: '1.10'
27
27
  - !ruby/object:Gem::Dependency
28
- name: ac-logger
28
+ name: applix
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.1.1
33
+ version: 0.4.14
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.1.1
40
+ version: 0.4.14
41
41
  - !ruby/object:Gem::Dependency
42
- name: mysql
42
+ name: ac-logger
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: 0.1.1
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: 0.1.1
55
55
  - !ruby/object:Gem::Dependency
56
- name: sequel
56
+ name: mysql
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '2.9'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '2.9'
69
69
  - !ruby/object:Gem::Dependency
70
- name: tiny_tds
70
+ name: sequel
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 0.6.3.rc1
75
+ version: '4.22'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 0.6.3.rc1
82
+ version: '4.22'
83
83
  - !ruby/object:Gem::Dependency
84
- name: bundler
84
+ name: tiny_tds
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '1.10'
89
+ version: 0.6.3.rc1
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '1.10'
96
+ version: 0.6.3.rc1
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rake
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -101,7 +101,7 @@ dependencies:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
103
  version: '10.0'
104
- type: :runtime
104
+ type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
@@ -112,30 +112,30 @@ dependencies:
112
112
  name: rspec
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ">="
115
+ - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '0'
117
+ version: '3'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ">="
122
+ - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '0'
124
+ version: '3'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: byebug
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ">="
129
+ - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: '0'
131
+ version: '5'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ">="
136
+ - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: '0'
138
+ version: '5'
139
139
  description: Sequel is used for reading and CSV for bulk uploading.
140
140
  email:
141
141
  - dirk.luesebrink@artcom.de
@@ -180,7 +180,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
180
180
  version: '0'
181
181
  requirements: []
182
182
  rubyforge_project:
183
- rubygems_version: 2.4.6
183
+ rubygems_version: 2.4.8
184
184
  signing_key:
185
185
  specification_version: 4
186
186
  summary: dumping from MS SQL Server and loading to MySQL.