MongoDBのクエリをSQLのWHERE句に変換してみるテスト

全くもって誰得なんですが、ちょっと訳あってこういう感じのものが必要そうなので作ってみました。まだMySQLに投げたわけじゃないので文法的にホントにあってるかとか、そもそもプレースホルダ使えよとか色々あると思いますが、自分としては再帰呼び出し使ってANDとORをそれっぽく解釈できたかなと思うのでひとまずシェア。

追記

コメントでも指摘されましたので、プレースホルダ使う様に変更してみました。

こんな感じに変換してくれます。Mongoのクエリは、基本的にJSON likeなので、フィールドとの関係を示す記号が「:」しかないので、オペレータとして新たにハッシュを作って条件与えるみたいな構造になるので、複雑な条件書こうとすると書くほうが発狂しそうになりますね!

あと、JSONなんで、同じフィールドに複数条件つけたい時は$andで並べてあげる必要があることにこれ作ってて気づきました。ORをANDで繋ぎたい時にどうやるんだろうとかなり長いこと悩みました。。。

こうしてみると、SQLってのは「問い合わせ言語」としてはとてもよく出来ているなぁと思いました。まぁ裏返して言うとそのパーザってやばいんだろうなぁと。。。MySQLのパーザとかコード読んだことはないですが、発狂しそう。。。

こんな感じで、普段触っているソフトウェアと同じような役割なんだけど違うアプローチのものを勉強すると、改めて普段使ってるもののありがたみとかが分かっちゃうし、一石二鳥ですばらしいですね!

というわけでやっつけで書いたPerlのコードはこちら。

AC 12-05-27 (日) 15:55

とりあえず looks_like_number で数字っぽくないときの文字列に single-quote が入ってるとまずそうです

riywo 12-05-28 (月) 0:42

>ACさん

ありがとうございます。確かに><
エスケープにも気をつけますー。