データベース管理システム(4)

API追加。

int update( DB_t* dbp, POS_t* pos, char* data, int datalen, int skip );
int recover( DB_t* dbp, POS_t* pos );

update() は指定された位置のデータを置換えていく。置換えが途中までだとしても、元データの長さは変わらない。もし置き換えるデータがもとのデータの終端を飛び越えようとしたら、置換えをそこで打ち切る。打ち切ったか、置換えきったかは戻り値で分かるようにする。skip引数は、指定されたバイト数分先から置換えを始めるのに使う。が、あまり使ってほしくないと思っている。普通は、0 を指定する。

recover() は削除されたデータを復帰する。その後再び、update()、fetch()、seek()、もちろん、delete() の対象となる。そのため、delete() で、空いた領域の再利用はしない。したら、recover() できない。これは逆かな。空いた領域の再利用はするつもりないから、recover() を追加したのだった。

データの一生。
データは格納位置で固体識別情報を与えられ、生涯を送る。
insert() で格納位置を新しく割り当てられることで誕生し、
update() で格納位置を変えないで格納内容を刻々を変えていき、
delete() で格納位置の抹消とともに消滅する。
insert() で始まり、update() を繰り返し、delete() で終わる。
これがデータの一生と考える。

そろそろ、DBファイル内部の格納形式について考えねば。