sequel-activerecord_connection 1.4.3 → 1.5.1
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ba58fa3e98dd9f9c7ebe569bc5e7db5311f91820e331c9948c089c7f7db3ff7
|
4
|
+
data.tar.gz: 6e6c43ee2add8ca65abd531da15023d23ddcd244ed4fbb2eeef83285cd9eb8d7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ca1724bffc985de2ba03c2f939f0989d141f73ed301c511e0f7cefa86c3f2f5df797ec3c89d128011c4714b946728e6755047d9226ba5afe2d33649ecf76c4cc
|
7
|
+
data.tar.gz: 5c19ef6d4814433735ae0b4e42645217346507f5624f4e3f8ca90991dd749955e1cd7dc12dfc7ee9bde7714ecf3ea96acd7ec0be130921f41272b4eeea51a3b7
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
## 1.5.1 (2024-11-08)
|
2
|
+
|
3
|
+
* Add support for Active Record 8.0 (@phlipper)
|
4
|
+
|
5
|
+
## 1.5.0 (2024-10-16)
|
6
|
+
|
7
|
+
* Avoid permanent connection checkout on Active Record 7.2+ (@janko)
|
8
|
+
|
1
9
|
## 1.4.3 (2024-09-26)
|
2
10
|
|
3
11
|
* Fix compatibility with adapters that don't support savepoints (@janko)
|
data/README.md
CHANGED
@@ -8,11 +8,11 @@ This can be useful if you want to use a library that uses Sequel (e.g.
|
|
8
8
|
or if you just want to use Sequel for more complex queries, and you want to
|
9
9
|
avoid creating new database connections.
|
10
10
|
|
11
|
-
It
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
11
|
+
It fully supports PostgreSQL, MySQL and SQLite adapters, both the native ones
|
12
|
+
and JDBC (JRuby). The [SQL Server] external adapter is supported as well
|
13
|
+
(`tinytds` in Sequel), and there is attempted support for [Oracle enhanced]
|
14
|
+
(`oracle` and in Sequel). Other adapters might work too, but their integration
|
15
|
+
hasn't been tested.
|
16
16
|
|
17
17
|
## Why reuse the database connection?
|
18
18
|
|
@@ -44,9 +44,9 @@ The only hard dependencies are:
|
|
44
44
|
|
45
45
|
* [ActiveRecord](https://github.com/rails/rails/tree/main/activerecord)
|
46
46
|
* [Sequel](https://github.com/jeremyevans/sequel)
|
47
|
-
* [after_commit_everywhere](https://github.com/Envek/after_commit_everywhere)
|
47
|
+
* [after_commit_everywhere](https://github.com/Envek/after_commit_everywhere) (on Active Record 7.1 or older)
|
48
48
|
|
49
|
-
...which means you can use it with any Rack / Ruby based framework:
|
49
|
+
...which means you can use it with any Rack / Ruby based framework:
|
50
50
|
Rails / Roda / Sinatra etc. or even without a framework.
|
51
51
|
|
52
52
|
## Installation
|
@@ -245,19 +245,6 @@ Sequel.postgres(extensions: [:activerecord_connection, :sql_log_normalizer])
|
|
245
245
|
SELECT accounts.* FROM accounts WHERE accounts.email = ? LIMIT ?
|
246
246
|
```
|
247
247
|
|
248
|
-
Note that the `sql_log_normalizer` extension opens a database connection while
|
249
|
-
it's being loaded. If you're setting up Sequel in a Rails initializer, you'll
|
250
|
-
probably want to handle the database not existing, so that commands such as
|
251
|
-
`rails db:create` continue to work.
|
252
|
-
|
253
|
-
```rb
|
254
|
-
DB = Sequel.postgres(extensions: :activerecord_connection)
|
255
|
-
begin
|
256
|
-
DB.extension :sql_log_normalizer
|
257
|
-
rescue ActiveRecord::NoDatabaseError
|
258
|
-
end
|
259
|
-
```
|
260
|
-
|
261
248
|
## Tests
|
262
249
|
|
263
250
|
You'll first want to run the rake tasks for setting up databases and users:
|
@@ -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
|
-
|
30
|
-
|
31
|
-
|
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
|
-
|
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
|
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
|
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.
|
3
|
+
spec.version = "1.5.1"
|
4
4
|
spec.authors = ["Janko Marohnić"]
|
5
5
|
spec.email = ["janko.marohnic@gmail.com"]
|
6
6
|
|
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
|
|
12
12
|
spec.required_ruby_version = ">= 2.5"
|
13
13
|
|
14
14
|
spec.add_dependency "sequel", "~> 5.38"
|
15
|
-
spec.add_dependency "activerecord", ">= 5.0", "< 8"
|
15
|
+
spec.add_dependency "activerecord", ">= 5.0", "< 8.1"
|
16
16
|
spec.add_dependency "after_commit_everywhere", "~> 1.1"
|
17
17
|
|
18
18
|
spec.add_development_dependency "sequel_pg" unless RUBY_ENGINE == "jruby"
|
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
|
+
version: 1.5.1
|
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-
|
11
|
+
date: 2024-11-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sequel
|
@@ -33,7 +33,7 @@ dependencies:
|
|
33
33
|
version: '5.0'
|
34
34
|
- - "<"
|
35
35
|
- !ruby/object:Gem::Version
|
36
|
-
version: '8'
|
36
|
+
version: '8.1'
|
37
37
|
type: :runtime
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '5.0'
|
44
44
|
- - "<"
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: '8'
|
46
|
+
version: '8.1'
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: after_commit_everywhere
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|