sequel-activerecord_connection 1.4.2 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 98f7c003a3446727d0ff140e37f9965b2088dbb95c43fb58e84aeeaab2f9f85e
4
- data.tar.gz: aba6068cf2804cbec9434cde909218c2b40b33fcb3b68dafe815a168125cb761
3
+ metadata.gz: ecd95c01a950e81d89914199827c09d3ef0b95b106cfe0601afa9dd40f395f62
4
+ data.tar.gz: 9f5c69f4291dfd46a1d07476a1fca226aafcdd6e6ef5c0ce697554a3c2d385e3
5
5
  SHA512:
6
- metadata.gz: cca4d6b635c771444e656ab8231fd8a17c5a4da49b2a10d52ec640cf94c18ded25864dc72e293b6e7b5a6088c2d401df5d66dc2ba94d750bc975c9f5365601b2
7
- data.tar.gz: b54b06b0bd97316856d690ec0ce4ebedcb9cf90664966e46ef6cf3d5c4ed56595b19f5bd10df666de388ea0426248add5c39f28489f93e2a766b1def6385e412
6
+ metadata.gz: 85877ab167fbca19e25b366c05f934488f610f23b790cdd360c80e67cf0cecce35104846807f77374671d6e8214008c5aaab88f5ce10d47106060e049dc94f59
7
+ data.tar.gz: d25ed24c5444c0c6cdfeb91857b42db90f8d3115f1ca678b4e7ec876845255d65737e8e5d2837c633058356ad7ac32ab5da71085c68c5021134765a19a10b7ee
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## HEAD
2
+
3
+ * Avoid permanent checkout of Active Record 7.2+ connections (@janko)
4
+
5
+ ## 1.4.3 (2024-09-26)
6
+
7
+ * Fix compatibility with adapters that don't support savepoints (@janko)
8
+
1
9
  ## 1.4.2 (2024-09-23)
2
10
 
3
11
  * Fix compatibility with newer versions of Oracle Enhanced adapter (@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.
@@ -70,7 +70,10 @@ module Sequel
70
70
  # information to know whether we're in a transaction, whether to create a
71
71
  # savepoint, when to run transaction/savepoint hooks etc.
72
72
  def _trans(conn)
73
- hash = super || { savepoints: [], activerecord: true }
73
+ hash = super || { activerecord: true }
74
+
75
+ # adapters that don't support savepoints won't have this assigned
76
+ hash[:savepoints] ||= []
74
77
 
75
78
  # add any ActiveRecord transactions/savepoints that have been opened
76
79
  # directly via ActiveRecord::Base.transaction
@@ -137,7 +140,7 @@ module Sequel
137
140
  end
138
141
  end
139
142
 
140
- if ActiveRecord.version >= Gem::Version.new("7.2.0")
143
+ if ActiveRecord.version >= Gem::Version.new("7.2")
141
144
  def activerecord_transaction_callback(type, &block)
142
145
  activerecord_connection.current_transaction.public_send(type, &block)
143
146
  end
@@ -155,6 +158,14 @@ module Sequel
155
158
  super
156
159
  end
157
160
 
161
+ def activerecord_synchronize
162
+ with_activerecord_connection do
163
+ activerecord_lock do
164
+ yield
165
+ end
166
+ end
167
+ end
168
+
158
169
  if ActiveRecord.version >= Gem::Version.new("7.0")
159
170
  def clear_activerecord_query_cache
160
171
  activerecord_model.clear_query_caches_for_current_thread
@@ -165,10 +176,22 @@ module Sequel
165
176
  end
166
177
  end
167
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
+
168
191
  # Active Record doesn't guarantee that a single connection can only be used
169
192
  # by one thread at a time, so we need to use locking, which is what Active
170
193
  # Record does internally as well.
171
- if ActiveRecord.version >= Gem::Version.new("5.1.0")
194
+ if ActiveRecord.version >= Gem::Version.new("5.1")
172
195
  def activerecord_lock
173
196
  activerecord_connection.lock.synchronize do
174
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.2"
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.2
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-23 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