Re: [PATCH 1/2] Add Google Inc. to AUTHORS as a contributor.
[notmuch-archives.git] / 0f / 1defe8aeb281c6c5df1d4fc29965e39a4c499e
1 Return-Path: <amthrax@awakening.csail.mit.edu>\r
2 X-Original-To: notmuch@notmuchmail.org\r
3 Delivered-To: notmuch@notmuchmail.org\r
4 Received: from localhost (localhost [127.0.0.1])\r
5         by olra.theworths.org (Postfix) with ESMTP id A3969429E21\r
6         for <notmuch@notmuchmail.org>; Sun,  6 Nov 2011 09:15:41 -0800 (PST)\r
7 X-Virus-Scanned: Debian amavisd-new at olra.theworths.org\r
8 X-Spam-Flag: NO\r
9 X-Spam-Score: -0.7\r
10 X-Spam-Level: \r
11 X-Spam-Status: No, score=-0.7 tagged_above=-999 required=5\r
12         tests=[RCVD_IN_DNSWL_LOW=-0.7] autolearn=disabled\r
13 Received: from olra.theworths.org ([127.0.0.1])\r
14         by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024)\r
15         with ESMTP id VwHFG2isFMwS for <notmuch@notmuchmail.org>;\r
16         Sun,  6 Nov 2011 09:15:40 -0800 (PST)\r
17 Received: from dmz-mailsec-scanner-4.mit.edu (DMZ-MAILSEC-SCANNER-4.MIT.EDU\r
18         [18.9.25.15])\r
19         by olra.theworths.org (Postfix) with ESMTP id C3EFA431FB6\r
20         for <notmuch@notmuchmail.org>; Sun,  6 Nov 2011 09:15:40 -0800 (PST)\r
21 X-AuditID: 1209190f-b7f6e6d0000008df-59-4eb6c0ba7622\r
22 Received: from mailhub-auth-3.mit.edu ( [18.9.21.43])\r
23         by dmz-mailsec-scanner-4.mit.edu (Symantec Messaging Gateway) with SMTP\r
24         id 3F.C6.02271.AB0C6BE4; Sun,  6 Nov 2011 12:15:38 -0500 (EST)\r
25 Received: from outgoing.mit.edu (OUTGOING-AUTH.MIT.EDU [18.7.22.103])\r
26         by mailhub-auth-3.mit.edu (8.13.8/8.9.2) with ESMTP id pA6HFbLg004151; \r
27         Sun, 6 Nov 2011 12:15:37 -0500\r
28 Received: from awakening.csail.mit.edu (awakening.csail.mit.edu [18.26.4.91])\r
29         (authenticated bits=0)\r
30         (User authenticated as amdragon@ATHENA.MIT.EDU)\r
31         by outgoing.mit.edu (8.13.6/8.12.4) with ESMTP id pA6HFZWp006196\r
32         (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NOT);\r
33         Sun, 6 Nov 2011 12:15:36 -0500 (EST)\r
34 Received: from amthrax by awakening.csail.mit.edu with local (Exim 4.72)\r
35         (envelope-from <amthrax@awakening.csail.mit.edu>)\r
36         id 1RN6Lq-0006H1-FQ; Sun, 06 Nov 2011 12:17:46 -0500\r
37 From: Austin Clements <amdragon@MIT.EDU>\r
38 To: notmuch@notmuchmail.org\r
39 Subject: [PATCH] Store "from" and "subject" headers in the database.\r
40 Date: Sun,  6 Nov 2011 12:17:36 -0500\r
41 Message-Id: <1320599856-24078-1-git-send-email-amdragon@mit.edu>\r
42 X-Mailer: git-send-email 1.7.2.3\r
43 X-Brightmail-Tracker:\r
44  H4sIAAAAAAAAA+NgFlrEIsWRmVeSWpSXmKPExsUixCmqrbvrwDY/g23rtSxe7ta2uH5zJrMD\r
45         k8fnRU8ZPZ6tusUcwBTFZZOSmpNZllqkb5fAlXFx2W/mgm+yFWffcDcwzpToYuTgkBAwkXg7\r
46         L62LkRPIFJO4cG89WxcjF4eQwD5GibYLJ5hAEkIC6xklmj4rQSROMEms+fcMqmozo8TcLTNZ\r
47         QKrYBDQktu1fzghiiwhIS+y8O5sVxGYWsJbYcruDHcQWFnCRuHj9GxuIzSKgKjHl62Wwel4B\r
48         B4mtj84xQ5yhIPHqxlr2CYy8CxgZVjHKpuRW6eYmZuYUpybrFicn5uWlFuma6OVmluilppRu\r
49         YgQHhST/DsZvB5UOMQpwMCrx8Gbc2+onxJpYVlyZe4hRkoNJSZTXbv82PyG+pPyUyozE4oz4\r
50         otKc1OJDjBIczEoivJHpQDnelMTKqtSifJiUNAeLkjhv4w4HPyGB9MSS1OzU1ILUIpisDAeH\r
51         kgSvCTD4hQSLUtNTK9Iyc0oQ0kwcnCDDeYCGO4DU8BYXJOYWZ6ZD5E8xKkqJ8wqCJARAEhml\r
52         eXC9sKh9xSgO9IowLytIFQ8w4uG6XwENZgIa3K4LNrgkESEl1cBYkvC0NvCIoMxL42ez75m1\r
53         3iv7eOnqxCXK9ef3XGR6kap3Mci1cI9pfo/JvUdrtgrtOcgfsjC680uE1PPD81QcF7Mvfe1h\r
54         8NeudtuqoomKocsYE7XebjrHvkI8Y7am7eVUtlPR0dWliQFLr8i9WXSlr2Pd1RARjXLz2Sez\r
55         pLosMuvNtSZKPvRSYinOSDTUYi4qTgQAoou0ZrUCAAA=\r
56 Cc: notmuch@kismala.com\r
57 X-BeenThere: notmuch@notmuchmail.org\r
58 X-Mailman-Version: 2.1.13\r
59 Precedence: list\r
60 List-Id: "Use and development of the notmuch mail system."\r
61         <notmuch.notmuchmail.org>\r
62 List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,\r
63         <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>\r
64 List-Archive: <http://notmuchmail.org/pipermail/notmuch>\r
65 List-Post: <mailto:notmuch@notmuchmail.org>\r
66 List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>\r
67 List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,\r
68         <mailto:notmuch-request@notmuchmail.org?subject=subscribe>\r
69 X-List-Received-Date: Sun, 06 Nov 2011 17:15:41 -0000\r
70 \r
71 This is a rebase and cleanup of Istvan Marko's patch from\r
72 id:m3pqnj2j7a.fsf@zsu.kismala.com\r
73 \r
74 Search retrieves these headers for every message in the search\r
75 results.  Previously, this required opening and parsing every message\r
76 file.  Storing them directly in the database significantly reduces IO\r
77 and computation, speeding up search by between 50% and 10X.\r
78 \r
79 Taking full advantage of this requires a database rebuild, but it will\r
80 fall back to the old behavior for messages that do not have headers\r
81 stored in the database.\r
82 ---\r
83  lib/database.cc       |    2 +-\r
84  lib/message.cc        |   23 +++++++++++++++++++++--\r
85  lib/notmuch-private.h |   11 +++++++----\r
86  3 files changed, 29 insertions(+), 7 deletions(-)\r
87 \r
88 diff --git a/lib/database.cc b/lib/database.cc\r
89 index fa632f8..e4ef14e 100644\r
90 --- a/lib/database.cc\r
91 +++ b/lib/database.cc\r
92 @@ -1725,7 +1725,7 @@ notmuch_database_add_message (notmuch_database_t *notmuch,\r
93                 goto DONE;\r
94  \r
95             date = notmuch_message_file_get_header (message_file, "date");\r
96 -           _notmuch_message_set_date (message, date);\r
97 +           _notmuch_message_set_header_values (message, date, from, subject);\r
98  \r
99             _notmuch_message_index_file (message, filename);\r
100         } else {\r
101 diff --git a/lib/message.cc b/lib/message.cc\r
102 index 8f22e02..ca7fbf2 100644\r
103 --- a/lib/message.cc\r
104 +++ b/lib/message.cc\r
105 @@ -412,6 +412,21 @@ _notmuch_message_ensure_message_file (notmuch_message_t *message)\r
106  const char *\r
107  notmuch_message_get_header (notmuch_message_t *message, const char *header)\r
108  {\r
109 +    std::string value;\r
110 +\r
111 +    /* Fetch header from the appropriate xapian value field if\r
112 +     * available */\r
113 +    if (strcasecmp (header, "from") == 0)\r
114 +       value = message->doc.get_value (NOTMUCH_VALUE_FROM);\r
115 +    else if (strcasecmp (header, "subject") == 0)\r
116 +       value = message->doc.get_value (NOTMUCH_VALUE_SUBJECT);\r
117 +    else if (strcasecmp (header, "message-id") == 0)\r
118 +       value = message->doc.get_value (NOTMUCH_VALUE_MESSAGE_ID);\r
119 +\r
120 +    if (!value.empty())\r
121 +       return talloc_strdup (message, value.c_str ());\r
122 +\r
123 +    /* Otherwise fall back to parsing the file */\r
124      _notmuch_message_ensure_message_file (message);\r
125      if (message->message_file == NULL)\r
126         return NULL;\r
127 @@ -795,8 +810,10 @@ notmuch_message_set_author (notmuch_message_t *message,\r
128  }\r
129  \r
130  void\r
131 -_notmuch_message_set_date (notmuch_message_t *message,\r
132 -                          const char *date)\r
133 +_notmuch_message_set_header_values (notmuch_message_t *message,\r
134 +                                   const char *date,\r
135 +                                   const char *from,\r
136 +                                   const char *subject)\r
137  {\r
138      time_t time_value;\r
139  \r
140 @@ -809,6 +826,8 @@ _notmuch_message_set_date (notmuch_message_t *message,\r
141  \r
142      message->doc.add_value (NOTMUCH_VALUE_TIMESTAMP,\r
143                             Xapian::sortable_serialise (time_value));\r
144 +    message->doc.add_value (NOTMUCH_VALUE_FROM, from);\r
145 +    message->doc.add_value (NOTMUCH_VALUE_SUBJECT, subject);\r
146  }\r
147  \r
148  /* Synchronize changes made to message->doc out into the database. */\r
149 diff --git a/lib/notmuch-private.h b/lib/notmuch-private.h\r
150 index 0d3cc27..60a932f 100644\r
151 --- a/lib/notmuch-private.h\r
152 +++ b/lib/notmuch-private.h\r
153 @@ -93,7 +93,9 @@ NOTMUCH_BEGIN_DECLS\r
154  \r
155  typedef enum {\r
156      NOTMUCH_VALUE_TIMESTAMP = 0,\r
157 -    NOTMUCH_VALUE_MESSAGE_ID\r
158 +    NOTMUCH_VALUE_MESSAGE_ID,\r
159 +    NOTMUCH_VALUE_FROM,\r
160 +    NOTMUCH_VALUE_SUBJECT\r
161  } notmuch_value_t;\r
162  \r
163  /* Xapian (with flint backend) complains if we provide a term longer\r
164 @@ -269,9 +271,10 @@ void\r
165  _notmuch_message_ensure_thread_id (notmuch_message_t *message);\r
166  \r
167  void\r
168 -_notmuch_message_set_date (notmuch_message_t *message,\r
169 -                          const char *date);\r
170 -\r
171 +_notmuch_message_set_header_values (notmuch_message_t *message,\r
172 +                                   const char *date,\r
173 +                                   const char *from,\r
174 +                                   const char *subject);\r
175  void\r
176  _notmuch_message_sync (notmuch_message_t *message);\r
177  \r
178 -- \r
179 1.7.2.3\r
180 \r