# 4 - change "Re: " normalization, avoid circular Reference ghosts
# 5 - subject_path drops trailing '.'
# 6 - preserve References: order in document data
- SCHEMA_VERSION => 6,
+ # 7 - remove references and inreplyto terms
+ SCHEMA_VERSION => 7,
QP_FLAGS => FLAG_PHRASE|FLAG_BOOLEAN|FLAG_LOVEHATE|FLAG_WILDCARD,
};
my %bool_pfx_external = (
path => 'XPATH',
thread => 'G', # newsGroup (or similar entity - e.g. a web forum name)
- references => 'XREFS',
- inreplyto => 'XIRT',
);
my %prob_prefix = (
$self->do_enquire($query, $opts);
}
-# given a message ID, get followups to a message
-sub get_followups {
- my ($self, $mid, $opts) = @_;
- $mid = mid_clean($mid);
- $mid = mid_compress($mid);
- my $qp = $self->qp;
- my $irt = $qp->parse_query("inreplyto:$mid", 0);
- my $ref = $qp->parse_query("references:$mid", 0);
- my $query = Search::Xapian::Query->new(OP_OR, $irt, $ref);
- $self->do_enquire($query, $opts);
-}
-
sub get_thread {
my ($self, $mid, $opts) = @_;
my $smsg = eval { $self->lookup_message($mid) };
}
}
if (@refs) {
- $doc->add_term(xpfx('inreplyto') . $irt) if defined $irt;
$smsg->{references_sorted} = '<'.join('><', @refs).'>';
- my $ref_pfx = xpfx('references');
-
# first ref *should* be the thread root,
# but we can never trust clients to do the right thing
my $ref = shift @refs;
- $doc->add_term($ref_pfx . $ref);
$tid = $self->_resolve_mid_to_tid($ref);
# the rest of the refs should point to this tid:
foreach $ref (@refs) {
- $doc->add_term($ref_pfx . $ref);
my $ptid = $self->_resolve_mid_to_tid($ref);
if ($tid ne $ptid) {
$self->merge_threads($tid, $ptid);
my $second = $res->{msgs}->[0];
isnt($first, $second, "offset returned different result from limit");
-
- foreach my $f (qw(inreplyto references)) {
- $res = $ro->query($f . ':root@s');
- @res = filter_mids($res);
- is_deeply(\@res, [ 'last@s' ],
- "got expected results for $f: match");
- $res = $ro->query($f . ':root');
- is($res->{total}, 0, "no partial mid match");
- }
}
# ghost vivication
$rw_commit->();
$ro->reopen;
- my $res = $ro->query('references:root@s');
- my @res = filter_mids($res);
- is_deeply(\@res, [ sort('last@s', $long_midc) ],
- "got expected results for references: match");
-
- my $followups = $ro->get_followups('root@s');
- $followups = [ filter_mids($followups) ];
- is_deeply($followups, [ filter_mids($res) ], "get_followups matches");
+ my $res;
+ my @res;
my $long_reply_mid = 'reply-to-long@1';
my $long_reply = Email::MIME->create(
ok($doc_id > 0, "doc_id defined with circular reference");
my $smsg = $rw->lookup_message('circle@a');
$smsg->ensure_metadata;
- is($smsg->{references}, undef, "no references created");
+ is($smsg->references_sorted, '', "no references created");
}
done_testing();