Top Banner
DataObjects
39

Euruko 2009 - DataObjects

May 11, 2015

Download

Technology

Dirkjan Bussink

Slides from the Euruko 2009 talk on DataObjects, the unified database access API for Ruby
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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