Add the magic to allow searches such as "tag:inbox".
authorCarl Worth <cworth@cworth.org>
Sun, 25 Oct 2009 05:23:58 +0000 (22:23 -0700)
committerCarl Worth <cworth@cworth.org>
Sun, 25 Oct 2009 05:23:58 +0000 (22:23 -0700)
The key for this is call add_boolean_prefix on the QueryParser
object. That tells the query parser to take something like "tag:inbox"
and transform it into the "Linbox" term and do what it needs to do to
make this term a requirement of the search. We're starting to have a
real system here.

Also, I didn't want to expose the ugly name of "msgid" to the user, so
we add a prefix name of simply "id" instead.

database.cc

index 3d9672707b20a6213dc00cf4f83404da03508d5b..1666aff0a123d9d5c156ee20d8dc2c30d5b21602 100644 (file)
@@ -45,6 +45,7 @@ prefix_t BOOLEAN_PREFIX[] = {
     { "type", "K" },
     { "tag", "L" },
     { "msgid", "Q" },
+    { "id", "Q" },
     { "thread", "H" },
     { "ref", "R" },
     { "timestamp", "KTS" },
@@ -493,6 +494,9 @@ notmuch_database_open (const char *path)
        notmuch->query_parser = new Xapian::QueryParser;
        notmuch->query_parser->set_default_op (Xapian::Query::OP_AND);
        notmuch->query_parser->set_database (*notmuch->xapian_db);
+       notmuch->query_parser->add_boolean_prefix ("id", _find_prefix ("id"));
+       notmuch->query_parser->add_boolean_prefix ("tag", _find_prefix ("tag"));
+       notmuch->query_parser->add_boolean_prefix ("type", _find_prefix ("type"));
     } catch (const Xapian::Error &error) {
        fprintf (stderr, "A Xapian exception occurred: %s\n",
                 error.get_msg().c_str());