#!perl -w # Copyright (C) all contributors # License: AGPL-3.0+ # 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);