sequel 5.106.0 → 5.108.0

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.
Files changed (131) hide show
  1. checksums.yaml +4 -4
  2. data/bin/sequel +5 -5
  3. data/lib/sequel/adapters/ado.rb +1 -1
  4. data/lib/sequel/adapters/ibmdb.rb +2 -2
  5. data/lib/sequel/adapters/jdbc/hsqldb.rb +1 -1
  6. data/lib/sequel/adapters/jdbc/mysql.rb +1 -1
  7. data/lib/sequel/adapters/jdbc.rb +2 -2
  8. data/lib/sequel/adapters/mock.rb +1 -1
  9. data/lib/sequel/adapters/mysql.rb +7 -2
  10. data/lib/sequel/adapters/mysql2.rb +5 -4
  11. data/lib/sequel/adapters/postgres.rb +37 -37
  12. data/lib/sequel/adapters/shared/db2.rb +2 -2
  13. data/lib/sequel/adapters/shared/mssql.rb +4 -4
  14. data/lib/sequel/adapters/shared/mysql.rb +2 -2
  15. data/lib/sequel/adapters/shared/postgres.rb +997 -38
  16. data/lib/sequel/adapters/shared/sqlite.rb +8 -7
  17. data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +1 -1
  18. data/lib/sequel/adapters/utils/mysql_mysql2.rb +11 -1
  19. data/lib/sequel/connection_pool/sharded_single.rb +1 -1
  20. data/lib/sequel/connection_pool/sharded_threaded.rb +7 -5
  21. data/lib/sequel/connection_pool/sharded_timed_queue.rb +3 -3
  22. data/lib/sequel/connection_pool/threaded.rb +9 -7
  23. data/lib/sequel/connection_pool/timed_queue.rb +2 -2
  24. data/lib/sequel/connection_pool.rb +3 -3
  25. data/lib/sequel/core.rb +30 -22
  26. data/lib/sequel/database/connecting.rb +1 -1
  27. data/lib/sequel/database/features.rb +1 -1
  28. data/lib/sequel/database/misc.rb +7 -7
  29. data/lib/sequel/database/query.rb +2 -2
  30. data/lib/sequel/database/schema_generator.rb +7 -5
  31. data/lib/sequel/database/schema_methods.rb +2 -2
  32. data/lib/sequel/database/transactions.rb +4 -4
  33. data/lib/sequel/dataset/actions.rb +1 -1
  34. data/lib/sequel/dataset/features.rb +4 -4
  35. data/lib/sequel/dataset/graph.rb +1 -1
  36. data/lib/sequel/dataset/misc.rb +3 -3
  37. data/lib/sequel/dataset/prepared_statements.rb +2 -2
  38. data/lib/sequel/dataset/query.rb +8 -8
  39. data/lib/sequel/dataset/sql.rb +18 -10
  40. data/lib/sequel/dataset.rb +2 -2
  41. data/lib/sequel/deprecated.rb +2 -2
  42. data/lib/sequel/exceptions.rb +2 -2
  43. data/lib/sequel/extensions/_pretty_table.rb +1 -1
  44. data/lib/sequel/extensions/async_thread_pool.rb +3 -3
  45. data/lib/sequel/extensions/auto_cast_date_and_time.rb +2 -2
  46. data/lib/sequel/extensions/blank.rb +2 -2
  47. data/lib/sequel/extensions/constraint_validations.rb +1 -1
  48. data/lib/sequel/extensions/core_refinements.rb +8 -8
  49. data/lib/sequel/extensions/date_arithmetic.rb +1 -1
  50. data/lib/sequel/extensions/datetime_parse_to_time.rb +2 -2
  51. data/lib/sequel/extensions/duplicate_columns_handler.rb +2 -2
  52. data/lib/sequel/extensions/graph_each.rb +1 -1
  53. data/lib/sequel/extensions/index_caching.rb +1 -1
  54. data/lib/sequel/extensions/inflector.rb +5 -5
  55. data/lib/sequel/extensions/is_distinct_from.rb +2 -2
  56. data/lib/sequel/extensions/lit_require_frozen.rb +3 -3
  57. data/lib/sequel/extensions/migration.rb +21 -7
  58. data/lib/sequel/extensions/named_timezones.rb +8 -8
  59. data/lib/sequel/extensions/pg_array.rb +9 -8
  60. data/lib/sequel/extensions/pg_array_ops.rb +69 -14
  61. data/lib/sequel/extensions/pg_auto_parameterize.rb +2 -2
  62. data/lib/sequel/extensions/pg_auto_parameterize_in_array.rb +3 -3
  63. data/lib/sequel/extensions/pg_enum.rb +2 -2
  64. data/lib/sequel/extensions/pg_extended_date_support.rb +5 -5
  65. data/lib/sequel/extensions/pg_extended_integer_support.rb +1 -1
  66. data/lib/sequel/extensions/pg_hstore.rb +2 -2
  67. data/lib/sequel/extensions/pg_hstore_ops.rb +5 -5
  68. data/lib/sequel/extensions/pg_inet.rb +2 -2
  69. data/lib/sequel/extensions/pg_inet_ops.rb +2 -2
  70. data/lib/sequel/extensions/pg_interval.rb +6 -6
  71. data/lib/sequel/extensions/pg_json.rb +4 -4
  72. data/lib/sequel/extensions/pg_json_ops.rb +11 -11
  73. data/lib/sequel/extensions/pg_range.rb +6 -6
  74. data/lib/sequel/extensions/pg_range_ops.rb +7 -7
  75. data/lib/sequel/extensions/pg_row.rb +4 -4
  76. data/lib/sequel/extensions/pg_row_ops.rb +6 -6
  77. data/lib/sequel/extensions/provenance.rb +2 -2
  78. data/lib/sequel/extensions/query.rb +2 -2
  79. data/lib/sequel/extensions/s.rb +2 -2
  80. data/lib/sequel/extensions/schema_dumper.rb +4 -4
  81. data/lib/sequel/extensions/sequel_4_dataset_methods.rb +2 -0
  82. data/lib/sequel/extensions/sql_comments.rb +1 -1
  83. data/lib/sequel/extensions/sql_log_normalizer.rb +1 -1
  84. data/lib/sequel/extensions/sqlite_json_ops.rb +2 -2
  85. data/lib/sequel/extensions/string_agg.rb +5 -5
  86. data/lib/sequel/extensions/symbol_aref.rb +3 -3
  87. data/lib/sequel/extensions/symbol_aref_refinement.rb +3 -3
  88. data/lib/sequel/extensions/symbol_as_refinement.rb +2 -2
  89. data/lib/sequel/extensions/transaction_connection_validator.rb +1 -1
  90. data/lib/sequel/model/associations.rb +17 -17
  91. data/lib/sequel/model/base.rb +19 -11
  92. data/lib/sequel/model/inflections.rb +1 -1
  93. data/lib/sequel/model/plugins.rb +2 -2
  94. data/lib/sequel/model.rb +2 -2
  95. data/lib/sequel/plugins/association_pks.rb +1 -1
  96. data/lib/sequel/plugins/association_proxies.rb +4 -4
  97. data/lib/sequel/plugins/auto_restrict_eager_graph.rb +2 -0
  98. data/lib/sequel/plugins/caching.rb +1 -1
  99. data/lib/sequel/plugins/class_table_inheritance.rb +1 -1
  100. data/lib/sequel/plugins/column_encryption.rb +10 -10
  101. data/lib/sequel/plugins/concurrent_eager_loading.rb +2 -2
  102. data/lib/sequel/plugins/csv_serializer.rb +2 -2
  103. data/lib/sequel/plugins/deprecated_associations.rb +2 -2
  104. data/lib/sequel/plugins/eager_each.rb +1 -1
  105. data/lib/sequel/plugins/finder.rb +1 -1
  106. data/lib/sequel/plugins/forbid_lazy_load.rb +3 -3
  107. data/lib/sequel/plugins/insert_conflict.rb +1 -1
  108. data/lib/sequel/plugins/insert_returning_select.rb +1 -1
  109. data/lib/sequel/plugins/json_serializer.rb +4 -4
  110. data/lib/sequel/plugins/lazy_attributes.rb +1 -1
  111. data/lib/sequel/plugins/many_through_many.rb +1 -1
  112. data/lib/sequel/plugins/pg_array_associations.rb +4 -4
  113. data/lib/sequel/plugins/pg_auto_constraint_validations.rb +3 -3
  114. data/lib/sequel/plugins/pg_eager_any_typed_array.rb +2 -2
  115. data/lib/sequel/plugins/prepared_statements.rb +2 -2
  116. data/lib/sequel/plugins/serialization.rb +1 -1
  117. data/lib/sequel/plugins/sharding.rb +1 -1
  118. data/lib/sequel/plugins/single_table_inheritance.rb +1 -1
  119. data/lib/sequel/plugins/skip_saving_columns.rb +2 -2
  120. data/lib/sequel/plugins/split_values.rb +1 -1
  121. data/lib/sequel/plugins/sql_comments.rb +8 -8
  122. data/lib/sequel/plugins/subclasses.rb +6 -6
  123. data/lib/sequel/plugins/subset_conditions.rb +2 -2
  124. data/lib/sequel/plugins/tactical_eager_loading.rb +1 -1
  125. data/lib/sequel/plugins/throw_failures.rb +2 -2
  126. data/lib/sequel/plugins/unused_associations.rb +5 -5
  127. data/lib/sequel/plugins/validation_helpers.rb +1 -1
  128. data/lib/sequel/plugins/xml_serializer.rb +2 -0
  129. data/lib/sequel/sql.rb +11 -11
  130. data/lib/sequel/version.rb +1 -1
  131. metadata +2 -2
@@ -210,7 +210,7 @@ module Sequel
210
210
  if ops.length > 1 && ops.all?{|op| op[:op] == :add_constraint || op[:op] == :set_column_null}
211
211
  null_ops, ops = ops.partition{|op| op[:op] == :set_column_null}
212
212
 
213
- # Apply NULL/NOT NULL ops first, since those should be purely idependent of the constraints.
213
+ # Apply NULL/NOT NULL ops first, since those should be purely independent of the constraints.
214
214
  null_ops.each{|op| alter_table_sql_list(table, [op]).flatten.each{|sql| execute_ddl(sql)}}
215
215
 
216
216
  # If you are just doing constraints, apply all of them at the same time,
@@ -677,14 +677,15 @@ module Sequel
677
677
  super
678
678
  end
679
679
 
680
- # Return an array of strings specifying a query explanation for a SELECT of the
681
- # current dataset. Currently, the options are ignored, but it accepts options
682
- # to be compatible with other adapters.
680
+ # Return a string specifying a query explanation for a SELECT of the
681
+ # current dataset. Options:
682
+ # :query_plan :: Use EXPLAIN QUERY PLAN instead of EXPLAIN if true.
683
683
  def explain(opts=nil)
684
684
  # Load the PrettyTable class, needed for explain output
685
685
  Sequel.extension(:_pretty_table) unless defined?(Sequel::PrettyTable)
686
686
 
687
- ds = db.send(:metadata_dataset).clone(:sql=>"EXPLAIN #{select_sql}".freeze)
687
+ keyword = (opts && opts[:query_plan]) ? "EXPLAIN QUERY PLAN" : "EXPLAIN"
688
+ ds = db.send(:metadata_dataset).clone(:sql=>"#{keyword} #{select_sql}".freeze)
688
689
  rows = ds.all
689
690
  Sequel::PrettyTable.string(rows, ds.columns)
690
691
  end
@@ -729,7 +730,7 @@ module Sequel
729
730
 
730
731
  # Handle uniqueness violations when inserting, by using a specified
731
732
  # resolution algorithm. With no options, uses INSERT OR REPLACE. SQLite
732
- # supports the following conflict resolution algoriths: ROLLBACK, ABORT,
733
+ # supports the following conflict resolution algorithms: ROLLBACK, ABORT,
733
734
  # FAIL, IGNORE and REPLACE.
734
735
  #
735
736
  # On SQLite 3.24.0+, you can pass a hash to use an ON CONFLICT clause.
@@ -891,7 +892,7 @@ module Sequel
891
892
  end
892
893
 
893
894
  # Use from_self for aggregate dataset using VALUES.
894
- def aggreate_dataset_use_from_self?
895
+ def aggregate_dataset_use_from_self?
895
896
  super || @opts[:values]
896
897
  end
897
898
 
@@ -49,7 +49,7 @@ module Sequel
49
49
  else
50
50
  # Sequel doesn't allow a nonpositive limit. If the offset
51
51
  # is greater than the number of rows, the empty result set
52
- # shuld be returned, so use a condition that is always false.
52
+ # should be returned, so use a condition that is always false.
53
53
  ds.where(1=>0)
54
54
  end
55
55
  sql = @opts[:append_sql] || String.new
@@ -22,7 +22,17 @@ module Sequel
22
22
  END
23
23
  # Error messages for mysql and mysql2 that indicate the current connection should be disconnected
24
24
  MYSQL_DATABASE_DISCONNECT_ERRORS = /\A#{Regexp.union(disconnect_errors)}/
25
-
25
+
26
+ # 2027 (CR_MALFORMED_PACKET) deliberately not included (protocol error, not connection error)
27
+ MYSQL_DISCONNECT_ERROR_CODES = [
28
+ 2002, # CR_CONNECTION_ERROR
29
+ 2006, # CR_SERVER_GONE_ERROR
30
+ 2013, # CR_SERVER_LOST
31
+ 2014, # CR_COMMANDS_OUT_OF_SYNC
32
+ 2055, # CR_SERVER_LOST_EXTENDED
33
+ ].freeze
34
+ private_constant :MYSQL_DISCONNECT_ERROR_CODES
35
+
26
36
  # Support stored procedures on MySQL
27
37
  def call_sproc(name, opts=OPTS, &block)
28
38
  args = opts[:args] || []
@@ -38,7 +38,7 @@ class Sequel::ShardedSingleConnectionPool < Sequel::ConnectionPool
38
38
 
39
39
  # Disconnects from the database. Once a connection is requested using
40
40
  # #hold, the connection is reestablished. Options:
41
- # :server :: Should be a symbol specifing the server to disconnect from,
41
+ # :server :: Should be a symbol specifying the server to disconnect from,
42
42
  # or an array of symbols to specify multiple servers.
43
43
  def disconnect(opts=OPTS)
44
44
  (opts[:server] ? Array(opts[:server]) : servers).each do |s|
@@ -1,5 +1,7 @@
1
1
  # frozen-string-literal: true
2
2
 
3
+ # SEQUEL6: Remove, deprecation: add warning if used on Ruby 3.2+
4
+
3
5
  require_relative 'threaded'
4
6
 
5
7
  # The slowest and most advanced connection pool, dealing with both multi-threaded
@@ -95,7 +97,7 @@ class Sequel::ShardedThreadedConnectionPool < Sequel::ThreadedConnectionPool
95
97
  #
96
98
  # Once a connection is requested using #hold, the connection pool
97
99
  # creates new connections to the database. Options:
98
- # :server :: Should be a symbol specifing the server to disconnect from,
100
+ # :server :: Should be a symbol specifying the server to disconnect from,
99
101
  # or an array of symbols to specify multiple servers.
100
102
  def disconnect(opts=OPTS)
101
103
  (opts[:server] ? Array(opts[:server]) : sync{@servers.keys}).each do |s|
@@ -203,7 +205,7 @@ class Sequel::ShardedThreadedConnectionPool < Sequel::ThreadedConnectionPool
203
205
 
204
206
  until conn = assign_connection(thread, server)
205
207
  elapsed = Sequel.elapsed_seconds_since(timer)
206
- # :nocov:
208
+ # simplecov:disable
207
209
  raise_pool_timeout(elapsed, server) if elapsed > timeout
208
210
 
209
211
  # It's difficult to get to this point, it can only happen if there is a race condition
@@ -211,7 +213,7 @@ class Sequel::ShardedThreadedConnectionPool < Sequel::ThreadedConnectionPool
211
213
  if conn = acquire_available(thread, server, timeout - elapsed)
212
214
  return conn
213
215
  end
214
- # :nocov:
216
+ # simplecov:enable
215
217
  end
216
218
 
217
219
  conn
@@ -223,11 +225,11 @@ class Sequel::ShardedThreadedConnectionPool < Sequel::ThreadedConnectionPool
223
225
  # Check if connection was checked in between when assign_connection failed and now.
224
226
  # This is very unlikely, but necessary to prevent a situation where the waiter
225
227
  # will wait for a connection even though one has already been checked in.
226
- # :nocov:
228
+ # simplecov:disable
227
229
  if conn = next_available(server)
228
230
  return(allocated(server)[thread] = conn)
229
231
  end
230
- # :nocov:
232
+ # simplecov:enable
231
233
 
232
234
  @waiters[server].wait(@mutex, timeout)
233
235
 
@@ -1,8 +1,8 @@
1
1
  # frozen-string-literal: true
2
2
 
3
- # :nocov:
3
+ # simplecov:disable
4
4
  raise LoadError, "Sequel::ShardedTimedQueueConnectionPool is only available on Ruby 3.2+" unless RUBY_VERSION >= '3.2'
5
- # :nocov:
5
+ # simplecov:enable
6
6
 
7
7
  # A connection pool allowing multi-threaded access to a sharded pool of connections,
8
8
  # using a timed queue (only available in Ruby 3.2+).
@@ -148,7 +148,7 @@ class Sequel::ShardedTimedQueueConnectionPool < Sequel::ConnectionPool
148
148
  @queues[pick_server(server)].num_waiting
149
149
  end
150
150
 
151
- # The total number of connections in the pool. Using a non-existant server will return nil.
151
+ # The total number of connections in the pool. Using a non-existent server will return nil.
152
152
  def size(server=:default)
153
153
  sync{@sizes[server]}
154
154
  end
@@ -1,9 +1,11 @@
1
1
  # frozen-string-literal: true
2
2
 
3
+ # SEQUEL6: Remove, deprecation: add warning if used on Ruby 3.2+
4
+
3
5
  # A connection pool allowing multi-threaded access to a pool of connections.
4
6
  # This is the default connection pool used by Sequel.
5
7
  class Sequel::ThreadedConnectionPool < Sequel::ConnectionPool
6
- USE_WAITER = true # SEQUEL6: Remove
8
+ USE_WAITER = true
7
9
  Sequel::Deprecation.deprecate_constant(self, :USE_WAITER)
8
10
 
9
11
  # The maximum number of connections this pool will create (per shard/server
@@ -12,11 +14,11 @@ class Sequel::ThreadedConnectionPool < Sequel::ConnectionPool
12
14
 
13
15
  # An array of connections that are available for use by the pool.
14
16
  # The calling code should already have the mutex before calling this.
15
- attr_reader :available_connections # SEQUEL6: Remove
17
+ attr_reader :available_connections
16
18
 
17
19
  # A hash with thread/fiber keys and connection values for currently allocated connections.
18
20
  # The calling code should already have the mutex before calling this.
19
- attr_reader :allocated # SEQUEL6: Remove
21
+ attr_reader :allocated
20
22
 
21
23
  # The following additional options are respected:
22
24
  # :max_connections :: The maximum number of connections the connection pool
@@ -149,7 +151,7 @@ class Sequel::ThreadedConnectionPool < Sequel::ConnectionPool
149
151
 
150
152
  until conn = assign_connection(thread)
151
153
  elapsed = Sequel.elapsed_seconds_since(timer)
152
- # :nocov:
154
+ # simplecov:disable
153
155
  raise_pool_timeout(elapsed) if elapsed > timeout
154
156
 
155
157
  # It's difficult to get to this point, it can only happen if there is a race condition
@@ -157,7 +159,7 @@ class Sequel::ThreadedConnectionPool < Sequel::ConnectionPool
157
159
  if conn = acquire_available(thread, timeout - elapsed)
158
160
  return conn
159
161
  end
160
- # :nocov:
162
+ # simplecov:enable
161
163
  end
162
164
 
163
165
  conn
@@ -169,11 +171,11 @@ class Sequel::ThreadedConnectionPool < Sequel::ConnectionPool
169
171
  # Check if connection was checked in between when assign_connection failed and now.
170
172
  # This is very unlikely, but necessary to prevent a situation where the waiter
171
173
  # will wait for a connection even though one has already been checked in.
172
- # :nocov:
174
+ # simplecov:disable
173
175
  if conn = next_available
174
176
  return(@allocated[thread] = conn)
175
177
  end
176
- # :nocov:
178
+ # simplecov:enable
177
179
 
178
180
  @waiter.wait(@mutex, timeout)
179
181
 
@@ -1,8 +1,8 @@
1
1
  # frozen-string-literal: true
2
2
 
3
- # :nocov:
3
+ # simplecov:disable
4
4
  raise LoadError, "Sequel::TimedQueueConnectionPool is only available on Ruby 3.2+" unless RUBY_VERSION >= '3.2'
5
- # :nocov:
5
+ # simplecov:enable
6
6
 
7
7
  # A connection pool allowing multi-threaded access to a pool of connections,
8
8
  # using a timed queue (only available in Ruby 3.2+).
@@ -38,7 +38,7 @@ class Sequel::ConnectionPool
38
38
  POOL_CLASS_MAP.freeze
39
39
 
40
40
  # Class methods used to return an appropriate pool subclass, separated
41
- # into a module for easier overridding by extensions.
41
+ # into a module for easier overriding by extensions.
42
42
  module ClassMethods
43
43
  # Return a pool subclass instance based on the given options. If a <tt>:pool_class</tt>
44
44
  # option is provided is provided, use that pool class, otherwise
@@ -72,11 +72,11 @@ class Sequel::ConnectionPool
72
72
  opts[:servers] ? :sharded_single : :single
73
73
  elsif RUBY_VERSION >= '3.2'
74
74
  opts[:servers] ? :sharded_timed_queue : :timed_queue
75
- # :nocov:
75
+ # simplecov:disable
76
76
  else
77
77
  opts[:servers] ? :sharded_threaded : :threaded
78
78
  end
79
- # :nocov:
79
+ # simplecov:enable
80
80
 
81
81
  connection_pool_class(:pool_class=>pc)
82
82
  end
data/lib/sequel/core.rb CHANGED
@@ -26,8 +26,8 @@
26
26
  # For a quicker introduction, see the {cheat sheet}[rdoc-ref:doc/cheat_sheet.rdoc].
27
27
  module Sequel
28
28
  @convert_two_digit_years = true
29
- @datetime_class = Time
30
- @split_symbols = false
29
+ @datetime_class = Time # SEQUEL6: Remove
30
+ @split_symbols = false # SEQUEL6: Remove
31
31
  @single_threaded = false
32
32
 
33
33
  # Mutex used to protect mutable data structures
@@ -36,7 +36,7 @@ module Sequel
36
36
  # Frozen hash used as the default options hash for most options.
37
37
  OPTS = {}.freeze
38
38
 
39
- SPLIT_SYMBOL_CACHE = {}
39
+ SPLIT_SYMBOL_CACHE = {} # SEQUEL6: Remove
40
40
 
41
41
  module SequelMethods
42
42
  # Sequel converts two digit years in <tt>Date</tt>s and <tt>DateTime</tt>s by default,
@@ -56,6 +56,8 @@ module Sequel
56
56
  # cases where they implement the same methods, they often implement them
57
57
  # differently (e.g. + using seconds on +Time+ and days on +DateTime+).
58
58
  attr_accessor :datetime_class
59
+ # SEQUEL6: Remove datetime_class=
60
+ # SEQUEL6.1: Remove datetime_class
59
61
 
60
62
  # Set whether Sequel is being used in single threaded mode. By default,
61
63
  # Sequel uses a thread-safe connection pool, which isn't as fast as the
@@ -66,8 +68,7 @@ module Sequel
66
68
  # Sequel.single_threaded = true
67
69
  attr_accessor :single_threaded
68
70
 
69
- # Alias of original require method, as Sequel.require does a relative
70
- # require for backwards compatibility.
71
+ # # SEQUEL6: Remove
71
72
  alias orig_require require
72
73
  private :orig_require
73
74
 
@@ -169,14 +170,14 @@ module Sequel
169
170
  def array_or_set_join(obj, arg)
170
171
  obj.join(arg)
171
172
  end
172
- # :nocov:
173
+ # simplecov:disable
173
174
  else
174
175
  def array_or_set_join(obj, arg)
175
176
  obj = obj.to_a if obj.is_a?(Set)
176
177
  obj.join(arg)
177
178
  end
178
179
  end
179
- # :nocov:
180
+ # simplecov:enable
180
181
 
181
182
  if RUBY_VERSION >= '3.3'
182
183
  # Create a new module using the block, and set the temporary name
@@ -185,13 +186,13 @@ module Sequel
185
186
  mod.set_temporary_name(yield)
186
187
  mod
187
188
  end
188
- # :nocov:
189
+ # simplecov:disable
189
190
  else
190
191
  def set_temp_name(mod)
191
192
  mod
192
193
  end
193
194
  end
194
- # :nocov:
195
+ # simplecov:enable
195
196
 
196
197
  # Convert given object to json and return the result.
197
198
  # This can be overridden to use an alternative json implementation.
@@ -231,18 +232,23 @@ module Sequel
231
232
 
232
233
  # For backwards compatibility only. require_relative should be used instead.
233
234
  def require(files, subdir=nil)
235
+ # SEQUEL6: Remove
234
236
  # Use Kernel.require_relative to work around JRuby 9.0 bug
237
+ # simplecov:disable
235
238
  Array(files).each{|f| Kernel.require_relative "#{"#{subdir}/" if subdir}#{f}"}
239
+ # simplecov:enable
240
+ Sequel::Deprecation.deprecate("Sequel.require is deprecated and will be removed in Sequel 6.")
236
241
  end
237
242
 
238
243
  # Splits the symbol into three parts, if symbol splitting is enabled (not the default).
239
244
  # Each part will either be a string or nil. If symbol splitting
240
245
  # is disabled, returns an array with the first and third parts
241
- # being nil, and the second part beind a string version of the symbol.
246
+ # being nil, and the second part behind a string version of the symbol.
242
247
  #
243
248
  # For columns, these parts are the table, column, and alias.
244
249
  # For tables, these parts are the schema, table, and alias.
245
250
  def split_symbol(sym)
251
+ # SEQUEL6.1: Remove
246
252
  unless v = Sequel.synchronize{SPLIT_SYMBOL_CACHE[sym]}
247
253
  if split_symbols?
248
254
  v = case s = sym.to_s
@@ -284,7 +290,7 @@ module Sequel
284
290
  #
285
291
  # Disabling symbol splitting will also disable the handling
286
292
  # of double underscores in virtual row methods, causing such methods to
287
- # yield regular identifers instead of qualified identifiers:
293
+ # yield regular identifiers instead of qualified identifiers:
288
294
  #
289
295
  # # Sequel.split_symbols = true
290
296
  # Sequel.expr{table__column} # table.column
@@ -294,12 +300,14 @@ module Sequel
294
300
  # Sequel.expr{table__column} # table__column
295
301
  # Sequel.expr{table[:column]} # table.column
296
302
  def split_symbols=(v)
303
+ # SEQUEL6: Remove
297
304
  Sequel.synchronize{SPLIT_SYMBOL_CACHE.clear}
298
305
  @split_symbols = v
299
306
  end
300
307
 
301
308
  # Whether Sequel currently splits symbols into qualified/aliased identifiers.
302
309
  def split_symbols?
310
+ # SEQUEL6.1: Remove
303
311
  @split_symbols
304
312
  end
305
313
 
@@ -352,11 +360,11 @@ module Sequel
352
360
  Process.clock_gettime(Process::CLOCK_MONOTONIC)
353
361
  end
354
362
  else
355
- # :nocov:
363
+ # simplecov:disable
356
364
  def start_timer # :nodoc:
357
365
  Time.now
358
366
  end
359
- # :nocov:
367
+ # simplecov:enable
360
368
  end
361
369
 
362
370
  # The elapsed seconds since the given timer object was created. The
@@ -451,15 +459,15 @@ module Sequel
451
459
  end
452
460
  extend SequelMethods
453
461
 
454
- require_relative "deprecated"
455
- require_relative "sql"
456
- require_relative "connection_pool"
457
- require_relative "exceptions"
458
- require_relative "dataset"
459
- require_relative "database"
460
- require_relative "timezones"
461
- require_relative "ast_transformer"
462
- require_relative "version"
462
+ require_relative "deprecated"
463
+ require_relative "sql"
464
+ require_relative "connection_pool"
465
+ require_relative "exceptions"
466
+ require_relative "dataset"
467
+ require_relative "database"
468
+ require_relative "timezones"
469
+ require_relative "ast_transformer"
470
+ require_relative "version"
463
471
 
464
472
  class << self
465
473
  # Allow nicer syntax for creating Sequel expressions:
@@ -192,7 +192,7 @@ module Sequel
192
192
 
193
193
  # Disconnects all available connections from the connection pool. Any
194
194
  # connections currently in use will not be disconnected. Options:
195
- # :server :: Should be a symbol specifing the server to disconnect from,
195
+ # :server :: Should be a symbol specifying the server to disconnect from,
196
196
  # or an array of symbols to specify multiple servers.
197
197
  #
198
198
  # Example:
@@ -5,7 +5,7 @@ module Sequel
5
5
  # ---------------------
6
6
  # :section: 9 - Methods that describe what the database supports
7
7
  # These methods all return booleans, with most describing whether or not the
8
- # database supprots a given feature.
8
+ # database supports a given feature.
9
9
  # ---------------------
10
10
 
11
11
  # Whether the database uses a global namespace for the index, true by default. If
@@ -26,9 +26,9 @@ module Sequel
26
26
  :time=>Sequel::SQLTime, :boolean=>[TrueClass, FalseClass].freeze, :float=>Float, :decimal=>BigDecimal,
27
27
  :blob=>Sequel::SQL::Blob}.freeze
28
28
 
29
- # :nocov:
29
+ # simplecov:disable
30
30
  URI_PARSER = defined?(::URI::RFC2396_PARSER) ? ::URI::RFC2396_PARSER : ::URI::DEFAULT_PARSER
31
- # :nocov:
31
+ # simplecov:enable
32
32
  private_constant :URI_PARSER
33
33
 
34
34
  # Nested hook Proc; each new hook Proc just wraps the previous one.
@@ -98,7 +98,7 @@ module Sequel
98
98
  # The options hash for this database
99
99
  attr_reader :opts
100
100
 
101
- # Set the timezone to use for this database, overridding <tt>Sequel.database_timezone</tt>.
101
+ # Set the timezone to use for this database, overriding <tt>Sequel.database_timezone</tt>.
102
102
  attr_writer :timezone
103
103
 
104
104
  # The specific default size of string columns for this Sequel::Database, usually 255 by default.
@@ -230,9 +230,9 @@ module Sequel
230
230
 
231
231
  # Disallow dup/clone for Database instances
232
232
  undef_method :dup, :clone, :initialize_copy
233
- # :nocov:
233
+ # simplecov:disable
234
234
  if RUBY_VERSION >= '1.9.3'
235
- # :nocov:
235
+ # simplecov:enable
236
236
  undef_method :initialize_clone, :initialize_dup
237
237
  end
238
238
 
@@ -580,7 +580,7 @@ module Sequel
580
580
  # Typecast a string to a BigDecimal
581
581
  alias _typecast_value_string_to_decimal BigDecimal
582
582
  else
583
- # :nocov:
583
+ # simplecov:disable
584
584
  def _typecast_value_string_to_decimal(value)
585
585
  d = BigDecimal(value)
586
586
  if d.zero?
@@ -595,7 +595,7 @@ module Sequel
595
595
  end
596
596
  d
597
597
  end
598
- # :nocov:
598
+ # simplecov:enable
599
599
  end
600
600
 
601
601
  # Typecast the value to a BigDecimal
@@ -415,9 +415,9 @@ module Sequel
415
415
 
416
416
  # Post process the schema values.
417
417
  def schema_post_process(cols)
418
- # :nocov:
418
+ # simplecov:disable
419
419
  if RUBY_VERSION >= '2.5'
420
- # :nocov:
420
+ # simplecov:enable
421
421
  cols.each do |_, h|
422
422
  db_type = h[:db_type]
423
423
  if db_type.is_a?(String)
@@ -13,11 +13,13 @@ module Sequel
13
13
  def _merge_column_options(defaults, opts)
14
14
  defaults.merge!(opts) do |k, defv, v|
15
15
  unless defv == v
16
- # :nocov:
16
+ # simplecov:disable
17
17
  if RUBY_VERSION >= "3.2"
18
- # :nocov:
18
+ # simplecov:enable
19
19
  caller_loc = Thread.each_caller_location do |loc|
20
- break loc unless loc.path == __FILE__
20
+ # Skip core library methods implemented in Ruby
21
+ path = loc.path
22
+ break loc unless path == __FILE__ || (path && path.start_with?('<internal:'))
21
23
  end
22
24
  caller_loc &&= "#{caller_loc.path}:#{caller_loc.lineno}: "
23
25
  end
@@ -150,7 +152,7 @@ module Sequel
150
152
  # :not_null :: Similar to setting <tt>null: false</tt>, but you can provide a hash value
151
153
  # to specify options for the NOT NULL constraint on PostgreSQL 18+:
152
154
  # :name :: The name of the NOT NULL constraint
153
- # :no_inherit :: Set NO INHERIT on the constraint, so it will not propogate to
155
+ # :no_inherit :: Set NO INHERIT on the constraint, so it will not propagate to
154
156
  # child tables.
155
157
  # :null :: Mark the column as allowing NULL values (if true),
156
158
  # or not allowing NULL values (if false). The default is to allow NULL values.
@@ -225,7 +227,7 @@ module Sequel
225
227
  # :deferrable :: Whether the CHECK constraint should be marked DEFERRABLE.
226
228
  #
227
229
  # PostgreSQL specific options:
228
- # :no_inherit :: Set NO INHERIT on the constraint, so it will not propogate to
230
+ # :no_inherit :: Set NO INHERIT on the constraint, so it will not propagate to
229
231
  # child tables.
230
232
  # :not_enforced :: Whether the CHECK constraint should be marked NOT ENFORCED.
231
233
  # :not_valid :: Whether the CHECK constraint should be marked NOT VALID.
@@ -984,7 +984,7 @@ module Sequel
984
984
  on_delete_clause(action)
985
985
  end
986
986
 
987
- # Add fragment for primary key specification, separated for easier overridding.
987
+ # Add fragment for primary key specification, separated for easier overriding.
988
988
  def primary_key_constraint_sql_fragment(_)
989
989
  'PRIMARY KEY'
990
990
  end
@@ -1144,7 +1144,7 @@ module Sequel
1144
1144
  "#{type}#{literal(Array(elements)) if elements}#{' UNSIGNED' if column[:unsigned]}"
1145
1145
  end
1146
1146
 
1147
- # Add fragment for unique specification, separated for easier overridding.
1147
+ # Add fragment for unique specification, separated for easier overriding.
1148
1148
  def unique_constraint_sql_fragment(_)
1149
1149
  'UNIQUE'
1150
1150
  end
@@ -50,7 +50,7 @@ module Sequel
50
50
  # Options:
51
51
  # :savepoint :: If currently inside a savepoint, run this hook immediately when
52
52
  # any enclosing savepoint is rolled back, which may be before the transaction
53
- # commits or rollsback.
53
+ # commits or rolls back.
54
54
  # :server :: The server/shard to use.
55
55
  def after_rollback(opts=OPTS, &block)
56
56
  raise Error, "must provide block to after_rollback" unless block
@@ -69,7 +69,7 @@ module Sequel
69
69
  # When exiting the transaction block through methods other than an exception
70
70
  # (e.g. normal exit, non-local return, or throw), set the current transaction
71
71
  # to rollback instead of committing. This is designed for use in cases where
72
- # you want to preform a non-local return but also want to rollback instead of
72
+ # you want to perform a non-local return but also want to rollback instead of
73
73
  # committing.
74
74
  # Options:
75
75
  # :cancel :: Cancel the current rollback_on_exit setting, so exiting will commit instead
@@ -246,7 +246,7 @@ module Sequel
246
246
  # Internal generic transaction method. Any exception raised by the given
247
247
  # block will cause the transaction to be rolled back. If the exception is
248
248
  # not a Sequel::Rollback, the error will be reraised. If no exception occurs
249
- # inside the block, the transaction is commited.
249
+ # inside the block, the transaction is committed.
250
250
  def _transaction(conn, opts=OPTS)
251
251
  rollback = opts[:rollback]
252
252
  begin
@@ -538,7 +538,7 @@ module Sequel
538
538
  end
539
539
 
540
540
  # Finish a subtransaction. If savepoints are supported, pops the current
541
- # tansaction off the savepoint stack.
541
+ # transaction off the savepoint stack.
542
542
  def transaction_finished?(conn)
543
543
  if supports_savepoints?
544
544
  stack = _trans(conn)[:savepoints]
@@ -1343,7 +1343,7 @@ module Sequel
1343
1343
  Sequel.|(*cond)
1344
1344
  end
1345
1345
 
1346
- # Downcase identifiers by default when outputing them from the database.
1346
+ # Downcase identifiers by default when outputting them from the database.
1347
1347
  def output_identifier(v)
1348
1348
  v = 'untitled' if v == ''
1349
1349
  v.to_s.downcase.to_sym
@@ -25,7 +25,7 @@ module Sequel
25
25
  false
26
26
  end
27
27
 
28
- # :nocov:
28
+ # simplecov:disable
29
29
 
30
30
  # Whether the dataset requires SQL standard datetimes. False by default,
31
31
  # as most allow strings with ISO 8601 format. Only for backwards compatibility,
@@ -34,7 +34,7 @@ module Sequel
34
34
  # SEQUEL6: Remove
35
35
  false
36
36
  end
37
- # :nocov:
37
+ # simplecov:enable
38
38
 
39
39
  # Whether type specifiers are required for prepared statement/bound
40
40
  # variable argument placeholders (i.e. :bv__integer), false by default.
@@ -188,14 +188,14 @@ module Sequel
188
188
  true
189
189
  end
190
190
 
191
- # :nocov:
191
+ # simplecov:disable
192
192
 
193
193
  # Whether the dataset supports timezones in literal timestamps, false by default.
194
194
  def supports_timestamp_timezones?
195
195
  # SEQUEL6: Remove
196
196
  false
197
197
  end
198
- # :nocov:
198
+ # simplecov:enable
199
199
 
200
200
  # Whether the dataset supports fractional seconds in literal timestamps, true by default.
201
201
  def supports_timestamp_usecs?
@@ -165,7 +165,7 @@ module Sequel
165
165
  # columns in the subselect, qualified by the subselect alias.
166
166
  Sequel.qualify(qualifier, Sequel.identifier(column))
167
167
  else
168
- # Initial dataset not wrapped in subslect, just make
168
+ # Initial dataset not wrapped in subselect, just make
169
169
  # sure columns are qualified in some way.
170
170
  qualified_expression(sel, qualifier)
171
171
  end
@@ -76,7 +76,7 @@ module Sequel
76
76
  super
77
77
  end
78
78
  else
79
- # :nocov:
79
+ # simplecov:disable
80
80
  def freeze # :nodoc:
81
81
  self
82
82
  end
@@ -84,7 +84,7 @@ module Sequel
84
84
  def frozen? # :nodoc:
85
85
  true
86
86
  end
87
- # :nocov:
87
+ # simplecov:enable
88
88
  end
89
89
 
90
90
  # Alias of +first_source_alias+
@@ -259,7 +259,7 @@ module Sequel
259
259
  # underscore are reserved for internal use.
260
260
  attr_reader :cache
261
261
 
262
- # Retreive a value from the dataset's cache in a thread safe manner.
262
+ # Retrieve a value from the dataset's cache in a thread safe manner.
263
263
  def cache_get(k)
264
264
  Sequel.synchronize{@cache[k]}
265
265
  end