euruko 2009 - dataobjects

39
DataObjects

Upload: dirkjan-bussink

Post on 11-May-2015

2.118 views

Category:

Technology


1 download

DESCRIPTION

Slides from the Euruko 2009 talk on DataObjects, the unified database access API for Ruby

TRANSCRIPT

Page 1: Euruko 2009 - DataObjects

DataObjects

Page 2: Euruko 2009 - DataObjects

Dirkjan Bussink

Page 3: Euruko 2009 - DataObjects
Page 4: Euruko 2009 - DataObjects
Page 5: Euruko 2009 - DataObjects
Page 6: Euruko 2009 - DataObjects
Page 7: Euruko 2009 - DataObjects
Page 8: Euruko 2009 - DataObjects
Page 9: Euruko 2009 - DataObjects
Page 10: Euruko 2009 - DataObjects
Page 11: Euruko 2009 - DataObjects
Page 12: Euruko 2009 - DataObjects
Page 13: Euruko 2009 - DataObjects
Page 14: Euruko 2009 - DataObjects
Page 15: Euruko 2009 - DataObjects

© Jon Truran

Page 16: Euruko 2009 - DataObjects
Page 17: Euruko 2009 - DataObjects

Text

Sorry for the photoshop skills...

Page 18: Euruko 2009 - DataObjects

connection = Mysql.real_connect("localhost", "root", "", "do_test")reader = connection.query("SELECT login, password FROM users")reader.each do |row| row[0] => 'dbussink' row[1] => 'secret'end

connection = OCI8.new("root", "", "localhost")reader = connection.exec("SELECT login, password FROM users")while row = reader.fetch row[0] => 'dbussink' row[1] => 'secret'end

connection = PGconn.connect("localhost", 5432, nil, nil, "do_test", "root", "")reader = connection.exec("SELECT login, password FROM users")

for i in 0...reader.ntuples do reader.getvalue(i,0) => 'dbussink' reader.getvalue(i,1) => 'secret'end

connection = SQLite3::Database.new("do_test.db")reader = connection.execute("SELECT login, password FROM users")

reader[0][0] => 'dbussink'reader[0][1] => 'secret'

Page 19: Euruko 2009 - DataObjects

It’s all about the API

Page 20: Euruko 2009 - DataObjects

connection = DataObjects::Connection.new("mysql://root@localhost/do_test")command = connection.create_command("INSERT INTO users (login) VALUES ('dbussink')")result = command.execute_non_query

result.affected_rows => 1result.insert_id => 2

Page 21: Euruko 2009 - DataObjects

connection = DataObjects::Connection.new("mysql://root@localhost/do_test")command = connection.create_command("SELECT id, login, created_at FROM users")reader = command.execute_reader

reader.fields => ['id', 'login', 'created_at']

while reader.next! reader.values => [1, 'dbussink', Date.civil(2009, 5, 10)]end

Page 22: Euruko 2009 - DataObjects

Typecasting

Page 23: Euruko 2009 - DataObjects

connection = DataObjects::Connection.new("mysql://root@localhost/do_test")command = connection.create_command("SELECT id, login, created_at FROM users")command.set_types(String, String, String)reader = command.execute_reader

reader.fields => ['id', 'login', 'created_at']

while reader.next! reader.values => ['1', 'dbussink', '2009-5-10']end

Page 24: Euruko 2009 - DataObjects

connection = DataObjects::Connection.new("mysql://root@localhost/do_test")

command = connection.create_command("SELECT id, login, password FROM users WHERE login = ?")reader = command.execute_reader('dbussink')reader.fields => ['id', 'login', 'created_at']

while reader.next! reader.values => [1, 'dbussink', Date.civil(2009, 5, 10)]end

Page 25: Euruko 2009 - DataObjects

IntegerString

Float

BigDecimalDate

DateTimeTrueClass

Page 26: Euruko 2009 - DataObjects

Shared specs

Page 27: Euruko 2009 - DataObjects

describe DataObjects::Postgres::Command do it_should_behave_like 'a Command' it_should_behave_like 'a Command with async'end

Page 28: Euruko 2009 - DataObjects

describe DataObjects::Postgres::Command do it_should_behave_like 'a Command' it_should_behave_like 'a Command with async'end

Implement standard Command API

Page 29: Euruko 2009 - DataObjects

describe DataObjects::Postgres::Command do it_should_behave_like 'a Command' it_should_behave_like 'a Command with async'end

Implement standard Command API

Command is green thread friendly

Page 30: Euruko 2009 - DataObjects

describe 'DataObjects::Postgres with BigDecimal' do it_should_behave_like 'supporting BigDecimal' it_should_behave_like 'supporting BigDecimal autocasting'end

Page 31: Euruko 2009 - DataObjects

describe 'DataObjects::Postgres with BigDecimal' do it_should_behave_like 'supporting BigDecimal' it_should_behave_like 'supporting BigDecimal autocasting'end

Deserialize and serialize BigDecimal

Page 32: Euruko 2009 - DataObjects

describe 'DataObjects::Postgres with BigDecimal' do it_should_behave_like 'supporting BigDecimal' it_should_behave_like 'supporting BigDecimal autocasting'end

Deserialize and serialize BigDecimal

Database provides a mapped type (DECIMAL)

Page 33: Euruko 2009 - DataObjects
Page 34: Euruko 2009 - DataObjects

How can I help?

Page 35: Euruko 2009 - DataObjects

Improved transactions

Page 36: Euruko 2009 - DataObjects

Prepared statements

Page 37: Euruko 2009 - DataObjects

Specs!And documentation too :)

Page 38: Euruko 2009 - DataObjects

ActiveRecord adapter

Page 39: Euruko 2009 - DataObjects