8 use Encode qw{encode_utf8 decode_utf8};
12 binmode STDIN, ":utf8";
13 binmode STDOUT, ":utf8";
14 binmode STDERR, ":utf8";
17 (my $prog = $0) =~ s:^.*/::;
18 sub HELP_MESSAGE ($;@) {
20 print $fh "usage: $prog [-f]\n";
25 getopts("hf", \%opt) or $bogusp = 1;
26 if ($opt{"h"}) { HELP_MESSAGE \*STDOUT; exit 0; }
27 @ARGV == 0 or $bogusp = 1;
28 if ($bogusp) { HELP_MESSAGE \*STDERR; exit 2; }
30 my $DB = DBI->connect("dbi:Pg:host=roadstar", "", "",
34 for my $item (["media", "id", "title",
35 "playlist_entry", "media_id", "list_name"],
36 ["series", "name", "name",
37 "media", "series_name", "id"],
38 ["playlist", "name", "name",
39 "playlist_entry", "list_name", "entry"],
40 ["dvd_set", "id", "name",
41 "dvd_disc", "set_id", "disc"]) {
42 my ($table, $key, $name, $reftable, $refcol, $testcol) = @$item;
44 ("SELECT t.$name FROM $table AS t
45 LEFT JOIN $reftable AS r ON r.$refcol = t.$key
46 WHERE r.$testcol IS NULL");
49 while (my @r = $st->fetchrow_array)
50 { my ($rowname) = @r; print "$table: $rowname\n"; $any = 1; }
52 if ($any && $opt{"f"}) {
54 ("DELETE FROM $table WHERE $key IN
55 (SELECT t.$key FROM $table AS t
56 LEFT JOIN $reftable AS r ON r.$refcol = t.$key
57 WHERE r.$testcol IS NULL)");
58 print "$table: deleted $n\n";
62 $DB->commit; $DB->disconnect;