sequel-activerecord_connection 0.2.1 → 0.2.6

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: 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