sequel 5.45.0 → 5.77.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (218) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +434 -0
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +59 -27
  5. data/bin/sequel +11 -3
  6. data/doc/advanced_associations.rdoc +16 -14
  7. data/doc/association_basics.rdoc +119 -24
  8. data/doc/cheat_sheet.rdoc +11 -3
  9. data/doc/mass_assignment.rdoc +1 -1
  10. data/doc/migration.rdoc +27 -6
  11. data/doc/model_hooks.rdoc +1 -1
  12. data/doc/object_model.rdoc +8 -8
  13. data/doc/opening_databases.rdoc +28 -12
  14. data/doc/postgresql.rdoc +16 -8
  15. data/doc/querying.rdoc +5 -3
  16. data/doc/release_notes/5.46.0.txt +87 -0
  17. data/doc/release_notes/5.47.0.txt +59 -0
  18. data/doc/release_notes/5.48.0.txt +14 -0
  19. data/doc/release_notes/5.49.0.txt +59 -0
  20. data/doc/release_notes/5.50.0.txt +78 -0
  21. data/doc/release_notes/5.51.0.txt +47 -0
  22. data/doc/release_notes/5.52.0.txt +87 -0
  23. data/doc/release_notes/5.53.0.txt +23 -0
  24. data/doc/release_notes/5.54.0.txt +27 -0
  25. data/doc/release_notes/5.55.0.txt +21 -0
  26. data/doc/release_notes/5.56.0.txt +51 -0
  27. data/doc/release_notes/5.57.0.txt +23 -0
  28. data/doc/release_notes/5.58.0.txt +31 -0
  29. data/doc/release_notes/5.59.0.txt +73 -0
  30. data/doc/release_notes/5.60.0.txt +22 -0
  31. data/doc/release_notes/5.61.0.txt +43 -0
  32. data/doc/release_notes/5.62.0.txt +132 -0
  33. data/doc/release_notes/5.63.0.txt +33 -0
  34. data/doc/release_notes/5.64.0.txt +50 -0
  35. data/doc/release_notes/5.65.0.txt +21 -0
  36. data/doc/release_notes/5.66.0.txt +24 -0
  37. data/doc/release_notes/5.67.0.txt +32 -0
  38. data/doc/release_notes/5.68.0.txt +61 -0
  39. data/doc/release_notes/5.69.0.txt +26 -0
  40. data/doc/release_notes/5.70.0.txt +35 -0
  41. data/doc/release_notes/5.71.0.txt +21 -0
  42. data/doc/release_notes/5.72.0.txt +33 -0
  43. data/doc/release_notes/5.73.0.txt +66 -0
  44. data/doc/release_notes/5.74.0.txt +45 -0
  45. data/doc/release_notes/5.75.0.txt +35 -0
  46. data/doc/release_notes/5.76.0.txt +86 -0
  47. data/doc/release_notes/5.77.0.txt +63 -0
  48. data/doc/schema_modification.rdoc +1 -1
  49. data/doc/security.rdoc +9 -9
  50. data/doc/sharding.rdoc +3 -1
  51. data/doc/sql.rdoc +27 -15
  52. data/doc/testing.rdoc +23 -13
  53. data/doc/transactions.rdoc +6 -6
  54. data/doc/virtual_rows.rdoc +1 -1
  55. data/lib/sequel/adapters/ado/access.rb +1 -1
  56. data/lib/sequel/adapters/ado.rb +1 -1
  57. data/lib/sequel/adapters/amalgalite.rb +3 -5
  58. data/lib/sequel/adapters/ibmdb.rb +3 -3
  59. data/lib/sequel/adapters/jdbc/derby.rb +8 -0
  60. data/lib/sequel/adapters/jdbc/h2.rb +63 -10
  61. data/lib/sequel/adapters/jdbc/hsqldb.rb +8 -0
  62. data/lib/sequel/adapters/jdbc/postgresql.rb +7 -4
  63. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +15 -0
  64. data/lib/sequel/adapters/jdbc/sqlserver.rb +4 -0
  65. data/lib/sequel/adapters/jdbc.rb +24 -22
  66. data/lib/sequel/adapters/mysql.rb +92 -67
  67. data/lib/sequel/adapters/mysql2.rb +56 -51
  68. data/lib/sequel/adapters/odbc/mssql.rb +1 -1
  69. data/lib/sequel/adapters/odbc.rb +1 -1
  70. data/lib/sequel/adapters/oracle.rb +4 -3
  71. data/lib/sequel/adapters/postgres.rb +89 -45
  72. data/lib/sequel/adapters/shared/access.rb +11 -1
  73. data/lib/sequel/adapters/shared/db2.rb +42 -0
  74. data/lib/sequel/adapters/shared/mssql.rb +91 -10
  75. data/lib/sequel/adapters/shared/mysql.rb +78 -3
  76. data/lib/sequel/adapters/shared/oracle.rb +86 -7
  77. data/lib/sequel/adapters/shared/postgres.rb +576 -171
  78. data/lib/sequel/adapters/shared/sqlanywhere.rb +21 -5
  79. data/lib/sequel/adapters/shared/sqlite.rb +92 -8
  80. data/lib/sequel/adapters/sqlanywhere.rb +1 -1
  81. data/lib/sequel/adapters/sqlite.rb +99 -18
  82. data/lib/sequel/adapters/tinytds.rb +1 -1
  83. data/lib/sequel/adapters/trilogy.rb +117 -0
  84. data/lib/sequel/adapters/utils/columns_limit_1.rb +22 -0
  85. data/lib/sequel/adapters/utils/mysql_mysql2.rb +1 -1
  86. data/lib/sequel/ast_transformer.rb +6 -0
  87. data/lib/sequel/connection_pool/sharded_single.rb +5 -7
  88. data/lib/sequel/connection_pool/sharded_threaded.rb +16 -11
  89. data/lib/sequel/connection_pool/sharded_timed_queue.rb +374 -0
  90. data/lib/sequel/connection_pool/single.rb +6 -8
  91. data/lib/sequel/connection_pool/threaded.rb +14 -8
  92. data/lib/sequel/connection_pool/timed_queue.rb +270 -0
  93. data/lib/sequel/connection_pool.rb +57 -31
  94. data/lib/sequel/core.rb +17 -18
  95. data/lib/sequel/database/connecting.rb +27 -3
  96. data/lib/sequel/database/dataset.rb +16 -6
  97. data/lib/sequel/database/misc.rb +70 -14
  98. data/lib/sequel/database/query.rb +73 -2
  99. data/lib/sequel/database/schema_generator.rb +11 -6
  100. data/lib/sequel/database/schema_methods.rb +23 -4
  101. data/lib/sequel/database/transactions.rb +6 -0
  102. data/lib/sequel/dataset/actions.rb +111 -15
  103. data/lib/sequel/dataset/deprecated_singleton_class_methods.rb +42 -0
  104. data/lib/sequel/dataset/features.rb +20 -1
  105. data/lib/sequel/dataset/misc.rb +12 -2
  106. data/lib/sequel/dataset/placeholder_literalizer.rb +20 -9
  107. data/lib/sequel/dataset/query.rb +170 -41
  108. data/lib/sequel/dataset/sql.rb +190 -71
  109. data/lib/sequel/dataset.rb +4 -0
  110. data/lib/sequel/extensions/_model_pg_row.rb +0 -12
  111. data/lib/sequel/extensions/_pretty_table.rb +1 -1
  112. data/lib/sequel/extensions/any_not_empty.rb +2 -2
  113. data/lib/sequel/extensions/async_thread_pool.rb +14 -13
  114. data/lib/sequel/extensions/auto_cast_date_and_time.rb +94 -0
  115. data/lib/sequel/extensions/auto_literal_strings.rb +1 -1
  116. data/lib/sequel/extensions/connection_expiration.rb +15 -9
  117. data/lib/sequel/extensions/connection_validator.rb +16 -11
  118. data/lib/sequel/extensions/constraint_validations.rb +1 -1
  119. data/lib/sequel/extensions/core_refinements.rb +36 -11
  120. data/lib/sequel/extensions/date_arithmetic.rb +36 -8
  121. data/lib/sequel/extensions/date_parse_input_handler.rb +67 -0
  122. data/lib/sequel/extensions/datetime_parse_to_time.rb +5 -1
  123. data/lib/sequel/extensions/duplicate_columns_handler.rb +11 -10
  124. data/lib/sequel/extensions/index_caching.rb +5 -1
  125. data/lib/sequel/extensions/inflector.rb +1 -1
  126. data/lib/sequel/extensions/is_distinct_from.rb +141 -0
  127. data/lib/sequel/extensions/looser_typecasting.rb +3 -0
  128. data/lib/sequel/extensions/migration.rb +57 -15
  129. data/lib/sequel/extensions/named_timezones.rb +22 -6
  130. data/lib/sequel/extensions/pagination.rb +1 -1
  131. data/lib/sequel/extensions/pg_array.rb +33 -4
  132. data/lib/sequel/extensions/pg_array_ops.rb +2 -2
  133. data/lib/sequel/extensions/pg_auto_parameterize.rb +509 -0
  134. data/lib/sequel/extensions/pg_auto_parameterize_in_array.rb +110 -0
  135. data/lib/sequel/extensions/pg_enum.rb +1 -2
  136. data/lib/sequel/extensions/pg_extended_date_support.rb +39 -28
  137. data/lib/sequel/extensions/pg_extended_integer_support.rb +116 -0
  138. data/lib/sequel/extensions/pg_hstore.rb +6 -1
  139. data/lib/sequel/extensions/pg_hstore_ops.rb +53 -3
  140. data/lib/sequel/extensions/pg_inet.rb +10 -11
  141. data/lib/sequel/extensions/pg_inet_ops.rb +1 -1
  142. data/lib/sequel/extensions/pg_interval.rb +11 -11
  143. data/lib/sequel/extensions/pg_json.rb +13 -15
  144. data/lib/sequel/extensions/pg_json_ops.rb +125 -2
  145. data/lib/sequel/extensions/pg_multirange.rb +367 -0
  146. data/lib/sequel/extensions/pg_range.rb +13 -26
  147. data/lib/sequel/extensions/pg_range_ops.rb +37 -9
  148. data/lib/sequel/extensions/pg_row.rb +20 -19
  149. data/lib/sequel/extensions/pg_row_ops.rb +1 -1
  150. data/lib/sequel/extensions/pg_timestamptz.rb +27 -3
  151. data/lib/sequel/extensions/round_timestamps.rb +1 -1
  152. data/lib/sequel/extensions/s.rb +2 -1
  153. data/lib/sequel/extensions/schema_caching.rb +1 -1
  154. data/lib/sequel/extensions/schema_dumper.rb +45 -11
  155. data/lib/sequel/extensions/server_block.rb +10 -13
  156. data/lib/sequel/extensions/set_literalizer.rb +58 -0
  157. data/lib/sequel/extensions/sql_comments.rb +110 -3
  158. data/lib/sequel/extensions/sql_log_normalizer.rb +108 -0
  159. data/lib/sequel/extensions/sqlite_json_ops.rb +255 -0
  160. data/lib/sequel/extensions/string_agg.rb +1 -1
  161. data/lib/sequel/extensions/string_date_time.rb +19 -23
  162. data/lib/sequel/extensions/symbol_aref.rb +2 -0
  163. data/lib/sequel/extensions/transaction_connection_validator.rb +78 -0
  164. data/lib/sequel/model/associations.rb +286 -92
  165. data/lib/sequel/model/base.rb +53 -33
  166. data/lib/sequel/model/dataset_module.rb +3 -0
  167. data/lib/sequel/model/errors.rb +10 -1
  168. data/lib/sequel/model/exceptions.rb +15 -3
  169. data/lib/sequel/model/inflections.rb +1 -1
  170. data/lib/sequel/plugins/auto_restrict_eager_graph.rb +62 -0
  171. data/lib/sequel/plugins/auto_validations.rb +74 -16
  172. data/lib/sequel/plugins/class_table_inheritance.rb +2 -2
  173. data/lib/sequel/plugins/column_encryption.rb +29 -8
  174. data/lib/sequel/plugins/composition.rb +3 -2
  175. data/lib/sequel/plugins/concurrent_eager_loading.rb +4 -4
  176. data/lib/sequel/plugins/constraint_validations.rb +8 -5
  177. data/lib/sequel/plugins/defaults_setter.rb +16 -0
  178. data/lib/sequel/plugins/dirty.rb +1 -1
  179. data/lib/sequel/plugins/enum.rb +124 -0
  180. data/lib/sequel/plugins/finder.rb +4 -2
  181. data/lib/sequel/plugins/insert_conflict.rb +4 -0
  182. data/lib/sequel/plugins/instance_specific_default.rb +1 -1
  183. data/lib/sequel/plugins/json_serializer.rb +2 -2
  184. data/lib/sequel/plugins/lazy_attributes.rb +3 -0
  185. data/lib/sequel/plugins/list.rb +8 -3
  186. data/lib/sequel/plugins/many_through_many.rb +109 -10
  187. data/lib/sequel/plugins/mssql_optimistic_locking.rb +8 -38
  188. data/lib/sequel/plugins/nested_attributes.rb +4 -4
  189. data/lib/sequel/plugins/optimistic_locking.rb +9 -42
  190. data/lib/sequel/plugins/optimistic_locking_base.rb +55 -0
  191. data/lib/sequel/plugins/paged_operations.rb +181 -0
  192. data/lib/sequel/plugins/pg_array_associations.rb +46 -34
  193. data/lib/sequel/plugins/pg_auto_constraint_validations.rb +9 -3
  194. data/lib/sequel/plugins/pg_xmin_optimistic_locking.rb +109 -0
  195. data/lib/sequel/plugins/prepared_statements.rb +12 -2
  196. data/lib/sequel/plugins/prepared_statements_safe.rb +2 -1
  197. data/lib/sequel/plugins/primary_key_lookup_check_values.rb +154 -0
  198. data/lib/sequel/plugins/rcte_tree.rb +7 -4
  199. data/lib/sequel/plugins/require_valid_schema.rb +67 -0
  200. data/lib/sequel/plugins/serialization.rb +1 -0
  201. data/lib/sequel/plugins/serialization_modification_detection.rb +1 -0
  202. data/lib/sequel/plugins/single_table_inheritance.rb +8 -0
  203. data/lib/sequel/plugins/sql_comments.rb +189 -0
  204. data/lib/sequel/plugins/static_cache.rb +39 -1
  205. data/lib/sequel/plugins/static_cache_cache.rb +5 -1
  206. data/lib/sequel/plugins/subclasses.rb +28 -11
  207. data/lib/sequel/plugins/tactical_eager_loading.rb +23 -10
  208. data/lib/sequel/plugins/timestamps.rb +1 -1
  209. data/lib/sequel/plugins/unused_associations.rb +521 -0
  210. data/lib/sequel/plugins/update_or_create.rb +1 -1
  211. data/lib/sequel/plugins/validate_associated.rb +22 -12
  212. data/lib/sequel/plugins/validation_helpers.rb +41 -11
  213. data/lib/sequel/plugins/validation_helpers_generic_type_messages.rb +73 -0
  214. data/lib/sequel/plugins/xml_serializer.rb +1 -1
  215. data/lib/sequel/sql.rb +1 -1
  216. data/lib/sequel/timezones.rb +12 -14
  217. data/lib/sequel/version.rb +1 -1
  218. metadata +109 -19
@@ -66,18 +66,19 @@ module Sequel
66
66
  # integer: "is not a number"
67
67
  #
68
68
  # Note that if you want to support internationalization of Errors#full_messages,
69
- # you need to override the method. Here's an example:
69
+ # it is easiest to override Errors#full_message (note singular form and not plural form).
70
+ # Here's an example:
70
71
  #
71
72
  # class Sequel::Model::Errors
72
- # def full_messages
73
- # inject([]) do |m, kv|
74
- # att, errors = *kv
75
- # att.is_a?(Array) ? Array(att).map!{|v| I18n.t("attributes.#{v}")} : att = I18n.t("attributes.#{att}")
76
- # errors.each {|e| m << (e.is_a?(LiteralString) ? e : "#{Array(att).join(I18n.t('errors.joiner'))} #{e}")}
77
- # m
78
- # end
73
+ # private
74
+ # def full_message(attribute, error_msg)
75
+ # "#{Array(attribute).join(I18n.t('errors.joiner'))} #{error_msg}"
79
76
  # end
80
77
  # end
78
+ #
79
+ # It is recommended that users of this plugin that use validates_schema_types also use
80
+ # the validation_helpers_generic_type_messages plugin for more useful type validation
81
+ # failure messages.
81
82
  module ValidationHelpers
82
83
  DEFAULT_OPTIONS = {
83
84
  :exact_length=>{:message=>lambda{|exact| "is not #{exact} characters"}},
@@ -86,8 +87,11 @@ module Sequel
86
87
  :integer=>{:message=>lambda{"is not a number"}},
87
88
  :length_range=>{:message=>lambda{|range| "is too short or too long"}},
88
89
  :max_length=>{:message=>lambda{|max| "is longer than #{max} characters"}, :nil_message=>lambda{"is not present"}},
90
+ :max_value=>{:message=>lambda{|max| "is greater than maximum allowed value"}},
89
91
  :min_length=>{:message=>lambda{|min| "is shorter than #{min} characters"}},
92
+ :min_value=>{:message=>lambda{|min| "is less than minimum allowed value"}},
90
93
  :not_null=>{:message=>lambda{"is not present"}},
94
+ :no_null_byte=>{:message=>lambda{"contains a null byte"}},
91
95
  :numeric=>{:message=>lambda{"is not a number"}},
92
96
  :operator=>{:message=>lambda{|operator, rhs| "is not #{operator} #{rhs}"}},
93
97
  :type=>{:message=>lambda{|klass| klass.is_a?(Array) ? "is not a valid #{klass.join(" or ").downcase}" : "is not a valid #{klass.to_s.downcase}"}},
@@ -143,15 +147,38 @@ module Sequel
143
147
  end
144
148
  end
145
149
 
150
+ # Check that the attribute values are not greater that the given maximum value.
151
+ # Does not perform validation if attribute value is nil.
152
+ # You should only call this if you have checked the attribute value has the expected type.
153
+ def validates_max_value(max, atts, opts=OPTS)
154
+ validatable_attributes_for_type(:max_value, atts, opts) do |a,v,m|
155
+ validation_error_message(m, max) if !v.nil? && v > max
156
+ end
157
+ end
158
+
146
159
  # Check that the attribute values are not shorter than the given min length.
147
160
  def validates_min_length(min, atts, opts=OPTS)
148
161
  validatable_attributes_for_type(:min_length, atts, opts){|a,v,m| validation_error_message(m, min) if v.nil? || v.length < min}
149
162
  end
150
163
 
164
+ # Check that the attribute values are not less that the given minimum value.
165
+ # Does not perform validation if attribute value is nil.
166
+ # You should only call this if you have checked the attribute value has the expected type.
167
+ def validates_min_value(min, atts, opts=OPTS)
168
+ validatable_attributes_for_type(:min_value, atts, opts) do |a,v,m|
169
+ validation_error_message(m, min) if !v.nil? && v < min
170
+ end
171
+ end
172
+
151
173
  # Check attribute value(s) are not NULL/nil.
152
174
  def validates_not_null(atts, opts=OPTS)
153
175
  validatable_attributes_for_type(:not_null, atts, opts){|a,v,m| validation_error_message(m) if v.nil?}
154
176
  end
177
+
178
+ # Check attribute value(s) does not contain a null ("\0", ASCII NUL) byte.
179
+ def validates_no_null_byte(atts, opts=OPTS)
180
+ validatable_attributes_for_type(:no_null_byte, atts, opts){|a,v,m| validation_error_message(m) if String === v && v.include?("\0")}
181
+ end
155
182
 
156
183
  # Check attribute value(s) string representation is a valid float.
157
184
  def validates_numeric(atts, opts=OPTS)
@@ -188,7 +215,7 @@ module Sequel
188
215
  klass = klass.to_s.constantize if klass.is_a?(String) || klass.is_a?(Symbol)
189
216
  validatable_attributes_for_type(:type, atts, opts) do |a,v,m|
190
217
  if klass.is_a?(Array) ? !klass.any?{|kls| v.is_a?(kls)} : !v.is_a?(klass)
191
- validation_error_message(m, klass)
218
+ validates_type_error_message(m, klass)
192
219
  end
193
220
  end
194
221
  end
@@ -263,12 +290,12 @@ module Sequel
263
290
  next if vals.any?(&:nil?)
264
291
  ds.where(arr.zip(vals))
265
292
  end
266
- ds = yield(ds) if block_given?
293
+ ds = yield(ds) if defined?(yield)
267
294
  unless new?
268
295
  h = ds.joined_dataset? ? qualified_pk_hash : pk_hash
269
296
  ds = ds.exclude(h)
270
297
  end
271
- errors.add(a, message) unless ds.count == 0
298
+ errors.add(a, message) unless ds.empty?
272
299
  end
273
300
  end
274
301
 
@@ -315,6 +342,9 @@ module Sequel
315
342
  def validation_error_message(message, *args)
316
343
  message.is_a?(Proc) ? message.call(*args) : message
317
344
  end
345
+
346
+ # The validation error message for type validations, for the given class.
347
+ alias validates_type_error_message validation_error_message
318
348
  end
319
349
  end
320
350
  end
@@ -0,0 +1,73 @@
1
+ # frozen-string-literal: true
2
+
3
+ require_relative 'validation_helpers'
4
+
5
+ module Sequel
6
+ module Plugins
7
+ # The validation_helpers_generic_type_messages plugin overrides the default
8
+ # type validation failure messages in the validation_helpers plugin to be
9
+ # more generic and understandable by the average user, instead of always
10
+ # be based on the names of the allowed classes for the type. For example:
11
+ #
12
+ # # :blob type
13
+ # # validation_helpers default: "value is not a valid sequel::sql::blob"
14
+ # # with this plugin: "value is not a blob"
15
+ #
16
+ # # :boolean type
17
+ # # validation_helpers default: "value is not a valid trueclass or falseclass"
18
+ # # with this plugin: "value is not true or false"
19
+ #
20
+ # # :datetime type
21
+ # # validation_helpers default: "value is not a valid time or datetime"
22
+ # # with this plugin: "value is not a valid timestamp"
23
+ #
24
+ # # custom/database-specific types
25
+ # # validation_helpers default: "value is not a valid sequel::class_name"
26
+ # # with this plugin: "value is not the expected type"
27
+ #
28
+ # It is expected that this plugin will become the default behavior of
29
+ # validation_helpers in Sequel 6.
30
+ #
31
+ # To enable this the use of generic type messages for all models, load this
32
+ # plugin into Sequel::Model.
33
+ #
34
+ # Sequel::Model.plugin :validation_helpers_generic_type_messages
35
+ module ValidationHelpersGenericTypeMessages
36
+ OVERRIDE_PROC = ValidationHelpers::DEFAULT_OPTIONS[:type][:message]
37
+ private_constant :OVERRIDE_PROC
38
+
39
+ TYPE_ERROR_STRINGS = {
40
+ String => 'is not a string'.freeze,
41
+ Integer => 'is not an integer'.freeze,
42
+ Date => 'is not a valid date'.freeze,
43
+ [Time, DateTime].freeze => 'is not a valid timestamp'.freeze,
44
+ Sequel::SQLTime => 'is not a valid time'.freeze,
45
+ [TrueClass, FalseClass].freeze => 'is not true or false'.freeze,
46
+ Float => 'is not a number'.freeze,
47
+ BigDecimal => 'is not a number'.freeze,
48
+ Sequel::SQL::Blob => 'is not a blob'.freeze,
49
+ }
50
+ TYPE_ERROR_STRINGS.default = "is not the expected type".freeze
51
+ TYPE_ERROR_STRINGS.freeze
52
+ private_constant :TYPE_ERROR_STRINGS
53
+
54
+ def self.apply(mod)
55
+ mod.plugin :validation_helpers
56
+ end
57
+
58
+ module InstanceMethods
59
+ private
60
+
61
+ # Use a generic error message for type validations.
62
+ def validates_type_error_message(m, klass)
63
+ # SEQUEL6: Make this the default behavior in validation_helpers
64
+ if OVERRIDE_PROC.equal?(m)
65
+ TYPE_ERROR_STRINGS[klass]
66
+ else
67
+ super
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -359,7 +359,7 @@ module Sequel
359
359
  else
360
360
  Array(inc).each{|i| to_xml_include(x1, i)}
361
361
  end
362
- yield x1 if block_given?
362
+ yield x1 if defined?(yield)
363
363
  end
364
364
  x.to_xml
365
365
  end
data/lib/sequel/sql.rb CHANGED
@@ -467,7 +467,7 @@ module Sequel
467
467
  #
468
468
  # Sequel[1] - :a # SQL: (1 - a)
469
469
  def expr(arg=(no_arg=true), &block)
470
- if block_given?
470
+ if defined?(yield)
471
471
  if no_arg
472
472
  return expr(block)
473
473
  else
@@ -82,22 +82,20 @@ module Sequel
82
82
  # +application_timezone+ using +convert_input_timestamp+ and
83
83
  # +convert_output_timestamp+.
84
84
  def convert_timestamp(v, input_timezone)
85
- begin
86
- if v.is_a?(Date) && !v.is_a?(DateTime)
87
- # Dates handled specially as they are assumed to already be in the application_timezone
88
- if datetime_class == DateTime
89
- DateTime.civil(v.year, v.month, v.day, 0, 0, 0, application_timezone == :local ? Rational(Time.local(v.year, v.month, v.day).utc_offset, 86400) : 0)
90
- else
91
- Time.public_send(application_timezone == :utc ? :utc : :local, v.year, v.month, v.day)
92
- end
85
+ if v.is_a?(Date) && !v.is_a?(DateTime)
86
+ # Dates handled specially as they are assumed to already be in the application_timezone
87
+ if datetime_class == DateTime
88
+ DateTime.civil(v.year, v.month, v.day, 0, 0, 0, application_timezone == :local ? Rational(Time.local(v.year, v.month, v.day).utc_offset, 86400) : 0)
93
89
  else
94
- convert_output_timestamp(convert_input_timestamp(v, input_timezone), application_timezone)
90
+ Time.public_send(application_timezone == :utc ? :utc : :local, v.year, v.month, v.day)
95
91
  end
96
- rescue InvalidValue
97
- raise
98
- rescue => e
99
- raise convert_exception_class(e, InvalidValue)
92
+ else
93
+ convert_output_timestamp(convert_input_timestamp(v, input_timezone), application_timezone)
100
94
  end
95
+ rescue InvalidValue
96
+ raise
97
+ rescue => e
98
+ raise convert_exception_class(e, InvalidValue)
101
99
  end
102
100
 
103
101
  # Convert the given object into an object of <tt>Sequel.datetime_class</tt> in the
@@ -158,7 +156,7 @@ module Sequel
158
156
  case v
159
157
  when String
160
158
  v2 = Sequel.string_to_datetime(v)
161
- if !input_timezone || Date._parse(v).has_key?(:offset)
159
+ if !input_timezone || _date_parse(v).has_key?(:offset)
162
160
  v2
163
161
  else
164
162
  # Correct for potentially wrong offset if string doesn't include offset
@@ -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 = 45
9
+ MINOR = 77
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,45 +1,45 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequel
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.45.0
4
+ version: 5.77.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Evans
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-01 00:00:00.000000000 Z
11
+ date: 2024-02-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: minitest
14
+ name: bigdecimal
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 5.7.0
20
- type: :development
19
+ version: '0'
20
+ type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 5.7.0
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: minitest-hooks
28
+ name: minitest
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 5.7.0
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: 5.7.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: minitest-global_expectations
42
+ name: minitest-hooks
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: minitest-shared_description
56
+ name: minitest-global_expectations
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -189,9 +189,41 @@ extra_rdoc_files:
189
189
  - doc/release_notes/5.43.0.txt
190
190
  - doc/release_notes/5.44.0.txt
191
191
  - doc/release_notes/5.45.0.txt
192
+ - doc/release_notes/5.46.0.txt
193
+ - doc/release_notes/5.47.0.txt
194
+ - doc/release_notes/5.48.0.txt
195
+ - doc/release_notes/5.49.0.txt
192
196
  - doc/release_notes/5.5.0.txt
197
+ - doc/release_notes/5.50.0.txt
198
+ - doc/release_notes/5.51.0.txt
199
+ - doc/release_notes/5.52.0.txt
200
+ - doc/release_notes/5.53.0.txt
201
+ - doc/release_notes/5.54.0.txt
202
+ - doc/release_notes/5.55.0.txt
203
+ - doc/release_notes/5.56.0.txt
204
+ - doc/release_notes/5.57.0.txt
205
+ - doc/release_notes/5.58.0.txt
206
+ - doc/release_notes/5.59.0.txt
193
207
  - doc/release_notes/5.6.0.txt
208
+ - doc/release_notes/5.60.0.txt
209
+ - doc/release_notes/5.61.0.txt
210
+ - doc/release_notes/5.62.0.txt
211
+ - doc/release_notes/5.63.0.txt
212
+ - doc/release_notes/5.64.0.txt
213
+ - doc/release_notes/5.65.0.txt
214
+ - doc/release_notes/5.66.0.txt
215
+ - doc/release_notes/5.67.0.txt
216
+ - doc/release_notes/5.68.0.txt
217
+ - doc/release_notes/5.69.0.txt
194
218
  - doc/release_notes/5.7.0.txt
219
+ - doc/release_notes/5.70.0.txt
220
+ - doc/release_notes/5.71.0.txt
221
+ - doc/release_notes/5.72.0.txt
222
+ - doc/release_notes/5.73.0.txt
223
+ - doc/release_notes/5.74.0.txt
224
+ - doc/release_notes/5.75.0.txt
225
+ - doc/release_notes/5.76.0.txt
226
+ - doc/release_notes/5.77.0.txt
195
227
  - doc/release_notes/5.8.0.txt
196
228
  - doc/release_notes/5.9.0.txt
197
229
  files:
@@ -262,9 +294,41 @@ files:
262
294
  - doc/release_notes/5.43.0.txt
263
295
  - doc/release_notes/5.44.0.txt
264
296
  - doc/release_notes/5.45.0.txt
297
+ - doc/release_notes/5.46.0.txt
298
+ - doc/release_notes/5.47.0.txt
299
+ - doc/release_notes/5.48.0.txt
300
+ - doc/release_notes/5.49.0.txt
265
301
  - doc/release_notes/5.5.0.txt
302
+ - doc/release_notes/5.50.0.txt
303
+ - doc/release_notes/5.51.0.txt
304
+ - doc/release_notes/5.52.0.txt
305
+ - doc/release_notes/5.53.0.txt
306
+ - doc/release_notes/5.54.0.txt
307
+ - doc/release_notes/5.55.0.txt
308
+ - doc/release_notes/5.56.0.txt
309
+ - doc/release_notes/5.57.0.txt
310
+ - doc/release_notes/5.58.0.txt
311
+ - doc/release_notes/5.59.0.txt
266
312
  - doc/release_notes/5.6.0.txt
313
+ - doc/release_notes/5.60.0.txt
314
+ - doc/release_notes/5.61.0.txt
315
+ - doc/release_notes/5.62.0.txt
316
+ - doc/release_notes/5.63.0.txt
317
+ - doc/release_notes/5.64.0.txt
318
+ - doc/release_notes/5.65.0.txt
319
+ - doc/release_notes/5.66.0.txt
320
+ - doc/release_notes/5.67.0.txt
321
+ - doc/release_notes/5.68.0.txt
322
+ - doc/release_notes/5.69.0.txt
267
323
  - doc/release_notes/5.7.0.txt
324
+ - doc/release_notes/5.70.0.txt
325
+ - doc/release_notes/5.71.0.txt
326
+ - doc/release_notes/5.72.0.txt
327
+ - doc/release_notes/5.73.0.txt
328
+ - doc/release_notes/5.74.0.txt
329
+ - doc/release_notes/5.75.0.txt
330
+ - doc/release_notes/5.76.0.txt
331
+ - doc/release_notes/5.77.0.txt
268
332
  - doc/release_notes/5.8.0.txt
269
333
  - doc/release_notes/5.9.0.txt
270
334
  - doc/schema_modification.rdoc
@@ -317,6 +381,8 @@ files:
317
381
  - lib/sequel/adapters/sqlanywhere.rb
318
382
  - lib/sequel/adapters/sqlite.rb
319
383
  - lib/sequel/adapters/tinytds.rb
384
+ - lib/sequel/adapters/trilogy.rb
385
+ - lib/sequel/adapters/utils/columns_limit_1.rb
320
386
  - lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb
321
387
  - lib/sequel/adapters/utils/emulate_offset_with_row_number.rb
322
388
  - lib/sequel/adapters/utils/mysql_mysql2.rb
@@ -329,8 +395,10 @@ files:
329
395
  - lib/sequel/connection_pool.rb
330
396
  - lib/sequel/connection_pool/sharded_single.rb
331
397
  - lib/sequel/connection_pool/sharded_threaded.rb
398
+ - lib/sequel/connection_pool/sharded_timed_queue.rb
332
399
  - lib/sequel/connection_pool/single.rb
333
400
  - lib/sequel/connection_pool/threaded.rb
401
+ - lib/sequel/connection_pool/timed_queue.rb
334
402
  - lib/sequel/core.rb
335
403
  - lib/sequel/database.rb
336
404
  - lib/sequel/database/connecting.rb
@@ -346,6 +414,7 @@ files:
346
414
  - lib/sequel/dataset.rb
347
415
  - lib/sequel/dataset/actions.rb
348
416
  - lib/sequel/dataset/dataset_module.rb
417
+ - lib/sequel/dataset/deprecated_singleton_class_methods.rb
349
418
  - lib/sequel/dataset/features.rb
350
419
  - lib/sequel/dataset/graph.rb
351
420
  - lib/sequel/dataset/misc.rb
@@ -361,6 +430,7 @@ files:
361
430
  - lib/sequel/extensions/any_not_empty.rb
362
431
  - lib/sequel/extensions/arbitrary_servers.rb
363
432
  - lib/sequel/extensions/async_thread_pool.rb
433
+ - lib/sequel/extensions/auto_cast_date_and_time.rb
364
434
  - lib/sequel/extensions/auto_literal_strings.rb
365
435
  - lib/sequel/extensions/blank.rb
366
436
  - lib/sequel/extensions/caller_logging.rb
@@ -374,6 +444,7 @@ files:
374
444
  - lib/sequel/extensions/current_datetime_timestamp.rb
375
445
  - lib/sequel/extensions/dataset_source_alias.rb
376
446
  - lib/sequel/extensions/date_arithmetic.rb
447
+ - lib/sequel/extensions/date_parse_input_handler.rb
377
448
  - lib/sequel/extensions/datetime_parse_to_time.rb
378
449
  - lib/sequel/extensions/duplicate_columns_handler.rb
379
450
  - lib/sequel/extensions/empty_array_consider_nulls.rb
@@ -390,6 +461,7 @@ files:
390
461
  - lib/sequel/extensions/index_caching.rb
391
462
  - lib/sequel/extensions/inflector.rb
392
463
  - lib/sequel/extensions/integer64.rb
464
+ - lib/sequel/extensions/is_distinct_from.rb
393
465
  - lib/sequel/extensions/looser_typecasting.rb
394
466
  - lib/sequel/extensions/migration.rb
395
467
  - lib/sequel/extensions/mssql_emulate_lateral_with_apply.rb
@@ -399,8 +471,11 @@ files:
399
471
  - lib/sequel/extensions/pagination.rb
400
472
  - lib/sequel/extensions/pg_array.rb
401
473
  - lib/sequel/extensions/pg_array_ops.rb
474
+ - lib/sequel/extensions/pg_auto_parameterize.rb
475
+ - lib/sequel/extensions/pg_auto_parameterize_in_array.rb
402
476
  - lib/sequel/extensions/pg_enum.rb
403
477
  - lib/sequel/extensions/pg_extended_date_support.rb
478
+ - lib/sequel/extensions/pg_extended_integer_support.rb
404
479
  - lib/sequel/extensions/pg_hstore.rb
405
480
  - lib/sequel/extensions/pg_hstore_ops.rb
406
481
  - lib/sequel/extensions/pg_inet.rb
@@ -409,6 +484,7 @@ files:
409
484
  - lib/sequel/extensions/pg_json.rb
410
485
  - lib/sequel/extensions/pg_json_ops.rb
411
486
  - lib/sequel/extensions/pg_loose_count.rb
487
+ - lib/sequel/extensions/pg_multirange.rb
412
488
  - lib/sequel/extensions/pg_range.rb
413
489
  - lib/sequel/extensions/pg_range_ops.rb
414
490
  - lib/sequel/extensions/pg_row.rb
@@ -426,9 +502,12 @@ files:
426
502
  - lib/sequel/extensions/sequel_4_dataset_methods.rb
427
503
  - lib/sequel/extensions/server_block.rb
428
504
  - lib/sequel/extensions/server_logging.rb
505
+ - lib/sequel/extensions/set_literalizer.rb
429
506
  - lib/sequel/extensions/split_array_nil.rb
430
507
  - lib/sequel/extensions/sql_comments.rb
431
508
  - lib/sequel/extensions/sql_expr.rb
509
+ - lib/sequel/extensions/sql_log_normalizer.rb
510
+ - lib/sequel/extensions/sqlite_json_ops.rb
432
511
  - lib/sequel/extensions/string_agg.rb
433
512
  - lib/sequel/extensions/string_date_time.rb
434
513
  - lib/sequel/extensions/symbol_aref.rb
@@ -438,6 +517,7 @@ files:
438
517
  - lib/sequel/extensions/synchronize_sql.rb
439
518
  - lib/sequel/extensions/thread_local_timezones.rb
440
519
  - lib/sequel/extensions/to_dot.rb
520
+ - lib/sequel/extensions/transaction_connection_validator.rb
441
521
  - lib/sequel/extensions/virtual_row_method_block.rb
442
522
  - lib/sequel/model.rb
443
523
  - lib/sequel/model/associations.rb
@@ -457,6 +537,7 @@ files:
457
537
  - lib/sequel/plugins/association_pks.rb
458
538
  - lib/sequel/plugins/association_proxies.rb
459
539
  - lib/sequel/plugins/async_thread_pool.rb
540
+ - lib/sequel/plugins/auto_restrict_eager_graph.rb
460
541
  - lib/sequel/plugins/auto_validations.rb
461
542
  - lib/sequel/plugins/auto_validations_constraint_validations_presence_message.rb
462
543
  - lib/sequel/plugins/before_after_save.rb
@@ -481,6 +562,7 @@ files:
481
562
  - lib/sequel/plugins/eager_each.rb
482
563
  - lib/sequel/plugins/eager_graph_eager.rb
483
564
  - lib/sequel/plugins/empty_failure_backtraces.rb
565
+ - lib/sequel/plugins/enum.rb
484
566
  - lib/sequel/plugins/error_splitter.rb
485
567
  - lib/sequel/plugins/finder.rb
486
568
  - lib/sequel/plugins/forbid_lazy_load.rb
@@ -501,12 +583,17 @@ files:
501
583
  - lib/sequel/plugins/mssql_optimistic_locking.rb
502
584
  - lib/sequel/plugins/nested_attributes.rb
503
585
  - lib/sequel/plugins/optimistic_locking.rb
586
+ - lib/sequel/plugins/optimistic_locking_base.rb
587
+ - lib/sequel/plugins/paged_operations.rb
504
588
  - lib/sequel/plugins/pg_array_associations.rb
505
589
  - lib/sequel/plugins/pg_auto_constraint_validations.rb
506
590
  - lib/sequel/plugins/pg_row.rb
591
+ - lib/sequel/plugins/pg_xmin_optimistic_locking.rb
507
592
  - lib/sequel/plugins/prepared_statements.rb
508
593
  - lib/sequel/plugins/prepared_statements_safe.rb
594
+ - lib/sequel/plugins/primary_key_lookup_check_values.rb
509
595
  - lib/sequel/plugins/rcte_tree.rb
596
+ - lib/sequel/plugins/require_valid_schema.rb
510
597
  - lib/sequel/plugins/serialization.rb
511
598
  - lib/sequel/plugins/serialization_modification_detection.rb
512
599
  - lib/sequel/plugins/sharding.rb
@@ -515,6 +602,7 @@ files:
515
602
  - lib/sequel/plugins/skip_create_refresh.rb
516
603
  - lib/sequel/plugins/skip_saving_columns.rb
517
604
  - lib/sequel/plugins/split_values.rb
605
+ - lib/sequel/plugins/sql_comments.rb
518
606
  - lib/sequel/plugins/static_cache.rb
519
607
  - lib/sequel/plugins/static_cache_cache.rb
520
608
  - lib/sequel/plugins/string_stripper.rb
@@ -528,6 +616,7 @@ files:
528
616
  - lib/sequel/plugins/tree.rb
529
617
  - lib/sequel/plugins/typecast_on_load.rb
530
618
  - lib/sequel/plugins/unlimited_update.rb
619
+ - lib/sequel/plugins/unused_associations.rb
531
620
  - lib/sequel/plugins/update_or_create.rb
532
621
  - lib/sequel/plugins/update_primary_key.rb
533
622
  - lib/sequel/plugins/update_refresh.rb
@@ -536,21 +625,22 @@ files:
536
625
  - lib/sequel/plugins/validation_class_methods.rb
537
626
  - lib/sequel/plugins/validation_contexts.rb
538
627
  - lib/sequel/plugins/validation_helpers.rb
628
+ - lib/sequel/plugins/validation_helpers_generic_type_messages.rb
539
629
  - lib/sequel/plugins/whitelist_security.rb
540
630
  - lib/sequel/plugins/xml_serializer.rb
541
631
  - lib/sequel/sql.rb
542
632
  - lib/sequel/timezones.rb
543
633
  - lib/sequel/version.rb
544
- homepage: http://sequel.jeremyevans.net
634
+ homepage: https://sequel.jeremyevans.net
545
635
  licenses:
546
636
  - MIT
547
637
  metadata:
548
638
  bug_tracker_uri: https://github.com/jeremyevans/sequel/issues
549
- changelog_uri: http://sequel.jeremyevans.net/rdoc/files/CHANGELOG.html
550
- documentation_uri: http://sequel.jeremyevans.net/documentation.html
551
- mailing_list_uri: https://groups.google.com/forum/#!forum/sequel-talk
639
+ changelog_uri: https://sequel.jeremyevans.net/rdoc/files/CHANGELOG.html
640
+ documentation_uri: https://sequel.jeremyevans.net/documentation.html
641
+ mailing_list_uri: https://github.com/jeremyevans/sequel/discussions
552
642
  source_code_uri: https://github.com/jeremyevans/sequel
553
- post_install_message:
643
+ post_install_message:
554
644
  rdoc_options:
555
645
  - "--quiet"
556
646
  - "--line-numbers"
@@ -572,8 +662,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
572
662
  - !ruby/object:Gem::Version
573
663
  version: '0'
574
664
  requirements: []
575
- rubygems_version: 3.2.15
576
- signing_key:
665
+ rubygems_version: 3.5.3
666
+ signing_key:
577
667
  specification_version: 4
578
668
  summary: The Database Toolkit for Ruby
579
669
  test_files: []