From: Carl Worth Date: Sun, 25 Oct 2009 15:57:09 +0000 (-0700) Subject: Add comment documenting our current database schema. X-Git-Tag: 0.1~717 X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=commitdiff_plain;h=32ecfe72a1da9002b8617a8575ee1290c8fd3c6f Add comment documenting our current database schema. I've got schemes to change this schema somewhat dramatically, so I want a place to be able to record and review those changes. --- diff --git a/database.cc b/database.cc index 751e2d99..b3929141 100644 --- a/database.cc +++ b/database.cc @@ -35,6 +35,55 @@ typedef struct { const char *prefix; } prefix_t; +/* Here's the current schema for our database: + * + * We currently have two different types of documents: mail and timestamps. + * + * Mail document + * ------------- + * A mail document is associated with a particular email message file + * on disk. It is indexed with the following prefixed terms: + * + * Single terms of given prefix: + * + * type: mail + * + * id: Unique ID of mail, (from Message-ID header or generated + * as "notmuch-sha1-. + * + * Multiple terms of given prefix: + * + * ref: The message IDs from all In-Reply-To and References + * headers in the message. + * + * tag: Any tags associated with this message by the user. + * + * thread: The thread ID of all threads to which the mail belongs + * + * A mail document also has two values: + * + * TIMESTAMP: The time_t value corresponding to the message's + * Date header. + * + * MESSAGE_ID: The unique ID of the mail mess (see "id" above) + * + * Timestamp document + * ------------------ + * A timestamp document is used by a client of the notmuch library to + * maintain data necessary to allow for efficient polling of mail + * directories. The notmuch library does no interpretation of + * timestamps, but merely allows the user to store and retrieve + * timestamps as name/value pairs. + * + * The timestamp document is indexed with a single prefixed term: + * + * timestamp: The user's key value (likely a directory name) + * + * and has a single value: + * + * TIMETAMPS: The time_t value from the user. + */ + /* With these prefix values we follow the conventions published here: * * http://xapian.org/docs/omega/termprefixes.html