DB: log schema upgrades

This commit is contained in:
Brian Warner 2016-06-26 18:04:00 -07:00
parent de8efdb9f9
commit 0f8b98dec5

View File

@ -1,7 +1,8 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import os, sys import os
import sqlite3 import sqlite3
from pkg_resources import resource_string from pkg_resources import resource_string
from twisted.python import log
class DBError(Exception): class DBError(Exception):
pass pass
@ -24,7 +25,7 @@ def dict_factory(cursor, row):
d[col[0]] = row[idx] d[col[0]] = row[idx]
return d return d
def get_db(dbfile, target_version=TARGET_VERSION, stderr=sys.stderr): def get_db(dbfile, target_version=TARGET_VERSION):
"""Open or create the given db file. The parent directory must exist. """Open or create the given db file. The parent directory must exist.
Returns the db connection object, or raises DBError. Returns the db connection object, or raises DBError.
""" """
@ -41,6 +42,7 @@ def get_db(dbfile, target_version=TARGET_VERSION, stderr=sys.stderr):
raise DBError("failed foreign key check: %s" % (problems,)) raise DBError("failed foreign key check: %s" % (problems,))
if must_create: if must_create:
log.msg("populating new database with schema v%s" % target_version)
schema = get_schema(target_version) schema = get_schema(target_version)
db.executescript(schema) db.executescript(schema)
db.execute("INSERT INTO version (version) VALUES (?)", db.execute("INSERT INTO version (version) VALUES (?)",
@ -55,11 +57,14 @@ def get_db(dbfile, target_version=TARGET_VERSION, stderr=sys.stderr):
raise DBError("db file is unusable: %s" % e) raise DBError("db file is unusable: %s" % e)
while version < target_version: while version < target_version:
log.msg(" need to upgrade from %s to %s" % (version, target_version))
try: try:
upgrader = get_upgrader(version+1) upgrader = get_upgrader(version+1)
except ValueError: # ResourceError?? except ValueError: # ResourceError??
log.msg(" unable to upgrade %s to %s" % (version, version+1))
raise DBError("Unable to upgrade %s to version %s, left at %s" raise DBError("Unable to upgrade %s to version %s, left at %s"
% (dbfile, version+1, version)) % (dbfile, version+1, version))
log.msg(" executing upgrader v%s->v%s" % (version, version+1))
db.executescript(upgrader) db.executescript(upgrader)
db.commit() db.commit()
version = version+1 version = version+1