X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=cdb%2Fcdb.tct;h=889e72aab507769c87334a5cf2aea7ddd8b23906;hb=190fdf431e65f0276ce3c8c566248582f7c95abe;hp=e55e15c6a6d3f067d38deb21b04f93812370c577;hpb=ea19bd2a97c9a283245c23e07d26d177707b6fb1;p=chiark-tcl.git
diff --git a/cdb/cdb.tct b/cdb/cdb.tct
index e55e15c..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,69 +28,108 @@ 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)
Table cdbwr Cdbwr_SubCommand
- create-empty -1
+ create-empty 0
pathb string
# files:
# .main
+ # .lock
# .cdb
- # .log
+ # .jrn
# .tmp (might be new .main or new .cdb)
# invariants:
+ # .lock is an empty file
+ # which is locked with fcntl by open
# .main is a cdb native text file
# and always exists
- # if .tmp exists it is irrelevant
- # if .cdb exists it is a cdb database
- # containing exactly the same as .main
- # if .log exists, it is a cdb native
+ # .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 .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 .jrn exists, it is a cdb native
# text file _without the trailing newline_;
# its contents override values from .main or .cdb
- open -1
+ # if .main.tmp or .cdb.tmp exists it is irrelevant
+ # zero length values mean record is deleted (in .jrn only;
+ # forbidden elsewhere)
+ # while db is open:
+ # .lock is locked
+ # .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
+ # on_info open-dirty-start
+ # on_info open-dirty-junk \
+ #
+ # on_info open-dirty-done
# on_info compact-start
- # on_info compact-end
+ # on_info compact-done
# on_info close
- lookup 1
+ lookup 0
db iddata(&cdbtcl_rwdatabases)
- key obj
+ key string
+ ?def obj
=> obj
- lookup-hb 1
+ lookup-hb 0
db iddata(&cdbtcl_rwdatabases)
- key 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
- update-quick 1
+ compact-force 0
db iddata(&cdbtcl_rwdatabases)
- key obj
- value obj
- update-quick-hb 1
+ compact-check 0
db iddata(&cdbtcl_rwdatabases)
- key hb
- value hb
- close 0
+ compact-auto 0
+ # this is the default
db iddata(&cdbtcl_rwdatabases)
- close-quick 1
+ compact-explicit 0
+ db iddata(&cdbtcl_rwdatabases)
+ close 0
db iddata(&cdbtcl_rwdatabases)
EntryExtra Cdbwr_SubCommand
- int quick;
+ unsigned flags;