]> Sergey Matveev's repositories - public-inbox.git/commitdiff
search: index UID for IMAP search, too
authorEric Wong <e@yhbt.net>
Wed, 10 Jun 2020 07:04:53 +0000 (07:04 +0000)
committerEric Wong <e@yhbt.net>
Sat, 13 Jun 2020 07:55:45 +0000 (07:55 +0000)
We'll need to support searching UID ranges for IMAP,
so make sure it's indexed, too.

lib/PublicInbox/Search.pm
lib/PublicInbox/SearchIdx.pm
t/search.t

index f2d3b92dc821e87e71b5dd2cc3f7729157f02494..c54cf7b9911affce9680e7160b1fdecbb3aad20f 100644 (file)
@@ -12,6 +12,7 @@ use constant {
        YYYYMMDD => 1, # Date: header for searching in the WWW UI
        DT => 2, # Date: YYYYMMDDHHMMSS
        BYTES => 3, # IMAP RFC822.SIZE
+       UID => 4, # IMAP UID == NNTP article number == Xapian docid
        # TODO
        # REPLYCNT => 4, # IMAP ANSWERED
 };
index f7462aa74ca0aa7ff73992437ffeca36c65e60ca..3df7970ebf984252f006056042946425e8ef7335 100644 (file)
@@ -342,6 +342,7 @@ sub add_xapian ($$$$) {
        my $dt = strftime('%Y%m%d%H%M%S', @ds);
        add_val($doc, PublicInbox::Search::DT(), $dt);
        add_val($doc, PublicInbox::Search::BYTES(), $smsg->{bytes});
+       add_val($doc, PublicInbox::Search::UID(), $smsg->{num});
 
        my $tg = term_generator($self);
        $tg->set_document($doc);
index cf3254169ca3485e689e5498f97df82b2b0dc69f..d4ca28c794f8255b648100355c40726c3e3e88c5 100644 (file)
@@ -324,6 +324,11 @@ $ibx->with_umask(sub {
                like($bytes, qr/\A[0-9]+\z/, '$bytes stored as digit');
                ok($bytes > 0, '$bytes is > 0');
                is($bytes, $smsg->{bytes}, 'bytes Xapian value matches Over');
+
+               $col = PublicInbox::Search::UID();
+               my $uid = PublicInbox::Smsg::get_val($doc, $col);
+               is($uid, $smsg->{num}, 'UID column matches {num}');
+               is($uid, $m->get_docid, 'UID column matches docid');
        }
 
        $mset = $ro->query('tc:list@example.com', {mset => 1});