Skip to content

Instantly share code, notes, and snippets.

@eterps
Created April 6, 2016 15:17
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eterps/642c50ee93745933f7b93c3bcb5cbccf to your computer and use it in GitHub Desktop.
Save eterps/642c50ee93745933f7b93c3bcb5cbccf to your computer and use it in GitHub Desktop.
Sequel playground
#!/usr/bin/env ruby
require 'sequel'
require 'logger'
require 'awesome_print'
DB = Sequel.sqlite
DB.create_table :people do
primary_key :id
String :name
end
DB.create_table :posts do
primary_key :id
Integer :person_id
String :title
end
class Person < Sequel::Model
one_to_many :posts, eager: [:tags]
end
class Post < Sequel::Model
many_to_one :person
one_to_many :replies
many_to_many :tags
end
class Tag < Sequel::Model
many_to_many :posts
many_to_many :replies
end
class Reply < Sequel::Model
many_to_one :person
many_to_one :post
many_to_many :tags
end
person = Person.create(name: 'Bart')
Post.create(person: person, title: 'Hello')
Post.create(person: person, title: 'Hello 2')
person2 = Person.create(name: 'Homer')
Post.create(person: person2, title: 'Woohoo')
DB.loggers << Logger.new($stdout)
# === Main ===
Post.all.each{|post| ap [post.person.name, post.title]}
print "\n====================\n\n"
Post.eager(:person).all.each{|post| ap [post.person.name, post.title]}
@eterps
Copy link
Author

eterps commented Apr 6, 2016

Output:

I, [2016-04-06T17:16:44.655838 #7332]  INFO -- : (0.000071s) SELECT * FROM `posts`
I, [2016-04-06T17:16:44.656046 #7332]  INFO -- : (0.000069s) SELECT * FROM `people` WHERE `id` = 1
[
    [0] "Bart",
    [1] "Hello"
]
I, [2016-04-06T17:16:44.656309 #7332]  INFO -- : (0.000048s) SELECT * FROM `people` WHERE `id` = 1
[
    [0] "Bart",
    [1] "Hello 2"
]
I, [2016-04-06T17:16:44.656504 #7332]  INFO -- : (0.000050s) SELECT * FROM `people` WHERE `id` = 2
[
    [0] "Homer",
    [1] "Woohoo"
]

====================

I, [2016-04-06T17:16:44.656746 #7332]  INFO -- : (0.000064s) SELECT * FROM `posts`
I, [2016-04-06T17:16:44.657075 #7332]  INFO -- : (0.000078s) SELECT * FROM `people` WHERE (`people`.`id` IN (1, 2))
[
    [0] "Bart",
    [1] "Hello"
]
[
    [0] "Bart",
    [1] "Hello 2"
]
[
    [0] "Homer",
    [1] "Woohoo"
]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment