X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;ds=inline;f=cdb%2Fcdb.tct;h=889e72aab507769c87334a5cf2aea7ddd8b23906;hb=a3466b322998a623a15907a5c3520b4f30d1c050;hp=0999af9d94018820df2bc43cd76f78836ddde89e;hpb=6c2630597a21671a6b44954cb829b98dd84a22ee;p=chiark-tcl.git diff --git a/cdb/cdb.tct b/cdb/cdb.tct index 0999af9..889e72a 100644 --- a/cdb/cdb.tct +++ b/cdb/cdb.tct @@ -1,10 +1,25 @@ +# cdb, cdb-wr - Tcl bindings for tinycdb and a journalling write extension +# Copyright 2006-2012 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, see . + + 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 +28,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 +45,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,62 +55,76 @@ 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_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_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 # on_info close lookup 0 db iddata(&cdbtcl_rwdatabases) - key obj + key string ?def obj => obj lookup-hb 0 db iddata(&cdbtcl_rwdatabases) - key hb - ?def hb - => hb + key string + ?def obj + => obj + delete 0 + db iddata(&cdbtcl_rwdatabases) + key string update 0 db iddata(&cdbtcl_rwdatabases) - key obj + key string value obj update-hb 0 db iddata(&cdbtcl_rwdatabases) - key hb + key string value hb compact-force 0 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)