DBIx::Skinny::SQL を PHP に移植してみました
まず最初に id:nekokak さん、ごめんなさい。
「DBIx::Skinny を使ってみました」
という日記を書くよりも先に「うわー。こんなモジュールが PHP でも使えたらステキだなぁ」と思ったので、勢いで、しかも勝手に (一部だけですが) 移植してみました。
ごめんなさい。ごめんなさい。
今まで PHP で SQL を発行する際には、id:fbis さんが作成された
- PHP 版 SQL-Abstract
- http://d.hatena.ne.jp/fbis/20070613/1181737366
と、適当につくった DBIC っぽい PDO のラッパを使っていましたが、最近 Perl で DBIx::Skinny を使ってみたら、これがすごくよくて。。。
そんなわけで、SQL を生成するロジックの部分だけ PHP に移植してみました。
使い方は、ほとんど DBIx::Skinny(::SQL) と同じなので Perl の Pod が役に立ちそうです。
が、配列と連想配列が区別できないという変態的仕様や、リファレンスという概念が存在しないといった理由などから、一部機能を置き換えたりしています。
あと、本家にはなかった "BETWEEN" の構文を作成する機能も、なんとなく気が向いたのでつけておきました。
今は DBIx::Skinny::SQL の部分だけを移植したので、INSERT / UPDATE / DELETE は生成できません。
また、SELECT の部分に関しても SQL::Abstract と大差ありませんが、根気がこのまま続けば DBIx::Skinny 自体を PHP に移植したいです。。。
ただ、とりあえず自分で使うのが主な用途なので PostgreSQL で動けばいいやという気分です。
が、(今のスキルだと) PHP に完全に移植するのは不可能な予感もすごくします。
特に、どうやって DSL みたいに記述できるようにするのかとか、クロージャとか。
あとは、リファレンスとか。。。
そして、最大の問題は、テストのコードを見ると顕著ですが、PHP で書くと array array array array ...
と、やたらとソースが見にくくなるということですね。。。
(Perl から輸入しているので当然かもしれませんが) 正直、PHP ってすごく読みにくい言語だなぁと
思っちゃいます。
あ、DBIx::Skinny の感想とかについてはまた改めて書きたいな。
というわけで、わーい。