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.

Reply via email to