This series is not as long as it looks! Patch 5 is the only one that's even slightly lengthy and almost any prefix of the series can be sensibly reviewed and pushed on its own.
This series implements support for database features as described in my earlier proposal [1]. This should simplify future database schema changes and upgrades, enabling us to iterate faster on notmuch's core. It also substantially improves forward and backwards compatibility and improves user error reporting related to compatibility. Patches 9 and on make use of database features throughout the rest of libnotmuch to simplify and improve code, improve performance, and even make the libnotmuch interface safer and easier to use correctly. Once features support has been merged, it should be easy to implement various pending changes, including ghost messages [2] (I have this mostly implemented already) and ctimes [3]. [1] id:87sim8ob48.fsf at awakening.csail.mit.edu [2] id:20140421162058.GE25817 at mit.edu [3] id:87wqexnqvb.fsf at ta.scs.stanford.edu