Commit | Line | Data |
---|---|---|
14acb11f MW |
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; |