Hello Jeremy,
I am wondering: why isn't eager() triggered on each? In a real application
I'm using each to list filtered, sorted and paged orders with user's name
and id but I noticed it's calling a query for each associated user. Here is
a simplifed test case that demonstrates it:
File: Gemfile
source 'https://rubygems.org'
ruby '2.0.0'
gem 'pg' # Database lib
gem 'sequel' # Database toolkit
gem 'sequel_pg', require: 'sequel' # C extension
gem 'pry'
File: migrations/001_init.rb
Sequel.migration do
change do
create_table :users do
primary_key :id
String :name, size: 255, null: false
end
create_table :orders do
primary_key :id
foreign_key :user_id, :users, on_delete: :cascade
String :number, size: 255, null: false
index :user_id
end
end
end
File: bug.rb
require 'bundler'
require 'logger'
Bundler.require
DB = Sequel.connect(
'postgres://localhost/sequel_test',
encoding: 'utf-8',
logger: Logger.new($stdout),
)
class User < Sequel::Model
one_to_many :orders
end
class Order < Sequel::Model
many_to_one :user
end
(1..5).each do |i|
user = User.create name: "User #{ i }"
order = Order.new number: "NO#{ i }"
user.add_order order
end if User.count.zero?
binding.pry
Command line:
$ bundle
$ createdb sequel_test
$ bundle exec sequel -E -m migrations postgres://localhost/sequel_test
$ ruby bug.rb
In pry (in command line):
[1] pry(main)> Order.eager(:user).each {}; nil
I, [2014-02-28T15:20:06.408224 #39286] INFO -- : (0.000649s) SELECT *
FROM "orders" <-- No query for users :(
=> nil
[2] pry(main)> Order.eager(:user).last(10).each {}; nil
I, [2014-02-28T15:23:29.914055 #39423] INFO -- : (0.000580s) SELECT *
FROM "orders" ORDER BY "id" DESC LIMIT 10
I, [2014-02-28T15:23:29.915088 #39423] INFO -- : (0.000378s) SELECT *
FROM "users" WHERE ("users"."id" IN (5, 4, 3, 2, 1))
=> nil
Is there a bug or am I doing anything wrong?
Thank you,
Ollie
--
You received this message because you are subscribed to the Google Groups
"sequel-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sequel-talk.
For more options, visit https://groups.google.com/groups/opt_out.