sequel-activerecord_connection 1.1.0 → 1.2.3

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: fba99c145ebf98ed9c3e26fdc96afc3bc5fa7820e01d466ab10320c72765c8ae
4
- data.tar.gz: ae36bef3a63280cf54f1a92e814c1bf4928dc8050f572694aac4340389115f9b
3
+ metadata.gz: f0de933805c130dcc42783bcf606f70e99a00346e58286d3bdfbb94ae8922c09
4
+ data.tar.gz: b60f70b511d83bbac70bcf6a48c99a20af23d58cc6f9d787db0cfccb11a67f85
5
5
  SHA512:
6
- metadata.gz: 073babf3f4e9d60dcb439eb0d9a7b801b9cf23b9be53366382cdd9e18234de66c329d0a975e68fb57d78cbf80f26ddafcd3f1bc90e8282a9a24b90cd1f8c0a43
7
- data.tar.gz: 420a6326c6c0e0b85874b52c89e747a59702280e763d9f6a090dd649b17718771cefaa1d9d72d4244a92bcfbee7ff2c186480ad0005d17685abcd0a595ccb97c
6
+ metadata.gz: 4b1f0f3f9f287609eb9f38ea215bdb873624cd4a66ea17c15867ae6a47808902330beaf4c1be09eb459e0b681daffb829812aa7125a4d565aab050e0df4c74ae
7
+ data.tar.gz: 3647bec71180cf1af65b8379fcfc6eb924b8fffbd4a575a97399e0a9096e77afbc3f1863095c6ce229a05c81b559a2a63a59df91c46cd4bb47d73c10e57c0b4b
data/CHANGELOG.md CHANGED
@@ -1,3 +1,23 @@
1
+ ## 1.2.3 (2021-07-17)
2
+
3
+ * Bump `after_commit_everywhere` dependency to `~> 1.0` (@wivarn)
4
+
5
+ ## 1.2.2 (2021-01-11)
6
+
7
+ * Ensure Active Record queries inside a Sequel transaction are typemapped correctly in postgres adapter (@janko)
8
+
9
+ * Fix executing Active Record queries inside a Sequel transaction not working in mysql2 adapter (@janko)
10
+
11
+ ## 1.2.1 (2021-01-10)
12
+
13
+ * Fix original mysql2 query options not being restored after nested `DB#synchronize` calls, e.g. when using Sequel transactions (@janko)
14
+
15
+ ## 1.2.0 (2020-11-15)
16
+
17
+ * Attempt support for [activerecord-sqlserver-adapter](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter) (@janko)
18
+
19
+ * Attempt support for [oracle-enhanced](https://github.com/rsim/oracle-enhanced) Active Record adapter (@janko)
20
+
1
21
  ## 1.1.0 (2020-11-08)
2
22
 
3
23
  * Drop support for Ruby 2.2 (@janko)
data/README.md CHANGED
@@ -9,8 +9,10 @@ separate database connection. Or if you're transitioning from ActiveRecord to
9
9
  Sequel, and want the database connection to be shared.
10
10
 
11
11
  It works on ActiveRecord 4.2+ and fully supports PostgresSQL, MySQL and SQLite
12
- adapters, both the native ones and JDBC (JRuby). Other adapters might work too,
13
- but their integration hasn't been tested.
12
+ adapters, both the native ones and JDBC (JRuby). There is attempted suppport
13
+ for [Oracle enhanced] and [SQL Server] Active Record adapters (`oracle` and
14
+ `tinytds` in Sequel). Other adapters might work too, but their integration
15
+ hasn't been tested.
14
16
 
15
17
  ## Installation
16
18
 
@@ -109,8 +111,9 @@ DB.transaction(isolation: :serializable) do
109
111
  end
110
112
  ```
111
113
 
112
- When combining Active Record and Sequel transactions, Sequel transaction hook
113
- functionality will be utilized when possible.
114
+ When registering transaction hooks, they will be registered on Sequel
115
+ transactions when possible, in which case they will behave as described in the
116
+ [Sequel docs][sequel transaction hooks].
114
117
 
115
118
  ```rb
116
119
  # Sequel: An after_commit transaction hook will always get executed if the outer
@@ -223,3 +226,6 @@ Everyone interacting in this project's codebases, issue trackers, chat rooms and
223
226
  [Sequel]: https://github.com/jeremyevans/sequel
224
227
  [Rodauth]: https://github.com/jeremyevans/rodauth
225
228
  [rom-sql]: https://github.com/rom-rb/rom-sql
229
+ [sequel transaction hooks]: http://sequel.jeremyevans.net/rdoc/files/doc/transactions_rdoc.html#label-Transaction+Hooks
230
+ [Oracle enhanced]: https://github.com/rsim/oracle-enhanced
231
+ [SQL Server]: https://github.com/rails-sqlserver/activerecord-sqlserver-adapter
@@ -152,25 +152,6 @@ module Sequel
152
152
  &block
153
153
  )
154
154
  end
155
-
156
- module Utils
157
- def self.set_value(object, name, new_value)
158
- original_value = object.send(name)
159
- object.send(:"#{name}=", new_value)
160
- yield
161
- ensure
162
- object.send(:"#{name}=", original_value)
163
- end
164
-
165
- def self.add_prepared_statements_cache(conn)
166
- return if conn.respond_to?(:prepared_statements)
167
-
168
- class << conn
169
- attr_accessor :prepared_statements
170
- end
171
- conn.prepared_statements = {}
172
- end
173
- end
174
155
  end
175
156
 
176
157
  Database.register_extension(:activerecord_connection, ActiveRecordConnection)
@@ -9,7 +9,11 @@ module Sequel
9
9
 
10
10
  def synchronize(*)
11
11
  super do |conn|
12
- yield conn.connection
12
+ if database_type == :oracle
13
+ yield conn.raw_connection
14
+ else
15
+ yield conn.connection
16
+ end
13
17
  end
14
18
  end
15
19
  end
@@ -1,19 +1,30 @@
1
+ require_relative "utils"
2
+
1
3
  module Sequel
2
4
  module ActiveRecordConnection
3
5
  module Mysql2
4
6
  def synchronize(*)
5
7
  super do |conn|
6
8
  # required for prepared statements
7
- conn.instance_variable_set(:@sequel_default_query_options, conn.query_options.dup)
8
9
  Utils.add_prepared_statements_cache(conn)
9
10
 
10
- conn.query_options.merge!(as: :hash, symbolize_keys: true, cache_rows: false)
11
+ yield conn
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def _execute(conn, sql, opts)
18
+ if conn.instance_variable_defined?(:@sequel_default_query_options)
19
+ return super
20
+ end
11
21
 
12
- begin
13
- yield conn
14
- ensure
15
- conn.query_options.replace(conn.instance_variable_get(:@sequel_default_query_options))
16
- end
22
+ conn.instance_variable_set(:@sequel_default_query_options, conn.query_options.dup)
23
+ conn.query_options.merge!(as: :hash, symbolize_keys: true, cache_rows: false)
24
+ begin
25
+ super
26
+ ensure
27
+ conn.query_options.replace(conn.remove_instance_variable(:@sequel_default_query_options))
17
28
  end
18
29
  end
19
30
  end
@@ -0,0 +1,16 @@
1
+ require_relative "utils"
2
+
3
+ module Sequel
4
+ module ActiveRecordConnection
5
+ module Oracle
6
+ def synchronize(*)
7
+ super do |conn|
8
+ # required for prepared statements
9
+ Utils.add_prepared_statements_cache(conn.raw_oci_connection)
10
+
11
+ yield conn.raw_oci_connection
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -1,3 +1,5 @@
1
+ require_relative "utils"
2
+
1
3
  module Sequel
2
4
  module ActiveRecordConnection
3
5
  module Postgres
@@ -8,9 +10,7 @@ module Sequel
8
10
 
9
11
  Utils.add_prepared_statements_cache(conn)
10
12
 
11
- Utils.set_value(conn, :type_map_for_results, PG::TypeMapAllStrings.new) do
12
- yield conn
13
- end
13
+ yield conn
14
14
  end
15
15
  end
16
16
 
@@ -30,20 +30,12 @@ module Sequel
30
30
  module ConnectionMethods
31
31
  # The underlying exception classes to reraise as disconnect errors
32
32
  # instead of regular database errors.
33
- DISCONNECT_ERROR_CLASSES = [IOError, Errno::EPIPE, Errno::ECONNRESET, ::PG::ConnectionBad].freeze
33
+ DISCONNECT_ERROR_CLASSES = Sequel::Postgres::Adapter::DISCONNECT_ERROR_CLASSES
34
34
 
35
35
  # Since exception class based disconnect checking may not work,
36
36
  # also trying parsing the exception message to look for disconnect
37
37
  # errors.
38
- DISCONNECT_ERROR_REGEX = /\A#{Regexp.union([
39
- "ERROR: cached plan must not change result type",
40
- "could not receive data from server",
41
- "no connection to the server",
42
- "connection not open",
43
- "connection is closed",
44
- "terminating connection due to administrator command",
45
- "PQconsumeInput() "
46
- ])}/
38
+ DISCONNECT_ERROR_REGEX = Sequel::Postgres::Adapter::DISCONNECT_ERROR_RE
47
39
 
48
40
  def async_exec_params(sql, args)
49
41
  defined?(super) ? super : async_exec(sql, args)
@@ -90,7 +82,9 @@ module Sequel
90
82
  # Return the PG::Result containing the query results.
91
83
  def execute_query(sql, args)
92
84
  @db.log_connection_yield(sql, self, args) do
93
- args ? async_exec_params(sql, args) : async_exec(sql)
85
+ Utils.set_value(self, :type_map_for_results, PG::TypeMapAllStrings.new) do
86
+ args ? async_exec_params(sql, args) : async_exec(sql)
87
+ end
94
88
  end
95
89
  end
96
90
  end
@@ -1,3 +1,5 @@
1
+ require_relative "utils"
2
+
1
3
  module Sequel
2
4
  module ActiveRecordConnection
3
5
  module Sqlite
@@ -13,8 +15,16 @@ module Sequel
13
15
 
14
16
  Utils.add_prepared_statements_cache(conn)
15
17
 
18
+ yield conn
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ def _execute(type, sql, opts, &block)
25
+ synchronize(opts[:server]) do |conn|
16
26
  Utils.set_value(conn, :results_as_hash, nil) do
17
- yield conn
27
+ super
18
28
  end
19
29
  end
20
30
  end
@@ -0,0 +1,19 @@
1
+ require_relative "utils"
2
+
3
+ module Sequel
4
+ module ActiveRecordConnection
5
+ module Tinytds
6
+ def synchronize(*)
7
+ super do |conn|
8
+ conn.query_options.merge!(cache_rows: false)
9
+
10
+ begin
11
+ yield conn
12
+ ensure
13
+ conn.query_options.merge!(cache_rows: true)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,22 @@
1
+ module Sequel
2
+ module ActiveRecordConnection
3
+ module Utils
4
+ def self.set_value(object, name, new_value)
5
+ original_value = object.send(name)
6
+ object.send(:"#{name}=", new_value)
7
+ yield
8
+ ensure
9
+ object.send(:"#{name}=", original_value)
10
+ end
11
+
12
+ def self.add_prepared_statements_cache(conn)
13
+ return if conn.respond_to?(:prepared_statements)
14
+
15
+ class << conn
16
+ attr_accessor :prepared_statements
17
+ end
18
+ conn.prepared_statements = {}
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "sequel-activerecord_connection"
3
- spec.version = "1.1.0"
3
+ spec.version = "1.2.3"
4
4
  spec.authors = ["Janko Marohnić"]
5
5
  spec.email = ["janko.marohnic@gmail.com"]
6
6
 
@@ -13,7 +13,7 @@ Gem::Specification.new do |spec|
13
13
 
14
14
  spec.add_dependency "sequel", "~> 5.16"
15
15
  spec.add_dependency "activerecord", ">= 4.2", "< 7"
16
- spec.add_dependency "after_commit_everywhere", "~> 0.1.5"
16
+ spec.add_dependency "after_commit_everywhere", "~> 1.0"
17
17
 
18
18
  spec.add_development_dependency "sequel", "~> 5.38"
19
19
  spec.add_development_dependency "minitest"
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.1.0
4
+ version: 1.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Janko Marohnić
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-08 00:00:00.000000000 Z
11
+ date: 2021-07-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sequel
@@ -50,14 +50,14 @@ dependencies:
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: 0.1.5
53
+ version: '1.0'
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: 0.1.5
60
+ version: '1.0'
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: sequel
63
63
  requirement: !ruby/object:Gem::Requirement
@@ -113,14 +113,17 @@ files:
113
113
  - lib/sequel/extensions/activerecord_connection.rb
114
114
  - lib/sequel/extensions/activerecord_connection/jdbc.rb
115
115
  - lib/sequel/extensions/activerecord_connection/mysql2.rb
116
+ - lib/sequel/extensions/activerecord_connection/oracle.rb
116
117
  - lib/sequel/extensions/activerecord_connection/postgres.rb
117
118
  - lib/sequel/extensions/activerecord_connection/sqlite.rb
119
+ - lib/sequel/extensions/activerecord_connection/tinytds.rb
120
+ - lib/sequel/extensions/activerecord_connection/utils.rb
118
121
  - sequel-activerecord_connection.gemspec
119
122
  homepage: https://github.com/janko/sequel-activerecord_connection
120
123
  licenses:
121
124
  - MIT
122
125
  metadata: {}
123
- post_install_message:
126
+ post_install_message:
124
127
  rdoc_options: []
125
128
  require_paths:
126
129
  - lib
@@ -135,8 +138,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
138
  - !ruby/object:Gem::Version
136
139
  version: '0'
137
140
  requirements: []
138
- rubygems_version: 3.1.4
139
- signing_key:
141
+ rubygems_version: 3.2.15
142
+ signing_key:
140
143
  specification_version: 4
141
144
  summary: Allows Sequel to use ActiveRecord connection for database interaction.
142
145
  test_files: []