- my $path = mid_compress($smsg->path);
- my $qsub = Search::Xapian::Query->new(xpfx('path').$path);
- my $query = Search::Xapian::Query->new(OP_OR, $qtid, $qsub);
- $self->do_enquire($query, $opts);
+ my $path = $smsg->path;
+ if (defined $path && $path ne '') {
+ my $path = id_compress($smsg->path);
+ my $qsub = Search::Xapian::Query->new(xpfx('path').$path);
+ $qtid = Search::Xapian::Query->new(OP_OR, $qtid, $qsub);
+ }
+ $opts ||= {};
+ $opts->{limit} ||= 1000;
+ _do_enquire($self, $qtid, $opts);
+}
+
+sub _do_enquire {
+ my ($self, $query, $opts) = @_;
+ my $ret;
+ for (1..10) {
+ eval { $ret = _enquire_once($self, $query, $opts) };
+ return $ret unless $@;
+ # Exception: The revision being read has been discarded -
+ # you should call Xapian::Database::reopen()
+ if (index($@, 'Xapian::Database::reopen') >= 0) {
+ reopen($self);
+ } else {
+ die $@;
+ }
+ }