update: Leave checking file existence to the report script.
[dvddb] / upgrade-v3
1 #! /usr/bin/perl -w
2
3 use open ":utf8";
4 use strict;
5
6 use DBI;
7
8 BEGIN { binmode STDOUT, ":utf8"; }
9
10 my $DB = DBI->connect("dbi:Pg:host=roadstar", "", "",
11 { AutoCommit => 0, RaiseError => 1 });
12
13 my $st_outer =
14 $DB->prepare("SELECT title, COUNT(*) FROM old_dvd GROUP BY title");
15 my $st_inner =
16 $DB->prepare("SELECT disc, path, discid FROM old_dvd WHERE title = ?");
17 my $st_add_set =
18 $DB->prepare("INSERT INTO dvd_set (name, ndisc)
19 VALUES (?, ?)
20 RETURNING id");
21 my $st_add_disc =
22 $DB->prepare("INSERT INTO dvd_disc (set_id, disc, path, disc_id)
23 VALUES (?, ?, ?, ?)");
24 $st_outer->execute;
25
26 OUTER: for (;;) {
27 my @r = $st_outer->fetchrow_array; last OUTER unless @r;
28 my ($title, $ndisc) = @r;
29
30 $st_add_set->execute($title, $ndisc);
31 my ($set_id) = $st_add_set->fetchrow_array;
32
33 $st_inner->execute($title);
34 INNER: for (;;) {
35 my @r = $st_inner->fetchrow_array; last INNER unless @r;
36 my ($disc, $path, $disc_id) = @r;
37 $st_add_disc->execute($set_id, $disc, $path, $disc_id);
38 }
39 }
40 $DB->commit; $DB->disconnect;