X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=cdb%2Fcdb.tct;h=d414f0d9939b8786d4507bb497539b887e247f23;hb=0a9545b82e4d628345e979c47d5f0a162b8af2bb;hp=017b4e63abedb69b96503f61c75b6a5e7cb5756b;hpb=4d5a1756e972ca3970cc5d7b9854a36ff3e47d1a;p=chiark-tcl.git diff --git a/cdb/cdb.tct b/cdb/cdb.tct index 017b4e6..d414f0d 100644 --- a/cdb/cdb.tct +++ b/cdb/cdb.tct @@ -1,10 +1,27 @@ +# cdb, cdb-wr - Tcl bindings for tinycdb and a journalling write extension +# Copyright 2006 Ian Jackson +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301, USA. + + Table *cdbtoplevel TopLevel_Command cdb - subcmd enum(Cdb/_SubCommand, "cdb subcommand") - ... obj + dispatch(Cdb/_SubCommand, "cdb subcommand") cdb-wr - subcmd enum(Cdbwr/_SubCommand, "cdb-wr subcommand") - ... obj + dispatch(Cdbwr/_SubCommand, "cdb-wr subcommand") Table cdb Cdb_SubCommand open @@ -13,11 +30,13 @@ Table cdb Cdb_SubCommand lookup db iddata(&cdbtcl_databases) key obj + ?def obj => obj lookup-hb db iddata(&cdbtcl_databases) key hb - => hb + ?def obj + => obj close db iddata(&cdbtcl_databases) @@ -28,7 +47,7 @@ Table cdbwr Cdbwr_SubCommand # .main # .lock # .cdb - # .log + # .jrn # .tmp (might be new .main or new .cdb) # invariants: # .lock is an empty file @@ -38,43 +57,45 @@ Table cdbwr Cdbwr_SubCommand # .cdb is a cdb database containing data # equivalent to and at least as recent as .main # (maybe not identical, because .cdb may - # have been updated with data from .log but - # .main not yet); if .log does not exist then + # have been updated with data from .jrn but + # .main not yet); if .jrn does not exist then # they are identical) # .cdb may not exist; in which case it is to # be treated as if it existed and was empty # but this is maximally early (so main must # exist and be empty since .main is never # newer than .cdb) - # if .log exists, it is a cdb native + # if .jrn exists, it is a cdb native # text file _without the trailing newline_; # its contents override values from .main or .cdb # if .main.tmp or .cdb.tmp exists it is irrelevant - # zero length values mean record is deleted (in .log only; + # zero length values mean record is deleted (in .jrn only; # forbidden elsewhere) # while db is open: # .lock is locked - # .log and open hash table contain same info + # .jrn and open hash table contain same info open 0 pathb string on_info obj - ?on_mintstamp obj - # on_mintstamp present and not empty list: provides a - # script which returns the current mintstamp. This - # means entries start with a 16-hex-digit signed - # integer known as a tstamp; occasionally, - # on_mintstamp will be called and then entries whose - # tstamp is < mintstamp will be deleted automatically. + ?on_lexminval obj + # on_lexminval present and not empty list: provides a + # script which returns the current lexminval. In + # this case, occasionally, + # on_lexminval will be called and then entries whose + # value is lexically strictly less than lexminval + # will be deleted automatically. The comparison + # is bytewise on the UTF-8 representations. => iddata(&cdbtcl_rwdatabases) open-okjunk RWSCF_OKJUNK pathb string on_info obj - ?on_mintstamp obj + ?on_lexminval obj => iddata(&cdbtcl_rwdatabases) # on_info ...: # on_info open-clean # on_info open-dirty-start - # on_info open-dirty-junk + # on_info open-dirty-junk \ + # # on_info open-dirty-done # on_info compact-start # on_info compact-done @@ -87,8 +108,8 @@ Table cdbwr Cdbwr_SubCommand lookup-hb 0 db iddata(&cdbtcl_rwdatabases) key string - ?def hb - => hb + ?def obj + => obj delete 0 db iddata(&cdbtcl_rwdatabases) key string @@ -104,7 +125,8 @@ Table cdbwr Cdbwr_SubCommand db iddata(&cdbtcl_rwdatabases) compact-check 0 db iddata(&cdbtcl_rwdatabases) - compact-onupdate 0 # this is the default + compact-auto 0 + # this is the default db iddata(&cdbtcl_rwdatabases) compact-explicit 0 db iddata(&cdbtcl_rwdatabases)