X-Git-Url: http://git.maemo.org/git/?p=jenirok;a=blobdiff_plain;f=src%2Fcommon%2Fdb.cpp;h=fd12f3471ed3e84e21ca3ba2fae8074810ded716;hp=e5ce3161030424b998179740dcfcb09ebfead93a;hb=6965c4495bce1459eaba90b34569830c95aff5e3;hpb=89496ceee9788c2908c27ad4e2535f2728310d76 diff --git a/src/common/db.cpp b/src/common/db.cpp index e5ce316..fd12f34 100644 --- a/src/common/db.cpp +++ b/src/common/db.cpp @@ -17,15 +17,17 @@ */ #include +#include +#include #include #include #include "db.h" -#include namespace { - const QString SQL_DRIVER = "QSQLITE"; - const QString SQL_DATABASE = ".jenirok.db"; + const QString SQL_DRIVER = "QSQLITE"; + const QString SQL_DATABASE = ".jenirok.db"; + const int DB_VERSION = 2; } bool DB::initialized_ = false; @@ -33,71 +35,94 @@ QSqlDatabase DB::db_; bool DB::connect() { - if(!initialized_) - { - db_ = QSqlDatabase::addDatabase(SQL_DRIVER); - QString path = QDir::home().path() + QDir::separator() + SQL_DATABASE; - db_.setDatabaseName(QDir::toNativeSeparators(path)); - } - - bool ret = db_.open(); - - if(!ret) - { - QSqlError error = db_.lastError(); - qDebug() << error.text(); - } - - if(ret && !initialized_) - { - QSqlQuery query("SELECT value FROM settings WHERE name = 'initialized'"); - - if(!query.next()) - { - ret = createTables(); - } - } - - if(!initialized_) - { - initialized_ = true; - } - - return ret; + if(!initialized_) + { + db_ = QSqlDatabase::addDatabase(SQL_DRIVER); + QString path = QDir::home().path() + QDir::separator() + SQL_DATABASE; + db_.setDatabaseName(QDir::toNativeSeparators(path)); + } + + bool ret = db_.open(); + + if(!ret) + { + QSqlError error = db_.lastError(); + qDebug() << error.text(); + } + + if(ret && !initialized_) + { + QSqlQuery query("SELECT value FROM settings WHERE name = 'db_version'"); + + if(query.next()) + { + int currentVersion = query.value(0).toString().toInt(); + + if(currentVersion < DB_VERSION) + { + ret = createTables(true); + } + } + else + { + ret = createTables(false); + } + } + + if(!initialized_) + { + initialized_ = true; + } + + return ret; } void DB::disconnect() { - db_.close(); + db_.close(); } void DB::removeDatabase() { - db_.close(); - db_ = QSqlDatabase(); - QSqlDatabase::removeDatabase(QSqlDatabase::defaultConnection); - initialized_ = false; + if(!initialized_) + { + return; + } + + db_.close(); + db_ = QSqlDatabase(); + QSqlDatabase::removeDatabase(QSqlDatabase::defaultConnection); + initialized_ = false; } bool DB::connected() { - return db_.isOpen(); + return db_.isOpen(); } QSqlDatabase& DB::instance() { - return db_; + return db_; } -bool DB::createTables() +bool DB::createTables(bool update) { - QSqlQuery query; + QSqlQuery query; - bool ret = true; + 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)"); - return ret; + 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; }