activerecord-import 1.5.1 → 1.6.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f8b122b955b4a926db451a6a3ef72405ade6d69b54876bccb9ea51680486b328
4
- data.tar.gz: 3af5c65f25ffb54d338d012aab4f3608513071287c8a759f3ba678850a81f6e0
3
+ metadata.gz: 32b6a19035fc43e21eeb0c6750e622a2605daf865b05aa9d551a697768456595
4
+ data.tar.gz: 7ba72ad6b48a05f52299bf6a49a487c880c82beacda25c6d6d6510a2d87bdf47
5
5
  SHA512:
6
- metadata.gz: 638f6a8062713b07b1c2ebe866fa647c254d42e594c0fa056b5a710bcd9a2560b2217db73a89f5804c9fc1a71d5de05fc98625771e6225e9e148f58048618079
7
- data.tar.gz: 806d66d95034276b0daec9c6c207b8a6187ec0950a44b312267aeef4d491b1c9f5e036641df35950296180f124315fc220e9af5d5b4d4057278176dcf667b1c3
6
+ metadata.gz: ac0cb801e0c0883ec3f09432cb500c919fda756c22b6a4fb29bf3e0ecb3ce0aa0a8700e1112ff9340c9f5f7cdb756618eeba5dcae1ce06602216d21c82506ae4
7
+ data.tar.gz: 572f5ea800559cb5fa928d1c82f4e1ef03edac7d1bed5e4bb2849423fdd8fc01bf235f829ef2ab1d230de8832e0d078615e60fc8feb8a48a92f74bb94e7b23a9
@@ -16,6 +16,20 @@ jobs:
16
16
  --health-interval 10s
17
17
  --health-timeout 5s
18
18
  --health-retries 5
19
+ mysql:
20
+ image: mysql:5.7
21
+ ports:
22
+ - 3306:3306
23
+ env:
24
+ MYSQL_ROOT_PASSWORD: root
25
+ MYSQL_USER: github
26
+ MYSQL_PASSWORD: github
27
+ MYSQL_DATABASE: activerecord_import_test
28
+ options: >-
29
+ --health-cmd "mysqladmin ping -h localhost"
30
+ --health-interval 10s
31
+ --health-timeout 5s
32
+ --health-retries 5
19
33
  strategy:
20
34
  fail-fast: false
21
35
  matrix:
@@ -44,7 +58,7 @@ jobs:
44
58
  - ruby: '3.0'
45
59
  env:
46
60
  AR_VERSION: 6.1
47
- - ruby: jruby
61
+ - ruby: jruby-9.4.5.0
48
62
  env:
49
63
  AR_VERSION: '7.0'
50
64
  - ruby: 2.7
@@ -81,6 +95,7 @@ jobs:
81
95
  with:
82
96
  ruby-version: ${{ matrix.ruby }}
83
97
  bundler-cache: true
98
+ rubygems: latest
84
99
  - name: Set up databases
85
100
  run: |
86
101
  sudo /etc/init.d/mysql start
@@ -110,6 +125,9 @@ jobs:
110
125
  run: |
111
126
  bundle exec rake test:spatialite
112
127
  bundle exec rake test:sqlite3
128
+ - name: Run trilogy tests
129
+ if: ${{ matrix.env.AR_VERSION >= '7.0' && matrix.ruby != 'jruby' }}
130
+ run: bundle exec rake test:trilogy
113
131
  lint:
114
132
  runs-on: ubuntu-latest
115
133
  env:
data/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ ## Changes in 1.6.0
2
+
3
+ ### New Features
4
+
5
+ * Add trilogy adapter support. Thanks to @zmariscal via \##825.
6
+
7
+ ### Fixes
8
+
9
+ * Use the locking_enabled? method provided by activerecord to decide whether the lock field should be updated. Thanks to @dombesz via \##822.
10
+
1
11
  ## Changes in 1.5.1
2
12
 
3
13
  ### Fixes
data/Gemfile CHANGED
@@ -26,6 +26,10 @@ platforms :ruby do
26
26
  gem "sqlite3", "~> #{sqlite3_version}"
27
27
  # seamless_database_pool requires Ruby ~> 2.0
28
28
  gem "seamless_database_pool", "~> 1.0.20" if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('3.0.0')
29
+ gem "trilogy" if version >= 6.0
30
+ if version >= 6.0 && version <= 7.0
31
+ gem "activerecord-trilogy-adapter"
32
+ end
29
33
  end
30
34
 
31
35
  platforms :jruby do
@@ -37,7 +41,11 @@ platforms :jruby do
37
41
  end
38
42
 
39
43
  # Support libs
40
- gem "factory_bot"
44
+ if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.0.0")
45
+ gem "factory_bot"
46
+ else
47
+ gem "factory_bot", "~> 5", "< 6.4.5"
48
+ end
41
49
  gem "timecop"
42
50
  gem "chronic"
43
51
  gem "mocha", "~> 2.1.0"
data/README.markdown CHANGED
@@ -364,6 +364,29 @@ book.reload.title # => "Book1" (stayed the same)
364
364
  book.reload.author # => "Bob Barker" (changed)
365
365
  ```
366
366
 
367
+ PostgreSQL Using partial indexes
368
+
369
+ ```ruby
370
+ book = Book.create! title: "Book1", author: "George Orwell", published_at: Time.now
371
+ book.author = "Bob Barker"
372
+
373
+ # in migration
374
+ execute <<-SQL
375
+ CREATE INDEX books_published_at_index ON books (published_at) WHERE published_at IS NOT NULL;
376
+ SQL
377
+
378
+ # PostgreSQL version
379
+ Book.import [book], on_duplicate_key_update: {
380
+ conflict_target: [:id],
381
+ index_predicate: "published_at IS NOT NULL",
382
+ columns: [:author]
383
+ }
384
+
385
+ book.reload.title # => "Book1" (stayed the same)
386
+ book.reload.author # => "Bob Barker" (changed)
387
+ book.reload.published_at # => 2017-10-09 (stayed the same)
388
+ ```
389
+
367
390
  PostgreSQL Using constraints
368
391
 
369
392
  ```ruby
data/Rakefile CHANGED
@@ -29,6 +29,7 @@ ADAPTERS = %w(
29
29
  sqlite3
30
30
  spatialite
31
31
  seamless_database_pool
32
+ trilogy
32
33
  ).freeze
33
34
  ADAPTERS.each do |adapter|
34
35
  namespace :test do
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_record/connection_adapters/trilogy_adapter"
4
+ require "activerecord-import/adapters/trilogy_adapter"
5
+
6
+ class ActiveRecord::ConnectionAdapters::TrilogyAdapter
7
+ include ActiveRecord::Import::TrilogyAdapter
8
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "activerecord-import/adapters/mysql_adapter"
4
+
5
+ module ActiveRecord::Import::TrilogyAdapter
6
+ include ActiveRecord::Import::MysqlAdapter
7
+ end
@@ -557,7 +557,7 @@ class ActiveRecord::Base
557
557
  options.merge!( args.pop ) if args.last.is_a? Hash
558
558
  # making sure that current model's primary key is used
559
559
  options[:primary_key] = primary_key
560
- options[:locking_column] = locking_column if attribute_names.include?(locking_column)
560
+ options[:locking_column] = locking_column if locking_enabled?
561
561
 
562
562
  is_validating = options[:validate_with_context].present? ? true : options[:validate]
563
563
  validator = ActiveRecord::Import::Validator.new(self, options)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module ActiveRecord
4
4
  module Import
5
- VERSION = "1.5.1"
5
+ VERSION = "1.6.0"
6
6
  end
7
7
  end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ ENV["ARE_DB"] = "trilogy"
4
+
5
+ if ENV['AR_VERSION'].to_f <= 7.0
6
+ require "activerecord-trilogy-adapter"
7
+ require "trilogy_adapter/connection"
8
+ ActiveRecord::Base.extend TrilogyAdapter::Connection
9
+ end
@@ -52,3 +52,8 @@ sqlite3: &sqlite3
52
52
 
53
53
  spatialite:
54
54
  <<: *sqlite3
55
+
56
+ trilogy:
57
+ <<: *common
58
+ adapter: trilogy
59
+ host: mysql
@@ -66,3 +66,7 @@ sqlite3: &sqlite3
66
66
 
67
67
  spatialite:
68
68
  <<: *sqlite3
69
+
70
+ trilogy:
71
+ <<: *common
72
+ adapter: trilogy
@@ -223,6 +223,34 @@ def should_support_basic_on_duplicate_key_update
223
223
  end
224
224
  end
225
225
  end
226
+
227
+ context 'with locking disabled' do
228
+ it 'does not update the lock_version' do
229
+ users = [
230
+ User.new(name: 'Salomon'),
231
+ User.new(name: 'Nathan')
232
+ ]
233
+ User.import(users)
234
+ assert User.count == users.length
235
+ User.all.each do |user|
236
+ assert_equal 0, user.lock_version
237
+ end
238
+ updated_users = User.all.map do |user|
239
+ user.name += ' Rothschild'
240
+ user
241
+ end
242
+
243
+ ActiveRecord::Base.lock_optimistically = false # Disable locking
244
+ User.import(updated_users, on_duplicate_key_update: [:name])
245
+ ActiveRecord::Base.lock_optimistically = true # Enable locking
246
+
247
+ assert User.count == updated_users.length
248
+ User.all.each_with_index do |user, i|
249
+ assert_equal user.name, "#{users[i].name} Rothschild"
250
+ assert_equal 0, user.lock_version
251
+ end
252
+ end
253
+ end
226
254
  end
227
255
 
228
256
  context "with :on_duplicate_key_update" do
@@ -0,0 +1,7 @@
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
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-import
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.1
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zach Dennis
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-18 00:00:00.000000000 Z
11
+ date: 2024-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -87,12 +87,14 @@ files:
87
87
  - lib/activerecord-import/active_record/adapters/postgresql_adapter.rb
88
88
  - lib/activerecord-import/active_record/adapters/seamless_database_pool_adapter.rb
89
89
  - lib/activerecord-import/active_record/adapters/sqlite3_adapter.rb
90
+ - lib/activerecord-import/active_record/adapters/trilogy_adapter.rb
90
91
  - lib/activerecord-import/adapters/abstract_adapter.rb
91
92
  - lib/activerecord-import/adapters/em_mysql2_adapter.rb
92
93
  - lib/activerecord-import/adapters/mysql2_adapter.rb
93
94
  - lib/activerecord-import/adapters/mysql_adapter.rb
94
95
  - lib/activerecord-import/adapters/postgresql_adapter.rb
95
96
  - lib/activerecord-import/adapters/sqlite3_adapter.rb
97
+ - lib/activerecord-import/adapters/trilogy_adapter.rb
96
98
  - lib/activerecord-import/base.rb
97
99
  - lib/activerecord-import/import.rb
98
100
  - lib/activerecord-import/mysql2.rb
@@ -114,6 +116,7 @@ files:
114
116
  - test/adapters/seamless_database_pool.rb
115
117
  - test/adapters/spatialite.rb
116
118
  - test/adapters/sqlite3.rb
119
+ - test/adapters/trilogy.rb
117
120
  - test/database.yml.sample
118
121
  - test/github/database.yml
119
122
  - test/import_test.rb
@@ -172,13 +175,14 @@ files:
172
175
  - test/support/sqlite3/import_examples.rb
173
176
  - test/synchronize_test.rb
174
177
  - test/test_helper.rb
178
+ - test/trilogy/import_test.rb
175
179
  - test/value_sets_bytes_parser_test.rb
176
180
  - test/value_sets_records_parser_test.rb
177
181
  homepage: https://github.com/zdennis/activerecord-import
178
182
  licenses:
179
183
  - MIT
180
184
  metadata: {}
181
- post_install_message:
185
+ post_install_message:
182
186
  rdoc_options: []
183
187
  require_paths:
184
188
  - lib
@@ -193,8 +197,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
193
197
  - !ruby/object:Gem::Version
194
198
  version: '0'
195
199
  requirements: []
196
- rubygems_version: 3.3.25
197
- signing_key:
200
+ rubygems_version: 3.0.3.1
201
+ signing_key:
198
202
  specification_version: 4
199
203
  summary: Bulk insert extension for ActiveRecord
200
204
  test_files:
@@ -211,6 +215,7 @@ test_files:
211
215
  - test/adapters/seamless_database_pool.rb
212
216
  - test/adapters/spatialite.rb
213
217
  - test/adapters/sqlite3.rb
218
+ - test/adapters/trilogy.rb
214
219
  - test/database.yml.sample
215
220
  - test/github/database.yml
216
221
  - test/import_test.rb
@@ -269,5 +274,6 @@ test_files:
269
274
  - test/support/sqlite3/import_examples.rb
270
275
  - test/synchronize_test.rb
271
276
  - test/test_helper.rb
277
+ - test/trilogy/import_test.rb
272
278
  - test/value_sets_bytes_parser_test.rb
273
279
  - test/value_sets_records_parser_test.rb