mysql2postgres 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path '../test_helper', __dir__
4
+
5
+ class PostgresDbWriterBaseTest < Test::Unit::TestCase
6
+ class << self
7
+ def startup
8
+ seed_test_database
9
+ @options = get_test_config_by_label :localmysql_to_db_convert_nothing
10
+ end
11
+ end
12
+
13
+ def test_pg_connection
14
+ assert_nothing_raised do
15
+ Mysql2psql::PostgresDbWriter.new Tempfile.new('mysql2psql_test_').path, @options
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,92 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rubygems'
4
+ require 'test/unit'
5
+ require 'debug' if ENV.fetch('ENABLE_DEBUG', nil) == '1'
6
+
7
+ require File.expand_path('../lib/mysql2psql/version', __dir__)
8
+ require File.expand_path('../lib/mysql2psql/converter', __dir__)
9
+ require File.expand_path('../lib/mysql2psql/mysql_reader', __dir__)
10
+ require File.expand_path('../lib/mysql2psql/writer', __dir__)
11
+ require File.expand_path('../lib/mysql2psql/postgres_writer', __dir__)
12
+ require File.expand_path('../lib/mysql2psql/postgres_file_writer', __dir__)
13
+ require File.expand_path('../lib/mysql2psql/postgres_db_writer', __dir__)
14
+
15
+ def seed_test_database
16
+ options = get_test_config_by_label :localmysql_to_file_convert_nothing
17
+ seedfilepath = "#{__dir__}/../fixtures/seed_integration_tests.sql"
18
+ rc = system "mysql -u#{options[:mysql][:username]} #{options[:mysql][:database]} < #{seedfilepath}"
19
+ raise StandardError unless rc
20
+
21
+ true
22
+ rescue StandardError
23
+ raise 'Failed to seed integration test db. See README for setup requirements.'
24
+ end
25
+
26
+ def get_test_reader(options)
27
+ require 'mysql2psql/mysql_reader'
28
+ Mysql2psql::MysqlReader.new options
29
+ rescue StandardError
30
+ raise 'Failed to initialize integration test db. See README for setup requirements.'
31
+ end
32
+
33
+ def get_test_file_writer(options)
34
+ require 'mysql2psql/postgres_file_writer'
35
+ Mysql2psql::PostgresFileWriter.new options[:destfile]
36
+ rescue StandardError => e
37
+ puts e.inspect
38
+ raise "Failed to initialize file writer from #{options.inspect}. See README for setup requirements."
39
+ end
40
+
41
+ def get_test_converter(options)
42
+ require 'mysql2psql/converter'
43
+ reader = get_test_reader options
44
+ writer = get_test_file_writer options
45
+ Mysql2psql::Converter.new reader, writer, options
46
+ rescue StandardError
47
+ raise "Failed to initialize converter from #{options.inspect}. See README for setup requirements."
48
+ end
49
+
50
+ def get_temp_file(basename)
51
+ require 'tempfile'
52
+ f = Tempfile.new basename
53
+ path = f.path
54
+ f.close!
55
+ path
56
+ end
57
+
58
+ def get_new_test_config(include_tables: [], exclude_tables: [], to_file: false,
59
+ suppress_data: false, suppress_ddl: false, force_truncate: false)
60
+
61
+ to_filename = to_file ? get_temp_file(['mysql2psql_tmp_output_', '.yml']) : nil
62
+ binding.break
63
+ configtext = Mysql2psql::Config.template to_filename, include_tables, exclude_tables, suppress_data, suppress_ddl, force_truncate
64
+ configfile = get_temp_file 'mysql2psql_tmp_config'
65
+ File.open(configfile, 'w:UTF-8') { |f| f.write(configtext) }
66
+ yaml = YAML.load_file configfile
67
+ Mysql2psql::ConfigBase.new yaml
68
+ rescue StandardError
69
+ raise "Failed to initialize options from #{configfile}. See README for setup requirements."
70
+ end
71
+
72
+ def get_test_config_by_label(name)
73
+ case name
74
+ when :localmysql_to_file_convert_nothing
75
+ get_new_test_config to_file: true,
76
+ tables: ['unobtainium'],
77
+ exclude_tables: ['kryptonite'],
78
+ suppress_data: true,
79
+ suppress_ddl: true
80
+ when :localmysql_to_file_convert_all
81
+ get_new_test_config to_file: true
82
+ when :localmysql_to_db_convert_all
83
+ get_new_test_config
84
+ when :localmysql_to_db_convert_nothing
85
+ get_new_test_config tables: ['unobtainium'],
86
+ exclude_tables: ['kryptonite'],
87
+ suppress_data: true,
88
+ suppress_ddl: true
89
+ else
90
+ raise "Invalid label: #{name}"
91
+ end
92
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path '../test_helper', __dir__
4
+ require 'yaml'
5
+
6
+ class SettingTest < Test::Unit::TestCase
7
+ attr_reader :config_all_opts
8
+
9
+ def setup
10
+ @config_all_opts = YAML.load_file "#{__dir__}/../fixtures/config_all_options.yml"
11
+ end
12
+
13
+ def test_options_loaded
14
+ instance = Mysql2psql.new @config_all_opts
15
+ assert_not_nil instance.options
16
+ end
17
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path '../test_helper', __dir__
4
+
5
+ class PostgresFileWriterTest < Test::Unit::TestCase
6
+ attr_accessor :destfile
7
+
8
+ def setup
9
+ @destfile = get_temp_file 'mysql2psql_test_destfile'
10
+ rescue StandardError
11
+ raise 'Failed to initialize integration test db. See README for setup requirements.'
12
+ end
13
+
14
+ def teardown
15
+ File.delete destfile
16
+ end
17
+
18
+ def test_basic_write
19
+ writer = Mysql2psql::PostgresFileWriter.new destfile
20
+ writer.close
21
+ content = File.read destfile
22
+ assert_not_nil content.match("SET client_encoding = 'UTF8'")
23
+ assert_nil content.match('unobtanium')
24
+ end
25
+ end
metadata ADDED
@@ -0,0 +1,199 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mysql2postgres
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.2
5
+ platform: ruby
6
+ authors:
7
+ - Max Lapshin <max@maxidoors.ru>
8
+ - Anton Ageev <anton@ageev.name>
9
+ - Samuel Tribehou <cracoucax@gmail.com>
10
+ - Marco Nenciarini <marco.nenciarini@devise.it>
11
+ - James Nobis <jnobis@jnobis.controldocs.com>
12
+ - quel <github@quelrod.net>
13
+ - Holger Amann <keeney@fehu.org>
14
+ - Maxim Dobriakov <closer.main@gmail.com>
15
+ - Michael Kimsal <mgkimsal@gmail.com>
16
+ - Jacob Coby <jcoby@portallabs.com>
17
+ - Neszt Tibor <neszt@tvnetwork.hu>
18
+ - Miroslav Kratochvil <exa.exa@gmail.com>
19
+ - Paul Gallagher <gallagher.paul@gmail.com>
20
+ - Alex C Jokela <ajokela@umn.edu>
21
+ - Peter Clark <pclark@umn.edu>
22
+ - Juga Paazmaya <olavic@gmail.com>
23
+ - Alexander Meindl <a.meindl@alphanodes.com
24
+ autorequire:
25
+ bindir: bin
26
+ cert_chain: []
27
+ date: 2022-07-29 00:00:00.000000000 Z
28
+ dependencies:
29
+ - !ruby/object:Gem::Dependency
30
+ name: rake
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ - !ruby/object:Gem::Dependency
44
+ name: pg
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: 1.2.2
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: 1.2.2
57
+ - !ruby/object:Gem::Dependency
58
+ name: postgres-pr
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: '0.7'
64
+ type: :runtime
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - "~>"
69
+ - !ruby/object:Gem::Version
70
+ version: '0.7'
71
+ - !ruby/object:Gem::Dependency
72
+ name: ruby-mysql
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - "~>"
76
+ - !ruby/object:Gem::Version
77
+ version: '3.0'
78
+ type: :runtime
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - "~>"
83
+ - !ruby/object:Gem::Version
84
+ version: '3.0'
85
+ - !ruby/object:Gem::Dependency
86
+ name: debug
87
+ requirement: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ type: :development
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ - !ruby/object:Gem::Dependency
100
+ name: rubocop-minitest
101
+ requirement: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ type: :development
107
+ prerelease: false
108
+ version_requirements: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
113
+ - !ruby/object:Gem::Dependency
114
+ name: rubocop-performance
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ type: :development
121
+ prerelease: false
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ - !ruby/object:Gem::Dependency
128
+ name: test-unit
129
+ requirement: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - "~>"
132
+ - !ruby/object:Gem::Version
133
+ version: 3.5.3
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - "~>"
139
+ - !ruby/object:Gem::Version
140
+ version: 3.5.3
141
+ description: Translates MySQL -> PostgreSQL
142
+ email: a.meindl@alphanodes.com
143
+ executables:
144
+ - mysql2psql
145
+ extensions: []
146
+ extra_rdoc_files: []
147
+ files:
148
+ - ".gitignore"
149
+ - MIT-LICENSE
150
+ - README.md
151
+ - Rakefile
152
+ - bin/mysql2psql
153
+ - lib/mysql2psql.rb
154
+ - lib/mysql2psql/connection.rb
155
+ - lib/mysql2psql/converter.rb
156
+ - lib/mysql2psql/mysql_reader.rb
157
+ - lib/mysql2psql/postgres_db_writer.rb
158
+ - lib/mysql2psql/postgres_file_writer.rb
159
+ - lib/mysql2psql/postgres_writer.rb
160
+ - lib/mysql2psql/version.rb
161
+ - lib/mysql2psql/writer.rb
162
+ - mysql2postgres.gemspec
163
+ - test/fixtures/config_all_options.yml
164
+ - test/fixtures/seed_integration_tests.sql
165
+ - test/integration/convert_to_db_test.rb
166
+ - test/integration/convert_to_file_test.rb
167
+ - test/integration/converter_test.rb
168
+ - test/integration/mysql_reader_base_test.rb
169
+ - test/integration/mysql_reader_test.rb
170
+ - test/integration/postgres_db_writer_base_test.rb
171
+ - test/test_helper.rb
172
+ - test/units/option_test.rb
173
+ - test/units/postgres_file_writer_test.rb
174
+ homepage: https://code.alphanodes.com/alphanodes/mysql2psql
175
+ licenses:
176
+ - MIT
177
+ metadata:
178
+ rubygems_mfa_required: 'true'
179
+ post_install_message:
180
+ rdoc_options:
181
+ - "--charset=UTF-8"
182
+ require_paths:
183
+ - lib
184
+ required_ruby_version: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - ">="
187
+ - !ruby/object:Gem::Version
188
+ version: '2.7'
189
+ required_rubygems_version: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ requirements: []
195
+ rubygems_version: 3.3.7
196
+ signing_key:
197
+ specification_version: 4
198
+ summary: MySQL to PostgreSQL Data Translation
199
+ test_files: []