Entry

SQL をきれいに埋め込みたい

2005年03月14日

Ruby の PostgreSQL 用拡張モジュール postgres を,ちまちまいぢっています。

本来的には,Ruby/DBI を使う方が美しい(?)んでしょうけど,なるべく低レベルなところから始めた方が,後から何かと役に立ちそうなので……オペアンプをいぢる前に,トランジスタをいぢる感じといえばいいでしょうか。

まぁ……こういう目論見って大抵外れるんですけどね(←「なんで初めから Ruby/DBI 使わなかったんだろう」と思うことになる)。それに,PostgreSQL にとっての「トランジスタ」は libpg なんだろうけれど,そこまで手を出している余裕がないところがヘタレだったりして……。

ともあれ,Ruby の PostgreSQL モジュールは良くできていて,リファレンスを読めば,すぐに大抵の作業が Ruby から扱えるようになります。ほとんどが,

# 組み込む
require "postgres"
# つなげる
conn = PGconn.connect("localhost", 5432, "", "", "test")
# SQL を実行
ret = conn.exec("select * from table1;")
# 返値は PGresult
p ret

みたいにすればいいだけ。難儀するのは,むしろ SQL の書き方の方ですね。

ただ,この場合,query を Ruby の文字列としてラップしているだけなので,書き方としてはあまり美しくありません。上記の "select ..." くらいなら短いけれど,少し複雑な query を作ろうと思うと,途端に汚くなってしまいます。

ここら辺,PHP や Perl ではどうやっているんだろうと思って,似たような本を読んでみたけれど(←立ち読み),低レベルのモジュールの場合,大抵同じようなことをやっているようです。Ruby/DBI も query を生成するところになると,SQL を埋め込むことになるみたい。せっかくスクリプト経由で RDB をいぢるなら,そのスクリプトの言語仕様に合わせたいですよね。

そんなところ,とりあえず SQL を他言語(ここでは Ruby)から自然に扱えるモジュールとして,rorm(Ruby Object-Rdbms Mapper)なるものを発見しました。どうやら,RDB の構造を Ruby のクラスにマッピングするモジュールみたい。そういえば,Java でも似たようなモジュールありましたよね。

ただ,あたしとしては,そこまで Ruby に寄せてしまうと,今度は PostgreSQL を理解できなくなってしまうので,ちょっと高機能すぎたりするんです(←わがまま)。RDB への問い合わせは postgres モジュールでやるとして,SQL の query だけをクラスにするようなモジュールがあったら嬉しいんですけど……そういうのはないのかな。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN