sequel 5.31.0 → 5.36.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (98) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +90 -0
  3. data/README.rdoc +1 -1
  4. data/doc/advanced_associations.rdoc +4 -4
  5. data/doc/association_basics.rdoc +10 -5
  6. data/doc/code_order.rdoc +12 -2
  7. data/doc/dataset_filtering.rdoc +2 -2
  8. data/doc/model_dataset_method_design.rdoc +1 -1
  9. data/doc/model_plugins.rdoc +1 -1
  10. data/doc/release_notes/5.32.0.txt +46 -0
  11. data/doc/release_notes/5.33.0.txt +24 -0
  12. data/doc/release_notes/5.34.0.txt +40 -0
  13. data/doc/release_notes/5.35.0.txt +56 -0
  14. data/doc/release_notes/5.36.0.txt +60 -0
  15. data/doc/testing.rdoc +1 -0
  16. data/doc/validations.rdoc +1 -1
  17. data/lib/sequel/adapters/odbc.rb +4 -6
  18. data/lib/sequel/adapters/oracle.rb +2 -1
  19. data/lib/sequel/adapters/shared/access.rb +6 -6
  20. data/lib/sequel/adapters/shared/mssql.rb +19 -9
  21. data/lib/sequel/adapters/shared/mysql.rb +9 -9
  22. data/lib/sequel/adapters/shared/oracle.rb +28 -22
  23. data/lib/sequel/adapters/shared/postgres.rb +57 -9
  24. data/lib/sequel/adapters/shared/sqlanywhere.rb +9 -9
  25. data/lib/sequel/adapters/shared/sqlite.rb +14 -3
  26. data/lib/sequel/adapters/tinytds.rb +1 -0
  27. data/lib/sequel/adapters/utils/mysql_mysql2.rb +1 -0
  28. data/lib/sequel/connection_pool/sharded_single.rb +4 -1
  29. data/lib/sequel/connection_pool/sharded_threaded.rb +12 -12
  30. data/lib/sequel/connection_pool/single.rb +1 -1
  31. data/lib/sequel/connection_pool/threaded.rb +2 -2
  32. data/lib/sequel/core.rb +318 -314
  33. data/lib/sequel/database/connecting.rb +1 -1
  34. data/lib/sequel/database/misc.rb +16 -10
  35. data/lib/sequel/database/query.rb +3 -1
  36. data/lib/sequel/database/schema_generator.rb +0 -1
  37. data/lib/sequel/database/schema_methods.rb +15 -16
  38. data/lib/sequel/database/transactions.rb +8 -5
  39. data/lib/sequel/dataset/placeholder_literalizer.rb +3 -7
  40. data/lib/sequel/dataset/query.rb +5 -4
  41. data/lib/sequel/deprecated.rb +3 -1
  42. data/lib/sequel/exceptions.rb +2 -0
  43. data/lib/sequel/extensions/_pretty_table.rb +1 -2
  44. data/lib/sequel/extensions/columns_introspection.rb +1 -2
  45. data/lib/sequel/extensions/connection_expiration.rb +2 -2
  46. data/lib/sequel/extensions/connection_validator.rb +2 -2
  47. data/lib/sequel/extensions/core_refinements.rb +2 -0
  48. data/lib/sequel/extensions/duplicate_columns_handler.rb +2 -0
  49. data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
  50. data/lib/sequel/extensions/index_caching.rb +9 -7
  51. data/lib/sequel/extensions/integer64.rb +2 -0
  52. data/lib/sequel/extensions/migration.rb +1 -1
  53. data/lib/sequel/extensions/pg_array_ops.rb +4 -0
  54. data/lib/sequel/extensions/pg_enum.rb +2 -0
  55. data/lib/sequel/extensions/pg_extended_date_support.rb +1 -1
  56. data/lib/sequel/extensions/pg_hstore_ops.rb +2 -0
  57. data/lib/sequel/extensions/pg_inet.rb +15 -5
  58. data/lib/sequel/extensions/pg_interval.rb +2 -0
  59. data/lib/sequel/extensions/pg_json_ops.rb +46 -2
  60. data/lib/sequel/extensions/pg_range.rb +5 -7
  61. data/lib/sequel/extensions/pg_range_ops.rb +2 -0
  62. data/lib/sequel/extensions/pg_row.rb +0 -1
  63. data/lib/sequel/extensions/pg_timestamptz.rb +2 -0
  64. data/lib/sequel/extensions/query.rb +1 -0
  65. data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
  66. data/lib/sequel/extensions/s.rb +2 -0
  67. data/lib/sequel/extensions/server_block.rb +3 -3
  68. data/lib/sequel/extensions/symbol_aref_refinement.rb +2 -0
  69. data/lib/sequel/extensions/symbol_as_refinement.rb +2 -0
  70. data/lib/sequel/extensions/to_dot.rb +9 -3
  71. data/lib/sequel/model.rb +3 -1
  72. data/lib/sequel/model/associations.rb +54 -25
  73. data/lib/sequel/model/base.rb +60 -51
  74. data/lib/sequel/model/plugins.rb +4 -3
  75. data/lib/sequel/plugins/association_lazy_eager_option.rb +2 -0
  76. data/lib/sequel/plugins/association_multi_add_remove.rb +2 -0
  77. data/lib/sequel/plugins/association_pks.rb +60 -18
  78. data/lib/sequel/plugins/association_proxies.rb +3 -0
  79. data/lib/sequel/plugins/blacklist_security.rb +1 -2
  80. data/lib/sequel/plugins/boolean_subsets.rb +4 -1
  81. data/lib/sequel/plugins/class_table_inheritance.rb +28 -28
  82. data/lib/sequel/plugins/csv_serializer.rb +2 -0
  83. data/lib/sequel/plugins/dirty.rb +13 -13
  84. data/lib/sequel/plugins/forbid_lazy_load.rb +2 -0
  85. data/lib/sequel/plugins/instance_specific_default.rb +113 -0
  86. data/lib/sequel/plugins/json_serializer.rb +3 -7
  87. data/lib/sequel/plugins/lazy_attributes.rb +1 -1
  88. data/lib/sequel/plugins/pg_array_associations.rb +2 -3
  89. data/lib/sequel/plugins/prepared_statements.rb +5 -11
  90. data/lib/sequel/plugins/prepared_statements_safe.rb +1 -3
  91. data/lib/sequel/plugins/rcte_tree.rb +10 -16
  92. data/lib/sequel/plugins/single_table_inheritance.rb +15 -15
  93. data/lib/sequel/plugins/string_stripper.rb +1 -1
  94. data/lib/sequel/plugins/subclasses.rb +2 -0
  95. data/lib/sequel/plugins/validation_class_methods.rb +5 -1
  96. data/lib/sequel/timezones.rb +6 -4
  97. data/lib/sequel/version.rb +1 -1
  98. metadata +15 -2
@@ -82,11 +82,13 @@ module Sequel
82
82
  end
83
83
  END
84
84
  else
85
+ # :nocov:
85
86
  # :nodoc:
86
87
  def self.csv_call(*args, opts, &block)
87
88
  CSV.send(*args, opts, &block)
88
89
  end
89
90
  # :nodoc:
91
+ # :nocov:
90
92
  end
91
93
 
92
94
  module ClassMethods
@@ -61,6 +61,19 @@ module Sequel
61
61
  # that were used in the update statement.
62
62
  attr_reader :previous_changes
63
63
 
64
+ # Reset the initial values after saving.
65
+ def after_save
66
+ super
67
+ reset_initial_values
68
+ end
69
+
70
+ # Save the current changes so they are available after updating. This happens
71
+ # before after_save resets them.
72
+ def after_update
73
+ super
74
+ @previous_changes = column_changes
75
+ end
76
+
64
77
  # An array with the initial value and the current value
65
78
  # of the column, if the column has been changed. If the
66
79
  # column has not been changed, returns nil.
@@ -165,19 +178,6 @@ module Sequel
165
178
  super
166
179
  end
167
180
 
168
- # Reset the initial values after saving.
169
- def after_save
170
- super
171
- reset_initial_values
172
- end
173
-
174
- # Save the current changes so they are available after updating. This happens
175
- # before after_save resets them.
176
- def after_update
177
- super
178
- @previous_changes = column_changes
179
- end
180
-
181
181
  # When changing the column value, save the initial column value. If the column
182
182
  # value is changed back to the initial value, update changed columns to remove
183
183
  # the column.
@@ -111,7 +111,9 @@ module Sequel
111
111
  # an association, allow lazy loading that association, since the
112
112
  # lazy association load will use a hash table lookup and not a query.
113
113
  def allow_lazy_load_for_static_cache_associations
114
+ # :nocov:
114
115
  if defined?(::Sequel::Plugins::StaticCache::ClassMethods)
116
+ # :nocov:
115
117
  @association_reflections.each_value do |ref|
116
118
  if ref.associated_class.is_a?(::Sequel::Plugins::StaticCache::ClassMethods)
117
119
  ref[:forbid_lazy_load] = false
@@ -0,0 +1,113 @@
1
+ # frozen-string-literal: true
2
+
3
+ module Sequel
4
+ module Plugins
5
+ # The instance_specific_default plugin exists to make it easier to use a
6
+ # global :instance_specific association option, or to warn or raise when Sequel
7
+ # has to guess which value to use :instance_specific option (Sequel defaults to
8
+ # guessing true as that is the conservative setting). It is helpful to
9
+ # use this plugin, particularly with the :warn or :raise settings, to determine
10
+ # which associations should have :instance_specific set. Setting the
11
+ # :instance_specific to false for associations that are not instance specific
12
+ # can improve performance.
13
+ #
14
+ # Associations are instance-specific if their block calls
15
+ # a model instance method, or where the value of the block varies
16
+ # based on runtime state, and the variance is outside of a delayed evaluation.
17
+ # For example, with the following three associations:
18
+ #
19
+ # Album.one_to_one :first_track, class: :Track do |ds|
20
+ # ds.where(number: 1)
21
+ # end
22
+ #
23
+ # Album.one_to_one :last_track, class: :Track do |ds|
24
+ # ds.where(number: num_tracks)
25
+ # end
26
+ #
27
+ # Album.one_to_many :recent_tracks, class: :Track do |ds|
28
+ # ds.where{date_updated > Date.today - 10}
29
+ # end
30
+ #
31
+ # +first_track+ is not instance specific, but +last_track+ and +recent_tracks+ are.
32
+ # +last_trac+ is because the +num_tracks+ call in the block is calling
33
+ # <tt>Album#num_tracks</tt>. +recent_tracks+ is because the value will change over
34
+ # time. This plugin allows you to find these cases, and set the :instance_specific
35
+ # option appropriately for them:
36
+ #
37
+ # Album.one_to_one :first_track, class: :Track, instance_specific: false do |ds|
38
+ # ds.where(number: 1)
39
+ # end
40
+ #
41
+ # Album.one_to_one :last_track, class: :Track, instance_specific: true do |ds|
42
+ # ds.where(number: num_tracks)
43
+ # end
44
+ #
45
+ # Album.one_to_many :recent_tracks, class: :Track, instance_specific: true do |ds|
46
+ # ds.where{date_updated > Date.today - 10}
47
+ # end
48
+ #
49
+ # For the +recent_tracks+ association, instead of marking it instance_specific, you
50
+ # could also use a delayed evaluation, since it doesn't actually contain
51
+ # instance-specific code:
52
+ #
53
+ # Album.one_to_many :recent_tracks, class: :Track, instance_specific: false do |ds|
54
+ # ds.where{date_updated > Sequel.delay{Date.today - 10}}
55
+ # end
56
+ #
57
+ # Possible arguments to provide when loading the plugin:
58
+ #
59
+ # true :: Set the :instance_specific option to true
60
+ # false :: Set the :instance_specific option to false
61
+ # :default :: Call super to set the :instance_specific option
62
+ # :warn :: Emit a warning before calling super to set the :instance_specific option
63
+ # :raise :: Raise a Sequel::Error if an :instance_specific option is not provided and
64
+ # an association could be instance-specific.
65
+ #
66
+ # Note that this plugin only affects associations which could be instance
67
+ # specific (those with blocks), where the :instance_specific option was not
68
+ # specified when the association was created.
69
+ #
70
+ # Usage:
71
+ #
72
+ # # Set how to handle associations that could be instance specific
73
+ # # but did not specify an :instance_specific option, for all subclasses
74
+ # # (set before creating subclasses).
75
+ # Sequel::Model.plugin :instance_specific_default, :warn
76
+ #
77
+ # # Set how to handle associations that could be instance specific
78
+ # # but did not specify an :instance_specific option, for the Album class
79
+ # Album.plugin :instance_specific_default, :warn
80
+ module InstanceSpecificDefault
81
+ # Set how to handle associations that could be instance specific but did
82
+ # not specify an :instance_specific value.
83
+ def self.configure(model, default)
84
+ model.instance_variable_set(:@instance_specific_default, default)
85
+ end
86
+
87
+ module ClassMethods
88
+ Plugins.inherited_instance_variables(self, :@instance_specific_default=>nil)
89
+
90
+ private
91
+
92
+ # Return the appropriate :instance_specific value, or warn or raise if
93
+ # configured.
94
+ def _association_instance_specific_default(name)
95
+ case @instance_specific_default
96
+ when true, false
97
+ return @instance_specific_default
98
+ when :default
99
+ # nothing
100
+ when :warn
101
+ warn("possibly instance-specific association without :instance_specific option (class: #{self}, association: #{name})", :uplevel => 3)
102
+ when :raise
103
+ raise Sequel::Error, "possibly instance-specific association without :instance_specific option (class: #{self}, association: #{name})"
104
+ else
105
+ raise Sequel::Error, "invalid value passed to instance_specific_default plugin: #{@instance_specific_default.inspect}"
106
+ end
107
+
108
+ super
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
@@ -106,17 +106,13 @@ module Sequel
106
106
  # and breaks some aspects of the json_serializer plugin. You can undo the damage
107
107
  # done by active_support/json by doing:
108
108
  #
109
- # class Array
110
- # def to_json(options = {})
111
- # JSON.generate(self)
112
- # end
113
- # end
114
- #
115
- # class Hash
109
+ # module ActiveSupportBrokenJSONFix
116
110
  # def to_json(options = {})
117
111
  # JSON.generate(self)
118
112
  # end
119
113
  # end
114
+ # Array.send(:prepend, ActiveSupportBrokenJSONFix)
115
+ # Hash.send(:prepend, ActiveSupportBrokenJSONFix)
120
116
  #
121
117
  # Note that this will probably cause active_support/json to no longer work
122
118
  # correctly in some cases.
@@ -98,7 +98,7 @@ module Sequel
98
98
  end
99
99
 
100
100
  if retrieved_with
101
- raise(Error, "Invalid primary key column for #{model}: #{pkc.inspect}") unless primary_key = model.primary_key
101
+ primary_key = model.primary_key
102
102
  composite_pk = true if primary_key.is_a?(Array)
103
103
  id_map = {}
104
104
  retrieved_with.each{|o| id_map[o.pk] = o unless o.values.has_key?(a) || o.frozen?}
@@ -341,10 +341,9 @@ module Sequel
341
341
  eo[:loader] = false
342
342
 
343
343
  eager_load_results(opts, eo) do |assoc_record|
344
- if pks ||= assoc_record.get_column_value(key)
344
+ if pks = assoc_record.get_column_value(key)
345
345
  pks.each do |pkv|
346
- next unless objects = id_map[pkv]
347
- objects.each do |object|
346
+ id_map[pkv].each do |object|
348
347
  object.associations[name].push(assoc_record)
349
348
  end
350
349
  end
@@ -41,11 +41,9 @@ module Sequel
41
41
  # Create a prepared statement, but modify the SQL used so that the model's columns are explicitly
42
42
  # selected instead of using *, assuming that the dataset selects from a single table.
43
43
  def prepare_explicit_statement(ds, type, vals=OPTS)
44
- f = ds.opts[:from]
45
- meth = type == :insert_select ? :returning : :select
46
- s = ds.opts[meth]
47
- if f && f.length == 1 && !ds.opts[:join] && (!s || s.empty?)
48
- ds = ds.public_send(meth, *columns.map{|c| Sequel.identifier(c)})
44
+ s = ds.opts[:returning]
45
+ if !s || s.empty?
46
+ ds = ds.returning(*columns.map{|c| Sequel.identifier(c)})
49
47
  end
50
48
 
51
49
  prepare_statement(ds, type, vals)
@@ -70,9 +68,7 @@ module Sequel
70
68
  # Return a prepared statement that can be used to insert a row using the given columns
71
69
  # and return that column values for the row created.
72
70
  def prepared_insert_select(cols)
73
- if dataset.supports_insert_select?
74
- cached_prepared_statement(:insert_select, prepared_columns(cols)){prepare_explicit_statement(naked.clone(:server=>dataset.opts.fetch(:server, :default)), :insert_select, prepared_statement_key_hash(cols))}
75
- end
71
+ cached_prepared_statement(:insert_select, prepared_columns(cols)){prepare_explicit_statement(naked.clone(:server=>dataset.opts.fetch(:server, :default)), :insert_select, prepared_statement_key_hash(cols))}
76
72
  end
77
73
 
78
74
  # Return an array of two element arrays with the column symbol as the first entry and the
@@ -138,9 +134,7 @@ module Sequel
138
134
  # and return the new column values.
139
135
  def _insert_select_raw(ds)
140
136
  if use_prepared_statements_for?(:insert_select)
141
- if ps = model.send(:prepared_insert_select, @values.keys)
142
- _set_prepared_statement_server(ps).call(@values)
143
- end
137
+ _set_prepared_statement_server(model.send(:prepared_insert_select, @values.keys)).call(@values)
144
138
  else
145
139
  super
146
140
  end
@@ -66,9 +66,7 @@ module Sequel
66
66
  # Merge the current values into the default values to reduce the number
67
67
  # of free columns.
68
68
  def before_create
69
- if v = model.prepared_statements_column_defaults
70
- @values = v.merge(values)
71
- end
69
+ @values = model.prepared_statements_column_defaults.merge(@values)
72
70
  super
73
71
  end
74
72
 
@@ -192,23 +192,19 @@ module Sequel
192
192
  :args=>((key_aliases + col_aliases) if col_aliases))
193
193
  ds = r.apply_eager_dataset_changes(ds)
194
194
  ds = ds.select_append(ka) unless ds.opts[:select] == nil
195
- model.eager_load_results(r, eo.merge(:loader=>false, :initalize_rows=>false, :dataset=>ds, :id_map=>nil)) do |obj|
195
+ model.eager_load_results(r, eo.merge(:loader=>false, :initialize_rows=>false, :dataset=>ds, :id_map=>nil)) do |obj|
196
196
  opk = prkey_conv[obj]
197
- if parent_map.has_key?(opk)
198
- if idm_obj = parent_map[opk]
199
- key_aliases.each{|ka_| idm_obj.values[ka_] = obj.values[ka_]}
200
- obj = idm_obj
201
- end
197
+ if idm_obj = parent_map[opk]
198
+ key_aliases.each{|ka_| idm_obj.values[ka_] = obj.values[ka_]}
199
+ obj = idm_obj
202
200
  else
203
201
  obj.associations[parent] = nil
204
202
  parent_map[opk] = obj
205
203
  (children_map[key_conv[obj]] ||= []) << obj
206
204
  end
207
205
 
208
- if roots = id_map[extract_key_alias[obj]]
209
- roots.each do |root|
210
- root.associations[ancestors] << obj
211
- end
206
+ id_map[extract_key_alias[obj]].each do |root|
207
+ root.associations[ancestors] << obj
212
208
  end
213
209
  end
214
210
  parent_map.each do |parent_id, obj|
@@ -300,17 +296,15 @@ module Sequel
300
296
  :args=>((key_aliases + col_aliases + (level ? [la] : [])) if col_aliases))
301
297
  ds = r.apply_eager_dataset_changes(ds)
302
298
  ds = ds.select_append(ka) unless ds.opts[:select] == nil
303
- model.eager_load_results(r, eo.merge(:loader=>false, :initalize_rows=>false, :dataset=>ds, :id_map=>nil, :associations=>OPTS)) do |obj|
299
+ model.eager_load_results(r, eo.merge(:loader=>false, :initialize_rows=>false, :dataset=>ds, :id_map=>nil, :associations=>OPTS)) do |obj|
304
300
  if level
305
301
  no_cache = no_cache_level == obj.values.delete(la)
306
302
  end
307
303
 
308
304
  opk = prkey_conv[obj]
309
- if parent_map.has_key?(opk)
310
- if idm_obj = parent_map[opk]
311
- key_aliases.each{|ka_| idm_obj.values[ka_] = obj.values[ka_]}
312
- obj = idm_obj
313
- end
305
+ if idm_obj = parent_map[opk]
306
+ key_aliases.each{|ka_| idm_obj.values[ka_] = obj.values[ka_]}
307
+ obj = idm_obj
314
308
  else
315
309
  obj.associations[childrena] = [] unless no_cache
316
310
  parent_map[opk] = obj
@@ -163,21 +163,6 @@ module Sequel
163
163
  super
164
164
  end
165
165
 
166
- # Copy the necessary attributes to the subclasses, and filter the
167
- # subclass's dataset based on the sti_kep_map entry for the class.
168
- def inherited(subclass)
169
- super
170
- key = Array(sti_key_map[subclass]).dup
171
- sti_subclass_added(key)
172
- rp = dataset.row_proc
173
- subclass.set_dataset(sti_subclass_dataset(key), :inherited=>true)
174
- subclass.instance_exec do
175
- @dataset = @dataset.with_row_proc(rp)
176
- @sti_key_array = key
177
- self.simple_table = nil
178
- end
179
- end
180
-
181
166
  # Return an instance of the class specified by sti_key,
182
167
  # used by the row_proc.
183
168
  def sti_load(r)
@@ -208,6 +193,21 @@ module Sequel
208
193
  super
209
194
  end
210
195
 
196
+ # Copy the necessary attributes to the subclasses, and filter the
197
+ # subclass's dataset based on the sti_kep_map entry for the class.
198
+ def inherited(subclass)
199
+ super
200
+ key = Array(sti_key_map[subclass]).dup
201
+ sti_subclass_added(key)
202
+ rp = dataset.row_proc
203
+ subclass.set_dataset(sti_subclass_dataset(key), :inherited=>true)
204
+ subclass.instance_exec do
205
+ @dataset = @dataset.with_row_proc(rp)
206
+ @sti_key_array = key
207
+ self.simple_table = nil
208
+ end
209
+ end
210
+
211
211
  # If calling set_dataset manually, make sure to set the dataset
212
212
  # row proc to one that handles inheritance correctly.
213
213
  def set_dataset_row_proc(ds)
@@ -28,7 +28,7 @@ module Sequel
28
28
  model.plugin(:input_transformer, :string_stripper){|v| (v.is_a?(String) && !v.is_a?(SQL::Blob)) ? v.strip : v}
29
29
  end
30
30
  def self.configure(model)
31
- model.instance_exec{set_skipped_string_stripping_columns if @dataset}
31
+ model.send(:set_skipped_string_stripping_columns)
32
32
  end
33
33
 
34
34
  module ClassMethods
@@ -63,6 +63,8 @@ module Sequel
63
63
 
64
64
  Plugins.inherited_instance_variables(self, :@subclasses=>lambda{|v| []}, :@on_subclass=>nil)
65
65
 
66
+ private
67
+
66
68
  # Add the subclass to this model's current subclasses,
67
69
  # and initialize a new subclasses instance variable
68
70
  # in the subclass.
@@ -194,7 +194,11 @@ module Sequel
194
194
  def validates_each(*atts, &block)
195
195
  opts = extract_options!(atts)
196
196
  blank_meth = db.method(:blank_object?).to_proc
197
- blk = if (i = opts[:if]) || (am = opts[:allow_missing]) || (an = opts[:allow_nil]) || (ab = opts[:allow_blank])
197
+ i = opts[:if]
198
+ am = opts[:allow_missing]
199
+ an = opts[:allow_nil]
200
+ ab = opts[:allow_blank]
201
+ blk = if i || am || an || ab
198
202
  if i.is_a?(Proc)
199
203
  i = Plugins.def_sequel_method(self, "validation_class_methods_if", 0, &i)
200
204
  end
@@ -4,6 +4,11 @@ module Sequel
4
4
  @application_timezone = nil
5
5
  @database_timezone = nil
6
6
  @typecast_timezone = nil
7
+ @local_offsets = {}
8
+
9
+ # Backwards compatible alias
10
+ Timezones = SequelMethods
11
+ Deprecation.deprecate_constant(self, :Timezones)
7
12
 
8
13
  # Sequel doesn't pay much attention to timezones by default, but you can set it
9
14
  # handle timezones if you want. There are three separate timezone settings, application_timezone,
@@ -16,7 +21,7 @@ module Sequel
16
21
  # on the environment (e.g. current user), you need to use the +named_timezones+ extension (and use
17
22
  # +DateTime+ as the +datetime_class+). Sequel also ships with a +thread_local_timezones+ extensions
18
23
  # which allows each thread to have its own timezone values for each of the timezones.
19
- module Timezones
24
+ module SequelMethods
20
25
  # The timezone you want the application to use. This is the timezone
21
26
  # that incoming times from the database and typecasting are converted to.
22
27
  attr_reader :application_timezone
@@ -243,7 +248,4 @@ module Sequel
243
248
  Sequel.synchronize{@local_offsets[offset_secs] = Rational(offset_secs, 86400)}
244
249
  end
245
250
  end
246
-
247
- @local_offsets = {}
248
- extend Timezones
249
251
  end
@@ -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 = 31
9
+ MINOR = 36
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.31.0
4
+ version: 5.36.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: 2020-04-01 00:00:00.000000000 Z
11
+ date: 2020-09-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -179,6 +179,11 @@ extra_rdoc_files:
179
179
  - doc/release_notes/5.29.0.txt
180
180
  - doc/release_notes/5.30.0.txt
181
181
  - doc/release_notes/5.31.0.txt
182
+ - doc/release_notes/5.32.0.txt
183
+ - doc/release_notes/5.33.0.txt
184
+ - doc/release_notes/5.34.0.txt
185
+ - doc/release_notes/5.35.0.txt
186
+ - doc/release_notes/5.36.0.txt
182
187
  files:
183
188
  - CHANGELOG
184
189
  - MIT-LICENSE
@@ -231,6 +236,11 @@ files:
231
236
  - doc/release_notes/5.3.0.txt
232
237
  - doc/release_notes/5.30.0.txt
233
238
  - doc/release_notes/5.31.0.txt
239
+ - doc/release_notes/5.32.0.txt
240
+ - doc/release_notes/5.33.0.txt
241
+ - doc/release_notes/5.34.0.txt
242
+ - doc/release_notes/5.35.0.txt
243
+ - doc/release_notes/5.36.0.txt
234
244
  - doc/release_notes/5.4.0.txt
235
245
  - doc/release_notes/5.5.0.txt
236
246
  - doc/release_notes/5.6.0.txt
@@ -350,6 +360,7 @@ files:
350
360
  - lib/sequel/extensions/escaped_like.rb
351
361
  - lib/sequel/extensions/eval_inspect.rb
352
362
  - lib/sequel/extensions/exclude_or_null.rb
363
+ - lib/sequel/extensions/fiber_concurrency.rb
353
364
  - lib/sequel/extensions/freeze_datasets.rb
354
365
  - lib/sequel/extensions/from_block.rb
355
366
  - lib/sequel/extensions/graph_each.rb
@@ -386,6 +397,7 @@ files:
386
397
  - lib/sequel/extensions/pretty_table.rb
387
398
  - lib/sequel/extensions/query.rb
388
399
  - lib/sequel/extensions/round_timestamps.rb
400
+ - lib/sequel/extensions/run_transaction_hooks.rb
389
401
  - lib/sequel/extensions/s.rb
390
402
  - lib/sequel/extensions/schema_caching.rb
391
403
  - lib/sequel/extensions/schema_dumper.rb
@@ -454,6 +466,7 @@ files:
454
466
  - lib/sequel/plugins/insert_returning_select.rb
455
467
  - lib/sequel/plugins/instance_filters.rb
456
468
  - lib/sequel/plugins/instance_hooks.rb
469
+ - lib/sequel/plugins/instance_specific_default.rb
457
470
  - lib/sequel/plugins/inverted_subsets.rb
458
471
  - lib/sequel/plugins/json_serializer.rb
459
472
  - lib/sequel/plugins/lazy_attributes.rb