Notes C API探訪: ディレクトリにNSFSearch関数検索をかけた時の情報
前回の記事で、ディレクトリを表示しているページに、そのディレクトリに含まれるDBファイルや、サブディレクトリをリストアップする機能を紹介しました。
この機能は、ディレクトリページの上部にある、Expandボタンをクリックすることで表示できます。
クリックすると、コンテンツエリアが分割され、右ペインにテーブルが表示されます。
少しエリアを広げてみます。
$Pathはデータディレクトリをルートとした相対パスです。
$TypeはDBファイル($NOTEFILE)かディレクトリ($DIR)かの種類を表す文字列です。
$Infoはデータベース情報(タイトル、カテゴリ、クラス、設計クラス)で、4つの文字列データをセミコロンで区切っています。
$Lengthはファイルサイズを表しています。ただし、経験上これはバグを含んでいるのではと思っています。というのも、見ていただくとわかるとおり、ディレクトリの行は直前のファイルサイズを引きずっています。本来ここは「(no data)」としてデータが存在しないはずです。そこで、この後に登場する「$Length2」に機能を譲っていると思われます。
$TITLEは、ぱっと見データベースタイトルとなりそうですが、意に反してファイル名になっています。
$Modifiedは最終更新日、$PHYSICALPATHは絶対パス、$LinkInfoはここでは表示されていませんが、名前から推察するにリンク情報が入っていそうです。ヘッダーファイルには以下のような記述があるので、きっとこれらの文字列、ディレクトリリンクなら「$DIRLINK」、DBリンクなら「$DBLINK」が入るのでしょう。
// stdnames.nsf
#define DBDIR_LINK_ITEM "$LinkInfo"
#define DBDIR_DIRECTORY_LINK "$DIRLINK" /* Directory Link */
#define DBDIR_DATABASE_LINK "$DBLINK" /* Database Link */
続けてみていきます。
$Propertiesには、ディレクトリ時にのみ「Directory」という文字列が入っています。
$DBVERSIONSはODS番号(データベースの構造的なバージョン番号)のようです。
$LASTFIXUPは、最後にfixup(修復)をかけた日時でしょう。
容量(Quota)に関わる情報などに続き、先ほど紹介した$Length2が出てきました。これは前の検索結果を引きずることなくデータがきちんとない状態になっています。
その後はデータベースオプション2〜4が続きます。
$DATAMODは最終文書編集日時、$NONDATAMODは最終設計編集日時でしょうか。$CURRENTUSAGEは使用サイズ、$DAOS〜はDAOS関係の情報ですね。
$STORAGEPATH(ストレージパス)、$ReplFlags(複製フラグ)、$DB2LINK(DB2のリンク)が続きます。
$LASTCOMPACTは最後にcompact(圧縮)を実施した日時でしょう。
$NIFNSFSIZEと$NIFNSFSTATEは索引に関する情報だと思いますが、これはツールキットのヘッダーファイルには定義がありません。いわゆるアンドキュメントな情報です。
まとめ
NSFSearch関数をディレクトリに適用すると、ここまで紹介してきたデータを取得することができます。データベースに関する情報は、サマリーバッファを使うことでデータベースをオープンしなくても取れる情報があるので、上手に使うことでパフォーマンスに貢献することができそうです。