about summary refs log tree commit homepage
path: root/lib/PublicInbox/LeiSearch.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2023-12-08 03:54:34 +0000
committerEric Wong <e@80x24.org>2023-12-09 02:03:48 +0000
commit866dc178546a5b11610cbcfcdf2b87b03020a205 (patch)
tree974e5fc69e89c48308baa372caca130106679e80 /lib/PublicInbox/LeiSearch.pm
parent305e237b9e22ffed1b009f8f2b12bf99e8856748 (diff)
downloadpublic-inbox-866dc178546a5b11610cbcfcdf2b87b03020a205.tar.gz
Most xap_terms callers do not benefit from the hashref
return value, and we can delay hashmap use until
List::Util::uniqstr if needed.
Diffstat (limited to 'lib/PublicInbox/LeiSearch.pm')
-rw-r--r--lib/PublicInbox/LeiSearch.pm17
1 files changed, 7 insertions, 10 deletions
diff --git a/lib/PublicInbox/LeiSearch.pm b/lib/PublicInbox/LeiSearch.pm
index ba4c4309..29e3213f 100644
--- a/lib/PublicInbox/LeiSearch.pm
+++ b/lib/PublicInbox/LeiSearch.pm
@@ -9,6 +9,7 @@ use parent qw(PublicInbox::ExtSearch); # PublicInbox::Search->reopen
 use PublicInbox::Search qw(xap_terms);
 use PublicInbox::ContentHash qw(content_digest content_hash git_sha);
 use PublicInbox::MID qw(mids mids_for_index);
+use PublicInbox::Compat qw(uniqstr);
 use Carp qw(croak);
 
 sub _msg_kw { # retry_reopen callback
@@ -44,20 +45,16 @@ sub oidbin_keywords {
 sub _xsmsg_vmd { # retry_reopen
         my ($self, $smsg, $want_label) = @_;
         my $xdb = $self->xdb; # set {nshard};
-        my (%kw, %L, $doc, $x);
-        $kw{flagged} = 1 if delete($smsg->{lei_q_tt_flagged});
+        my (@kw, @L, $doc, $x);
+        @kw = qw(flagged) if delete($smsg->{lei_q_tt_flagged});
         my @num = $self->over->blob_exists($smsg->{blob});
         for my $num (@num) { # there should only be one...
                 $doc = $xdb->get_document($self->num2docid($num));
-                $x = xap_terms('K', $doc);
-                %kw = (%kw, %$x);
-                if ($want_label) { # JSON/JMAP only
-                        $x = xap_terms('L', $doc);
-                        %L = (%L, %$x);
-                }
+                push @kw, xap_terms('K', $doc);
+                push @L, xap_terms('L', $doc) if $want_label # JSON/JMAP only
         }
-        $smsg->{kw} = [ sort keys %kw ] if scalar(keys(%kw));
-        $smsg->{L} = [ sort keys %L ] if scalar(keys(%L));
+        @{$smsg->{kw}} = sort(uniqstr(@kw)) if @kw;
+        @{$smsg->{L}} = uniqstr(@L) if @L;
 }
 
 # lookup keywords+labels for external messages