[PATCH] add has: query prefix to search for specific properties
authorDaniel Kahn Gillmor <dkg@fifthhorseman.net>
Fri, 8 Jul 2016 09:15:36 +0000 (11:15 +0200)
committerW. Trevor King <wking@tremily.us>
Sat, 20 Aug 2016 23:22:11 +0000 (16:22 -0700)
04/9366409965e2aa18b93a4c5c2e96b815281f90 [new file with mode: 0644]

diff --git a/04/9366409965e2aa18b93a4c5c2e96b815281f90 b/04/9366409965e2aa18b93a4c5c2e96b815281f90
new file mode 100644 (file)
index 0000000..16547ee
--- /dev/null
@@ -0,0 +1,91 @@
+Return-Path: <dkg@fifthhorseman.net>\r
+X-Original-To: notmuch@notmuchmail.org\r
+Delivered-To: notmuch@notmuchmail.org\r
+Received: from localhost (localhost [127.0.0.1])\r
+ by arlo.cworth.org (Postfix) with ESMTP id 00B496DE0A4B\r
+ for <notmuch@notmuchmail.org>; Fri,  8 Jul 2016 03:14:11 -0700 (PDT)\r
+X-Virus-Scanned: Debian amavisd-new at cworth.org\r
+X-Spam-Flag: NO\r
+X-Spam-Score: 0.038\r
+X-Spam-Level: \r
+X-Spam-Status: No, score=0.038 tagged_above=-999 required=5 tests=[AWL=0.038]\r
+ autolearn=disabled\r
+Received: from arlo.cworth.org ([127.0.0.1])\r
+ by localhost (arlo.cworth.org [127.0.0.1]) (amavisd-new, port 10024)\r
+ with ESMTP id fgf4MI_KJlNz for <notmuch@notmuchmail.org>;\r
+ Fri,  8 Jul 2016 03:14:03 -0700 (PDT)\r
+Received: from che.mayfirst.org (che.mayfirst.org [162.247.75.118])\r
+ by arlo.cworth.org (Postfix) with ESMTP id 1632C6DE091B\r
+ for <notmuch@notmuchmail.org>; Fri,  8 Jul 2016 03:13:14 -0700 (PDT)\r
+Received: from fifthhorseman.net (unknown [88.128.80.54])\r
+ by che.mayfirst.org (Postfix) with ESMTPSA id 33AE7F98B\r
+ for <notmuch@notmuchmail.org>; Fri,  8 Jul 2016 06:13:13 -0400 (EDT)\r
+Received: by fifthhorseman.net (Postfix, from userid 1000)\r
+ id A10D720A8B; Fri,  8 Jul 2016 11:15:36 +0200 (CEST)\r
+From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>\r
+To: Notmuch Mail <notmuch@notmuchmail.org>\r
+Subject: [PATCH] add has: query prefix to search for specific properties\r
+Date: Fri,  8 Jul 2016 11:15:36 +0200\r
+Message-Id: <1467969336-7605-1-git-send-email-dkg@fifthhorseman.net>\r
+X-Mailer: git-send-email 2.8.1\r
+In-Reply-To: <1465779955-5539-9-git-send-email-david@tethera.net>\r
+References: <1465779955-5539-9-git-send-email-david@tethera.net>\r
+X-BeenThere: notmuch@notmuchmail.org\r
+X-Mailman-Version: 2.1.20\r
+Precedence: list\r
+List-Id: "Use and development of the notmuch mail system."\r
+ <notmuch.notmuchmail.org>\r
+List-Unsubscribe: <https://notmuchmail.org/mailman/options/notmuch>,\r
+ <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>\r
+List-Archive: <http://notmuchmail.org/pipermail/notmuch/>\r
+List-Post: <mailto:notmuch@notmuchmail.org>\r
+List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>\r
+List-Subscribe: <https://notmuchmail.org/mailman/listinfo/notmuch>,\r
+ <mailto:notmuch-request@notmuchmail.org?subject=subscribe>\r
+X-List-Received-Date: Fri, 08 Jul 2016 10:14:11 -0000\r
+\r
+We want to be able to query the properties directly, like:\r
+\r
+   notmuch count has:foo=bar\r
+\r
+which should return a count of messages where the property with key\r
+"foo" has value equal to "bar".\r
+\r
+This patch could be improved:\r
+\r
+If no = sign is present (e.g. "has:foo"), it'd be nice to just match\r
+ on every message that has property "foo", regardless of value.\r
+\r
+It would also be good to include some tests.\r
+---\r
+ lib/database.cc | 4 ++++\r
+ 1 file changed, 4 insertions(+)\r
+\r
+This applies atop bermner's "message properties" series, and makes it\r
+possible to query for messages with specific properties.\r
+\r
+diff --git a/lib/database.cc b/lib/database.cc\r
+index 3a741f0..3bdbd07 100644\r
+--- a/lib/database.cc\r
++++ b/lib/database.cc\r
+@@ -97,6 +97,9 @@ typedef struct {\r
+  *                    STRING is the name of a file within that\r
+  *                    directory for this mail message.\r
+  *\r
++ *      has:       Has a property with key=value\r
++ *                 FIXME: if no = is present, should match on any value\r
++ *\r
+  *    A mail document also has four values:\r
+  *\r
+  *    TIMESTAMP:      The time_t value corresponding to the message's\r
+@@ -260,6 +263,7 @@ static prefix_t BOOLEAN_PREFIX_EXTERNAL[] = {\r
+     { "is",                   "K" },\r
+     { "id",                   "Q" },\r
+     { "path",                 "P" },\r
++    { "has",                  "XPROPERTY" },\r
+     /*\r
+      * Without the ":", since this is a multi-letter prefix, Xapian\r
+      * will add a colon itself if the first letter of the path is\r
+-- \r
+2.8.1\r
+\r