As noted in commit
87dca6d8d5988c5eb54019cca342450b0b7dd6b7
("www: rework query responses to avoid COUNT in SQLite"),
COUNT on many rows is expensive on big SQLite DBs.
We've already stopped using that code path long ago in WWW
while -imapd and -nntpd never used it. So we'll adjust our
remaining test cases to not need it, either.
$s = '+num > 0 ORDER BY ts DESC';
}
}
$s = '+num > 0 ORDER BY ts DESC';
}
}
- my $msgs = do_get($self, <<"", $opts, @v);
+ do_get($self, <<"", $opts, @v);
SELECT ts,ds,ddd FROM over WHERE $s
SELECT ts,ds,ddd FROM over WHERE $s
- return $msgs unless wantarray;
-
- my $nr = $self->{dbh}->selectrow_array(<<'');
-SELECT COUNT(num) FROM over WHERE num > 0
-
- ($nr, $msgs);
inboxdir => $ibx->{inboxdir},
indexlevel => $level
});
inboxdir => $ibx->{inboxdir},
indexlevel => $level
});
- my ($nr, $msgs) = $ro_master->recent;
- is($nr, 1, 'only one message in master, so far');
+ my $msgs = $ro_master->recent;
+ is(scalar(@$msgs), 1, 'only one message in master, so far');
is($msgs->[0]->{mid}, 'm@1', 'first message in master indexed');
# clone
is($msgs->[0]->{mid}, 'm@1', 'first message in master indexed');
# clone
inboxdir => $mirror,
indexlevel => $level,
});
inboxdir => $mirror,
indexlevel => $level,
});
- ($nr, $msgs) = $ro_mirror->recent;
- is($nr, 1, 'only one message, so far');
+ $msgs = $ro_mirror->recent;
+ is(scalar(@$msgs), 1, 'only one message, so far');
is($msgs->[0]->{mid}, 'm@1', 'read first message');
# update master
is($msgs->[0]->{mid}, 'm@1', 'read first message');
# update master
# mirror updates
is(xsys('git', "--git-dir=$fetch_dir", qw(fetch -q)), 0, 'fetch OK');
ok(run_script([qw(-index -j0), $mirror]), "v$v index mirror again OK");
# mirror updates
is(xsys('git', "--git-dir=$fetch_dir", qw(fetch -q)), 0, 'fetch OK');
ok(run_script([qw(-index -j0), $mirror]), "v$v index mirror again OK");
- ($nr, $msgs) = $ro_mirror->recent;
- is($nr, 2, '2nd message seen in mirror');
+ $msgs = $ro_mirror->recent;
+ is(scalar(@$msgs), 2, '2nd message seen in mirror');
is_deeply([sort { $a cmp $b } map { $_->{mid} } @$msgs],
['m@1','m@2'], 'got both messages in mirror');
# incremental index master (required for v1)
ok(run_script([qw(-index -j0), $ibx->{inboxdir}, "-L$level"]),
'index master OK');
is_deeply([sort { $a cmp $b } map { $_->{mid} } @$msgs],
['m@1','m@2'], 'got both messages in mirror');
# incremental index master (required for v1)
ok(run_script([qw(-index -j0), $ibx->{inboxdir}, "-L$level"]),
'index master OK');
- ($nr, $msgs) = $ro_master->recent;
- is($nr, 2, '2nd message seen in master');
+ $msgs = $ro_master->recent;
+ is(scalar(@$msgs), 2, '2nd message seen in master');
is_deeply([sort { $a cmp $b } map { $_->{mid} } @$msgs],
['m@1','m@2'], 'got both messages in master');
is_deeply([sort { $a cmp $b } map { $_->{mid} } @$msgs],
['m@1','m@2'], 'got both messages in master');
is(PublicInbox::Admin::detect_indexlevel($ro_mirror), $level,
'indexlevel detectable by Admin after xcpdb v' .$v.$level);
delete $ro_mirror->{$_} for (qw(over search));
is(PublicInbox::Admin::detect_indexlevel($ro_mirror), $level,
'indexlevel detectable by Admin after xcpdb v' .$v.$level);
delete $ro_mirror->{$_} for (qw(over search));
- ($nr, $msgs) = $ro_mirror->search->query('m:m@2');
- is($nr, 1, "v$v found m\@2 via Xapian on $level");
+ $msgs = $ro_mirror->search->query('m:m@2');
+ is(scalar(@$msgs), 1, "v$v found m\@2 via Xapian on $level");
}
# sync the mirror
is(xsys('git', "--git-dir=$fetch_dir", qw(fetch -q)), 0, 'fetch OK');
ok(run_script([qw(-index -j0), $mirror]), "v$v index mirror again OK");
}
# sync the mirror
is(xsys('git', "--git-dir=$fetch_dir", qw(fetch -q)), 0, 'fetch OK');
ok(run_script([qw(-index -j0), $mirror]), "v$v index mirror again OK");
- ($nr, $msgs) = $ro_mirror->recent;
- is($nr, 1, '2nd message gone from mirror');
+ $msgs = $ro_mirror->recent;
+ is(scalar(@$msgs), 1, '2nd message gone from mirror');
is_deeply([map { $_->{mid} } @$msgs], ['m@1'],
'message unavailable in mirror');
is_deeply([map { $_->{mid} } @$msgs], ['m@1'],
'message unavailable in mirror');
'no Xapian shard directories for v2 basic');
}
if ($level ne 'basic') {
'no Xapian shard directories for v2 basic');
}
if ($level ne 'basic') {
- ($nr, $msgs) = $ro_mirror->search->reopen->query('m:m@2');
- is($nr, 0, "v$v m\@2 gone from Xapian in mirror on $level");
+ $msgs = $ro_mirror->search->reopen->query('m:m@2');
+ is(scalar(@$msgs), 0,
+ "v$v m\@2 gone from Xapian in mirror on $level");
}
# add another message to master and have the mirror
}
# add another message to master and have the mirror
$mime->header_set('References', '<zz-mid@b>');
ok($im->add($mime), 'message with multiple Message-ID');
$im->done;
$mime->header_set('References', '<zz-mid@b>');
ok($im->add($mime), 'message with multiple Message-ID');
$im->done;
- my ($total, undef) = $ibx->over->recent;
+ my $total = $ibx->over->dbh->selectrow_array(<<'');
+SELECT COUNT(*) FROM over WHERE num > 0
+
is($ibx->mm->num_highwater, $total, 'got expected highwater value');
my $srch = $ibx->search;
my $mset1 = $srch->reopen->query('m:abcde@1', { mset => 1 });
is($ibx->mm->num_highwater, $total, 'got expected highwater value');
my $srch = $ibx->search;
my $mset1 = $srch->reopen->query('m:abcde@1', { mset => 1 });
my $srch = $ibx->search;
PublicInbox::WatchMaildir->new($config)->scan('full');
my $srch = $ibx->search;
PublicInbox::WatchMaildir->new($config)->scan('full');
-my ($total, undef) = $srch->reopen->query('');
+my $total = scalar @{$srch->reopen->query('')};
is($total, 1, 'got one revision');
# my $git = PublicInbox::Git->new("$inboxdir/git/0.git");
is($total, 1, 'got one revision');
# my $git = PublicInbox::Git->new("$inboxdir/git/0.git");
$write_spam->();
is(unlink(glob("$maildir/new/*")), 1, 'unlinked old spam');
PublicInbox::WatchMaildir->new($config)->scan('full');
$write_spam->();
is(unlink(glob("$maildir/new/*")), 1, 'unlinked old spam');
PublicInbox::WatchMaildir->new($config)->scan('full');
-is(($srch->reopen->query(''))[0], 0, 'deleted file');
+is_deeply($srch->reopen->query(''), [], 'deleted file');
is(unlink(glob("$spamdir/cur/*")), 1, 'unlinked trained spam');
# check with scrubbing
is(unlink(glob("$spamdir/cur/*")), 1, 'unlinked trained spam');
# check with scrubbing
More majordomo info at http://vger.kernel.org/majordomo-info.html\n);
PublicInbox::Emergency->new($maildir)->prepare(\$msg);
PublicInbox::WatchMaildir->new($config)->scan('full');
More majordomo info at http://vger.kernel.org/majordomo-info.html\n);
PublicInbox::Emergency->new($maildir)->prepare(\$msg);
PublicInbox::WatchMaildir->new($config)->scan('full');
- my ($nr, $msgs) = $srch->reopen->query('');
- is($nr, 1, 'got one file back');
+ my $msgs = $srch->reopen->query('');
+ is(scalar(@$msgs), 1, 'got one file back');
my $mref = $ibx->msg_by_smsg($msgs->[0]);
like($$mref, qr/something\n\z/s, 'message scrubbed on import');
is(unlink(glob("$maildir/new/*")), 1, 'unlinked spam');
$write_spam->();
PublicInbox::WatchMaildir->new($config)->scan('full');
my $mref = $ibx->msg_by_smsg($msgs->[0]);
like($$mref, qr/something\n\z/s, 'message scrubbed on import');
is(unlink(glob("$maildir/new/*")), 1, 'unlinked spam');
$write_spam->();
PublicInbox::WatchMaildir->new($config)->scan('full');
- ($nr, $msgs) = $srch->reopen->query('');
- is($nr, 0, 'inbox is empty again');
+ $msgs = $srch->reopen->query('');
+ is(scalar(@$msgs), 0, 'inbox is empty again');
is(unlink(glob("$spamdir/cur/*")), 1, 'unlinked trained spam');
}
is(unlink(glob("$spamdir/cur/*")), 1, 'unlinked trained spam');
}
local $SIG{__WARN__} = sub {}; # quiet spam check warning
PublicInbox::WatchMaildir->new($config)->scan('full');
}
local $SIG{__WARN__} = sub {}; # quiet spam check warning
PublicInbox::WatchMaildir->new($config)->scan('full');
}
- my ($nr, $msgs) = $srch->reopen->query('');
- is($nr, 0, 'inbox is still empty');
+ my $msgs = $srch->reopen->query('');
+ is(scalar(@$msgs), 0, 'inbox is still empty');
is(unlink(glob("$maildir/new/*")), 1);
}
is(unlink(glob("$maildir/new/*")), 1);
}
PublicInbox::Emergency->new($maildir)->prepare(\$msg);
$config->{'publicinboxwatch.spamcheck'} = 'spamc';
PublicInbox::WatchMaildir->new($config)->scan('full');
PublicInbox::Emergency->new($maildir)->prepare(\$msg);
$config->{'publicinboxwatch.spamcheck'} = 'spamc';
PublicInbox::WatchMaildir->new($config)->scan('full');
- my ($nr, $msgs) = $srch->reopen->query('');
- is($nr, 1, 'inbox has one mail after spamc OK-ed a message');
+ my $msgs = $srch->reopen->query('');
+ is(scalar(@$msgs), 1, 'inbox has one mail after spamc OK-ed a message');
my $mref = $ibx->msg_by_smsg($msgs->[0]);
like($$mref, qr/something\n\z/s, 'message scrubbed on import');
delete $config->{'publicinboxwatch.spamcheck'};
my $mref = $ibx->msg_by_smsg($msgs->[0]);
like($$mref, qr/something\n\z/s, 'message scrubbed on import');
delete $config->{'publicinboxwatch.spamcheck'};
$msg = do { local $/; <$fh> };
PublicInbox::Emergency->new($maildir)->prepare(\$msg);
PublicInbox::WatchMaildir->new($config)->scan('full');
$msg = do { local $/; <$fh> };
PublicInbox::Emergency->new($maildir)->prepare(\$msg);
PublicInbox::WatchMaildir->new($config)->scan('full');
- my ($nr, $msgs) = $srch->reopen->query('dfpost:6e006fd7');
- is($nr, 1, 'diff postimage found');
+ my $msgs = $srch->reopen->query('dfpost:6e006fd7');
+ is(scalar(@$msgs), 1, 'diff postimage found');
- ($nr, $msgs) = $srch->query('dfpre:090d998b6c2c');
- is($nr, 1, 'diff preimage found');
+ $msgs = $srch->query('dfpre:090d998b6c2c');
+ is(scalar(@$msgs), 1, 'diff preimage found');
is($post->{blob}, $msgs->[0]->{blob}, 'same message');
}
is($post->{blob}, $msgs->[0]->{blob}, 'same message');
}
EOF
PublicInbox::Emergency->new($maildir)->prepare(\$both);
PublicInbox::WatchMaildir->new($config)->scan('full');
EOF
PublicInbox::Emergency->new($maildir)->prepare(\$both);
PublicInbox::WatchMaildir->new($config)->scan('full');
- my ($total, $msgs) = $srch->reopen->query('m:both@b.com');
+ my $msgs = $srch->reopen->query('m:both@b.com');
my $v1 = $config->lookup_name('v1');
my $msg = $v1->git->cat_file($msgs->[0]->{blob});
is($both, $$msg, 'got original message back from v1');
my $v1 = $config->lookup_name('v1');
my $msg = $v1->git->cat_file($msgs->[0]->{blob});
is($both, $$msg, 'got original message back from v1');