foreach (@$nums) {
$sth->execute($_->[0]);
- my $smsg = $sth->fetchrow_hashref;
+ # $cb may delete rows and invalidate nums
+ my $smsg = $sth->fetchrow_hashref // next;
$smsg = PublicInbox::Over::load_from_row($smsg);
$cb->($self, $smsg, @arg) or return;
}
$tid;
}
-# normalize subjects so they are suitable as pathnames for URLs
-# XXX: consider for removal
+# normalize subjects somewhat, they used to be ASCII-only but now
+# we use \w for UTF-8 support. We may still drop it entirely and
+# rely on Xapian for subject matches...
sub subject_path ($) {
my ($subj) = @_;
$subj = subject_normalized($subj);
- $subj =~ s![^a-zA-Z0-9_\.~/\-]+!_!g;
+ $subj =~ s![^\w\.~/\-]+!_!g;
lc($subj);
}
# if deduplication rules in ContentHash change, it's
# possible a docid can have multiple rows with the
# same ibx_id. This governs whether or not we call
- # ->shard_remove_eidx_info in ExtSearchIdx.
+ # ->remove_eidx_info in ExtSearchIdx.
$sth = $self->{dbh}->prepare_cached(<<'', undef, 1);
SELECT COUNT(*) FROM xref3 WHERE docid = ? AND ibx_id = ?