activerecord-import 2.2.0 → 2.3.0

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.
Files changed (133) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +33 -0
  3. data/README.markdown +9 -9
  4. data/lib/activerecord-import/active_record/adapters/mysql2_proxy_adapter.rb +8 -0
  5. data/lib/activerecord-import/active_record/adapters/postgresql_proxy_adapter.rb +8 -0
  6. data/lib/activerecord-import/active_record/adapters/sqlite3_proxy_adapter.rb +8 -0
  7. data/lib/activerecord-import/active_record/adapters/trilogy_proxy_adapter.rb +8 -0
  8. data/lib/activerecord-import/adapters/active_record_proxy_adapter.rb +19 -0
  9. data/lib/activerecord-import/adapters/mysql2_proxy_adapter.rb +9 -0
  10. data/lib/activerecord-import/adapters/mysql_adapter.rb +10 -3
  11. data/lib/activerecord-import/adapters/postgresql_adapter.rb +1 -1
  12. data/lib/activerecord-import/adapters/postgresql_proxy_adapter.rb +9 -0
  13. data/lib/activerecord-import/adapters/sqlite3_proxy_adapter.rb +9 -0
  14. data/lib/activerecord-import/adapters/trilogy_proxy_adapter.rb +9 -0
  15. data/lib/activerecord-import/base.rb +0 -2
  16. data/lib/activerecord-import/import.rb +243 -207
  17. data/lib/activerecord-import/version.rb +1 -1
  18. metadata +13 -208
  19. data/.github/workflows/test.yaml +0 -165
  20. data/.gitignore +0 -37
  21. data/.rubocop.yml +0 -118
  22. data/.rubocop_todo.yml +0 -30
  23. data/Brewfile +0 -5
  24. data/Dockerfile +0 -23
  25. data/Gemfile +0 -63
  26. data/Rakefile +0 -75
  27. data/activerecord-import.gemspec +0 -28
  28. data/benchmarks/README +0 -32
  29. data/benchmarks/benchmark.rb +0 -72
  30. data/benchmarks/lib/base.rb +0 -143
  31. data/benchmarks/lib/cli_parser.rb +0 -111
  32. data/benchmarks/lib/float.rb +0 -17
  33. data/benchmarks/lib/mysql2_benchmark.rb +0 -21
  34. data/benchmarks/lib/output_to_csv.rb +0 -21
  35. data/benchmarks/lib/output_to_html.rb +0 -66
  36. data/benchmarks/models/test_innodb.rb +0 -5
  37. data/benchmarks/models/test_memory.rb +0 -5
  38. data/benchmarks/models/test_myisam.rb +0 -5
  39. data/benchmarks/schema/mysql2_schema.rb +0 -18
  40. data/docker-compose.yml +0 -34
  41. data/gemfiles/5.2.gemfile +0 -4
  42. data/gemfiles/6.0.gemfile +0 -4
  43. data/gemfiles/6.1.gemfile +0 -4
  44. data/gemfiles/7.0.gemfile +0 -4
  45. data/gemfiles/7.1.gemfile +0 -3
  46. data/gemfiles/7.2.gemfile +0 -3
  47. data/gemfiles/8.0.gemfile +0 -3
  48. data/test/adapters/janus_mysql2.rb +0 -3
  49. data/test/adapters/janus_trilogy.rb +0 -11
  50. data/test/adapters/jdbcmysql.rb +0 -3
  51. data/test/adapters/jdbcpostgresql.rb +0 -3
  52. data/test/adapters/jdbcsqlite3.rb +0 -3
  53. data/test/adapters/makara_postgis.rb +0 -3
  54. data/test/adapters/mysql2.rb +0 -3
  55. data/test/adapters/mysql2_makara.rb +0 -3
  56. data/test/adapters/mysql2_proxy.rb +0 -3
  57. data/test/adapters/mysql2spatial.rb +0 -3
  58. data/test/adapters/postgis.rb +0 -3
  59. data/test/adapters/postgresql.rb +0 -3
  60. data/test/adapters/postgresql_makara.rb +0 -3
  61. data/test/adapters/postgresql_proxy.rb +0 -3
  62. data/test/adapters/seamless_database_pool.rb +0 -3
  63. data/test/adapters/spatialite.rb +0 -3
  64. data/test/adapters/sqlite3.rb +0 -3
  65. data/test/adapters/trilogy.rb +0 -11
  66. data/test/database.yml.sample +0 -73
  67. data/test/github/database.yml +0 -85
  68. data/test/import_test.rb +0 -970
  69. data/test/janus_mysql2/import_test.rb +0 -8
  70. data/test/janus_trilogy/import_test.rb +0 -7
  71. data/test/jdbcmysql/import_test.rb +0 -7
  72. data/test/jdbcpostgresql/import_test.rb +0 -6
  73. data/test/jdbcsqlite3/import_test.rb +0 -6
  74. data/test/makara_postgis/import_test.rb +0 -10
  75. data/test/models/account.rb +0 -5
  76. data/test/models/alarm.rb +0 -4
  77. data/test/models/animal.rb +0 -8
  78. data/test/models/author.rb +0 -9
  79. data/test/models/bike_maker.rb +0 -10
  80. data/test/models/book.rb +0 -18
  81. data/test/models/car.rb +0 -5
  82. data/test/models/card.rb +0 -5
  83. data/test/models/chapter.rb +0 -6
  84. data/test/models/composite_book.rb +0 -19
  85. data/test/models/composite_chapter.rb +0 -12
  86. data/test/models/customer.rb +0 -18
  87. data/test/models/deck.rb +0 -8
  88. data/test/models/dictionary.rb +0 -6
  89. data/test/models/discount.rb +0 -5
  90. data/test/models/end_note.rb +0 -6
  91. data/test/models/group.rb +0 -5
  92. data/test/models/order.rb +0 -17
  93. data/test/models/playing_card.rb +0 -4
  94. data/test/models/promotion.rb +0 -5
  95. data/test/models/question.rb +0 -5
  96. data/test/models/rule.rb +0 -5
  97. data/test/models/tag.rb +0 -12
  98. data/test/models/tag_alias.rb +0 -11
  99. data/test/models/topic.rb +0 -31
  100. data/test/models/user.rb +0 -5
  101. data/test/models/user_token.rb +0 -6
  102. data/test/models/vendor.rb +0 -9
  103. data/test/models/widget.rb +0 -33
  104. data/test/mysql2/import_test.rb +0 -7
  105. data/test/mysql2_makara/import_test.rb +0 -8
  106. data/test/mysql2_proxy/import_test.rb +0 -6
  107. data/test/mysqlspatial2/import_test.rb +0 -8
  108. data/test/postgis/import_test.rb +0 -10
  109. data/test/postgresql/import_test.rb +0 -6
  110. data/test/postgresql_proxy/import_test.rb +0 -6
  111. data/test/schema/generic_schema.rb +0 -230
  112. data/test/schema/jdbcpostgresql_schema.rb +0 -3
  113. data/test/schema/mysql2_schema.rb +0 -21
  114. data/test/schema/postgis_schema.rb +0 -3
  115. data/test/schema/postgresql_schema.rb +0 -94
  116. data/test/schema/sqlite3_schema.rb +0 -15
  117. data/test/schema/version.rb +0 -12
  118. data/test/sqlite3/import_test.rb +0 -6
  119. data/test/support/active_support/test_case_extensions.rb +0 -73
  120. data/test/support/assertions.rb +0 -75
  121. data/test/support/factories.rb +0 -66
  122. data/test/support/generate.rb +0 -31
  123. data/test/support/mysql/import_examples.rb +0 -97
  124. data/test/support/postgresql/import_examples.rb +0 -642
  125. data/test/support/shared_examples/on_duplicate_key_ignore.rb +0 -45
  126. data/test/support/shared_examples/on_duplicate_key_update.rb +0 -437
  127. data/test/support/shared_examples/recursive_import.rb +0 -352
  128. data/test/support/sqlite3/import_examples.rb +0 -232
  129. data/test/synchronize_test.rb +0 -43
  130. data/test/test_helper.rb +0 -91
  131. data/test/trilogy/import_test.rb +0 -7
  132. data/test/value_sets_bytes_parser_test.rb +0 -106
  133. data/test/value_sets_records_parser_test.rb +0 -34
data/test/test_helper.rb DELETED
@@ -1,91 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'pathname'
4
- require 'rake'
5
- require 'logger'
6
-
7
- test_dir = Pathname.new File.dirname(__FILE__)
8
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
9
- $LOAD_PATH.unshift(File.dirname(__FILE__))
10
-
11
- require "fileutils"
12
-
13
- ENV["RAILS_ENV"] = "test"
14
-
15
- require "bundler"
16
- Bundler.setup
17
-
18
- unless RbConfig::CONFIG["RUBY_INSTALL_NAME"] =~ /jruby/
19
- require 'pry'
20
- require 'pry-byebug'
21
- end
22
-
23
- require "active_record"
24
- require "active_record/fixtures"
25
- require "active_support/test_case"
26
- require 'active_support/testing/autorun'
27
- require "mocha/minitest"
28
-
29
- require 'timecop'
30
- require 'chronic'
31
-
32
- begin
33
- require 'composite_primary_keys'
34
- rescue LoadError
35
- if ENV['AR_VERSION'].to_f <= 7.1
36
- ENV['SKIP_COMPOSITE_PK'] = 'true'
37
- end
38
- end
39
-
40
- adapter = ENV["ARE_DB"] || "sqlite3"
41
-
42
- FileUtils.mkdir_p 'log'
43
- ActiveRecord::Base.logger = Logger.new("log/test.log")
44
- ActiveRecord::Base.logger.level = Logger::DEBUG
45
-
46
- if ActiveRecord.respond_to?(:use_yaml_unsafe_load)
47
- ActiveRecord.use_yaml_unsafe_load = true
48
- elsif ActiveRecord::Base.respond_to?(:use_yaml_unsafe_load)
49
- ActiveRecord::Base.use_yaml_unsafe_load = true
50
- end
51
-
52
- if ENV['AR_VERSION'].to_f >= 6.0
53
- yaml_config = if Gem::Version.new(Psych::VERSION) >= Gem::Version.new('3.2.1')
54
- YAML.safe_load_file(test_dir.join("database.yml"), aliases: true)[adapter]
55
- else
56
- YAML.load_file(test_dir.join("database.yml"))[adapter]
57
- end
58
- config = ActiveRecord::DatabaseConfigurations::HashConfig.new("test", adapter, yaml_config)
59
- ActiveRecord::Base.configurations.configurations << config
60
- else
61
- ActiveRecord::Base.configurations["test"] = YAML.load_file(test_dir.join("database.yml"))[adapter]
62
- end
63
-
64
- if ActiveRecord.respond_to?(:default_timezone)
65
- ActiveRecord.default_timezone = :utc
66
- else
67
- ActiveRecord::Base.default_timezone = :utc
68
- end
69
-
70
- require "activerecord-import"
71
- ActiveRecord::Base.establish_connection :test
72
-
73
- ActiveSupport::Notifications.subscribe(/active_record.sql/) do |_, _, _, _, hsh|
74
- ActiveRecord::Base.logger.info hsh[:sql]
75
- end
76
-
77
- require "factory_bot"
78
- Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].sort.each { |file| require file }
79
-
80
- # Load base/generic schema
81
- require test_dir.join("schema/version")
82
- require test_dir.join("schema/generic_schema")
83
- adapter_schema = test_dir.join("schema/#{adapter}_schema.rb")
84
- require adapter_schema if File.exist?(adapter_schema)
85
-
86
- Dir["#{File.dirname(__FILE__)}/models/*.rb"].sort.each { |file| require file }
87
-
88
- # Prevent this deprecation warning from breaking the tests.
89
- Rake::FileList.send(:remove_method, :import)
90
-
91
- ActiveSupport::TestCase.test_order = :random
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require File.expand_path("#{File.dirname(__FILE__)}/../test_helper")
4
- require File.expand_path("#{File.dirname(__FILE__)}/../support/assertions")
5
- require File.expand_path("#{File.dirname(__FILE__)}/../support/mysql/import_examples")
6
-
7
- should_support_mysql_import_functionality
@@ -1,106 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require File.expand_path("#{File.dirname(__FILE__)}/test_helper")
4
-
5
- require 'activerecord-import/value_sets_parser'
6
-
7
- describe ActiveRecord::Import::ValueSetsBytesParser do
8
- context "#parse - computing insert value sets" do
9
- let(:parser) { ActiveRecord::Import::ValueSetsBytesParser }
10
- let(:base_sql) { "INSERT INTO atable (a,b,c)" }
11
- let(:values) { ["(1,2,3)", "(2,3,4)", "(3,4,5)"] }
12
-
13
- context "when the max allowed bytes is 30 and the base SQL is 26 bytes" do
14
- it "should raise ActiveRecord::Import::ValueSetTooLargeError" do
15
- error = assert_raises ActiveRecord::Import::ValueSetTooLargeError do
16
- parser.parse values, reserved_bytes: base_sql.size, max_bytes: 30
17
- end
18
- assert_match(/33 bytes exceeds the max allowed for an insert \[30\]/, error.message)
19
- end
20
- end
21
-
22
- context "when the max allowed bytes is 33 and the base SQL is 26 bytes" do
23
- it "should return 3 value sets when given 3 value sets of 7 bytes a piece" do
24
- value_sets = parser.parse values, reserved_bytes: base_sql.size, max_bytes: 33
25
- assert_equal 3, value_sets.size
26
- end
27
- end
28
-
29
- context "when the max allowed bytes is 40 and the base SQL is 26 bytes" do
30
- it "should return 3 value sets when given 3 value sets of 7 bytes a piece" do
31
- value_sets = parser.parse values, reserved_bytes: base_sql.size, max_bytes: 40
32
- assert_equal 3, value_sets.size
33
- end
34
- end
35
-
36
- context "when the max allowed bytes is 41 and the base SQL is 26 bytes" do
37
- it "should return 2 value sets when given 2 value sets of 7 bytes a piece" do
38
- value_sets = parser.parse values, reserved_bytes: base_sql.size, max_bytes: 41
39
- assert_equal 2, value_sets.size
40
- end
41
- end
42
-
43
- context "when the max allowed bytes is 48 and the base SQL is 26 bytes" do
44
- it "should return 2 value sets when given 2 value sets of 7 bytes a piece" do
45
- value_sets = parser.parse values, reserved_bytes: base_sql.size, max_bytes: 48
46
- assert_equal 2, value_sets.size
47
- end
48
- end
49
-
50
- context "when the max allowed bytes is 49 and the base SQL is 26 bytes" do
51
- it "should return 1 value sets when given 1 value sets of 7 bytes a piece" do
52
- value_sets = parser.parse values, reserved_bytes: base_sql.size, max_bytes: 49
53
- assert_equal 1, value_sets.size
54
- end
55
- end
56
-
57
- context "when the max allowed bytes is 999999 and the base SQL is 26 bytes" do
58
- it "should return 1 value sets when given 1 value sets of 7 bytes a piece" do
59
- value_sets = parser.parse values, reserved_bytes: base_sql.size, max_bytes: 999_999
60
- assert_equal 1, value_sets.size
61
- end
62
- end
63
-
64
- it "should properly build insert value set based on max packet allowed" do
65
- values = [
66
- "('1','2','3')",
67
- "('4','5','6')",
68
- "('7','8','9')"
69
- ]
70
-
71
- base_sql_size_in_bytes = 15
72
- max_bytes = 30
73
-
74
- value_sets = parser.parse values, reserved_bytes: base_sql_size_in_bytes, max_bytes: max_bytes
75
- assert_equal 3, value_sets.size, 'Three value sets were expected!'
76
-
77
- # Each element in the value_sets array must be an array
78
- value_sets.each_with_index do |e, i|
79
- assert_kind_of Array, e, "Element #{i} was expected to be an Array!"
80
- end
81
-
82
- # Each element in the values array should have a 1:1 correlation to the elements
83
- # in the returned value_sets arrays
84
- assert_equal values[0], value_sets[0].first
85
- assert_equal values[1], value_sets[1].first
86
- assert_equal values[2], value_sets[2].first
87
- end
88
-
89
- context "data contains multi-byte chars" do
90
- it "should properly build insert value set based on max packet allowed" do
91
- # each accented e should be 2 bytes, so each entry is 6 bytes instead of 5
92
- values = [
93
- "('é')",
94
- "('é')"
95
- ]
96
-
97
- base_sql_size_in_bytes = 15
98
- max_bytes = 26
99
-
100
- value_sets = parser.parse values, reserved_bytes: base_sql_size_in_bytes, max_bytes: max_bytes
101
-
102
- assert_equal 2, value_sets.size, 'Two value sets were expected!'
103
- end
104
- end
105
- end
106
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require File.expand_path("#{File.dirname(__FILE__)}/test_helper")
4
-
5
- require 'activerecord-import/value_sets_parser'
6
-
7
- describe "ActiveRecord::Import::ValueSetsRecordsParser" do
8
- context "#parse - computing insert value sets" do
9
- let(:parser) { ActiveRecord::Import::ValueSetsRecordsParser }
10
- let(:base_sql) { "INSERT INTO atable (a,b,c)" }
11
- let(:values) { ["(1,2,3)", "(2,3,4)", "(3,4,5)"] }
12
-
13
- context "when the max number of records is 1" do
14
- it "should return 3 value sets when given 3 values sets" do
15
- value_sets = parser.parse values, max_records: 1
16
- assert_equal 3, value_sets.size
17
- end
18
- end
19
-
20
- context "when the max number of records is 2" do
21
- it "should return 2 value sets when given 3 values sets" do
22
- value_sets = parser.parse values, max_records: 2
23
- assert_equal 2, value_sets.size
24
- end
25
- end
26
-
27
- context "when the max number of records is 3" do
28
- it "should return 1 value sets when given 3 values sets" do
29
- value_sets = parser.parse values, max_records: 3
30
- assert_equal 1, value_sets.size
31
- end
32
- end
33
- end
34
- end