--- /dev/null
+#!perl -w
+# Copyright (C) all contributors <meta@public-inbox.org>
+# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
+# unstable dev script, chasing a bug which may be in LeiSavedSearch->is_dup
+use v5.12;
+use Data::Dumper;
+use PublicInbox::OverIdx;
+@ARGV == 1 or die "Usage: $0 /path/to/over.sqlite3\n";
+my $over = PublicInbox::OverIdx->new($ARGV[0]);
+my $dbh = $over->dbh;
+$dbh->do('PRAGMA mmap_size = '.(2 ** 48));
+my $num = 0;
+my ($err, $none, $nr, $ids);
+$Data::Dumper::Useqq = $Data::Dumper::Sortkeys = 1;
+do {
+ $ids = $over->ids_after(\$num);
+ $nr += @$ids;
+ for my $n (@$ids) {
+ my $smsg = $over->get_art($n);
+ if (!$smsg) {
+ warn "#$n article missing\n";
+ ++$err;
+ next;
+ }
+ my $exp = $smsg->{blob};
+ if ($exp eq '') {
+ ++$none if $smsg->{bytes};
+ next;
+ }
+ my $xr3 = $over->get_xref3($n, 1);
+ my $found;
+ for my $r (@$xr3) {
+ $r->[2] = unpack('H*', $r->[2]);
+ $found = 1 if $r->[2] eq $exp;
+ }
+ if (!$found) {
+ warn Dumper([$smsg, $xr3 ]);
+ ++$err;
+ }
+ }
+} while (@$ids);
+warn "$none/$nr had no blob (external?)\n" if $none;
+warn "$err errors\n" if $err;
+exit($err ? 1 : 0);