<< 前 ホーム 次 >>

bakaid: 20050926

require 'dbi'
handle = DBI.connect('DBI:Mysql:Mydb', 'anonymous', 'suomynona')
puts(handle.handle.bind(handle.handle, 
                       'insert into Mytable values (null, ?, ?)',
                       [1, 'foobar']))

たまにSQLの文字列そのものがほしいときもあります。

DBI.connectはDBI::DatabaseHandleを返します。上の例で、handle.handle と
いうのは、そのDatabaseHandleオブジェクトが持ってる
DBI::DBD::Mysql::Databaseオブジェクトです。Mysql::Databaseは
/usr/lib/ruby/1.8/DBI/Mysql.rbで定義されてます。

でも、bindメソッドの定義は、Mysql::Databaseがinclude している
SQL::BasicBind (dbi/sql.rb) にあります。Mysql::Databaseは、bindで使わ
れているquoterをオーバーライドしています。

確かに、SQLだけを生成することはそれほどありません。でも、今のDBIのAPI 
ではあまりにも使いにくいでしょう。できれば、Mysql::Databaseではなく、
DatabaseHandleが生成したほういいでしょう。

こんなことを書いてるのは、自分の都合も理由の1つです。でも、これからもっ
とDSL関係が流行るとしたら、SQLを扱う機会は増えるでしょう。でも、このあ
たりはフレームワークで吸収されてしまうでしょうか? そうだとしても、フ
レームワーク作る側からすれば、SQLの生成はもう少し使いやすいAPIのほうが
いいのではないでしょうか。

--

Exciteで翻訳されやすいように書いたつもりだけど、イマイチ。

--

ええっ? このページってブログだったんですか?!

--

ふーん、Caminoなんてブラウザがあるのか。

http://www.caminobrowser.org/

--

まつもとさんのDIコンテナ・ライブラリって現状、パブリック・ドメインだと
思うんですけど、いっそのことrubyパッケージに入れてもらえませんか?

本家Permlink

<< 前 ホーム 次 >>


Copyright © 1905 tko at jitu.org

バカが征く on Rails