X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FOver.pm;h=19da056a10aff5de4455e80c1e30b03190352258;hb=d7780e12856d83b9f5c58586691e2fbe711321ed;hp=49ba180b94478fa4dd92831f709715ffa0796849;hpb=7cc8cb8a8554e1eae817ce2f21dd28b413d3bafc;p=public-inbox.git diff --git a/lib/PublicInbox/Over.pm b/lib/PublicInbox/Over.pm index 49ba180b..19da056a 100644 --- a/lib/PublicInbox/Over.pm +++ b/lib/PublicInbox/Over.pm @@ -1,4 +1,4 @@ -# Copyright (C) 2018-2020 all contributors +# Copyright (C) 2018-2021 all contributors # License: AGPL-3.0+ # for XOVER, OVER in NNTP, and feeds/homepage/threads in PSGI @@ -7,7 +7,7 @@ package PublicInbox::Over; use strict; use v5.10.1; -use DBI; +use DBI qw(:sql_types); # SQL_BLOB use DBD::SQLite; use PublicInbox::Smsg; use Compress::Zlib qw(uncompress); @@ -349,4 +349,37 @@ sub check_inodes { } } +sub oidbin_exists { + my ($self, $oidbin) = @_; + if (wantarray) { + my $sth = $self->dbh->prepare_cached(<<'', undef, 1); +SELECT docid FROM xref3 WHERE oidbin = ? ORDER BY docid ASC + + $sth->bind_param(1, $oidbin, SQL_BLOB); + $sth->execute; + my $tmp = $sth->fetchall_arrayref; + map { $_->[0] } @$tmp; + } else { + my $sth = $self->dbh->prepare_cached(<<'', undef, 1); +SELECT COUNT(*) FROM xref3 WHERE oidbin = ? + + $sth->bind_param(1, $oidbin, SQL_BLOB); + $sth->execute; + $sth->fetchrow_array; + } +} + +sub blob_exists { oidbin_exists($_[0], pack('H*', $_[1])) } + +# used by NNTP.pm +sub ids_after { + my ($self, $num) = @_; + my $ids = dbh($self)->selectcol_arrayref(<<'', undef, $$num); +SELECT num FROM over WHERE num > ? +ORDER BY num ASC LIMIT 1000 + + $$num = $ids->[-1] if @$ids; + $ids; +} + 1;