X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FOver.pm;h=da0f11e5dfded738323b92a1233a0d827ae447d8;hb=6f4fcc32237e46fb219df9ad4e92aeb3a170d03f;hp=0bd6008ba4adbfc706f742cdfbba08265616436b;hpb=0dceebd0a85774c92af247e6da5e2f5a0ee8417c;p=public-inbox.git diff --git a/lib/PublicInbox/Over.pm b/lib/PublicInbox/Over.pm index 0bd6008b..da0f11e5 100644 --- a/lib/PublicInbox/Over.pm +++ b/lib/PublicInbox/Over.pm @@ -93,16 +93,20 @@ ORDER BY num ASC LIMIT 1 SELECT tid,sid FROM over WHERE num = ? LIMIT 1 defined $tid or return nothing; # $sid may be undef - - $prev ||= 0; - my $cond = 'FROM over WHERE (tid = ? OR sid = ?) AND num > ?'; - my $msgs = do_get($self, <<"", {}, $tid, $sid, $prev); -SELECT * $cond ORDER BY num ASC + my $sort_col = 'ds'; + $num = 0; + if ($prev) { + $num = $prev->{num} || 0; + $sort_col = 'num'; + } + my $cond = '(tid = ? OR sid = ?) AND num > ?'; + my $msgs = do_get($self, <<"", {}, $tid, $sid, $num); +SELECT num,ts,ds,ddd FROM over WHERE $cond ORDER BY $sort_col ASC return $msgs unless wantarray; - my $nr = $dbh->selectrow_array(<<"", undef, $tid, $sid, $prev); -SELECT COUNT(num) $cond + my $nr = $dbh->selectrow_array(<<"", undef, $tid, $sid, $num); +SELECT COUNT(num) FROM over WHERE $cond ($nr, $msgs); } @@ -147,4 +151,33 @@ SELECT * from OVER where num = ? LIMIT 1 undef; } +sub next_by_mid { + my ($self, $mid, $id, $prev) = @_; + my $dbh = $self->connect; + + unless (defined $$id) { + my $sth = $dbh->prepare_cached(<<'', undef, 1); + SELECT id FROM msgid WHERE mid = ? LIMIT 1 + + $sth->execute($mid); + $$id = $sth->fetchrow_array; + defined $$id or return; + } + my $sth = $dbh->prepare_cached(<<"", undef, 1); +SELECT num FROM id2num WHERE id = ? AND num > ? +ORDER BY num ASC LIMIT 1 + + $$prev ||= 0; + $sth->execute($$id, $$prev); + my $num = $sth->fetchrow_array or return; + $$prev = $num; + + $sth = $dbh->prepare_cached(<<"", undef, 1); +SELECT num,ts,ds,ddd FROM over WHERE num = ? LIMIT 1 + + $sth->execute($num); + my $smsg = $sth->fetchrow_hashref or return; + load_from_row($smsg); +} + 1;