sequel @ madrid-rb

39
Fernando Blat @ferblape Tuesday, April 12, 2011

Upload: fernando-blat

Post on 20-Jan-2015

993 views

Category:

Technology


3 download

DESCRIPTION

My talk about Sequel @ Madrid Ruby user group

TRANSCRIPT

Page 1: Sequel @  madrid-rb

Fernando Blat@ferblape

Tuesday, April 12, 2011

Page 2: Sequel @  madrid-rb

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

Page 3: Sequel @  madrid-rb

Sequel!

Tuesday, April 12, 2011

Page 4: Sequel @  madrid-rb

Dataset

Tuesday, April 12, 2011

Page 5: Sequel @  madrid-rb

Representación de un conjunto de filas de una

o varias tablas

Tuesday, April 12, 2011

Page 6: Sequel @  madrid-rb

users - id - username - email - created_at

updates - id - user_id - message - created_at

Tuesday, April 12, 2011

Page 7: Sequel @  madrid-rb

DB = Sequel.connect('sqlite://ddbb.sqlite3')

DB.class=> Sequel::Postgres::Database

Tuesday, April 12, 2011

Page 8: Sequel @  madrid-rb

users = DB[:users]=> #<Sequel::SQLite::Dataset: "SELECT * FROM `users`">

Tuesday, April 12, 2011

Page 9: Sequel @  madrid-rb

users.filter("email = ?", '[email protected]')

=> #<Sequel::SQLite::Dataset: "SELECT * FROM `users` WHERE (email = '[email protected]')">

Tuesday, April 12, 2011

Page 10: Sequel @  madrid-rb

users.filter("email = ?", '[email protected]').sql

=> "SELECT * FROM `users` WHERE (email = '[email protected]')

Tuesday, April 12, 2011

Page 11: Sequel @  madrid-rb

Un Dataset es una representación

Tuesday, April 12, 2011

Page 12: Sequel @  madrid-rb

#first, #last, #count,

#all, ...

Tuesday, April 12, 2011

Page 13: Sequel @  madrid-rb

Algunas consultas con Sequel

Tuesday, April 12, 2011

Page 14: Sequel @  madrid-rb

users[1]

users[:username => 'blat']

Tuesday, April 12, 2011

Page 17: Sequel @  madrid-rb

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

Page 18: Sequel @  madrid-rb

Inserciones

Tuesday, April 12, 2011

Page 19: Sequel @  madrid-rb

users.insert(:username => 'blat', :email => '[email protected]')=> 1

users.insert(:username => 'blatvizz', :email => '[email protected]')=> 2

Tuesday, April 12, 2011

Page 20: Sequel @  madrid-rb

Actualizaciones

Tuesday, April 12, 2011

Page 21: Sequel @  madrid-rb

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

Page 22: Sequel @  madrid-rb

Resultados de las consultas

Tuesday, April 12, 2011

Page 23: Sequel @  madrid-rb

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

Page 24: Sequel @  madrid-rb

users.to_hash(:id,:username)

=> {1=>"blat", 2=>"blatvizz"}

Tuesday, April 12, 2011

Page 25: Sequel @  madrid-rb

users.select_map(:username)

=> ["blat", "blatvizz"]

Tuesday, April 12, 2011

Page 26: Sequel @  madrid-rb

Algunos ejemplos más esotéricos

Tuesday, April 12, 2011

Page 27: Sequel @  madrid-rb

users.group_and_count(:id).sql

=> "SELECT `id`, count(*) AS 'count' FROM `users` GROUP BY `id`"

Tuesday, April 12, 2011

Page 28: Sequel @  madrid-rb

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

Page 29: Sequel @  madrid-rb

users.select(:username___wadus).sql

=> "SELECT `username` AS 'wadus' FROM `users`"

Tuesday, April 12, 2011

Page 30: Sequel @  madrid-rb

Modelos

Tuesday, April 12, 2011

Page 31: Sequel @  madrid-rb

Tuesday, April 12, 2011

Page 32: Sequel @  madrid-rb

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

Page 33: Sequel @  madrid-rb

Más

Tuesday, April 12, 2011

Page 34: Sequel @  madrid-rb

• 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

Page 35: Sequel @  madrid-rb

Tuesday, April 12, 2011

Page 36: Sequel @  madrid-rb

¿Vale la pena utilizarlo con Rails?

Tuesday, April 12, 2011

Page 37: Sequel @  madrid-rb

Acoplamiento

• tareas Rake

• migraciones

• generadores

• config/database.yml

Tuesday, April 12, 2011

Page 38: Sequel @  madrid-rb

sequel-rails

Tuesday, April 12, 2011

Page 39: Sequel @  madrid-rb

Gracias!

Tuesday, April 12, 2011