sequel 5.32.0 → 5.33.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5d15527276e1c30bbe39a7260589f3a1e027908dfa51b01e0c365e4162850605
4
- data.tar.gz: 7ff61ff4f1af3ef3700c8a8bc15cda941f68eb42f19f28fc376126ebb1f9f9ed
3
+ metadata.gz: b83782f79b268011fa8a7dd3af1f6eefc03a92b58ac7f2cf4f3411ee3a0bc16e
4
+ data.tar.gz: '00679a6acd9fef127e040be0ac93666fdf86f6cdf77d9220168e8b7acf13b069'
5
5
  SHA512:
6
- metadata.gz: 154fd4039919acb1185ad57c2671eb3cd7162dcc6652f803f2f64ce3acc6204ea99b95a485fab1f003590199f4a1e0213fee1c779bec7852c08db6e17f5995c4
7
- data.tar.gz: 398dcdb11a158c49ba270ffecfe6a330085784b28448c367eb4678c1fb394c968377193a06d01db6d6d938788afaad45e2ac56fcfe6688e2c6a8211b42a958cd
6
+ metadata.gz: f3502c155f4bc2a38c799e4e633fdd9267add64b80e35ac9c77d01ade6666d294ccb60e5fe6e438e94bf0b94f16127c7c35da1c37a40272eafd9f025474ec17f
7
+ data.tar.gz: fd8fde26b14389192787cd59d91def5a9efd4c1b5a8faa2a53c7da16fd479788516a233242548edf0c7901f9080038e9c1a4b967088e7eef4503c82cb153d628
data/CHANGELOG CHANGED
@@ -1,3 +1,11 @@
1
+ === 5.33.0 (2020-06-01)
2
+
3
+ * Support custom join types on a per-association basis when using eager_graph/association_join (jeremyevans)
4
+
5
+ * Support primary_key with type: :smallserial on PostgreSQL (j-a-m-l) (#1698)
6
+
7
+ * Add Database#current_timestamp_utc accessor on SQLite to keep CURRENT_* in UTC instead of converting to localtime (jeremyevans)
8
+
1
9
  === 5.32.0 (2020-05-01)
2
10
 
3
11
  * Allow Database#create_table? work with :partition_of option on PostgreSQL (jeremyevans) (#1690)
@@ -0,0 +1,24 @@
1
+ = New Features
2
+
3
+ * Custom join types are now supported on a per-association basis when
4
+ using eager_graph/association_join. This builds on the previous
5
+ support for custom aliases, using Sequel::SQL::AliasedExpression:
6
+
7
+ class Artist < Sequel::Model; end
8
+ class Album < Sequel::Model; end
9
+ class Track < Sequel::Model; end
10
+ Artist.one_to_many :albums
11
+ Album.one_to_many :tracks
12
+ Artist.eager_graph(
13
+ Sequel[:albums].as(:a, join_type: :inner) =>
14
+ Sequel[:tracks].as(:t, join_type: :left)
15
+ )
16
+
17
+ * A Database#current_timestamp_utc accessor has been added on SQLite.
18
+ Setting this to true will keep CURRENT_TIMESTAMP, CURRENT_TIME, and
19
+ CURRENT_DATE in UTC instead of converting them to localtime.
20
+
21
+ = Other Improvements
22
+
23
+ * The smallserial PostgreSQL type is now recognized and Sequel will
24
+ not try to mark smallserial columns as identity columns.
@@ -950,7 +950,7 @@ module Sequel
950
950
  # default value is given.
951
951
  def column_definition_default_sql(sql, column)
952
952
  super
953
- if !column[:serial] && !['serial', 'bigserial'].include?(column[:type].to_s) && !column[:default]
953
+ if !column[:serial] && !['smallserial', 'serial', 'bigserial'].include?(column[:type].to_s) && !column[:default]
954
954
  if (identity = column[:identity])
955
955
  sql << " GENERATED "
956
956
  sql << (identity == :always ? "ALWAYS" : "BY DEFAULT")
@@ -38,6 +38,10 @@ module Sequel
38
38
  # booleans be stored as integers, but historically Sequel has used 't'/'f'.
39
39
  attr_accessor :integer_booleans
40
40
 
41
+ # Whether to keep CURRENT_TIMESTAMP and similar expressions in UTC. By
42
+ # default, the expressions are converted to localtime.
43
+ attr_accessor :current_timestamp_utc
44
+
41
45
  # A symbol signifying the value of the default transaction mode
42
46
  attr_reader :transaction_mode
43
47
 
@@ -615,7 +619,7 @@ module Sequel
615
619
  # SQLite has CURRENT_TIMESTAMP and related constants in UTC instead
616
620
  # of in localtime, so convert those constants to local time.
617
621
  def constant_sql_append(sql, constant)
618
- if c = CONSTANT_MAP[constant]
622
+ if (c = CONSTANT_MAP[constant]) && !db.current_timestamp_utc
619
623
  sql << c
620
624
  else
621
625
  super
@@ -2966,8 +2966,8 @@ module Sequel
2966
2966
  # dataset. If that association also has dependent associations, instead of a callable object,
2967
2967
  # use a hash with the callable object being the key, and the dependent association(s) as the value.
2968
2968
  #
2969
- # You can specify an alias by providing a Sequel::SQL::AliasedExpression object instead of
2970
- # an a Symbol for the assocation name.
2969
+ # You can specify an custom alias and/or join type on a per-association basis by providing an
2970
+ # Sequel::SQL::AliasedExpression object instead of an a Symbol for the association name.
2971
2971
  #
2972
2972
  # Examples:
2973
2973
  #
@@ -2983,6 +2983,14 @@ module Sequel
2983
2983
  # # FROM albums
2984
2984
  # # LEFT OUTER JOIN artists AS a ON (a.id = albums.artist_id)
2985
2985
  #
2986
+ # # For each album, eager_graph load the artist, using a specified alias
2987
+ # # and custom join type
2988
+ #
2989
+ # Album.eager_graph(Sequel[:artist].as(:a, join_type: :inner)).all
2990
+ # # SELECT ...
2991
+ # # FROM albums
2992
+ # # INNER JOIN artists AS a ON (a.id = albums.artist_id)
2993
+ #
2986
2994
  # # For each album, eager_graph load the artist and genre
2987
2995
  # Album.eager_graph(:artist, :genre).all
2988
2996
  # Album.eager_graph(:artist).eager_graph(:genre).all
@@ -3125,11 +3133,16 @@ module Sequel
3125
3133
  # ta :: table_alias used for the parent association
3126
3134
  # requirements :: an array, used as a stack for requirements
3127
3135
  # r :: association reflection for the current association, or an SQL::AliasedExpression
3128
- # with the reflection as the expression and the alias base as the aliaz.
3136
+ # with the reflection as the expression, the alias base as the alias (or nil to
3137
+ # use the default alias), and an optional hash with a :join_type entry as the columns
3138
+ # to use a custom join type.
3129
3139
  # *associations :: any associations dependent on this one
3130
3140
  def eager_graph_association(ds, model, ta, requirements, r, *associations)
3131
3141
  if r.is_a?(SQL::AliasedExpression)
3132
3142
  alias_base = r.alias
3143
+ if r.columns.is_a?(Hash)
3144
+ join_type = r.columns[:join_type]
3145
+ end
3133
3146
  r = r.expression
3134
3147
  else
3135
3148
  alias_base = r[:graph_alias_base]
@@ -3152,7 +3165,7 @@ module Sequel
3152
3165
  raise Error, "Cannot eager_graph association when :conditions specified and not a hash or an array of pairs. Specify :graph_conditions, :graph_only_conditions, or :graph_block for the association. Model: #{r[:model]}, association: #{r[:name]}"
3153
3166
  end
3154
3167
 
3155
- ds = loader.call(:self=>ds, :table_alias=>assoc_table_alias, :implicit_qualifier=>(ta == ds.opts[:eager_graph][:master]) ? first_source : qualifier_from_alias_symbol(ta, first_source), :callback=>callback, :join_type=>local_opts[:join_type], :join_only=>local_opts[:join_only], :limit_strategy=>limit_strategy, :from_self_alias=>ds.opts[:eager_graph][:master])
3168
+ ds = loader.call(:self=>ds, :table_alias=>assoc_table_alias, :implicit_qualifier=>(ta == ds.opts[:eager_graph][:master]) ? first_source : qualifier_from_alias_symbol(ta, first_source), :callback=>callback, :join_type=>join_type || local_opts[:join_type], :join_only=>local_opts[:join_only], :limit_strategy=>limit_strategy, :from_self_alias=>ds.opts[:eager_graph][:master])
3156
3169
  if r[:order_eager_graph] && (order = r.fetch(:graph_order, r[:order]))
3157
3170
  ds = ds.order_append(*qualified_expression(order, assoc_table_alias))
3158
3171
  end
@@ -3307,7 +3320,7 @@ module Sequel
3307
3320
  end
3308
3321
  end
3309
3322
 
3310
- SQL::AliasedExpression.new(check_association(model, expr), association.alias)
3323
+ SQL::AliasedExpression.new(check_association(model, expr), association.alias || expr, association.columns)
3311
3324
  else
3312
3325
  check_association(model, association)
3313
3326
  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 = 32
9
+ MINOR = 33
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.32.0
4
+ version: 5.33.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-05-01 00:00:00.000000000 Z
11
+ date: 2020-06-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -180,6 +180,7 @@ extra_rdoc_files:
180
180
  - doc/release_notes/5.30.0.txt
181
181
  - doc/release_notes/5.31.0.txt
182
182
  - doc/release_notes/5.32.0.txt
183
+ - doc/release_notes/5.33.0.txt
183
184
  files:
184
185
  - CHANGELOG
185
186
  - MIT-LICENSE
@@ -233,6 +234,7 @@ files:
233
234
  - doc/release_notes/5.30.0.txt
234
235
  - doc/release_notes/5.31.0.txt
235
236
  - doc/release_notes/5.32.0.txt
237
+ - doc/release_notes/5.33.0.txt
236
238
  - doc/release_notes/5.4.0.txt
237
239
  - doc/release_notes/5.5.0.txt
238
240
  - doc/release_notes/5.6.0.txt