lib: Save and restore term position in message while indexing.
authorCarl Worth <cworth@cworth.org>
Wed, 26 Jan 2011 05:53:14 +0000 (15:53 +1000)
committerCarl Worth <cworth@cworth.org>
Wed, 26 Jan 2011 05:59:19 +0000 (15:59 +1000)
This fixes the recently addead search-position-overlap bug as
demonstrated in the test of the same name.

lib/message.cc

index 0d9542e653a4566e1554816646d591172c15a345..0590f7641303c9d991f02ef0a3cf857e3e9cd1db 100644 (file)
@@ -39,6 +39,7 @@ struct _notmuch_message {
     unsigned long flags;
 
     Xapian::Document doc;
+    Xapian::termcount termpos;
 };
 
 #define ARRAY_SIZE(arr) (sizeof (arr) / sizeof (arr[0]))
@@ -123,6 +124,7 @@ _notmuch_message_create_for_document (const void *talloc_owner,
     talloc_set_destructor (message, _notmuch_message_destructor);
 
     message->doc = doc;
+    message->termpos = 0;
 
     return message;
 }
@@ -824,11 +826,13 @@ _notmuch_message_gen_terms (notmuch_message_t *message,
        return NOTMUCH_PRIVATE_STATUS_NULL_POINTER;
 
     term_gen->set_document (message->doc);
+    term_gen->set_termpos (message->termpos);
 
     if (prefix_name) {
        const char *prefix = _find_prefix (prefix_name);
 
        term_gen->index_text (text, 1, prefix);
+       message->termpos = term_gen->get_termpos ();
     }
 
     term_gen->index_text (text);