]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/LeiXSearch.pm
lei q: skip lei/store->write_prepare for JSON outputs
[public-inbox.git] / lib / PublicInbox / LeiXSearch.pm
index 386c4eba2a0bef9cb2d941d5386eef0778c55473..6410e0ea4e910b79502df2e1ce839f6831f2b400 100644 (file)
@@ -69,11 +69,13 @@ sub xdb_shards_flat { @{$_[0]->{shards_flat} // []} }
 
 sub mitem_kw ($$;$) {
        my ($smsg, $mitem, $flagged) = @_;
-       my $kw = xap_terms('K', $mitem->get_document);
+       my $kw = xap_terms('K', my $doc = $mitem->get_document);
        $kw->{flagged} = 1 if $flagged;
-       # we keep the empty array here to prevent expensive work in
+       # we keep the empty {kw} array here to prevent expensive work in
        # ->xsmsg_vmd, _unbless_smsg will clobber it iff it's empty
        $smsg->{kw} = [ sort keys %$kw ];
+       my $L = xap_terms('L', $doc);
+       $smsg->{L} = [ sort keys %$L ] if scalar(keys %$L);
 }
 
 # like over->get_art
@@ -86,8 +88,10 @@ sub smsg_for {
        my $num = int(($docid - 1) / $nshard) + 1;
        my $ibx = $self->{shard2ibx}->[$shard];
        my $smsg = $ibx->over->get_art($num);
-       return if $smsg->{bytes} == 0;
-       mitem_kw($smsg, $mitem) if $ibx->can('msg_keywords');
+       return if $smsg->{bytes} == 0; # external message
+       if ($ibx->can('msg_keywords')) {
+               mitem_kw($smsg, $mitem);
+       }
        $smsg;
 }
 
@@ -170,6 +174,7 @@ sub query_thread_mset { # for --threads
                                        if ($can_kw) {
                                                mitem_kw($smsg, $mitem, $fl);
                                        } elsif ($fl) {
+                                               # call ->xsmsg_vmd, later
                                                $smsg->{lei_q_tt_flagged} = 1;
                                        }
                                }
@@ -425,6 +430,7 @@ sub do_query {
        $lei->{1}->autoflush(1);
        $lei->start_pager if delete $lei->{need_pager};
        $lei->{ovv}->ovv_begin($lei);
+       die 'BUG: xdb|over open' if $lei->{lse}->{xdb} || $lei->{lse}->{over};
        if ($l2m) {
                $l2m->pre_augment($lei);
                if ($lei->{opt}->{augment} && delete $lei->{early_mua}) {