argius note

プログラミング関連

ファイルシステムをDBに見立ててJDBC経由SQLで検索

かなり以前から考えてはいたものの、なんやかんやでつまづいてお蔵入りしていたのを、先日また思い出して、ちょっとやってみたらJDBC接続とSQLエンジンは思いのほか簡単にプロトタイプができたのでメモっておきます。

こんな風に

SELECT * FROM FS WHERE ROOT IN ('C:/','D:/')
          AND NAME LIKE '%.zip' AND SIZE>'10MB'

を実行すると、

name size(KB) mtime dir
aaa.zip 53354.9933 2011-04-18 22:23:04.0 D:\home

のようになります。


以前から思っていたのが、

  • WinFSがやるはずだった?、DBとしてファイルシステムを検索したい
    • LINQではできる?
  • Stew上でfind(Frui)を実行したい。できればSQLで。

そして、

  • Fruiに対話式I/Fを導入して検索結果を記録して再検索ができたら...

があって、これもお蔵入り。


JDBCドライバを作るのは以前からできていたので、

  • いっそのこと、DBエンジンも作ってしまうか?

となり、SQLパーサはOSSで無いかと探したらZqlというのが軽そうで同梱できそうなので、プロトを作るのに使いました。
本格実装するには、独自の構文がいくつか要るので、JavaCCで書き起こす?


今のところ、次のような機能を考えています。

  • システムテーブルfilesystemに対して検索
  • 検索結果は一時テーブルのresultとなる
  • 一時テーブルはコピーできる
  • 一時テーブルから永続テーブルを作ることができる
    • 一時テーブルはメモリのみに存在
    • 永続テーブルはファイルに存在
  • 一時テーブルのスタック
    • resultはスタックに自動挿入される
    • alter stack で操作?
  • サーバモードとオンメモリ(embed)モード