mysql2postgres 0.4.0 → 0.4.2

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: cc905b9634e92298f5b5d192b6f4388294f6153a777b551b408bc5e944247b3f
4
- data.tar.gz: 108d90760f0600e55f117df749147f8137d3044a7724dd901f76869db7b45caf
3
+ metadata.gz: f9dc76770d64295e3a3f9d6559063f3e8dc8599519e175f80b034349f1aeb5d9
4
+ data.tar.gz: 4d794d660cc3762d1208248fbf4ef64ae144f36947a46c2627b4548c26df4548
5
5
  SHA512:
6
- metadata.gz: 6b08edc13623c942b61d03cecce1f577eca9fce3906e3c06ef17c848396dfebadb39017cb7ae7aecb5193e91cffc85d2a4cea2e49054f0e7dd3dffc8f53012eb
7
- data.tar.gz: 5ef72f3a6ac5961102d282b38cf2eb5bc62d301f5e84b590dc4e9dd7d057fa51c43f5272b112478ab6b6d3513fc3ac67e8a24bae0d9f23d3f162c0ddd8f591e0
6
+ metadata.gz: 8fcd9276a35e01baf595134a54d9db329e4b1f5517c53883885c936b3ece504acd2646205384f9a743dbdc7cd8699ee842015d3825d3faa82272677a992b2e20
7
+ data.tar.gz: e86280a311c1e2a530da4bf5da1802999163008890cfa7764f9065f311ceb128f16c7e498c93670a49f10b78bbb7ecc77ec3a397922095370a5ec833232e98c0
data/bin/mysql2postgres CHANGED
@@ -11,7 +11,7 @@ config_file = ARGV.empty? ? File.join(File.dirname(__dir__), 'config', 'database
11
11
 
12
12
  raise "'#{config_file}' does not exist" unless FileTest.exist? config_file
13
13
 
14
- db_yaml = YAML.safe_load File.read(config_file)
14
+ db_yaml = YAML.safe_load_file config_file
15
15
 
16
16
  raise "'#{config_file}' does not contain a mysql configuration directive for conversion" unless db_yaml.key? 'mysql'
17
17
  raise "'#{config_file}' does not contain destinations configuration directive for conversion" unless db_yaml.key? 'destinations'
@@ -27,7 +27,7 @@ class Mysql2postgres
27
27
 
28
28
  def convert
29
29
  tables = reader.tables
30
- tables.reject! { |table| exclude_tables.include?(table.name) }
30
+ tables.reject! { |table| exclude_tables.include? table.name }
31
31
  tables.select! { |table| only_tables ? only_tables.include?(table.name) : true }
32
32
 
33
33
  # preserve order only works, if only_tables are specified
@@ -125,7 +125,7 @@ class Mysql2postgres
125
125
  @indexes << index
126
126
  elsif (match_data = /PRIMARY KEY .*\((.*)\)/.match(line))
127
127
  index[:primary] = true
128
- index[:columns] = match_data[1].split(',').map { |col| col.strip.delete('`') }
128
+ index[:columns] = match_data[1].split(',').map { |col| col.strip.delete '`' }
129
129
  @indexes << index
130
130
  end
131
131
  end
@@ -202,8 +202,8 @@ class Mysql2postgres
202
202
  connect
203
203
  end
204
204
 
205
- def query(*args, &block)
206
- mysql.query(*args, &block)
205
+ def query(*args, &)
206
+ mysql.query(*args, &)
207
207
  rescue Mysql::Error => e
208
208
  if e.message.match?(/gone away/i)
209
209
  reconnect
@@ -216,7 +216,7 @@ class Mysql2postgres
216
216
  end
217
217
 
218
218
  def tables
219
- @tables ||= @mysql.query('SHOW TABLES').map { |row| Table.new(self, row.first) }
219
+ @tables ||= @mysql.query('SHOW TABLES').map { |row| Table.new self, row.first }
220
220
  end
221
221
 
222
222
  def paginated_read(table, page_size)
@@ -151,7 +151,7 @@ class Mysql2postgres
151
151
  private
152
152
 
153
153
  def quoted_list(list)
154
- list.map { |c| PG::Connection.quote_ident(c) }.join(', ')
154
+ list.map { |c| PG::Connection.quote_ident c }.join(', ')
155
155
  end
156
156
  end
157
157
  end
@@ -51,7 +51,7 @@ class Mysql2postgres
51
51
  when 'double precision'
52
52
  default = " DEFAULT #{column[:default].nil? ? 'NULL' : column[:default]}" if default
53
53
  'double precision'
54
- when 'datetime'
54
+ when 'datetime', 'datetime(6)'
55
55
  default = nil
56
56
  'timestamp without time zone'
57
57
  when 'date'
@@ -63,7 +63,7 @@ class Mysql2postgres
63
63
  default = ' DEFAULT CURRENT_TIMESTAMP'
64
64
  when datetime_zero
65
65
  default = " DEFAULT '#{datetime_zero_fix}'"
66
- when datetime_zero(with_seconds: true) # rubocop: disable Style/MethodCallWithArgsParentheses
66
+ when datetime_zero(with_seconds: true)
67
67
  default = " DEFAULT '#{datetime_zero_fix with_seconds: true}'"
68
68
  end
69
69
  'timestamp without time zone'
@@ -102,14 +102,14 @@ class Mysql2postgres
102
102
  if column_type(column) == 'boolean'
103
103
  row[index] = if row[index] == 1
104
104
  't'
105
- elsif row[index].zero?
105
+ elsif row[index]&.zero?
106
106
  'f'
107
107
  else
108
108
  row[index]
109
109
  end
110
110
  end
111
111
 
112
- row[index] = string_data row, index, column if row[index].is_a? String
112
+ row[index] = string_data table, row, index, column if row[index].is_a? String
113
113
 
114
114
  row[index] = '\N' unless row[index]
115
115
  end
@@ -137,7 +137,7 @@ class Mysql2postgres
137
137
  value.join ':'
138
138
  end
139
139
 
140
- def string_data(row, index, column)
140
+ def string_data(table, row, index, column)
141
141
  if column_type(column) == 'bytea'
142
142
  if column[:name] == 'data'
143
143
  with_gzip = false
@@ -153,16 +153,16 @@ class Mysql2postgres
153
153
  escape_bytea row[index]
154
154
  end
155
155
  else
156
- escape_data(row[index]).gsub(/\n/, '\n').gsub(/\t/, '\t').gsub(/\r/, '\r').gsub(/\0/, '')
156
+ escape_data(row[index]).gsub("\n", '\n').gsub("\t", '\t').gsub("\r", '\r').gsub(/\0/, '')
157
157
  end
158
158
  end
159
159
 
160
160
  def escape_bytea(data)
161
- escape_data(PG::Connection.escape_bytea(data)).gsub(/''/, "'")
161
+ escape_data(PG::Connection.escape_bytea(data)).gsub("''", "'")
162
162
  end
163
163
 
164
164
  def escape_data(value)
165
- value.gsub(/\\/, '\\\\\\')
165
+ value.gsub '\\', '\\\\\\'
166
166
  end
167
167
  end
168
168
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Mysql2postgres
4
- VERSION = '0.4.0'
4
+ VERSION = '0.4.2'
5
5
  end
@@ -5,7 +5,7 @@ require 'yaml'
5
5
  require 'pg'
6
6
  require 'pg_ext'
7
7
  require 'pg/exceptions'
8
- require 'pg/constants'
8
+ # require 'pg/constants'
9
9
  require 'pg/connection'
10
10
  require 'pg/result'
11
11
 
@@ -32,7 +32,7 @@ Gem::Specification.new do |s|
32
32
  s.email = 'a.meindl@alphanodes.com'
33
33
  s.metadata = { 'rubygems_mfa_required' => 'true' }
34
34
  s.executables = ['mysql2postgres']
35
- s.required_ruby_version = '>= 2.7'
35
+ s.required_ruby_version = '>= 3.1'
36
36
 
37
37
  s.files = [
38
38
  '.gitignore',
@@ -70,7 +70,7 @@ Gem::Specification.new do |s|
70
70
  s.require_paths = ['lib']
71
71
  s.summary = 'MySQL to PostgreSQL Data Translation'
72
72
 
73
- s.add_runtime_dependency 'pg', '~> 1.2.2'
74
- s.add_runtime_dependency 'rake'
75
- s.add_runtime_dependency 'ruby-mysql', '~> 3.0'
73
+ s.add_dependency 'pg', '~> 1.5.3'
74
+ s.add_dependency 'rake'
75
+ s.add_dependency 'ruby-mysql', '~> 4.2'
76
76
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mysql2postgres
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Max Lapshin <max@maxidoors.ru>
@@ -24,7 +24,7 @@ authors:
24
24
  autorequire:
25
25
  bindir: bin
26
26
  cert_chain: []
27
- date: 2022-07-31 00:00:00.000000000 Z
27
+ date: 2025-06-25 00:00:00.000000000 Z
28
28
  dependencies:
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: pg
@@ -32,14 +32,14 @@ dependencies:
32
32
  requirements:
33
33
  - - "~>"
34
34
  - !ruby/object:Gem::Version
35
- version: 1.2.2
35
+ version: 1.5.3
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
40
  - - "~>"
41
41
  - !ruby/object:Gem::Version
42
- version: 1.2.2
42
+ version: 1.5.3
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: rake
45
45
  requirement: !ruby/object:Gem::Requirement
@@ -60,14 +60,14 @@ dependencies:
60
60
  requirements:
61
61
  - - "~>"
62
62
  - !ruby/object:Gem::Version
63
- version: '3.0'
63
+ version: '4.2'
64
64
  type: :runtime
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
68
  - - "~>"
69
69
  - !ruby/object:Gem::Version
70
- version: '3.0'
70
+ version: '4.2'
71
71
  description: Translates MySQL -> PostgreSQL
72
72
  email: a.meindl@alphanodes.com
73
73
  executables:
@@ -117,14 +117,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
117
117
  requirements:
118
118
  - - ">="
119
119
  - !ruby/object:Gem::Version
120
- version: '2.7'
120
+ version: '3.1'
121
121
  required_rubygems_version: !ruby/object:Gem::Requirement
122
122
  requirements:
123
123
  - - ">="
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0'
126
126
  requirements: []
127
- rubygems_version: 3.3.7
127
+ rubygems_version: 3.3.27
128
128
  signing_key:
129
129
  specification_version: 4
130
130
  summary: MySQL to PostgreSQL Data Translation