Update the EXIF stuff in a transaction, speeding it up a bit and making
authorSteinar H. Gunderson <sesse@debian.org>
Mon, 26 Mar 2007 19:04:53 +0000 (21:04 +0200)
committerSteinar H. Gunderson <sesse@debian.org>
Mon, 26 Mar 2007 19:04:53 +0000 (21:04 +0200)
it all a bit more sane.

perl/Sesse/pr0n/Common.pm
perl/update-image-info.pl

index da8173f8bbd04d2fd881bf55b97666c040d2efc0..d3d4dbeed7aab935c53e48e2866bd6c82af88c97 100644 (file)
@@ -198,28 +198,32 @@ sub update_image_info {
                }
        }
 
-       $dbh->do('UPDATE images SET width=?, height=?, date=? WHERE id=?',
-                undef, $width, $height, $datetime, $id)
-               or die "Couldn't update width/height in SQL: $!";
+       {
+               local $dbh->{AutoCommit} = 0;
 
-       $dbh->do('DELETE FROM exif_info WHERE image=?',
-               undef, $id)
-               or die "Couldn't delete old EXIF information in SQL: $!";
+               $dbh->do('UPDATE images SET width=?, height=?, date=? WHERE id=?',
+                        undef, $width, $height, $datetime, $id)
+                       or die "Couldn't update width/height in SQL: $!";
 
-       my $q = $dbh->prepare('INSERT INTO exif_info (image,tag,value) VALUES (?,?,?)')
-               or die "Couldn't prepare inserting EXIF information: $!";
+               $dbh->do('DELETE FROM exif_info WHERE image=?',
+                       undef, $id)
+                       or die "Couldn't delete old EXIF information in SQL: $!";
 
-       for my $key (keys %$info) {
-               next if ref $info->{$key};
-               $q->execute($id, $key, guess_charset($info->{$key}))
-                       or die "Couldn't insert EXIF information in database: $!";
-       }
+               my $q = $dbh->prepare('INSERT INTO exif_info (image,tag,value) VALUES (?,?,?)')
+                       or die "Couldn't prepare inserting EXIF information: $!";
 
-       # update the last_picture cache as well (this should of course be done
-       # via a trigger, but this is less complicated :-) )
-       $dbh->do('UPDATE last_picture_cache SET last_picture=GREATEST(last_picture, ?) WHERE event=(SELECT event FROM images WHERE id=?)',
-               undef, $datetime, $id)
-               or die "Couldn't update last_picture in SQL: $!";
+               for my $key (keys %$info) {
+                       next if ref $info->{$key};
+                       $q->execute($id, $key, guess_charset($info->{$key}))
+                               or die "Couldn't insert EXIF information in database: $!";
+               }
+
+               # update the last_picture cache as well (this should of course be done
+               # via a trigger, but this is less complicated :-) )
+               $dbh->do('UPDATE last_picture_cache SET last_picture=GREATEST(last_picture, ?) WHERE event=(SELECT event FROM images WHERE id=?)',
+                       undef, $datetime, $id)
+                       or die "Couldn't update last_picture in SQL: $!";
+       }
 }
 
 sub check_access {
index 41d823723c858f530750ebc055cc9b65acc45fda..88d3efc785530d94107000ebff92cc1164e68cf5 100755 (executable)
@@ -36,28 +36,32 @@ while (my $ref = $q->fetchrow_hashref) {
                }
        }
 
-       $dbh->do('UPDATE images SET width=?, height=?, date=? WHERE id=?',
-                undef, $width, $height, $datetime, $id)
-               or die "Couldn't update width/height in SQL: $!";
+       {
+               local $dbh->{AutoCommit} = 0;
 
-       $dbh->do('DELETE FROM exif_info WHERE image=?',
-               undef, $id)
-               or die "Couldn't delete old EXIF information in SQL: $!";
+               $dbh->do('UPDATE images SET width=?, height=?, date=? WHERE id=?',
+                        undef, $width, $height, $datetime, $id)
+                       or die "Couldn't update width/height in SQL: $!";
 
-       my $q = $dbh->prepare('INSERT INTO exif_info (image,tag,value) VALUES (?,?,?)')
-               or die "Couldn't prepare inserting EXIF information: $!";
+               $dbh->do('DELETE FROM exif_info WHERE image=?',
+                       undef, $id)
+                       or die "Couldn't delete old EXIF information in SQL: $!";
 
-       for my $key (keys %$info) {
-               next if ref $info->{$key};
-               $q->execute($id, $key, guess_charset($info->{$key}))
-                       or die "Couldn't insert EXIF information in database: $!";
-       }
+               my $q = $dbh->prepare('INSERT INTO exif_info (image,tag,value) VALUES (?,?,?)')
+                       or die "Couldn't prepare inserting EXIF information: $!";
+
+               for my $key (keys %$info) {
+                       next if ref $info->{$key};
+                       $q->execute($id, $key, guess_charset($info->{$key}))
+                               or die "Couldn't insert EXIF information in database: $!";
+               }
 
-       # update the last_picture cache as well (this should of course be done
-       # via a trigger, but this is less complicated :-) )
-       $dbh->do('UPDATE last_picture_cache SET last_picture=GREATEST(last_picture, ?) WHERE event=(SELECT event FROM images WHERE id=?)',
-               undef, $datetime, $id)
-               or die "Couldn't update last_picture in SQL: $!";
+               # update the last_picture cache as well (this should of course be done
+               # via a trigger, but this is less complicated :-) )
+               $dbh->do('UPDATE last_picture_cache SET last_picture=GREATEST(last_picture, ?) WHERE event=(SELECT event FROM images WHERE id=?)',
+                       undef, $datetime, $id)
+                       or die "Couldn't update last_picture in SQL: $!";
+       }
 
        print "Updated $id.\n";
 }