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

FenrirFSでのクエリの書き方

スマートフォルダをイザ使おうと思ったらひっかかったのでそのような話。FenrirFS 2.4.9での話なので、場合によっては時代遅れかもしれません。お気をつけて。

f:id:yukk_laz:20161216190213p:plain


SQLのクエリなんですが、『SELECT * FROM FILES WHERE』までクエリはセットされているので、Where句の内容だけ書けばいいということになります。SQLの細かい仕様については、各自調べるなり、デフォルトで入っているスマートフォルダのWhere句を参考にしてください。

カラムに入っている値の仕様

Readme.pdfに書いてあるものですが、一部書き換えています。

カラム名 説明 備考
FileName ファイルの名前。文字列型 エイリアスの名前は取得しない
DisplayFileName 表示されるファイル名。文字列型 ファイル・エイリアスに対応
FileSize ファイルサイズ。単位はバイト。数値型  
Comment コメント。文字列型  
Star お気に入りに設定しているか。数値型 1ならお気に入り
Point 使用頻度。数値型 高いほど多い。『よく使うファイル』は上から50個
FolderId フォルダ。数値型 1は作業用、3はアーカイブ済み、4はゴミ箱
LastExecuteDate 最後に使った日。文字列型 YYYY-MM-DD
LastExecuteTime 最後に使った時間。文字列型 HH:MM:SS
Extension ファイルの拡張子。文字列型 ドットつき。大文字なら大文字
AddDate FenrirFSに追加された日 YYYY-MM-DD
Alias エイリアスか。数値型 1ならエイリアス
IsFolder フォルダか。数値型 1ならフォルダ
AliasTarget エイリアス元のファイルパス エイリアスのみ?

特に、Extensionは『hoge.TXT』というファイルなら『.TXT』、『hige.wav』というファイルなら『.wav』と返ってきます。lower()という関数で小文字に変えたほうが手早く書けます。

その他仕様

orderbyとか使えなさそうですけど、Where句にのっぺりと『hoge in SELECT * FROM FILES WHERE hage ORDER BY hige』とか書けば使えます。デフォルトで入っている『よく使うファイル』のWhere句を参考にしてください。

内部的にはSQLITEのようなので*1、その手の高速化テクニックをそのまま応用できる可能性があります。ファイルの数が天文学数字の御仁はお試しあれ。

ANDやORはショートサーキットしていないと思われます。内部的にはsqliteを利用しているのは先述の通りですが、sqliteはショートサーキットをしてない(たぶん)ためです。ぼやっとしていますが、SQL自体ショートサーキットは『実装による』というぼやっとした表記なのでなんともいえません。一応、英語ですが以下のURLが参考になります。
sql - is sqlite short circuit in WHERE - Stack Overflow

また、カッコの入れ子関係がちゃんと解決されていないなど、構文解析の段階でエラーがあるときは処理をしません。その場合、特に音などはしません。

汎用的な書き方

(FolderId <> 4)

ゴミ箱に入っていないファイルを対象にする。

(lower(extension) in ('.wav', '.mpg'))

拡張子を小文字に揃えてから、wavとmpgを対象にする。『in』を『=』に書いても良いのだが、その場合『(lower(extension) = '.wav') AND (lower(extension) = '.mpg')』とやたら長くなるのでinの方がいい。

*1:プロファイルにsqlite形式のdbファイルが入っているため