Sequel
pure Ruby DB Toolkit
http://sequel.rubyforge.org/
Ruby Toolbox

• Database Abstraction - Adapters
• DSL - Ruby
• ORM - Models
Adapters

• SQLite
• MySQL (2)
• PostgreSQL
• DBI
gem install sequel
     gem install sqlite3
     gem install mysql2
Connect to DB


• DB = Sequel.sqlite   (in-memory)
Connect to DB


• DB = Sequel.sqlite (in-memory)
• DB = Sequel.connect (‘sqlite://test.db’)
Connect to DB

• DB = Sequel.sqlite (in-memory)
• DB = Sequel.connect (‘sqlite://test.db’)
• DB = Sequel.connect (‘mysql://...’)
• DB = Sequel.connect (‘postgres://...’)
Ruby Toolbox


sequel -E sqlite://test.db
Database Object
DB - Database Object

• DB.tables
• DB.table_exists?(:items)
• DB.schema(:items)
• DB.add_index :items, :name
SQL QUIZ !


Rename table
SQL QUIZ !


DB.rename_table
 :items , :mono
SQL QUIZ !


ALTER TABLE `items`
RENAME TO `mono`
DB.run(‘ALTER TABLE ’)




   DB.rename_table
Dataset Object
Unique for Sequel
Dataset object

SQL Query
      as
  Object
DB[:items]
Immutable

   Dataset
       Return


Dataset (copy)
Chainable

DB[:Items]




             SELECT * FROM `items`
Chainable

DB[:Items]    where(‘price > 10’)




             SELECT * FROM `items`
              WHERE (price > 100)
Chainable

DB[:Items]     where(‘price > 10’)   order(:name)   limit(10)




              SELECT * FROM `items`
               WHERE (price > 100)
             ORDER BY `name` LIMIT 10
Two type of returns
 Dataset   return   Dataset’


                    id   name
 Dataset   return
                    1     a
                    2     b


DB[:items].limit(10).all
require ‘sequel_core’
Model
require ‘sequel’
class Item < Sequel::Model
          Dataset
end
Associations
class Item < Sequel::Model
   many_to_one :users
end

class User < Sequel::Model
   one_to_many :items
end
Associations
   ActiveRecord            Sequel

     belongs_to         many_to_one

     has_many           one_to_many

has_and_belongs_to...   many_to_many

      has_one            one_to_one
Other features

• Model validations - validate_*
• Model hooks - before, after
• Migrations
• Transactions
Questions?

Sequel