# called by PublicInbox::InboxIdle
sub on_inbox_unlock {
my ($self, $ibx) = @_;
- my $new = ($ibx->mm->minmax)[1];
+ my $new = $ibx->mm->max;
defined(my $old = $self->{-idle_max}) or die 'BUG: -idle_max unset';
if ($new > $old) {
$self->{-idle_max} = $new;
my $ibx = $self->{ibx} or return "$tag BAD no mailbox selected\r\n";
$ibx->subscribe_unlock(fileno($self->{sock}), $self);
$self->{-idle_tag} = $tag;
- $self->{-idle_max} = ($ibx->mm->minmax)[1] // 0;
+ $self->{-idle_max} = $ibx->mm->max // 0;
"+ idling\r\n"
}
my $ibx = $self->{imapd}->{groups}->{$mailbox} or
return "$tag NO Mailbox doesn't exist: $mailbox\r\n";
my $mm = $ibx->mm;
- my $max = $mm->num_highwater // 0;
+ my $max = $mm->max // 0;
# RFC 3501 2.3.1.1 - "A good UIDVALIDITY value to use in
# this case is a 32-bit representation of the creation
# date/time of the mailbox"
if ($range =~ /\A([0-9]+):([0-9]+)\z/s) {
($beg, $end) = ($1, $2);
} elsif ($range =~ /\A([0-9]+):\*\z/s) {
- ($beg, $end) = ($1, $ibx->mm->num_highwater // 0);
+ ($beg, $end) = ($1, $ibx->mm->max // 0);
} elsif ($range =~ /\A[0-9]+\z/) {
my $smsg = $ibx->over->get_art($range) or return "$tag OK\r\n";
push @$msgs, $smsg;
} elsif ($arg eq 'UID' && scalar(@rest) == 1) {
if ($rest[0] =~ /\A([0-9]+):([0-9]+|\*)\z/s) {
my ($beg, $end) = ($1, $2);
- $end = ($ibx->mm->minmax)[1] if $end eq '*';
+ $end = $ibx->mm->max if $end eq '*';
$self->msg_more('* SEARCH');
long_response($self, \&uid_search_uid_range,
$tag, $ibx, \$beg, $end);
$dbh->begin_work;
$self->created_at(time) unless $self->created_at;
- my (undef, $max) = $self->minmax();
- $max ||= 0;
+ my $max = $self->max // 0;
$self->num_highwater($max);
$dbh->commit;
}
$sth->fetchrow_array;
}
+sub max {
+ my $sth = $_[0]->{dbh}->prepare_cached('SELECT MAX(num) FROM msgmap',
+ undef, 1);
+ $sth->execute;
+ $sth->fetchrow_array;
+}
+
sub minmax {
- my ($self) = @_;
- my $dbh = $self->{dbh};
# breaking MIN and MAX into separate queries speeds up from 250ms
# to around 700us with 2.7million messages.
- my $sth = $dbh->prepare_cached('SELECT MIN(num) FROM msgmap', undef, 1);
- $sth->execute;
- my $min = $sth->fetchrow_array;
- $sth = $dbh->prepare_cached('SELECT MAX(num) FROM msgmap', undef, 1);
+ my $sth = $_[0]->{dbh}->prepare_cached('SELECT MIN(num) FROM msgmap',
+ undef, 1);
$sth->execute;
- ($min, $sth->fetchrow_array);
+ ($sth->fetchrow_array, max($_[0]));
}
sub mid_delete {