sequel @ madrid-rb
DESCRIPTION
My talk about Sequel @ Madrid Ruby user groupTRANSCRIPT
Fernando Blat@ferblape
Tuesday, April 12, 2011
Un poco sobre mí
• De Valencia
• 4 años en The Cocktail y La Coctelera
• He sido freelance un tiempo
• Ahora trabajo en Vizzuality
• unvlog.com
• iwannagothere.com // mimaleta.com
• lacoctelera.com // partigi.com
• actuable.es
Tuesday, April 12, 2011
Sequel!
Tuesday, April 12, 2011
Dataset
Tuesday, April 12, 2011
Representación de un conjunto de filas de una
o varias tablas
Tuesday, April 12, 2011
users - id - username - email - created_at
updates - id - user_id - message - created_at
Tuesday, April 12, 2011
DB = Sequel.connect('sqlite://ddbb.sqlite3')
DB.class=> Sequel::Postgres::Database
Tuesday, April 12, 2011
users = DB[:users]=> #<Sequel::SQLite::Dataset: "SELECT * FROM `users`">
Tuesday, April 12, 2011
users.filter("email = ?", '[email protected]')
=> #<Sequel::SQLite::Dataset: "SELECT * FROM `users` WHERE (email = '[email protected]')">
Tuesday, April 12, 2011
users.filter("email = ?", '[email protected]').sql
=> "SELECT * FROM `users` WHERE (email = '[email protected]')
Tuesday, April 12, 2011
Un Dataset es una representación
Tuesday, April 12, 2011
#first, #last, #count,
#all, ...
Tuesday, April 12, 2011
Algunas consultas con Sequel
Tuesday, April 12, 2011
users[1]
users[:username => 'blat']
Tuesday, April 12, 2011
users.filter({:email => ['[email protected]','[email protected]']}).sql
=> "SELECT * FROM `users` WHERE (`email` IN ('[email protected]', '[email protected]'))"
Tuesday, April 12, 2011
users.filter({:email => ['[email protected]','[email protected]']} & ~{:username => 'blat'}).sql
=> "SELECT * FROM `users` WHERE ((`email` IN ('[email protected]', '[email protected]')) AND (`username` != 'blat'))"
Tuesday, April 12, 2011
users.filter{created_at > Date.today}.or{created_at < Date.today - 60}.order(:id).limit(10).sql
=> "SELECT * FROM `users` WHERE ((`created_at` > '2011-03-26') OR (`created_at` < '2011-01-25')) ORDER BY `id` LIMIT 10"
Tuesday, April 12, 2011
Inserciones
Tuesday, April 12, 2011
users.insert(:username => 'blat', :email => '[email protected]')=> 1
users.insert(:username => 'blatvizz', :email => '[email protected]')=> 2
Tuesday, April 12, 2011
Actualizaciones
Tuesday, April 12, 2011
users.update(:id => :id + 1000)=> 2
users.all=> [{:id=>1001, :username=>"blat", :email=>"[email protected]", :created_at=>2011-03-26 00:00:00 +0100}, {:id=>1002, :username=>"blatvizz", :email=>"[email protected]", :created_at=>2011-03-26 00:00:00 +0100}]
Tuesday, April 12, 2011
Resultados de las consultas
Tuesday, April 12, 2011
users.all
=> [{:id=>1, :username=>"blat", :email=>"[email protected]", :created_at=>nil}, {:id=>2, :username=>"blatvizz", :email=>"[email protected]", :created_at=>nil}]
Tuesday, April 12, 2011
users.to_hash(:id,:username)
=> {1=>"blat", 2=>"blatvizz"}
Tuesday, April 12, 2011
users.select_map(:username)
=> ["blat", "blatvizz"]
Tuesday, April 12, 2011
Algunos ejemplos más esotéricos
Tuesday, April 12, 2011
users.group_and_count(:id).sql
=> "SELECT `id`, count(*) AS 'count' FROM `users` GROUP BY `id`"
Tuesday, April 12, 2011
updates.join(users.filter{created_at < Date.today}, :id => :user_id).sql
=> "SELECT * FROM `updates` INNER JOIN (SELECT * FROM `users` WHERE (`created_at` < '2011-03-26')) AS 't1' ON (`t1`.`id` = `updates`.`user_id`)"
Tuesday, April 12, 2011
users.select(:username___wadus).sql
=> "SELECT `username` AS 'wadus' FROM `users`"
Tuesday, April 12, 2011
Modelos
Tuesday, April 12, 2011
Tuesday, April 12, 2011
class Table < Sequel::Model(:user_tables)
# Ignore mass-asigment on not allowed columns self.strict_param_setting = false
# Allowed columns set_allowed_columns(:name, :privacy, :tags)
def before_validation self.privacy ||= :public self.name = set_table_name if self.name.blank? super end ...
end
Tuesday, April 12, 2011
Más
Tuesday, April 12, 2011
• migraciones estilo ActiveRecord
• gestión de múltiples bbdd: maestro-esclavo, maestro-maestro
• sharding de tablas
• transacciones
• paginación
• zonas horarias
• relaciones
• dirty attributes
• serialización JSON
• compatibilidad con ActiveModel
• extensiones y plugins
Tuesday, April 12, 2011
Tuesday, April 12, 2011
¿Vale la pena utilizarlo con Rails?
Tuesday, April 12, 2011
Acoplamiento
• tareas Rake
• migraciones
• generadores
• config/database.yml
Tuesday, April 12, 2011
sequel-rails
Tuesday, April 12, 2011
Gracias!
Tuesday, April 12, 2011