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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c11ff9b3633981f462112bbbb844ec6033522314b6849d66b1f1868976521549
4
- data.tar.gz: 6ef2ebc50251b4e0f894d95e4953afbabd9b1a955a226809053a664788c94bc9
3
+ metadata.gz: 95766ef8e2bf54388e4a139f430c42176760f2b77e0322902445414ffe3d7ddb
4
+ data.tar.gz: 35a9fe4b35ff4037299799be9d902e93a29f9d81333ddf084374a4525761a2b1
5
5
  SHA512:
6
- metadata.gz: 867693e62bde77afd9ff107f73670b488dbdd3f53ab1665da27a59d560d2737c045446e1d1995c49f9f700cc215303167404349c4c275597b030c5b65637c7e8
7
- data.tar.gz: 0ceb8dc99f066df61850fdd596d3dbb5543fa437ffe428a3722d2d77a89e9227edccb57023d0d83834c1b9d846f2d06ccbac20c9904d19ba79c9db8470a5cbb8
6
+ metadata.gz: 93a612e4cfc3454783ba936a19518459fee958e53f8193e9f0561d65961008892a7b8c24a3189e5b2cc8620803e0da1375cd36f5c319af4adf7461656e2e462e
7
+ data.tar.gz: 526c8b8ce56b481f5fa98ff1dbd242fc9104665dab6166bd4797514ae187bfe0e9460881dc9f6783e1216323a9a0d701949de2d1972865d464a9a13c51dd4c41
@@ -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 supports `postgresql`,
5
- `mysql2` and `sqlite3` adapters.
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(savepoint: nil, rollback: nil, auto_savepoint: nil, server: nil, **options)
25
- fail Error, "#{options} transaction options are currently not supported" unless options.empty?
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: requires_new) do
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
- ActiveSupport::Dependencies.interlock.permit_concurrent_loads do
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.1"
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", ">= 5.0", "< 7"
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.1
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-05-02 00:00:00.000000000 Z
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: '5.0'
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: '5.0'
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