sequel 5.79.0 → 5.81.0

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: 154517820668c8c59f141797157a9945ae3afaeb482e997619e68e9bebc5c70a
4
- data.tar.gz: c7991308e696d0f931f46cf38c301986c9094a44bca94a1d6749a0b798cb1d9c
3
+ metadata.gz: a23afa1510b7bd1ba6918319eedce156450672520ab4798e6de56461a59660e1
4
+ data.tar.gz: bb6bbfbf0f1f82fe117fa8c725e9cf4fde49644a74b463ab8682018744a8a1de
5
5
  SHA512:
6
- metadata.gz: 7efb6286d8eded4c0064199f7335e9cd2b0575942fd52040b29c52e26498d1531168435d86ca6e42474512ac21c1b151db85dd4db0fa5ff6b3f90dad73568a3b
7
- data.tar.gz: 7ef17f79333fdabe90485b105fdc24925c8c75f41dc78f83f5400ebc39b0ac2b3709881624086526559132c8346c1dc8f07b9384a39bb838d1132bf4a7040ec1
6
+ metadata.gz: 9e26620f8f1df2715205e9019c2012ec2e9f392d14ed427d66c76f488bccc3e5d3f27e4d626a47d54903d611695db0487f987d99191602024a1864d6c10f7bde
7
+ data.tar.gz: cd070d8c35960949039d226b5eaf8c90ebec8d0cef3f09b5dae533551bb35170ca6e2503d88f1b1512110b6617ff9c03d9cb2afb62395c4d953314aa5a5ca87c
data/CHANGELOG CHANGED
@@ -1,3 +1,19 @@
1
+ === 5.81.0 (2024-06-01)
2
+
3
+ * Fix ignored block warnings in a couple plugin apply methods on Ruby 3.4 (jeremyevans)
4
+
5
+ * Skip Ruby internal caller locations when searching for caller locations in caller_logging and provenance extensions (jeremyevans)
6
+
7
+ * Add temporarily_release_connection Database extension for multithreaded transactional testing (jeremyevans)
8
+
9
+ === 5.80.0 (2024-05-01)
10
+
11
+ * Support Dataset#skip_locked on MariaDB 10.6+ (simi) (#2150)
12
+
13
+ * Avoid allocating datasets in cases where the returned dataset would be the same as the receiver (jeremyevans)
14
+
15
+ * Add provenance dataset extension, which includes comments in queries showing how and where the dataset was built (jeremyevans)
16
+
1
17
  === 5.79.0 (2024-04-01)
2
18
 
3
19
  * Support create_or_replace_view with :materialized option on PostgreSQL (nashby) (#2144)
data/doc/code_order.rdoc CHANGED
@@ -91,9 +91,11 @@ unsafe runtime modification of the configuration:
91
91
  model_classes.each(&:freeze)
92
92
  DB.freeze
93
93
 
94
- The `subclasses` plugin can be used to keep track of all model classes
95
- that have been setup in your application. Finalizing their associations
96
- and freezing them can easily be achieved through the plugin:
94
+ `model_classes` is not a Sequel method, it indicates an array of model
95
+ classes you defined. Instead of listing them manually, the `subclasses`
96
+ plugin can be used to keep track of all model classes that have been
97
+ setup in your application. Finalizing their associations and freezing
98
+ them can easily be achieved through the plugin:
97
99
 
98
100
  # Register the plugin before setting up the models
99
101
  Sequel::Model.plugin :subclasses
@@ -0,0 +1,40 @@
1
+ = New Features
2
+
3
+ * A provenance dataset extension has been added. This extension makes
4
+ SQL queries include a comment describing how the dataset was built.
5
+ This can make debugging complex cases significantly easier. Here's
6
+ a simple example:
7
+
8
+ DB.extension :provenance
9
+
10
+ DB[:table].
11
+ select(:a).
12
+ where{b > 10}.
13
+ order(:c).
14
+ limit(10)
15
+ # SQL:
16
+ # SELECT a FROM table WHERE (b > 10) ORDER BY c LIMIT 10 --
17
+ # -- Dataset Provenance
18
+ # -- Keys:[:from] Source:(eval at bin/sequel:257):2:in `<main>'
19
+ # -- Keys:[:select] Source:(eval at bin/sequel:257):3:in `<main>'
20
+ # -- Keys:[:where] Source:(eval at bin/sequel:257):4:in `<main>'
21
+ # -- Keys:[:order] Source:(eval at bin/sequel:257):5:in `<main>'
22
+ # -- Keys:[:limit] Source:(eval at bin/sequel:257):6:in `<main>'
23
+
24
+ With the above example, it's obvious how the dataset is created, but
25
+ but in real applications, where datasets can be built from multiple
26
+ files, seeing where each dataset clone was made can be helpful.
27
+
28
+ The source listed will skip locations in the Ruby standard library
29
+ as well as Sequel itself. Other locations can be skipped by
30
+ providing a Database :provenance_caller_ignore Regexp option:
31
+
32
+ DB.opts[:provenance_caller_ignore] = /\/gems\/library_name-/
33
+
34
+ = Other Improvements
35
+
36
+ * For dataset methods where Sequel can determine that the return
37
+ value would be equivalent to the receiver, Sequel now returns the
38
+ receiver. This reduces the number of dataset allocations.
39
+
40
+ * Sequel now supports Dataset#skip_locked on MariaDB 10.6+.
@@ -0,0 +1,31 @@
1
+ = New Features
2
+
3
+ * A temporarily_release_connection Database extension has been added,
4
+ designed for multithreaded transactional testing.
5
+
6
+ This allows one thread to start a transaction, and then release
7
+ the connection back for usage by the connection pool, so that
8
+ other threads can operate on the connection object safely inside
9
+ the transaction. This requires the connection pool be limited
10
+ to a single connection, to ensure that the released connection
11
+ can be reacquired. It's not perfect, because if the connection
12
+ is disconnected and removed from the pool while temporarily
13
+ released, there is no way to handle that situation correctly.
14
+ Example:
15
+
16
+ DB.transaction(rollback: :always, auto_savepoint: true) do |conn|
17
+ DB.temporarily_release_connection(conn) do
18
+ # Other threads can operate on connection safely inside
19
+ # the transaction
20
+ yield
21
+ end
22
+ end
23
+
24
+ = Other Improvements
25
+
26
+ * In the caller_logging and provenance extensions, Ruby internal
27
+ caller locations are skipped when trying to locate the appropriate
28
+ caller line to include.
29
+
30
+ * A couple ignored block warnings in plugin apply methods have been
31
+ fixed on Ruby 3.4.
@@ -926,9 +926,9 @@ module Sequel
926
926
  (type == :insert && db.mariadb? && db.adapter_scheme != :jdbc) ? (db.server_version >= 100500) : false
927
927
  end
928
928
 
929
- # MySQL 8+ supports SKIP LOCKED.
929
+ # MySQL 8+ and MariaDB 10.6+ support SKIP LOCKED.
930
930
  def supports_skip_locked?
931
- !db.mariadb? && db.server_version >= 80000
931
+ db.server_version >= (db.mariadb? ? 100600 : 80000)
932
932
  end
933
933
 
934
934
  # Check the database setting for whether fractional timestamps
@@ -253,6 +253,7 @@ module Sequel
253
253
  # Remove the splitting of results into subhashes, and all metadata
254
254
  # related to the current graph (if any).
255
255
  def ungraphed
256
+ return self unless opts[:graph]
256
257
  clone(:graph=>nil)
257
258
  end
258
259
 
@@ -129,6 +129,7 @@ module Sequel
129
129
  def distinct(*args, &block)
130
130
  virtual_row_columns(args, block)
131
131
  if args.empty?
132
+ return self if opts[:distinct] == EMPTY_ARRAY
132
133
  cached_dataset(:_distinct_ds){clone(:distinct => EMPTY_ARRAY)}
133
134
  else
134
135
  raise(InvalidOperation, "DISTINCT ON not supported") unless supports_distinct_on?
@@ -230,6 +231,7 @@ module Sequel
230
231
  #
231
232
  # DB[:table].for_update # SELECT * FROM table FOR UPDATE
232
233
  def for_update
234
+ return self if opts[:lock] == :update
233
235
  cached_dataset(:_for_update_ds){lock_style(:update)}
234
236
  end
235
237
 
@@ -641,6 +643,7 @@ module Sequel
641
643
  # DB.from(:a, DB[:b].where(Sequel[:a][:c]=>Sequel[:b][:d]).lateral)
642
644
  # # SELECT * FROM a, LATERAL (SELECT * FROM b WHERE (a.c = b.d))
643
645
  def lateral
646
+ return self if opts[:lateral]
644
647
  cached_dataset(:_lateral_ds){clone(:lateral=>true)}
645
648
  end
646
649
 
@@ -744,6 +747,7 @@ module Sequel
744
747
  # ds.all # => [{2=>:id}]
745
748
  # ds.naked.all # => [{:id=>2}]
746
749
  def naked
750
+ return self unless opts[:row_proc]
747
751
  cached_dataset(:_naked_ds){with_row_proc(nil)}
748
752
  end
749
753
 
@@ -753,6 +757,7 @@ module Sequel
753
757
  # DB[:items].for_update.nowait
754
758
  # # SELECT * FROM items FOR UPDATE NOWAIT
755
759
  def nowait
760
+ return self if opts[:nowait]
756
761
  cached_dataset(:_nowait_ds) do
757
762
  raise(Error, 'This dataset does not support raises errors instead of waiting for locked rows') unless supports_nowait?
758
763
  clone(:nowait=>true)
@@ -878,6 +883,7 @@ module Sequel
878
883
  # end
879
884
  def returning(*values)
880
885
  if values.empty?
886
+ return self if opts[:returning] == EMPTY_ARRAY
881
887
  cached_dataset(:_returning_ds) do
882
888
  raise Error, "RETURNING is not supported on #{db.database_type}" unless supports_returning?(:insert)
883
889
  clone(:returning=>EMPTY_ARRAY)
@@ -930,6 +936,7 @@ module Sequel
930
936
  # DB[:items].select_all(:items, :foo) # SELECT items.*, foo.* FROM items
931
937
  def select_all(*tables)
932
938
  if tables.empty?
939
+ return self unless opts[:select]
933
940
  cached_dataset(:_select_all_ds){clone(:select => nil)}
934
941
  else
935
942
  select(*tables.map{|t| i, a = split_alias(t); a || i}.map!{|t| SQL::ColumnAll.new(t)}.freeze)
@@ -1005,6 +1012,7 @@ module Sequel
1005
1012
 
1006
1013
  # Specify that the check for limits/offsets when updating/deleting be skipped for the dataset.
1007
1014
  def skip_limit_check
1015
+ return self if opts[:skip_limit_check]
1008
1016
  cached_dataset(:_skip_limit_check_ds) do
1009
1017
  clone(:skip_limit_check=>true)
1010
1018
  end
@@ -1012,6 +1020,7 @@ module Sequel
1012
1020
 
1013
1021
  # Skip locked rows when returning results from this dataset.
1014
1022
  def skip_locked
1023
+ return self if opts[:skip_locked]
1015
1024
  cached_dataset(:_skip_locked_ds) do
1016
1025
  raise(Error, 'This dataset does not support skipping locked rows') unless supports_skip_locked?
1017
1026
  clone(:skip_locked=>true)
@@ -1023,6 +1032,7 @@ module Sequel
1023
1032
  # DB[:items].group(:a).having(a: 1).where(:b).unfiltered
1024
1033
  # # SELECT * FROM items GROUP BY a
1025
1034
  def unfiltered
1035
+ return self unless opts[:where] || opts[:having]
1026
1036
  cached_dataset(:_unfiltered_ds){clone(:where => nil, :having => nil)}
1027
1037
  end
1028
1038
 
@@ -1031,6 +1041,7 @@ module Sequel
1031
1041
  # DB[:items].group(:a).having(a: 1).where(:b).ungrouped
1032
1042
  # # SELECT * FROM items WHERE b
1033
1043
  def ungrouped
1044
+ return self unless opts[:group] || opts[:having]
1034
1045
  cached_dataset(:_ungrouped_ds){clone(:group => nil, :having => nil)}
1035
1046
  end
1036
1047
 
@@ -1058,6 +1069,7 @@ module Sequel
1058
1069
  #
1059
1070
  # DB[:items].limit(10, 20).unlimited # SELECT * FROM items
1060
1071
  def unlimited
1072
+ return self unless opts[:limit] || opts[:offset]
1061
1073
  cached_dataset(:_unlimited_ds){clone(:limit=>nil, :offset=>nil)}
1062
1074
  end
1063
1075
 
@@ -1065,6 +1077,7 @@ module Sequel
1065
1077
  #
1066
1078
  # DB[:items].order(:a).unordered # SELECT * FROM items
1067
1079
  def unordered
1080
+ return self unless opts[:order]
1068
1081
  cached_dataset(:_unordered_ds){clone(:order=>nil)}
1069
1082
  end
1070
1083
 
@@ -36,6 +36,8 @@ require 'rbconfig'
36
36
  module Sequel
37
37
  module CallerLogging
38
38
  SEQUEL_LIB_PATH = (File.expand_path('../../..', __FILE__) + '/').freeze
39
+ RUBY_STDLIB = RbConfig::CONFIG["rubylibdir"]
40
+ INTERNAL = '<internal'
39
41
 
40
42
  # A regexp of caller lines to ignore, in addition to internal Sequel and Ruby code.
41
43
  attr_accessor :caller_logging_ignore
@@ -59,7 +61,8 @@ module Sequel
59
61
  ignore = caller_logging_ignore
60
62
  c = caller.find do |line|
61
63
  !(line.start_with?(SEQUEL_LIB_PATH) ||
62
- line.start_with?(RbConfig::CONFIG["rubylibdir"]) ||
64
+ line.start_with?(RUBY_STDLIB) ||
65
+ line.start_with?(INTERNAL) ||
63
66
  (ignore && line =~ ignore))
64
67
  end
65
68
 
@@ -0,0 +1,110 @@
1
+ # frozen-string-literal: true
2
+ #
3
+ # The provenance dataset extension tracks the locations of all
4
+ # dataset clones that resulted in the current dataset, and includes
5
+ # the information as a comment in the dataset's SQL. This makes it
6
+ # possible to see how a query was built, which can aid debugging.
7
+ # Example:
8
+ #
9
+ # DB[:table].
10
+ # select(:a).
11
+ # where{b > 10}.
12
+ # order(:c).
13
+ # limit(10)
14
+ # # SQL:
15
+ # # SELECT a FROM table WHERE (b > 10) ORDER BY c LIMIT 10 --
16
+ # # -- Dataset Provenance
17
+ # # -- Keys:[:from] Source:(eval at bin/sequel:257):2:in `<main>'
18
+ # # -- Keys:[:select] Source:(eval at bin/sequel:257):3:in `<main>'
19
+ # # -- Keys:[:where] Source:(eval at bin/sequel:257):4:in `<main>'
20
+ # # -- Keys:[:order] Source:(eval at bin/sequel:257):5:in `<main>'
21
+ # # -- Keys:[:limit] Source:(eval at bin/sequel:257):6:in `<main>'
22
+ #
23
+ # With the above example, the source is fairly obvious and not helpful,
24
+ # but in real applications, where datasets can be built from multiple
25
+ # files, seeing where each dataset clone was made can be helpful.
26
+ #
27
+ # The Source listed will skip locations in the Ruby standard library
28
+ # as well as Sequel itself. Other locations can be skipped by
29
+ # providing a Database :provenance_caller_ignore Regexp option:
30
+ #
31
+ # DB.opts[:provenance_caller_ignore] = /\/gems\/library_name-/
32
+ #
33
+ # Related module: Sequel::Dataset::Provenance
34
+
35
+ #
36
+ module Sequel
37
+ class Dataset
38
+ module Provenance
39
+ SEQUEL_LIB_PATH = (File.expand_path('../../..', __FILE__) + '/').freeze
40
+ RUBY_STDLIB = RbConfig::CONFIG["rubylibdir"]
41
+ INTERNAL = '<internal'
42
+
43
+ if TRUE_FREEZE
44
+ # Include provenance information when cloning datasets.
45
+ def clone(opts = nil || (return self))
46
+ super(provenance_opts(opts))
47
+ end
48
+ else
49
+ # :nocov:
50
+ def clone(opts = OPTS) # :nodoc:
51
+ super(provenance_opts(opts))
52
+ end
53
+ # :nocov:
54
+ end
55
+
56
+ %w'select insert update delete'.each do |type|
57
+ # Include the provenance information as a comment when preparing dataset SQL
58
+ define_method(:"#{type}_sql") do |*a|
59
+ sql = super(*a)
60
+
61
+ if provenance = @opts[:provenance]
62
+ comment = provenance.map do |hash|
63
+ " -- Keys:#{hash[:keys].inspect} Source:#{hash[:source]}".to_s.gsub(/\s+/, ' ')
64
+ end
65
+ comment << ""
66
+ comment.unshift " -- Dataset Provenance"
67
+ comment.unshift " -- "
68
+ comment = comment.join("\n")
69
+
70
+ if sql.frozen?
71
+ sql += comment
72
+ sql.freeze
73
+ elsif @opts[:append_sql] || @opts[:placeholder_literalizer]
74
+ sql << comment
75
+ else
76
+ sql += comment
77
+ end
78
+ end
79
+
80
+ sql
81
+ end
82
+ end
83
+
84
+ private
85
+
86
+ # Return a copy of opts with provenance information added.
87
+ def provenance_opts(opts)
88
+ provenance = {source: provenance_source, keys: opts.keys.freeze}.freeze
89
+ opts = opts.dup
90
+ opts[:provenance] = ((@opts[:provenance] || EMPTY_ARRAY).dup << provenance).freeze
91
+ opts
92
+ end
93
+
94
+ # Return the caller line for the provenance change. This skips
95
+ # Sequel itself and the standard library. Additional locations
96
+ # can be skipped using the :provenance_caller_ignore Dataset option.
97
+ def provenance_source
98
+ ignore = db.opts[:provenance_caller_ignore]
99
+ caller.find do |line|
100
+ !(line.start_with?(SEQUEL_LIB_PATH) ||
101
+ line.start_with?(RUBY_STDLIB) ||
102
+ line.start_with?(INTERNAL) ||
103
+ (ignore && line =~ ignore))
104
+ end
105
+ end
106
+ end
107
+
108
+ register_extension(:provenance, Provenance)
109
+ end
110
+ end
@@ -0,0 +1,178 @@
1
+ # frozen-string-literal: true
2
+ #
3
+ # The temporarily_release_connection extension adds support for temporarily
4
+ # releasing a checked out connection back to the connection pool. It is
5
+ # designed for use in multithreaded transactional integration tests, allowing
6
+ # a connection to start a transaction in one thread, but be temporarily
7
+ # released back to the connection pool, so it can be operated on safely
8
+ # by multiple threads inside a block. For example, the main thread could be
9
+ # running tests that send web requests, and a separate thread running a web
10
+ # server that is responding to those requests, and the same connection and
11
+ # transaction would be used for both.
12
+ #
13
+ # To load the extension into the database:
14
+ #
15
+ # DB.extension :temporarily_release_connection
16
+ #
17
+ # After the extension is loaded, call the +temporarily_release_connection+
18
+ # method with the connection object to temporarily release the connection
19
+ # back to the pool. Example:
20
+ #
21
+ # DB.transaction(rollback: :always, auto_savepoint: true) do |conn|
22
+ # DB.temporarily_release_connection(conn) do
23
+ # # Other threads can operate on connection safely inside the transaction
24
+ # yield
25
+ # end
26
+ # end
27
+ #
28
+ # For sharded connection pools, the second argument to +temporarily_release_connection+
29
+ # is respected, and specifies the server on which to temporarily release the connection.
30
+ #
31
+ # The temporarily_release_connection extension is only supported with the
32
+ # threaded and timed_queue connection pools that ship with Sequel (and the sharded
33
+ # versions of each). To make sure that same connection object can be reacquired, it
34
+ # is only supported if the maximum connection pool size is 1, so set the Database
35
+ # :max_connections option to 1 if you plan to use this extension.
36
+ #
37
+ # If the +temporarily_release_connection+ method cannot reacquire the same connection
38
+ # it released to the pool, it will raise a Sequel::UnableToReacquireConnectionError
39
+ # exception. This should only happen if the connection has been disconnected
40
+ # while it was temporarily released. If this error is raised, Database#transaction
41
+ # will not rollback the transaction, since the connection object is likely no longer
42
+ # valid, and on poorly written database drivers, that could cause the process to crash.
43
+ #
44
+ # Related modules: Sequel::TemporarilyReleaseConnection,
45
+ # Sequel::UnableToReacquireConnectionError
46
+
47
+ #
48
+ module Sequel
49
+ # Error class raised if the connection pool does not provide the same connection
50
+ # object when checking a temporarily released connection out.
51
+ class UnableToReacquireConnectionError < Error
52
+ end
53
+
54
+ module TemporarilyReleaseConnection
55
+ module DatabaseMethods
56
+ # Temporarily release the connection back to the connection pool for the
57
+ # duration of the block.
58
+ def temporarily_release_connection(conn, server=:default, &block)
59
+ pool.temporarily_release_connection(conn, server, &block)
60
+ end
61
+
62
+ private
63
+
64
+ # Do nothing if UnableToReacquireConnectionError is raised, as it is
65
+ # likely the connection is not in a usable state.
66
+ def rollback_transaction(conn, opts)
67
+ return if UnableToReacquireConnectionError === $!
68
+ super
69
+ end
70
+ end
71
+
72
+ module PoolMethods
73
+ # Temporarily release a currently checked out connection, then yield to the block. Reacquire the same
74
+ # connection upon the exit of the block.
75
+ def temporarily_release_connection(conn, server)
76
+ t = Sequel.current
77
+ raise Error, "connection not currently checked out" unless conn.equal?(trc_owned_connection(t, server))
78
+
79
+ begin
80
+ trc_release(t, conn, server)
81
+ yield
82
+ ensure
83
+ c = trc_acquire(t, server)
84
+ unless conn.equal?(c)
85
+ raise UnableToReacquireConnectionError, "reacquired connection not the same as initial connection"
86
+ end
87
+ end
88
+ end
89
+ end
90
+
91
+ module TimedQueue
92
+ private
93
+
94
+ def trc_owned_connection(t, server)
95
+ owned_connection(t)
96
+ end
97
+
98
+ def trc_release(t, conn, server)
99
+ release(t)
100
+ end
101
+
102
+ def trc_acquire(t, server)
103
+ acquire(t)
104
+ end
105
+ end
106
+
107
+ module ShardedTimedQueue
108
+ # Normalize the server name for sharded connection pools
109
+ def temporarily_release_connection(conn, server)
110
+ server = pick_server(server)
111
+ super
112
+ end
113
+
114
+ private
115
+
116
+ def trc_owned_connection(t, server)
117
+ owned_connection(t, server)
118
+ end
119
+
120
+ def trc_release(t, conn, server)
121
+ release(t, conn, server)
122
+ end
123
+
124
+ def trc_acquire(t, server)
125
+ acquire(t, server)
126
+ end
127
+ end
128
+
129
+ module ThreadedBase
130
+ private
131
+
132
+ def trc_release(t, conn, server)
133
+ sync{super}
134
+ end
135
+ end
136
+
137
+ module Threaded
138
+ include TimedQueue
139
+ include ThreadedBase
140
+ end
141
+
142
+ module ShardedThreaded
143
+ include ShardedTimedQueue
144
+ include ThreadedBase
145
+ end
146
+ end
147
+
148
+ trc = TemporarilyReleaseConnection
149
+ trc_map = {
150
+ :threaded => trc::Threaded,
151
+ :sharded_threaded => trc::ShardedThreaded,
152
+ :timed_queue => trc::TimedQueue,
153
+ :sharded_timed_queue => trc::ShardedTimedQueue,
154
+ }.freeze
155
+
156
+ Database.register_extension(:temporarily_release_connection) do |db|
157
+ unless pool_mod = trc_map[db.pool.pool_type]
158
+ raise(Error, "temporarily_release_connection extension not supported for connection pool type #{db.pool.pool_type}")
159
+ end
160
+
161
+ case db.pool.pool_type
162
+ when :threaded, :sharded_threaded
163
+ if db.opts[:connection_handling] == :disconnect
164
+ raise Error, "temporarily_release_connection extension not supported with connection_handling: :disconnect option"
165
+ end
166
+ end
167
+
168
+ unless db.pool.max_size == 1
169
+ raise Error, "temporarily_release_connection extension not supported unless :max_connections option is 1"
170
+ end
171
+
172
+ db.extend(trc::DatabaseMethods)
173
+ db.pool.extend(trc::PoolMethods)
174
+ db.pool.extend(pool_mod)
175
+ end
176
+
177
+ private_constant :TemporarilyReleaseConnection
178
+ end
@@ -586,7 +586,7 @@ module Sequel
586
586
  end
587
587
  end
588
588
 
589
- def self.apply(model, opts=OPTS)
589
+ def self.apply(model, opts=OPTS, &_)
590
590
  model.plugin :serialization
591
591
  end
592
592
 
@@ -24,7 +24,7 @@ module Sequel
24
24
  # # Make the Album class support input transformers
25
25
  # Album.plugin :input_transformer
26
26
  module InputTransformer
27
- def self.apply(model, *)
27
+ def self.apply(model, *, &_)
28
28
  model.instance_exec do
29
29
  @input_transformers = {}
30
30
  @skip_input_transformer_columns = {}
@@ -6,7 +6,7 @@ module Sequel
6
6
 
7
7
  # The minor version of Sequel. Bumped for every non-patch level
8
8
  # release, generally around once a month.
9
- MINOR = 79
9
+ MINOR = 81
10
10
 
11
11
  # The tiny version of Sequel. Usually 0, only bumped for bugfix
12
12
  # releases that fix regressions from previous versions.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequel
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.79.0
4
+ version: 5.81.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Evans
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-04-01 00:00:00.000000000 Z
11
+ date: 2024-06-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bigdecimal
@@ -227,6 +227,8 @@ extra_rdoc_files:
227
227
  - doc/release_notes/5.78.0.txt
228
228
  - doc/release_notes/5.79.0.txt
229
229
  - doc/release_notes/5.8.0.txt
230
+ - doc/release_notes/5.80.0.txt
231
+ - doc/release_notes/5.81.0.txt
230
232
  - doc/release_notes/5.9.0.txt
231
233
  files:
232
234
  - CHANGELOG
@@ -334,6 +336,8 @@ files:
334
336
  - doc/release_notes/5.78.0.txt
335
337
  - doc/release_notes/5.79.0.txt
336
338
  - doc/release_notes/5.8.0.txt
339
+ - doc/release_notes/5.80.0.txt
340
+ - doc/release_notes/5.81.0.txt
337
341
  - doc/release_notes/5.9.0.txt
338
342
  - doc/schema_modification.rdoc
339
343
  - doc/security.rdoc
@@ -496,6 +500,7 @@ files:
496
500
  - lib/sequel/extensions/pg_static_cache_updater.rb
497
501
  - lib/sequel/extensions/pg_timestamptz.rb
498
502
  - lib/sequel/extensions/pretty_table.rb
503
+ - lib/sequel/extensions/provenance.rb
499
504
  - lib/sequel/extensions/query.rb
500
505
  - lib/sequel/extensions/round_timestamps.rb
501
506
  - lib/sequel/extensions/run_transaction_hooks.rb
@@ -519,6 +524,7 @@ files:
519
524
  - lib/sequel/extensions/symbol_as.rb
520
525
  - lib/sequel/extensions/symbol_as_refinement.rb
521
526
  - lib/sequel/extensions/synchronize_sql.rb
527
+ - lib/sequel/extensions/temporarily_release_connection.rb
522
528
  - lib/sequel/extensions/thread_local_timezones.rb
523
529
  - lib/sequel/extensions/to_dot.rb
524
530
  - lib/sequel/extensions/transaction_connection_validator.rb
@@ -666,7 +672,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
666
672
  - !ruby/object:Gem::Version
667
673
  version: '0'
668
674
  requirements: []
669
- rubygems_version: 3.5.3
675
+ rubygems_version: 3.5.9
670
676
  signing_key:
671
677
  specification_version: 4
672
678
  summary: The Database Toolkit for Ruby