notmuch/lib
Austin Clements 8363c90531 lib: Database version 3: Introduce fine-grained "features"
Previously, our database schema was versioned by a single number.
Each database schema change had to occur "atomically" in Notmuch's
development history: before some commit, Notmuch used version N, after
that commit, it used version N+1.  Hence, each new schema version
could introduce only one change, the task of developing a schema
change fell on a single person, and it all had to happen and be
perfect in a single commit series.  This made introducing a new schema
version hard.  We've seen only two schema changes in the history of
Notmuch.

This commit introduces database schema version 3; hopefully the last
schema version we'll need for a while.  With this version, we switch
from a single version number to "features": a set of named,
independent aspects of the database schema.

Features should make backwards compatibility easier.  For many things,
it should be easy to support databases both with and without a
feature, which will allow us to make upgrades optional and will enable
"unstable" features that can be developed and tested over time.

Features also make forwards compatibility easier.  The features
recorded in a database include "compatibility flags," which can
indicate to an older version of Notmuch when it must support a given
feature to open the database for read or for write.  This lets us
replace the old vague "I don't recognize this version, so something
might go wrong, but I promise to try my best" warnings upon opening a
database with an unknown version with precise errors.  If a database
is safe to open for read/write despite unknown features, an older
version will know that and issue no message at all.  If the database
is not safe to open for read/write because of unknown features, an
older version will know that, too, and can tell the user exactly which
required features it lacks support for.
2014-08-30 10:42:08 -07:00
..
database-private.h lib: Database version 3: Introduce fine-grained "features" 2014-08-30 10:42:08 -07:00
database.cc lib: Database version 3: Introduce fine-grained "features" 2014-08-30 10:42:08 -07:00
directory.cc lib: Perform the same transformation to _notmuch_database_find_directory_id 2012-05-23 22:30:32 -03:00
filenames.c lib: fix NULL checks for filenames iterators 2012-09-01 23:03:11 -03:00
gen-version-script.sh build: add canonicalize_file_name to symbols exported from libnotmuch.so 2014-04-19 05:58:34 +09:00
index.cc lib: Index name and address of from/to headers as a phrase 2014-06-18 17:55:14 -03:00
libsha1.c util: detect byte order 2013-11-27 07:43:29 -04:00
libsha1.h fix sum moar typos [comments in source code] 2011-06-23 15:58:39 -07:00
Makefile fix sum moar typos [build scripts, Makefiles] 2011-06-23 15:44:59 -07:00
Makefile.local lib: Bump library version from 3.0.0 to 3.1.0 2013-12-07 10:31:19 +08:00
message-file.c lib: Start all function names in notmuch-private.h with 2014-07-13 12:25:29 -03:00
message.cc lib: Improve documentation of _notmuch_message_create_for_message_id 2014-08-05 08:14:15 -03:00
messages.c lib: Eliminate _notmuch_message_list_append 2013-02-18 20:20:38 -04:00
notmuch-private.h lib: Start all function names in notmuch-private.h with 2014-07-13 12:25:29 -03:00
notmuch.h lib: add return status to database close and destroy 2014-07-09 20:29:36 -03:00
parse-time-vrp.cc lib: add date range query support 2012-10-31 16:55:32 -03:00
parse-time-vrp.h lib: add date range query support 2012-10-31 16:55:32 -03:00
query.cc lib: make notmuch_threads_valid return FALSE when passed NULL 2014-01-24 20:20:54 -04:00
sha1.c lib: Start all function names in notmuch-private.h with 2014-07-13 12:25:29 -03:00
string-list.c Fixup string list author 2011-03-21 02:45:18 -04:00
tags.c lib: fix warnings when building with clang 2012-12-01 08:10:32 -04:00
thread.cc lib: Start all function names in notmuch-private.h with 2014-07-13 12:25:29 -03:00