sequel-activerecord_connection 1.4.3 → 1.5.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: 1459c431ad6f922b5c4400d85ae916e5032cab36a959041362f45817b604919d
4
- data.tar.gz: 667fe2896a48d5d93d16e5c5b00e0d064c43d2687ef077bc9421e3d7869a41b6
3
+ metadata.gz: ecd95c01a950e81d89914199827c09d3ef0b95b106cfe0601afa9dd40f395f62
4
+ data.tar.gz: 9f5c69f4291dfd46a1d07476a1fca226aafcdd6e6ef5c0ce697554a3c2d385e3
5
5
  SHA512:
6
- metadata.gz: c9f5cb40548c059e3319be0088b8a158dd66c18543fd31f1954db8bc848c4ef541ec1f779acc637211d730dfe4a080a805ee477f128474c9894cc6883e10f46d
7
- data.tar.gz: 6068798de2efef62ae54cde36cb2d7abbad316aadc3eba6d5dceae1708e1aec36ec43b51cbeaf0f59609fd2be09e5d02b0f07afde5f646ebf39fb992e054b046
6
+ metadata.gz: 85877ab167fbca19e25b366c05f934488f610f23b790cdd360c80e67cf0cecce35104846807f77374671d6e8214008c5aaab88f5ce10d47106060e049dc94f59
7
+ data.tar.gz: d25ed24c5444c0c6cdfeb91857b42db90f8d3115f1ca678b4e7ec876845255d65737e8e5d2837c633058356ad7ac32ab5da71085c68c5021134765a19a10b7ee
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## HEAD
2
+
3
+ * Avoid permanent checkout of Active Record 7.2+ connections (@janko)
4
+
1
5
  ## 1.4.3 (2024-09-26)
2
6
 
3
7
  * Fix compatibility with adapters that don't support savepoints (@janko)
@@ -25,10 +25,12 @@ module Sequel
25
25
  fail Error, "#{key.inspect} transaction option is currently not supported" if opts.key?(key)
26
26
  end
27
27
 
28
- super
29
- rescue => e
30
- activerecord_connection.clear_cache! if e.class.name == "ActiveRecord::PreparedStatementCacheExpired" && !in_transaction?
31
- raise
28
+ super do |conn|
29
+ yield conn
30
+ rescue => e
31
+ activerecord_connection.clear_cache! if e.class.name == "ActiveRecord::PreparedStatementCacheExpired"
32
+ raise
33
+ end
32
34
  end
33
35
 
34
36
  private
@@ -39,7 +39,7 @@ module Sequel
39
39
 
40
40
  # Avoid calling Sequel's connection pool, instead use Active Record's.
41
41
  def synchronize(*)
42
- activerecord_lock do
42
+ activerecord_synchronize do
43
43
  conn = activerecord_connection.raw_connection
44
44
 
45
45
  if activerecord_connection_class && !conn.is_a?(activerecord_connection_class)
@@ -47,9 +47,9 @@ module Sequel
47
47
  end
48
48
 
49
49
  yield conn
50
+ ensure
51
+ clear_activerecord_query_cache
50
52
  end
51
- ensure
52
- clear_activerecord_query_cache
53
53
  end
54
54
 
55
55
  # Log executed queries into Active Record logger as well.
@@ -140,7 +140,7 @@ module Sequel
140
140
  end
141
141
  end
142
142
 
143
- if ActiveRecord.version >= Gem::Version.new("7.2.0")
143
+ if ActiveRecord.version >= Gem::Version.new("7.2")
144
144
  def activerecord_transaction_callback(type, &block)
145
145
  activerecord_connection.current_transaction.public_send(type, &block)
146
146
  end
@@ -158,6 +158,14 @@ module Sequel
158
158
  super
159
159
  end
160
160
 
161
+ def activerecord_synchronize
162
+ with_activerecord_connection do
163
+ activerecord_lock do
164
+ yield
165
+ end
166
+ end
167
+ end
168
+
161
169
  if ActiveRecord.version >= Gem::Version.new("7.0")
162
170
  def clear_activerecord_query_cache
163
171
  activerecord_model.clear_query_caches_for_current_thread
@@ -168,10 +176,22 @@ module Sequel
168
176
  end
169
177
  end
170
178
 
179
+ if ActiveRecord.version >= Gem::Version.new("7.2")
180
+ def with_activerecord_connection
181
+ activerecord_model.with_connection(prevent_permanent_checkout: true) do
182
+ yield activerecord_connection
183
+ end
184
+ end
185
+ else
186
+ def with_activerecord_connection
187
+ yield activerecord_connection
188
+ end
189
+ end
190
+
171
191
  # Active Record doesn't guarantee that a single connection can only be used
172
192
  # by one thread at a time, so we need to use locking, which is what Active
173
193
  # Record does internally as well.
174
- if ActiveRecord.version >= Gem::Version.new("5.1.0")
194
+ if ActiveRecord.version >= Gem::Version.new("5.1")
175
195
  def activerecord_lock
176
196
  activerecord_connection.lock.synchronize do
177
197
  ActiveSupport::Dependencies.interlock.permit_concurrent_loads do
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "sequel-activerecord_connection"
3
- spec.version = "1.4.3"
3
+ spec.version = "1.5.0"
4
4
  spec.authors = ["Janko Marohnić"]
5
5
  spec.email = ["janko.marohnic@gmail.com"]
6
6
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequel-activerecord_connection
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.3
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Janko Marohnić
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-09-26 00:00:00.000000000 Z
11
+ date: 2024-10-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sequel