sequel 5.9.0 → 5.10.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|