-# Copyright (C) 2015-2021 all contributors <meta@public-inbox.org>
+# Copyright (C) all contributors <meta@public-inbox.org>
# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
# bidirectional Message-ID <-> Article Number mapping for the NNTP
use DBI;
use DBD::SQLite;
use PublicInbox::Over;
-use PublicInbox::Spawn;
use Scalar::Util qw(blessed);
sub new_file {
require File::Temp;
my $tmp = "mm_tmp-$$-XXXX";
my ($fh, $fn) = File::Temp::tempfile($tmp, EXLOCK => 0, DIR => $dir);
- PublicInbox::Spawn::nodatacow_fd(fileno($fh));
+ require PublicInbox::Syscall;
+ PublicInbox::Syscall::nodatacow_fh($fh);
$self->{dbh}->sqlite_backup_to_file($fn);
$tmp = ref($self)->new_file($fn, 2);
$tmp->{dbh}->do('PRAGMA journal_mode = MEMORY');
sub num_highwater {
my ($self, $num) = @_;
- my $high = $self->{num_highwater} ||=
- $self->meta_accessor('num_highwater');
+ my $high = $self->meta_accessor('num_highwater');
if (defined($num) && (!defined($high) || ($num > $high))) {
- $self->{num_highwater} = $num;
+ $high = $num;
$self->meta_accessor('num_highwater', $num);
}
- $self->{num_highwater};
+ $high
}
sub mid_insert {
$sth->fetchrow_array // 0;
}
-sub minmax {
- # breaking MIN and MAX into separate queries speeds up from 250ms
- # to around 700us with 2.7million messages.
+sub min {
my $sth = $_[0]->{dbh}->prepare_cached('SELECT MIN(num) FROM msgmap',
undef, 1);
$sth->execute;
- ($sth->fetchrow_array // 0, max($_[0]));
+ $sth->fetchrow_array // 0;
+}
+
+sub minmax {
+ # breaking MIN and MAX into separate queries speeds up from 250ms
+ # to around 700us with 2.7million messages.
+ (min($_[0]), max($_[0]));
}
sub mid_delete {