名前
recno - レコード番号データベースへのアクセスメソッド
書式
#include <sys/types.h> #include <db.h>
説明
ルーチン dbopen はデータベースファイルに対するライブラリインターフェースである。 サポートされているファイルフォーマットの一つに、 レコード番号ファイル (record number file: recno file) がある。 データベースへのアクセスメソッドに関する一般的な記述は dbopen(3), に書かれている。 このマニュアルページでは recno 特有の情報についてのみ記述する。
レコード番号データ構造は、フラットなファイル形式に格納された 可変長/固定長レコードからなり、論理レコード番号でアクセスされる。 レコード番号 5 があれば、レコード番号 1 から 4 も存在する。 レコード番号 1 を削除すると、レコード番号 5 は 4 に付け替えられ、 カーソルも移動する。レコード番号 1 以降のものは一つ繰り上がるわけである。
dbopen で使う recno アクセスメソッドに特有のデータ構造体は、 <db.h> インクルードファイルで次のように定義されている。
typedef struct { u_long flags; u_int cachesize; u_int psize; int lorder; size_t reclen; u_char bval; char *bfname; } RECNOINFO;
この構造体の要素を以下に示す。
flags | flag の値は
以下の値のいずれかか、これらの論理和で指定される。
| ||||||||||||
cachesize | |||||||||||||
想定されるメモリキャッシュの最大サイズ (バイト単位)。 この値は あくまで 参考であり、アクセスメソッドはこの値を越えたメモリの 割り当てに成功することもある。 cachesize が 0 (あるいは指定されていない) の場合、デフォルトのキャッシュが使われる。 | |||||||||||||
psize | recno アクセスメソッドは、自身のレコードのコピーをメモリ内部に btree で保存している。 この値は、その btree 中のノードに対して用いられる ページサイズ (バイト単位) である。 psize が 0 (あるいは指定されていない) の場合、 ファイルシステムの I/O ブロックサイズを基にして ページサイズが決められる。 詳細は btree(3) を参照。 | ||||||||||||
lorder | データベースに格納されているメタデータの整数値のバイトオーダー。 この数字は、順序を整数で表したものである。 例えばビッグエンディアンなら、この数値は 4,321 となる。 lorder が 0 (指定されていない) の場合、現在のホスト で使われているバイトオーダーが使われる。 | ||||||||||||
reclen | 固定レコード長の長さ。 | ||||||||||||
bval | 可変レコード長において、 レコードの終りを示す区切りバイト (区切り文字) である。 固定レコード長では埋め文字として使われる。 値が指定されていないと、 可変レコード長のレコードの終りには改行 (\n) が使われる。 固定レコード長のレコードは空白 (space) で埋められる。 | ||||||||||||
bfname | recno アクセスメソッドは、 自身のレコードのコピーをメモリ内部で btree に保存している。 bfname が NULL でない場合、これは btree ファイル名 (btree ファイルを dbopen する時に指定するファイル名) を指定する。 | ||||||||||||
recno アクセスメソッドのファイルに関連づけられる メタデータは存在できないから、 デフォルト値 (固定レコード長やセパレータ文字など) に対する変更はファイルを開く毎に明示的に指定しなければならない。
dbopen で指定されたインターフェイスでは、 put インターフェイスを使って新しいレコードを作成するときに、 指定したレコード番号がデータベース中に存在している最大レコード番号より 一つ以上大きいと、 空のレコードが同時にできてしまう。
エラー
recno アクセスメソッドルーチンは失敗すると dbopen(3) で指定されているエラーに応じた errno か、 あるいは以下に示す errno をセットする。
[EINVAL] | |
固定長データベースにレコードを追加するとき、データが長すぎた。 | |
バグ
バイトオーダーとしてはビッグエンディアンとリトルエンディアンのみが サポートされている。
関連項目
btree(3) dbopen(3), hash(3), mpool(3)
Document Processing in a Relational Database System, Michael Stonebraker, Heidi Stettner, Joseph Kalash, Antonin Guttman, Nadene Lynn, Memorandum No. UCB/ERL M82/32, May 1982.