X-Git-Url: https://vaikene.ee/gitweb/highlight.css?a=blobdiff_plain;f=src%2Fapps%2FPswGen%2FStorage%2Fmodule.cpp;h=12fda4213118132b30768af23720beb78cfbd5bd;hb=9244d12b8b40402d057dad296cd1c2b20e22930c;hp=b7676abf282f0d1323855a54919a676048619a43;hpb=602faa7b96d4467f127ccd581228ca7245283c32;p=evaf diff --git a/src/apps/PswGen/Storage/module.cpp b/src/apps/PswGen/Storage/module.cpp index b7676ab..12fda42 100644 --- a/src/apps/PswGen/Storage/module.cpp +++ b/src/apps/PswGen/Storage/module.cpp @@ -3,7 +3,7 @@ * @brief Implementation of the iStorage interface * @author Enar Vaikene * - * Copyright (c) 2011 Enar Vaikene + * Copyright (c) 2011-2012 Enar Vaikene * * This file is part of the eVaf C++ cross-platform application development framework. * @@ -150,8 +150,8 @@ bool StorageImpl::save(QString const & name, QExplicitlySharedDataPointermodified()) { QSqlQuery q(mDb); - if (!q.exec(QString("UPDATE data SET length = \'%1\', flags = \'%2\' WHERE name = \'%3\';") - .arg(data->length()).arg(data->flags()).arg(name))) { + if (!q.exec(QString("UPDATE data SET suffix = \'%1\', length = \'%2\', flags = \'%3\' WHERE name = \'%4\';") + .arg(data->suffix()).arg(data->length()).arg(data->flags()).arg(name))) { QSqlError err = mDb.lastError(); EVAF_ERROR("Failed to update \'%s\' : %s", qPrintable(name), qPrintable(err.text())); return false; @@ -161,8 +161,8 @@ bool StorageImpl::save(QString const & name, QExplicitlySharedDataPointerlength()) + if (!q.exec(QString("INSERT INTO data (name, suffix, length, flags) VALUES (\'%1\', \'%2\', %3, %4);") + .arg(name).arg(data->suffix()).arg(data->length()) .arg(int(data->flags())))) { QSqlError err = mDb.lastError(); EVAF_ERROR("Failed to insert \'%s\' : %s", qPrintable(name), qPrintable(err.text())); @@ -210,11 +210,13 @@ bool StorageImpl::createTables() return false; } - if (q.isActive() && q.isSelect() && q.first()) - return true; // We already have a table called 'data' + if (q.isActive() && q.isSelect() && q.first()) { + // Check if the table needs to be upgraded + return upgradeTables(); + } // Create the 'data' table - if (!q.exec("CREATE TABLE data (name text primary key not null, length integer, flags integer);")) { + if (!q.exec("CREATE TABLE data (name text primary key not null, suffix text, length integer, flags integer);")) { QSqlError err = mDb.lastError(); EVAF_ERROR("Failed to create table \'data\' : %s", qPrintable(err.text())); return false; @@ -223,10 +225,29 @@ bool StorageImpl::createTables() return true; } +bool StorageImpl::upgradeTables() +{ + QSqlQuery q(mDb); + + // Check if the 'suffix' column exists + if (q.exec("SELECT suffix from data;")) { + return true; + } + + // Add the 'suffix' columnt + if (!q.exec("ALTER TABLE data ADD COLUMN suffix TEXT;")) { + QSqlError err = mDb.lastError(); + EVAF_ERROR("Failed to upgrade table \'data\' : %s", qPrintable(err.text())); + return false; + } + + return true; +} + bool StorageImpl::loadData() { QSqlQuery q(mDb); - if (!q.exec("SELECT name, length, flags FROM data;")) { + if (!q.exec("SELECT name, suffix, length, flags FROM data;")) { QSqlError err = mDb.lastError(); EVAF_ERROR("Failed to query database : %s", qPrintable(err.text())); return false; @@ -234,7 +255,8 @@ bool StorageImpl::loadData() while (q.next()) { QString name = q.value(0).toString(); - QExplicitlySharedDataPointer data(new Storage::Data(name, q.value(1).toInt(), uint(q.value(2).toInt()))); + QExplicitlySharedDataPointer data( + new Storage::Data(name, q.value(1).toString(), q.value(2).toInt(), uint(q.value(3).toInt()))); mData.insert(name, data); }