sequel 1.5.0 → 1.5.1
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.
- data/CHANGELOG +5 -1
- data/Rakefile +6 -4
- data/lib/sequel_model/eager_loading.rb +2 -2
- data/spec/eager_loading_spec.rb +100 -0
- metadata +3 -3
data/CHANGELOG
CHANGED
data/Rakefile
CHANGED
@@ -9,16 +9,14 @@ include FileUtils
|
|
9
9
|
# Configuration
|
10
10
|
##############################################################################
|
11
11
|
NAME = "sequel"
|
12
|
-
VERS = "1.5.
|
13
|
-
SEQUEL_CORE_VERS= "1.5.
|
12
|
+
VERS = "1.5.1"
|
13
|
+
SEQUEL_CORE_VERS= "1.5.1"
|
14
14
|
CLEAN.include ["**/.*.sw?", "pkg/*", ".config", "doc/*", "coverage/*"]
|
15
15
|
RDOC_OPTS = ["--quiet", "--line-numbers", "--inline-source"]
|
16
16
|
|
17
17
|
##############################################################################
|
18
18
|
# RDoc
|
19
19
|
##############################################################################
|
20
|
-
task :doc => [:rdoc]
|
21
|
-
|
22
20
|
Rake::RDocTask.new do |rdoc|
|
23
21
|
rdoc.rdoc_dir = "doc/rdoc"
|
24
22
|
rdoc.options += RDOC_OPTS
|
@@ -70,16 +68,19 @@ end
|
|
70
68
|
##############################################################################
|
71
69
|
# installation & removal
|
72
70
|
##############################################################################
|
71
|
+
desc "Install sequel gem"
|
73
72
|
task :install do
|
74
73
|
sh %{rake package}
|
75
74
|
sh %{sudo gem install pkg/#{NAME}-#{VERS}}
|
76
75
|
end
|
77
76
|
|
77
|
+
desc "Install sequel gem without docs"
|
78
78
|
task :install_no_docs do
|
79
79
|
sh %{rake package}
|
80
80
|
sh %{sudo gem install pkg/#{NAME}-#{VERS} --no-rdoc --no-ri}
|
81
81
|
end
|
82
82
|
|
83
|
+
desc "Uninstall sequel gem"
|
83
84
|
task :uninstall => [:clean] do
|
84
85
|
sh %{sudo gem uninstall #{NAME}}
|
85
86
|
end
|
@@ -87,6 +88,7 @@ end
|
|
87
88
|
##############################################################################
|
88
89
|
# gem and rdoc release
|
89
90
|
##############################################################################
|
91
|
+
desc "Upload sequel gem to rubyforge"
|
90
92
|
task :release => [:package] do
|
91
93
|
sh %{rubyforge login}
|
92
94
|
sh %{rubyforge add_release sequel #{NAME} #{VERS} pkg/#{NAME}-#{VERS}.tgz}
|
@@ -272,10 +272,10 @@ module Sequel::Model::Associations::EagerLoading
|
|
272
272
|
return if dependency_map.empty?
|
273
273
|
# Don't clobber the instance variable array for *_to_many associations if it has already been setup
|
274
274
|
dependency_map.keys.each do |ta|
|
275
|
-
current.instance_variable_set("@#{alias_map[ta]}",
|
275
|
+
current.instance_variable_set("@#{alias_map[ta]}", type_map[ta] == :many_to_one ? :null : []) unless current.instance_variable_get("@#{alias_map[ta]}")
|
276
276
|
end
|
277
277
|
dependency_map.each do |ta, deps|
|
278
|
-
rec = record_graph[ta]
|
278
|
+
next unless rec = record_graph[ta]
|
279
279
|
key = rec.pk || rec.values.sort_by{|x| x[0].to_s}
|
280
280
|
if cached_rec = records_map[ta][key]
|
281
281
|
rec = cached_rec
|
data/spec/eager_loading_spec.rb
CHANGED
@@ -545,4 +545,104 @@ describe Sequel::Model, "#eager_graph" do
|
|
545
545
|
"SELECT genres.*, ag.album_id AS x_foreign_key_x FROM genres INNER JOIN ag ON (ag.album_id IN (1)) AND (ag.genre_id = genres.id)"
|
546
546
|
].should(include(MODEL_DB.sqls[1]))
|
547
547
|
end
|
548
|
+
|
549
|
+
it "should handle no associated records for a single many_to_one association" do
|
550
|
+
ds = GraphAlbum.eager_graph(:band)
|
551
|
+
ds.sql.should == 'SELECT albums.id, albums.band_id, band.id AS band_id_0, band.vocalist_id FROM albums LEFT OUTER JOIN bands band ON (band.id = albums.band_id)'
|
552
|
+
def ds.fetch_rows(sql, &block)
|
553
|
+
yield({:id=>1, :band_id=>2, :band_id_0=>nil, :vocalist_id=>nil})
|
554
|
+
end
|
555
|
+
a = ds.all
|
556
|
+
a.should be_a_kind_of(Array)
|
557
|
+
a.size.should == 1
|
558
|
+
a.first.should be_a_kind_of(GraphAlbum)
|
559
|
+
a.first.values.should == {:id => 1, :band_id => 2}
|
560
|
+
a.first.instance_variable_get(:@band).should == :null
|
561
|
+
end
|
562
|
+
|
563
|
+
it "should handle no associated records for a single one_to_many association" do
|
564
|
+
ds = GraphAlbum.eager_graph(:tracks)
|
565
|
+
ds.sql.should == 'SELECT albums.id, albums.band_id, tracks.id AS tracks_id, tracks.album_id FROM albums LEFT OUTER JOIN tracks ON (tracks.album_id = albums.id)'
|
566
|
+
def ds.fetch_rows(sql, &block)
|
567
|
+
yield({:id=>1, :band_id=>2, :tracks_id=>nil, :album_id=>nil})
|
568
|
+
end
|
569
|
+
a = ds.all
|
570
|
+
a.should be_a_kind_of(Array)
|
571
|
+
a.size.should == 1
|
572
|
+
a.first.should be_a_kind_of(GraphAlbum)
|
573
|
+
a.first.values.should == {:id => 1, :band_id => 2}
|
574
|
+
a.first.tracks.should == []
|
575
|
+
end
|
576
|
+
|
577
|
+
it "should handle no associated records for a single many_to_many association" do
|
578
|
+
ds = GraphAlbum.eager_graph(:genres)
|
579
|
+
ds.sql.should == 'SELECT albums.id, albums.band_id, genres.id AS genres_id FROM albums LEFT OUTER JOIN ag ON (ag.album_id = albums.id) LEFT OUTER JOIN genres ON (genres.id = ag.genre_id)'
|
580
|
+
def ds.fetch_rows(sql, &block)
|
581
|
+
yield({:id=>1, :band_id=>2, :genres_id=>nil})
|
582
|
+
end
|
583
|
+
a = ds.all
|
584
|
+
a.should be_a_kind_of(Array)
|
585
|
+
a.size.should == 1
|
586
|
+
a.first.should be_a_kind_of(GraphAlbum)
|
587
|
+
a.first.values.should == {:id => 1, :band_id => 2}
|
588
|
+
a.first.genres.should == []
|
589
|
+
end
|
590
|
+
|
591
|
+
it "should handle missing associated records when loading multiple associations" do
|
592
|
+
ds = GraphAlbum.eager_graph(:genres, :tracks, :band)
|
593
|
+
ds.sql.should == 'SELECT albums.id, albums.band_id, genres.id AS genres_id, tracks.id AS tracks_id, tracks.album_id, band.id AS band_id_0, band.vocalist_id FROM albums LEFT OUTER JOIN ag ON (ag.album_id = albums.id) LEFT OUTER JOIN genres ON (genres.id = ag.genre_id) LEFT OUTER JOIN tracks ON (tracks.album_id = albums.id) LEFT OUTER JOIN bands band ON (band.id = albums.band_id)'
|
594
|
+
def ds.fetch_rows(sql, &block)
|
595
|
+
yield({:id=>1, :band_id=>2, :genres_id=>nil, :tracks_id=>3, :album_id=>1, :band_id_0=>nil, :vocalist_id=>nil})
|
596
|
+
yield({:id=>1, :band_id=>2, :genres_id=>nil, :tracks_id=>4, :album_id=>1, :band_id_0=>nil, :vocalist_id=>nil})
|
597
|
+
yield({:id=>1, :band_id=>2, :genres_id=>nil, :tracks_id=>5, :album_id=>1, :band_id_0=>nil, :vocalist_id=>nil})
|
598
|
+
yield({:id=>1, :band_id=>2, :genres_id=>nil, :tracks_id=>6, :album_id=>1, :band_id_0=>nil, :vocalist_id=>nil})
|
599
|
+
end
|
600
|
+
a = ds.all
|
601
|
+
a.should be_a_kind_of(Array)
|
602
|
+
a.size.should == 1
|
603
|
+
a.first.should be_a_kind_of(GraphAlbum)
|
604
|
+
a.first.values.should == {:id => 1, :band_id => 2}
|
605
|
+
a = a.first
|
606
|
+
a.tracks.should be_a_kind_of(Array)
|
607
|
+
a.tracks.size.should == 4
|
608
|
+
a.tracks.first.should be_a_kind_of(GraphTrack)
|
609
|
+
a.tracks.collect{|x|x[:id]}.should == [3,4,5,6]
|
610
|
+
a.instance_variable_get(:@band).should == :null
|
611
|
+
a.genres.should == []
|
612
|
+
end
|
613
|
+
|
614
|
+
it "should handle missing associated records when cascading eager loading for associations of associated models" do
|
615
|
+
ds = GraphTrack.eager_graph(:album=>{:band=>:members})
|
616
|
+
ds.sql.should == 'SELECT tracks.id, tracks.album_id, album.id AS album_id_0, album.band_id, band.id AS band_id_0, band.vocalist_id, members.id AS members_id FROM tracks LEFT OUTER JOIN albums album ON (album.id = tracks.album_id) LEFT OUTER JOIN bands band ON (band.id = album.band_id) LEFT OUTER JOIN bm ON (bm.band_id = band.id) LEFT OUTER JOIN members ON (members.id = bm.member_id)'
|
617
|
+
def ds.fetch_rows(sql, &block)
|
618
|
+
yield({:id=>2, :album_id=>2, :album_id_0=>nil, :band_id=>nil, :members_id=>nil, :band_id_0=>nil, :vocalist_id=>nil})
|
619
|
+
yield({:id=>3, :album_id=>3, :album_id_0=>3, :band_id=>3, :members_id=>nil, :band_id_0=>nil, :vocalist_id=>nil})
|
620
|
+
yield({:id=>4, :album_id=>4, :album_id_0=>4, :band_id=>2, :members_id=>nil, :band_id_0=>2, :vocalist_id=>6})
|
621
|
+
yield({:id=>5, :album_id=>1, :album_id_0=>1, :band_id=>4, :members_id=>5, :band_id_0=>4, :vocalist_id=>8})
|
622
|
+
yield({:id=>5, :album_id=>1, :album_id_0=>1, :band_id=>4, :members_id=>6, :band_id_0=>4, :vocalist_id=>8})
|
623
|
+
end
|
624
|
+
a = ds.all
|
625
|
+
a.should be_a_kind_of(Array)
|
626
|
+
a.size.should == 4
|
627
|
+
a.first.should be_a_kind_of(GraphTrack)
|
628
|
+
a.collect{|x|x[:id]}.should == [2,3,4,5]
|
629
|
+
a[0].instance_variable_get(:@album).should == :null
|
630
|
+
a[1].album.should be_a_kind_of(GraphAlbum)
|
631
|
+
a[1].album.values.should == {:id => 3, :band_id => 3}
|
632
|
+
a[1].album.instance_variable_get(:@band).should == :null
|
633
|
+
a[2].album.should be_a_kind_of(GraphAlbum)
|
634
|
+
a[2].album.values.should == {:id => 4, :band_id => 2}
|
635
|
+
a[2].album.band.should be_a_kind_of(GraphBand)
|
636
|
+
a[2].album.band.values.should == {:id => 2, :vocalist_id=>6}
|
637
|
+
a[2].album.band.members.should == []
|
638
|
+
a[3].album.should be_a_kind_of(GraphAlbum)
|
639
|
+
a[3].album.values.should == {:id => 1, :band_id => 4}
|
640
|
+
a[3].album.band.should be_a_kind_of(GraphBand)
|
641
|
+
a[3].album.band.values.should == {:id => 4, :vocalist_id=>8}
|
642
|
+
a[3].album.band.members.size.should == 2
|
643
|
+
a[3].album.band.members.first.should be_a_kind_of(GraphBandMember)
|
644
|
+
a[3].album.band.members.first.values.should == {:id => 5}
|
645
|
+
a[3].album.band.members.last.should be_a_kind_of(GraphBandMember)
|
646
|
+
a[3].album.band.members.last.values.should == {:id => 6}
|
647
|
+
end
|
548
648
|
end
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: sequel
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.5.
|
7
|
-
date: 2008-04-
|
6
|
+
version: 1.5.1
|
7
|
+
date: 2008-04-30 00:00:00 -07:00
|
8
8
|
summary: "The Database Toolkit for Ruby: Model Classes"
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -89,5 +89,5 @@ dependencies:
|
|
89
89
|
requirements:
|
90
90
|
- - "="
|
91
91
|
- !ruby/object:Gem::Version
|
92
|
-
version: 1.5.
|
92
|
+
version: 1.5.1
|
93
93
|
version:
|