sequel-activerecord_connection 0.2.1 → 0.2.6
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 +4 -4
- data/CHANGELOG.md +33 -0
- data/README.md +3 -2
- data/lib/sequel/extensions/activerecord_connection.rb +18 -14
- data/lib/sequel/extensions/activerecord_connection/jdbc.rb +38 -0
- data/lib/sequel/extensions/activerecord_connection/postgres.rb +8 -0
- data/lib/sequel/extensions/activerecord_connection/sqlite.rb +7 -1
- data/sequel-activerecord_connection.gemspec +2 -5
- metadata +6 -46
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 95766ef8e2bf54388e4a139f430c42176760f2b77e0322902445414ffe3d7ddb
|
4
|
+
data.tar.gz: 35a9fe4b35ff4037299799be9d902e93a29f9d81333ddf084374a4525761a2b1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 93a612e4cfc3454783ba936a19518459fee958e53f8193e9f0561d65961008892a7b8c24a3189e5b2cc8620803e0da1375cd36f5c319af4adf7461656e2e462e
|
7
|
+
data.tar.gz: 526c8b8ce56b481f5fa98ff1dbd242fc9104665dab6166bd4797514ae187bfe0e9460881dc9f6783e1216323a9a0d701949de2d1972865d464a9a13c51dd4c41
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
## 0.2.6 (2020-07-19)
|
2
|
+
|
3
|
+
* Return block result in `Sequel::Database#transaction` (@zabolotnov87, @janko)
|
4
|
+
|
5
|
+
* Fix `Sequel::Model#save_changes` or `#save` with additional options not executing (@zabolotnov87, @janko)
|
6
|
+
|
7
|
+
## 0.2.5 (2020-06-04)
|
8
|
+
|
9
|
+
* Use `#current_timestamp_utc` for the JDBC SQLite adapter as well (@HoneyryderChuck)
|
10
|
+
|
11
|
+
## 0.2.4 (2020-06-03)
|
12
|
+
|
13
|
+
* Add JRuby support for ActiveRecord 6.0 and 5.2 (@HoneyryderChuck)
|
14
|
+
|
15
|
+
* Use `#current_timestamp_utc` setting for SQLite adapter on Sequel >= 5.33 (@HoneyryderChuck)
|
16
|
+
|
17
|
+
## 0.2.3 (2020-05-25)
|
18
|
+
|
19
|
+
* Fix Ruby 2.7 kwargs warnings in `#transaction` (@HoneyryderChuck)
|
20
|
+
|
21
|
+
## 0.2.2 (2020-05-02)
|
22
|
+
|
23
|
+
* Add support for ActiveRecord 4.2 (@janko)
|
24
|
+
|
25
|
+
## 0.2.1 (2020-05-02)
|
26
|
+
|
27
|
+
* Add support for Active Record 5.0, 5.1 and 5.2 (@janko)
|
28
|
+
|
29
|
+
* Allow Sequel 4.x (@janko)
|
30
|
+
|
31
|
+
## 0.2.0 (2020-04-29)
|
32
|
+
|
33
|
+
* Rename to `sequel-activerecord_connection` and make it a Sequel extension (@janko)
|
data/README.md
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
# Sequel::ActiveRecordConnection
|
2
2
|
|
3
3
|
This is an extension for [Sequel] that allows it to reuse an existing
|
4
|
-
ActiveRecord connection for database interaction. It
|
5
|
-
`mysql2` and `sqlite3`
|
4
|
+
ActiveRecord connection for database interaction. It works on ActiveRecord 4.2
|
5
|
+
or higher, and supports the built-in `postgresql`, `mysql2` and `sqlite3`
|
6
|
+
adapters.
|
6
7
|
|
7
8
|
This can be useful if you're using a library that uses Sequel for database
|
8
9
|
interaction (e.g. [Rodauth]), but you want to avoid creating a separate
|
@@ -21,27 +21,23 @@ module Sequel
|
|
21
21
|
raise Error, "creating a Sequel connection is not allowed"
|
22
22
|
end
|
23
23
|
|
24
|
-
def transaction(
|
25
|
-
|
26
|
-
|
27
|
-
if in_transaction?
|
28
|
-
requires_new = savepoint || Thread.current[:sequel_activerecord_auto_savepoint]
|
29
|
-
else
|
30
|
-
requires_new = true
|
24
|
+
def transaction(options = {})
|
25
|
+
%i[isolation num_retries before_retry prepare retry_on].each do |key|
|
26
|
+
fail Error, "#{key.inspect} transaction option is currently not supported" if options.key?(key)
|
31
27
|
end
|
32
28
|
|
33
|
-
activerecord_model.transaction(requires_new:
|
29
|
+
activerecord_model.transaction(requires_new: !in_transaction? || options[:savepoint] || Thread.current[:sequel_activerecord_auto_savepoint]) do
|
34
30
|
begin
|
35
|
-
Thread.current[:sequel_activerecord_auto_savepoint] = true if auto_savepoint
|
36
|
-
yield
|
31
|
+
Thread.current[:sequel_activerecord_auto_savepoint] = true if options[:auto_savepoint]
|
32
|
+
result = yield
|
33
|
+
raise ActiveRecord::Rollback if options[:rollback] == :always
|
34
|
+
result
|
37
35
|
rescue Sequel::Rollback => exception
|
38
|
-
raise if rollback == :reraise
|
36
|
+
raise if options[:rollback] == :reraise
|
39
37
|
raise ActiveRecord::Rollback, exception.message, exception.backtrace
|
40
38
|
ensure
|
41
|
-
Thread.current[:sequel_activerecord_auto_savepoint] = nil if auto_savepoint
|
39
|
+
Thread.current[:sequel_activerecord_auto_savepoint] = nil if options[:auto_savepoint]
|
42
40
|
end
|
43
|
-
|
44
|
-
raise ActiveRecord::Rollback if rollback == :always
|
45
41
|
end
|
46
42
|
end
|
47
43
|
|
@@ -75,6 +71,14 @@ module Sequel
|
|
75
71
|
def activerecord_connection
|
76
72
|
activerecord_model.connection
|
77
73
|
end
|
74
|
+
|
75
|
+
def activesupport_interlock(&block)
|
76
|
+
if ActiveSupport::Dependencies.respond_to?(:interlock)
|
77
|
+
ActiveSupport::Dependencies.interlock.permit_concurrent_loads(&block)
|
78
|
+
else
|
79
|
+
yield
|
80
|
+
end
|
81
|
+
end
|
78
82
|
end
|
79
83
|
|
80
84
|
Database.register_extension(:activerecord_connection, ActiveRecordConnection)
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Sequel
|
2
|
+
module ActiveRecordConnection
|
3
|
+
module Jdbc
|
4
|
+
def self.extended(db)
|
5
|
+
if db.timezone == :utc && db.respond_to?(:current_timestamp_utc)
|
6
|
+
db.current_timestamp_utc = true
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def statement(conn)
|
11
|
+
stmt = activerecord_raw_connection.connection.createStatement
|
12
|
+
yield stmt
|
13
|
+
rescue ActiveRecord::StatementInvalid => exception
|
14
|
+
raise_error(exception.cause, classes: database_error_classes)
|
15
|
+
rescue *database_error_classes => e
|
16
|
+
raise_error(e, classes: database_error_classes)
|
17
|
+
ensure
|
18
|
+
stmt.close if stmt
|
19
|
+
end
|
20
|
+
|
21
|
+
def execute(sql, opts=OPTS)
|
22
|
+
activerecord_connection.send(:log, sql) do
|
23
|
+
super
|
24
|
+
end
|
25
|
+
rescue ActiveRecord::StatementInvalid => exception
|
26
|
+
raise_error(exception.cause, classes: database_error_classes)
|
27
|
+
end
|
28
|
+
|
29
|
+
def execute_dui(sql, opts=OPTS)
|
30
|
+
activerecord_connection.send(:log, sql) do
|
31
|
+
super
|
32
|
+
end
|
33
|
+
rescue ActiveRecord::StatementInvalid => exception
|
34
|
+
raise_error(exception.cause, classes: database_error_classes)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -14,6 +14,14 @@ module Sequel
|
|
14
14
|
ensure
|
15
15
|
result.clear if result
|
16
16
|
end
|
17
|
+
|
18
|
+
def transaction(options = {})
|
19
|
+
%i[deferrable read_only synchronous].each do |key|
|
20
|
+
fail Error, "#{key.inspect} transaction option is currently not supported" if options.key?(key)
|
21
|
+
end
|
22
|
+
|
23
|
+
super
|
24
|
+
end
|
17
25
|
end
|
18
26
|
end
|
19
27
|
end
|
@@ -1,6 +1,12 @@
|
|
1
1
|
module Sequel
|
2
2
|
module ActiveRecordConnection
|
3
3
|
module Sqlite
|
4
|
+
def self.extended(db)
|
5
|
+
if db.timezone == :utc && db.respond_to?(:current_timestamp_utc)
|
6
|
+
db.current_timestamp_utc = true
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
4
10
|
def execute_ddl(sql, opts=OPTS)
|
5
11
|
execute(sql, opts)
|
6
12
|
end
|
@@ -19,7 +25,7 @@ module Sequel
|
|
19
25
|
end
|
20
26
|
|
21
27
|
activerecord_connection.send(:log, sql) do
|
22
|
-
|
28
|
+
activesupport_interlock do
|
23
29
|
case type
|
24
30
|
when :select
|
25
31
|
activerecord_raw_connection.query(sql, &block)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |spec|
|
2
2
|
spec.name = "sequel-activerecord_connection"
|
3
|
-
spec.version = "0.2.
|
3
|
+
spec.version = "0.2.6"
|
4
4
|
spec.authors = ["Janko Marohnić"]
|
5
5
|
spec.email = ["janko.marohnic@gmail.com"]
|
6
6
|
|
@@ -12,11 +12,8 @@ Gem::Specification.new do |spec|
|
|
12
12
|
spec.required_ruby_version = Gem::Requirement.new(">= 2.2.0")
|
13
13
|
|
14
14
|
spec.add_dependency "sequel", ">= 4.0", "< 6"
|
15
|
-
spec.add_dependency "activerecord", ">=
|
15
|
+
spec.add_dependency "activerecord", ">= 4.2", "< 7"
|
16
16
|
|
17
|
-
spec.add_development_dependency "pg", "~> 1.0"
|
18
|
-
spec.add_development_dependency "mysql2", "~> 0.5"
|
19
|
-
spec.add_development_dependency "sqlite3", "~> 1.3"
|
20
17
|
spec.add_development_dependency "minitest"
|
21
18
|
|
22
19
|
spec.files = Dir["README.md", "LICENSE.txt", "CHANGELOG.md", "lib/**/*.rb", "*.gemspec"]
|
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: 0.2.
|
4
|
+
version: 0.2.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Janko Marohnić
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-07-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sequel
|
@@ -36,7 +36,7 @@ dependencies:
|
|
36
36
|
requirements:
|
37
37
|
- - ">="
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: '
|
39
|
+
version: '4.2'
|
40
40
|
- - "<"
|
41
41
|
- !ruby/object:Gem::Version
|
42
42
|
version: '7'
|
@@ -46,52 +46,10 @@ dependencies:
|
|
46
46
|
requirements:
|
47
47
|
- - ">="
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: '
|
49
|
+
version: '4.2'
|
50
50
|
- - "<"
|
51
51
|
- !ruby/object:Gem::Version
|
52
52
|
version: '7'
|
53
|
-
- !ruby/object:Gem::Dependency
|
54
|
-
name: pg
|
55
|
-
requirement: !ruby/object:Gem::Requirement
|
56
|
-
requirements:
|
57
|
-
- - "~>"
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
version: '1.0'
|
60
|
-
type: :development
|
61
|
-
prerelease: false
|
62
|
-
version_requirements: !ruby/object:Gem::Requirement
|
63
|
-
requirements:
|
64
|
-
- - "~>"
|
65
|
-
- !ruby/object:Gem::Version
|
66
|
-
version: '1.0'
|
67
|
-
- !ruby/object:Gem::Dependency
|
68
|
-
name: mysql2
|
69
|
-
requirement: !ruby/object:Gem::Requirement
|
70
|
-
requirements:
|
71
|
-
- - "~>"
|
72
|
-
- !ruby/object:Gem::Version
|
73
|
-
version: '0.5'
|
74
|
-
type: :development
|
75
|
-
prerelease: false
|
76
|
-
version_requirements: !ruby/object:Gem::Requirement
|
77
|
-
requirements:
|
78
|
-
- - "~>"
|
79
|
-
- !ruby/object:Gem::Version
|
80
|
-
version: '0.5'
|
81
|
-
- !ruby/object:Gem::Dependency
|
82
|
-
name: sqlite3
|
83
|
-
requirement: !ruby/object:Gem::Requirement
|
84
|
-
requirements:
|
85
|
-
- - "~>"
|
86
|
-
- !ruby/object:Gem::Version
|
87
|
-
version: '1.3'
|
88
|
-
type: :development
|
89
|
-
prerelease: false
|
90
|
-
version_requirements: !ruby/object:Gem::Requirement
|
91
|
-
requirements:
|
92
|
-
- - "~>"
|
93
|
-
- !ruby/object:Gem::Version
|
94
|
-
version: '1.3'
|
95
53
|
- !ruby/object:Gem::Dependency
|
96
54
|
name: minitest
|
97
55
|
requirement: !ruby/object:Gem::Requirement
|
@@ -113,9 +71,11 @@ executables: []
|
|
113
71
|
extensions: []
|
114
72
|
extra_rdoc_files: []
|
115
73
|
files:
|
74
|
+
- CHANGELOG.md
|
116
75
|
- LICENSE.txt
|
117
76
|
- README.md
|
118
77
|
- lib/sequel/extensions/activerecord_connection.rb
|
78
|
+
- lib/sequel/extensions/activerecord_connection/jdbc.rb
|
119
79
|
- lib/sequel/extensions/activerecord_connection/mysql2.rb
|
120
80
|
- lib/sequel/extensions/activerecord_connection/postgres.rb
|
121
81
|
- lib/sequel/extensions/activerecord_connection/sqlite.rb
|