diff --git a/ocdb.cpp b/ocdb.cpp index 464660c..f916c2f 100644 --- a/ocdb.cpp +++ b/ocdb.cpp @@ -19,10 +19,6 @@ OCdb::OCdb(const std::string& db_file) { Debug(1) << sqlite3_errmsg(db); throw 1; } - if (!request("CREATE TABLE IF NOT EXISTS revision (revision INTEGER PRIMARY KEY);") || - !request("CREATE TABLE IF NOT EXISTS caches (code TEXT PRIMARY KEY, name TEXT, location TEXT, type TEXT, status TEXT, size TEXT, difficulty REAL, terrain REAL, country TEXT, region TEXT, owner TEXT);") || - !request("CREATE TABLE IF NOT EXISTS logs (uuid TEXT PRIMARY KEY, cache_code TEXT, date TEXT, user TEXT, type TEXT);")) - throw 1; if (!read_revision()) { Debug(1) << "Error reading database revision, database may be corrupt or empty.\n"; } @@ -52,9 +48,18 @@ bool OCdb::request(const std::string& req) const { } bool OCdb::init(const std::string& dump_path) { - request("DELETE FROM caches;"); - request("DELETE FROM logs;"); - request("DELETE FROM revision;"); + request("BEGIN TRANSACTION;"); + if (!request("DROP TABLE IF EXISTS caches;") || + !request("DROP TABLE IF EXISTS logs;") || + !request("DROP TABLE IF EXISTS revision;")) + throw 1; + + if (!request("CREATE TABLE IF NOT EXISTS revision (revision INTEGER PRIMARY KEY);") || + !request("CREATE TABLE IF NOT EXISTS caches (code TEXT PRIMARY KEY, name TEXT, location TEXT, type TEXT, status TEXT, size TEXT, difficulty REAL, terrain REAL, country TEXT, region TEXT, owner TEXT);") || + !request("CREATE TABLE IF NOT EXISTS logs (uuid TEXT PRIMARY KEY, cache_code TEXT, date TEXT, user TEXT, type TEXT);") || + !request("CREATE INDEX idx_user on logs (user, type);")) + throw 1; + request("COMMIT;"); std::ifstream file(dump_path + "index.json"); json j;