sequel 5.9.0 → 5.10.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.
- checksums.yaml +4 -4
- data/CHANGELOG +34 -0
- data/doc/release_notes/5.10.0.txt +84 -0
- data/lib/sequel/adapters/jdbc/postgresql.rb +1 -1
- data/lib/sequel/adapters/postgres.rb +20 -4
- data/lib/sequel/adapters/shared/postgres.rb +12 -2
- data/lib/sequel/adapters/utils/mysql_mysql2.rb +1 -0
- data/lib/sequel/database/schema_generator.rb +3 -0
- data/lib/sequel/database/schema_methods.rb +2 -0
- data/lib/sequel/dataset/actions.rb +7 -6
- data/lib/sequel/dataset/misc.rb +14 -0
- data/lib/sequel/extensions/pg_array.rb +83 -79
- data/lib/sequel/extensions/pg_extended_date_support.rb +11 -4
- data/lib/sequel/extensions/pg_range.rb +4 -2
- data/lib/sequel/model/associations.rb +10 -2
- data/lib/sequel/plugins/list.rb +18 -8
- data/lib/sequel/plugins/pg_array_associations.rb +2 -2
- data/lib/sequel/plugins/tree.rb +28 -13
- data/lib/sequel/sql.rb +24 -4
- data/lib/sequel/version.rb +1 -1
- data/spec/adapters/postgres_spec.rb +94 -26
- data/spec/bin_spec.rb +2 -0
- data/spec/core/dataset_spec.rb +58 -32
- data/spec/core/expression_filters_spec.rb +16 -0
- data/spec/core/spec_helper.rb +1 -0
- data/spec/core_extensions_spec.rb +1 -0
- data/spec/extensions/list_spec.rb +16 -0
- data/spec/extensions/pg_array_associations_spec.rb +10 -10
- data/spec/extensions/pg_range_spec.rb +34 -2
- data/spec/extensions/spec_helper.rb +1 -0
- data/spec/extensions/tree_spec.rb +40 -0
- data/spec/guards_helper.rb +1 -0
- data/spec/model/associations_spec.rb +21 -0
- data/spec/model/spec_helper.rb +1 -0
- metadata +4 -2
@@ -115,6 +115,46 @@ describe Sequel::Model, "tree plugin" do
|
|
115
115
|
"SELECT * FROM nodes WHERE (nodes.parent_id = 1)"]
|
116
116
|
end
|
117
117
|
|
118
|
+
it "should have methods work correctly with custom association names" do
|
119
|
+
o = klass(:primary_key=>:i, :key=>:pi, :order=>:name, :children=>{:name=>:cs}, :parent=>{:name=>:p}).load(:id=>2, :parent_id=>1, :name=>'AA', :i=>3, :pi=>4)
|
120
|
+
|
121
|
+
o.model.parent_association_name.must_equal :p
|
122
|
+
o.model.children_association_name.must_equal :cs
|
123
|
+
o.model.dataset = o.model.dataset.with_fetch(lambda do |sql|
|
124
|
+
case sql
|
125
|
+
when "SELECT * FROM nodes WHERE (nodes.i = 4) ORDER BY name LIMIT 1"
|
126
|
+
{:id=>7, :parent_id=>8, :name=>'r2', :i=>4, :pi=>5}
|
127
|
+
when "SELECT * FROM nodes WHERE (nodes.i = 5) ORDER BY name LIMIT 1"
|
128
|
+
{:id=>10, :parent_id=>11, :name=>'r3', :i=>5, :pi=>nil}
|
129
|
+
when 'SELECT * FROM nodes WHERE (nodes.pi = 3) ORDER BY name'
|
130
|
+
{:id=>12, :parent_id=>13, :name=>'r4', :i=>7, :pi=>3}
|
131
|
+
when 'SELECT * FROM nodes WHERE (nodes.pi = 7) ORDER BY name'
|
132
|
+
{:id=>14, :parent_id=>15, :name=>'r5', :i=>8, :pi=>7}
|
133
|
+
when 'SELECT * FROM nodes WHERE (nodes.pi = 8) ORDER BY name'
|
134
|
+
[]
|
135
|
+
when 'SELECT * FROM nodes WHERE (nodes.pi = 4) ORDER BY name'
|
136
|
+
[{:id=>2, :parent_id=>1, :name=>'AA', :i=>3, :pi=>4}, {:id=>20, :parent_id=>21, :name=>'r6', :i=>9, :pi=>4}]
|
137
|
+
else
|
138
|
+
raise sql
|
139
|
+
end
|
140
|
+
end)
|
141
|
+
o.db.sqls.must_equal []
|
142
|
+
|
143
|
+
o.ancestors.must_equal [o.model.load(:id=>7, :parent_id=>8, :name=>'r2', :i=>4, :pi=>5),
|
144
|
+
o.model.load(:id=>10, :parent_id=>11, :name=>'r3', :i=>5, :pi=>nil)]
|
145
|
+
o.db.sqls.must_equal ["SELECT * FROM nodes WHERE (nodes.i = 4) ORDER BY name LIMIT 1",
|
146
|
+
"SELECT * FROM nodes WHERE (nodes.i = 5) ORDER BY name LIMIT 1"]
|
147
|
+
|
148
|
+
o.descendants.must_equal [o.model.load(:id=>12, :parent_id=>13, :name=>'r4', :i=>7, :pi=>3),
|
149
|
+
o.model.load(:id=>14, :parent_id=>15, :name=>'r5', :i=>8, :pi=>7)]
|
150
|
+
o.db.sqls.must_equal ["SELECT * FROM nodes WHERE (nodes.pi = 3) ORDER BY name",
|
151
|
+
"SELECT * FROM nodes WHERE (nodes.pi = 7) ORDER BY name",
|
152
|
+
"SELECT * FROM nodes WHERE (nodes.pi = 8) ORDER BY name"]
|
153
|
+
|
154
|
+
o.siblings.must_equal [o.model.load(:id=>20, :parent_id=>21, :name=>'r6', :i=>9, :pi=>4)]
|
155
|
+
o.db.sqls.must_equal ["SELECT * FROM nodes WHERE (nodes.pi = 4) ORDER BY name"]
|
156
|
+
end
|
157
|
+
|
118
158
|
describe ":single_root option" do
|
119
159
|
before do
|
120
160
|
@c = klass(:single_root => true)
|
data/spec/guards_helper.rb
CHANGED
@@ -4149,6 +4149,11 @@ describe "Sequel::Model Associations with clashing column names" do
|
|
4149
4149
|
@db.sqls.must_equal ["SELECT foos.id, foos.object_id, mtmbars.id AS mtmbars_id, mtmbars.object_id AS mtmbars_object_id FROM foos LEFT OUTER JOIN bars_foos ON (bars_foos.foo_id = foos.object_id) LEFT OUTER JOIN bars AS mtmbars ON (mtmbars.object_id = bars_foos.object_id)"]
|
4150
4150
|
end
|
4151
4151
|
|
4152
|
+
it "should not have filter by associations code break if using IN/NOT in with a set-returning function" do
|
4153
|
+
@Bar.where(Sequel::SQL::BooleanExpression.new(:IN, :foo, Sequel.function(:srf))).sql.must_equal 'SELECT * FROM bars WHERE (foo IN srf())'
|
4154
|
+
@Bar.exclude(Sequel::SQL::BooleanExpression.new(:IN, :foo, Sequel.function(:srf))).sql.must_equal 'SELECT * FROM bars WHERE (foo NOT IN srf())'
|
4155
|
+
end
|
4156
|
+
|
4152
4157
|
it "should have working filter by associations with model instances" do
|
4153
4158
|
@Bar.first(:foo=>@foo).must_equal @bar
|
4154
4159
|
@db.sqls.must_equal ["SELECT * FROM bars WHERE (bars.object_id = 2) LIMIT 1"]
|
@@ -4435,6 +4440,22 @@ describe "association autoreloading" do
|
|
4435
4440
|
DB.reset
|
4436
4441
|
end
|
4437
4442
|
|
4443
|
+
it "should not reload many_to_one association when foreign key is not modified" do
|
4444
|
+
album = @Album.load(:id => 1, :name=>'Al', :artist_id=>1)
|
4445
|
+
album.artist
|
4446
|
+
DB.sqls.must_equal ['SELECT * FROM artists WHERE id = 1']
|
4447
|
+
album.artist_id = 1
|
4448
|
+
album.artist
|
4449
|
+
DB.sqls.must_equal []
|
4450
|
+
|
4451
|
+
album = @Album.new(:name=>'Al', :artist_id=>1)
|
4452
|
+
album.artist
|
4453
|
+
DB.sqls.must_equal ['SELECT * FROM artists WHERE id = 1']
|
4454
|
+
album.artist_id = 1
|
4455
|
+
album.artist
|
4456
|
+
DB.sqls.must_equal []
|
4457
|
+
end
|
4458
|
+
|
4438
4459
|
it "should reload many_to_one association when foreign key is modified" do
|
4439
4460
|
album = @Album.load(:id => 1, :name=>'Al', :artist_id=>2)
|
4440
4461
|
album.artist
|
data/spec/model/spec_helper.rb
CHANGED
@@ -5,6 +5,7 @@ require_relative "../../lib/sequel"
|
|
5
5
|
|
6
6
|
Sequel::Deprecation.backtrace_filter = lambda{|line, lineno| lineno < 4 || line =~ /_spec\.rb/}
|
7
7
|
|
8
|
+
ENV['MT_NO_PLUGINS'] = '1' # Work around stupid autoloading of plugins
|
8
9
|
gem 'minitest'
|
9
10
|
require 'minitest/autorun'
|
10
11
|
require 'minitest/hooks/default'
|
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.
|
4
|
+
version: 5.10.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: 2018-
|
11
|
+
date: 2018-07-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -193,6 +193,7 @@ extra_rdoc_files:
|
|
193
193
|
- doc/release_notes/5.8.0.txt
|
194
194
|
- doc/release_notes/5.7.0.txt
|
195
195
|
- doc/release_notes/5.9.0.txt
|
196
|
+
- doc/release_notes/5.10.0.txt
|
196
197
|
files:
|
197
198
|
- CHANGELOG
|
198
199
|
- MIT-LICENSE
|
@@ -272,6 +273,7 @@ files:
|
|
272
273
|
- doc/release_notes/4.9.0.txt
|
273
274
|
- doc/release_notes/5.0.0.txt
|
274
275
|
- doc/release_notes/5.1.0.txt
|
276
|
+
- doc/release_notes/5.10.0.txt
|
275
277
|
- doc/release_notes/5.2.0.txt
|
276
278
|
- doc/release_notes/5.3.0.txt
|
277
279
|
- doc/release_notes/5.4.0.txt
|