+ try:
+ ver = db.prepare("SELECT version FROM schema_version")()[0][0];
+ print("Database Schema version: ", ver)
+ except postgresql.exceptions.UndefinedTableError:
+ ver = 0
+
+ if ver < 1:
+ with app.open_resource('sql/schema.sql', mode='r') as f:
+ db.execute(f.read())
+ return
+
+ if ver < 2:
+ with app.open_resource('sql/from_1.sql', mode='r') as f:
+ db.execute(f.read())
+ ct={}
+ for g in [group for group in prefix[app.config.get("DEFAULT_HOST")]]:
+ ct[g] = {"dt": "", "c": 0}
+
+ p = db.prepare("UPDATE \"motion\" SET \"identifier\"=$1 WHERE \"id\"=$2")
+ for row in db.prepare("SELECT id, \"type\", \"posed\" FROM \"motion\" ORDER BY \"id\" ASC"):
+ dt=row[2].strftime("%Y%m%d")
+ if ct[row[1]]["dt"] != dt:
+ ct[row[1]]["dt"] = dt
+ ct[row[1]]["c"] = 0
+ ct[row[1]]["c"] = ct[row[1]]["c"] + 1
+ name=prefix[app.config.get("DEFAULT_HOST")][row[1]]+"."+dt+"."+("%03d" % ct[row[1]]["c"])
+ p(name, row[0])
+ db.prepare("ALTER TABLE \"motion\" ALTER COLUMN \"identifier\" SET NOT NULL")()
+ db.prepare("UPDATE \"schema_version\" SET \"version\"=2")()
+ db.prepare("CREATE UNIQUE INDEX motion_ident ON motion (identifier)")()
+
+ if ver < 3:
+ with app.open_resource('sql/from_2.sql', mode='r') as f:
+ db.execute(f.read())
+ db.prepare("UPDATE \"motion\" SET \"host\"=$1")(app.config.get("DEFAULT_HOST"))
+ db.prepare("ALTER TABLE \"motion\" ALTER COLUMN \"host\" SET NOT NULL")()
+ db.prepare("UPDATE \"schema_version\" SET \"version\"=3")()
+
+
+init_db()