Gen AI in Business - Global Trends Report 2024.pdf
MySQLドライバの改良と軽量O/Rマッパーの紹介
1. Ruby 01 LightningTalk
MySQL
O/R
makoto kuwata
http://www.kuwata-lab.com/
copyright(c) 2008 kuwata-lab.com all rights reserved.
1
2. 1
MySQL
copyright(c) 2008 kuwata-lab.com all rights reserved.
2
3. MySQL/Ruby
‣ MySQL/Ruby
• Ruby MySQL
• :
• Rails
• http://www.tmtm.org/mysql/ruby/
copyright(c) 2008 kuwata-lab.com all rights reserved.
3
4. ‣ Mysql::Result#fetch()
•
‣ Mysql::Stmt#fetch()
• 3.14 3.14000010490417
• timestamp Time Mysql::Time
copyright(c) 2008 kuwata-lab.com all rights reserved.
4
5. motto-mysql
‣ motto-mysql
• MySQL/Ruby
• http://motto-mysql.rubyforge.org/
http://github.com/kwatch/motto-mysql
• :
$ which mysql_config
/usr/local/mysql/bin/mysql_config
$ sudo gem install motto-mysql
copyright(c) 2008 kuwata-lab.com all rights reserved.
5
6. ‣ Mysql::Result
fetch
• #fetch_as_hash()/array()
• #fetch_all_as_hashes()/arrays()
‣ Mysql::Stmt 3.14 3.14
timestamp Time
• #fetch_as_hash()/array()
• #fetch_all_as_hashes()/arrays()
copyright(c) 2008 kuwata-lab.com all rights reserved.
6
7. ‣ MySQL::Result#fetch_as(klass)
MySQL::Result#fetch_all_as(klass)
• klass
• Hash fetch
copyright(c) 2008 kuwata-lab.com all rights reserved.
7
8. require 'mysql'
require 'motto_mysql'
conn = Mysql.connect('host', 'user', 'pass', 'db')
sql = 'select * from users'
result = conn.query(sql)
p result.fetch_as(User) #=> User object
result.fetch_all_as(User) do |user|
p user #=> User object
end
copyright(c) 2008 kuwata-lab.com all rights reserved.
8
11. ‣ integer(1) boolean
true/false
‣ '0000-00-00 00:00:00' Time Date
(ArgumentError)
‣ Ruby on Rails
copyright(c) 2008 kuwata-lab.com all rights reserved.
11
12. 2
O/R
copyright(c) 2008 kuwata-lab.com all rights reserved.
12
13. Kwery
‣ Kwery … O/R
• CGI
• Model class
• Join-less
• MySQL motto-mysql
• http://github.com/kwatch/kwery/
copyright(c) 2008 kuwata-lab.com all rights reserved.
13
14. class User
include Kwery::Model create table
DSL
create_table('users') do |t|
t.integer(:id) {|c| c.primary_key.serial }
t.string(:name) {|c| c.not_null.unique }
t.timestamp(:created_at) {|c|
c.default(:current_timestamp) }
end
end # User.to_sql SQL
copyright(c) 2008 kuwata-lab.com all rights reserved.
14
15. # Query
conn = Mysql.connect('host', 'user', 'pass', 'db')
q = Kwery::Query.new(conn)
#
# Hash
user = q.get(User, :id, 7)
# where order_by method chain
users = q.get_all(User) {|c|
c.where('age >', 20).order_by(:name) }
copyright(c) 2008 kuwata-lab.com all rights reserved.
15
16. : Join
‣ Join-less programming ( : )
• select * from users, groups where
user.group_id = groups.id;
select * from users;
select * from groups where id in (...);
• 1+N 2
users = q.get_all(User) #=> select * from users
q.bind_references_to(users, Group, 'team_id', 'team')
#=> select * from groups where id in (...)
copyright(c) 2008 kuwata-lab.com all rights reserved.
16
17. Web !
http://www.github.com/kwatch/kwery/
copyright(c) 2008 kuwata-lab.com all rights reserved.
17