require PublicInbox::Spawn;
open my $fh, '+>>', $f or die "failed to open $f: $!";
PublicInbox::Spawn::nodatacow_fd(fileno($fh));
- my $j = "$f-journal";
- open $fh, '+>>', $j or die "failed to open $j: $!";
- PublicInbox::Spawn::nodatacow_fd(fileno($fh));
} else {
$self->{filename} = $f; # die on stat() below:
}
($nr, $msgs);
}
+# strict `tid' matches, only, for thread-expanded mbox.gz search results
+# and future CLI interface
+# returns true if we have IDs, undef if not
+sub expand_thread {
+ my ($self, $ctx) = @_;
+ my $dbh = $self->connect;
+ do {
+ defined(my $num = $ctx->{ids}->[0]) or return;
+ my ($tid) = $dbh->selectrow_array(<<'', undef, $num);
+SELECT tid FROM over WHERE num = ?
+
+ if (defined($tid)) {
+ my $sql = <<'';
+SELECT num FROM over WHERE tid = ? AND num > ?
+ORDER BY num ASC LIMIT 1000
+
+ my $xids = $dbh->selectcol_arrayref($sql, undef, $tid,
+ $ctx->{prev} // 0);
+ if (scalar(@$xids)) {
+ $ctx->{prev} = $xids->[-1];
+ $ctx->{xids} = $xids;
+ return 1; # success
+ }
+ }
+ $ctx->{prev} = 0;
+ shift @{$ctx->{ids}};
+ } while (1);
+}
+
sub recent {
my ($self, $opts, $after, $before) = @_;
my ($s, @v);
my ($self, $num) = @_;
# caching $sth ourselves is faster than prepare_cached
my $sth = $self->{-get_art} //= $self->connect->prepare(<<'');
-SELECT num,ds,ts,ddd FROM over WHERE num = ? LIMIT 1
+SELECT num,tid,ds,ts,ddd FROM over WHERE num = ? LIMIT 1
$sth->execute($num);
my $smsg = $sth->fetchrow_hashref;