X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcommon%2Fdb.cpp;h=fd12f3471ed3e84e21ca3ba2fae8074810ded716;hb=d683b3ca259161ea7b5fb806b3bdab8fb1e96cb7;hp=83aa85fb238bf322b2479e57506a1d06b9335da7;hpb=9127dc5e47aee7fa6659f45ae60a9394612f27b1;p=jenirok diff --git a/src/common/db.cpp b/src/common/db.cpp index 83aa85f..fd12f34 100644 --- a/src/common/db.cpp +++ b/src/common/db.cpp @@ -18,6 +18,7 @@ #include #include +#include #include #include #include "db.h" @@ -26,6 +27,7 @@ namespace { const QString SQL_DRIVER = "QSQLITE"; const QString SQL_DATABASE = ".jenirok.db"; + const int DB_VERSION = 2; } bool DB::initialized_ = false; @@ -50,11 +52,20 @@ bool DB::connect() if(ret && !initialized_) { - QSqlQuery query("SELECT value FROM settings WHERE name = 'initialized'"); + QSqlQuery query("SELECT value FROM settings WHERE name = 'db_version'"); - if(!query.next()) + if(query.next()) { - ret = createTables(); + int currentVersion = query.value(0).toString().toInt(); + + if(currentVersion < DB_VERSION) + { + ret = createTables(true); + } + } + else + { + ret = createTables(false); } } @@ -73,6 +84,11 @@ void DB::disconnect() void DB::removeDatabase() { + if(!initialized_) + { + return; + } + db_.close(); db_ = QSqlDatabase(); QSqlDatabase::removeDatabase(QSqlDatabase::defaultConnection); @@ -89,15 +105,24 @@ QSqlDatabase& DB::instance() return db_; } -bool DB::createTables() +bool DB::createTables(bool update) { QSqlQuery query; bool ret = true; - ret = ret && query.exec("CREATE TABLE cache (id INTEGER PRIMARY KEY, number VARCHAR(32) NOT NULL UNIQUE, name VARCHAR(255) NOT NULL, street VARCHAR(255) NOT NULL, city VARCHAR(255) NOT NULL)"); - ret = ret && query.exec("CREATE TABLE settings (name VARCHAR(255) NOT NULL PRIMARY KEY, value VARCHAR(255) NOT NULL)"); - ret = ret && query.exec("INSERT INTO settings(name, value) VALUES('initialized', '1')"); + ret = ret && query.exec("CREATE TABLE IF NOT EXISTS cache (id INTEGER PRIMARY KEY, number VARCHAR(32) NOT NULL UNIQUE, name VARCHAR(255) NOT NULL, street VARCHAR(255) NOT NULL, city VARCHAR(255) NOT NULL)"); + ret = ret && query.exec("CREATE TABLE IF NOT EXISTS settings (name VARCHAR(255) NOT NULL PRIMARY KEY, value VARCHAR(255) NOT NULL)"); + ret = ret && query.exec("CREATE TABLE IF NOT EXISTS log (id INTEGER PRIMARY KEY, number VARCHAR(32) NOT NULL, name VARCHAR(255), street VARCHAR(255), city VARCHAR(255), country VARCHAR(255), time INTEGER NOT NULL, missed INTEGER NOT NULL)"); + + if(update) + { + ret = ret && query.exec("UPDATE settings SET value = '" + QString::number(DB_VERSION) + "' WHERE name = 'db_version'"); + } + else + { + ret = ret && query.exec("INSERT INTO settings(name, value) VALUES('db_version', '" + QString::number(DB_VERSION) + "')"); + } return ret; }