about summary refs log tree commit homepage
path: root/lib/PublicInbox/SearchMsg.pm
diff options
context:
space:
mode:
authorEric Wong (Contractor, The Linux Foundation) <e@80x24.org>2018-04-01 06:30:37 +0000
committerEric Wong (Contractor, The Linux Foundation) <e@80x24.org>2018-04-01 23:27:54 +0000
commit7503aeb540af5afd5cb1b554b3c29f35f5fc918d (patch)
treea951f16abdeed74b97182c7b24b378a2bf02aeaa /lib/PublicInbox/SearchMsg.pm
parent11182cf3e95cf76bbaf3112311cf613755d1a86a (diff)
downloadpublic-inbox-7503aeb540af5afd5cb1b554b3c29f35f5fc918d.tar.gz
We can store :bytes and :lines in doc_data since we never
sort or search by them.  We don't have much use for the Date:
stamp at the moment, either.
Diffstat (limited to 'lib/PublicInbox/SearchMsg.pm')
-rw-r--r--lib/PublicInbox/SearchMsg.pm58
1 files changed, 34 insertions, 24 deletions
diff --git a/lib/PublicInbox/SearchMsg.pm b/lib/PublicInbox/SearchMsg.pm
index e55d4019..f5510b8e 100644
--- a/lib/PublicInbox/SearchMsg.pm
+++ b/lib/PublicInbox/SearchMsg.pm
@@ -35,20 +35,41 @@ sub get_val ($$) {
         Search::Xapian::sortable_unserialise($doc->get_value($col));
 }
 
+sub to_doc_data {
+        my ($self, $oid, $mid0) = @_;
+        $oid = '' unless defined $oid;
+        join("\n",
+                $self->subject,
+                $self->from,
+                $self->references,
+                $self->to,
+                $self->cc,
+                $oid,
+                $mid0,
+                $self->ds,
+                $self->{bytes},
+                $self->{lines}
+        );
+}
+
 sub load_from_data ($$) {
         my ($self) = $_[0]; # data = $_[1]
-        my ($subj, $from, $refs, $to, $cc, $blob, $mid0) = split(/\n/, $_[1]);
-        $self->{subject} = $subj;
-        $self->{from} = $from;
-        $self->{references} = $refs;
+        (
+                $self->{subject},
+                $self->{from},
+                $self->{references},
 
-        # To: and Cc: are stored to optimize HDR/XHDR in NNTP since
-        # some NNTP clients will use that for message displays.
-        $self->{to} = $to;
-        $self->{cc} = $cc;
+                # To: and Cc: are stored to optimize HDR/XHDR in NNTP since
+                # some NNTP clients will use that for message displays.
+                $self->{to},
+                $self->{cc},
 
-        $self->{blob} = $blob;
-        $self->{mid} = $mid0;
+                $self->{blob},
+                $self->{mid},
+                $self->{ds},
+                $self->{bytes},
+                $self->{lines}
+        ) = split(/\n/, $_[1]);
 }
 
 sub load_expand {
@@ -56,7 +77,6 @@ sub load_expand {
         my $doc = $self->{doc};
         my $data = $doc->get_data or return;
         $self->{ts} = get_val($doc, &PublicInbox::Search::TS);
-        $self->{ds} = get_val($doc, &PublicInbox::Search::DS);
         utf8::decode($data);
         load_from_data($self, $data);
         $self;
@@ -69,11 +89,9 @@ sub load_doc {
 }
 
 # :bytes and :lines metadata in RFC 3977
-sub bytes ($) { get_val($_[0]->{doc}, &PublicInbox::Search::BYTES) }
-sub lines ($) { get_val($_[0]->{doc}, &PublicInbox::Search::LINES) }
-sub num ($) {
-        $_[0]->{num} ||= get_val($_[0]->{doc}, PublicInbox::Search::NUM())
-}
+sub bytes ($) { $_[0]->{bytes} }
+sub lines ($) { $_[0]->{lines} }
+sub num ($) { $_[0]->{num} ||= _get_term_val($_[0], 'XNUM', qr/\AXNUM/) }
 
 sub __hdr ($$) {
         my ($self, $field) = @_;
@@ -134,14 +152,6 @@ sub ds {
         $self->{ds} ||= eval { msg_datestamp($self->{mime}->header_obj); } || 0;
 }
 
-sub to_doc_data {
-        my ($self, $oid, $mid0) = @_;
-        my @rows = ($self->subject, $self->from, $self->references,
-                        $self->to, $self->cc);
-        $oid = '' unless defined $oid;
-        join("\n", @rows, $oid, $mid0);
-}
-
 sub references {
         my ($self) = @_;
         my $x = $self->{references};