読者です 読者をやめる 読者になる 読者になる

はちゅにっき

こっちのブログはまったり更新

DBIx::Skinny::SQL を PHP に移植してみました

まず最初に id:nekokak さん、ごめんなさい。
「DBIx::Skinny を使ってみました」
という日記を書くよりも先に「うわー。こんなモジュールが PHP でも使えたらステキだなぁ」と思ったので、勢いで、しかも勝手に (一部だけですが) 移植してみました。
ごめんなさい。ごめんなさい。

PDOxSkinny
http://github.com/magicalhat/PHP-PDOxSkinny/tree/master/lib/Skinny/SQL.php

今まで PHPSQL を発行する際には、id:fbis さんが作成された

PHPSQL-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 の感想とかについてはまた改めて書きたいな。


というわけで、わーい。