if media.db import fails, start anew

This commit is contained in:
Damien Elmes 2014-06-28 05:06:43 +09:00
parent 61b0072dcc
commit eba3aa583c

View File

@ -3,6 +3,7 @@
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import re
import traceback
import urllib
import unicodedata
import sys
@ -77,21 +78,26 @@ create table meta (dirMod int, lastUsn int); insert into meta values (0, 0);
def maybeUpgrade(self):
oldpath = self.dir()+".db"
if os.path.exists(oldpath):
self.db.execute('attach "../collection.media.db" as old')
self.db.execute("""
insert into media
select m.fname, csum, mod, ifnull((select 1 from log l2 where l2.fname=m.fname), 0) as dirty
from old.media m
left outer join old.log l using (fname)
union
select fname, null, 0, 1 from old.log where type=1;""")
self.db.execute("delete from meta")
self.db.execute("""
insert into meta select dirMod, usn from old.meta
""")
self.db.execute("detach old")
self.db.commit()
self.db.execute("vacuum analyze")
try:
self.db.execute('attach "../collection.media.db" as old')
self.db.execute("""
insert into media
select m.fname, csum, mod, ifnull((select 1 from log l2 where l2.fname=m.fname), 0) as dirty
from old.media m
left outer join old.log l using (fname)
union
select fname, null, 0, 1 from old.log where type=1;""")
self.db.execute("delete from meta")
self.db.execute("""
insert into meta select dirMod, usn from old.meta
""")
self.db.execute("detach old")
self.db.commit()
self.db.execute("vacuum analyze")
except Exception, e:
# if we couldn't import the old db for some reason, just start
# anew
self.col.log("failed to import old media db:"+traceback.format_exc())
os.rename("../collection.media.db", "../collection.media.db.old")
def close(self):