-// EmuFront
-// Copyright 2010 Mikko Keinänen
-//
-// This file is part of EmuFront.
-//
-//
-// EmuFront is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as published by
-// the Free Software Foundation and appearing in the file gpl.txt included in the
-// packaging of this file.
-//
-// EmuFront is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with EmuFront. If not, see <http://www.gnu.org/licenses/>.
-
+/*
+** EmuFront
+** Copyright 2010 Mikko Keinänen
+**
+** This file is part of EmuFront.
+**
+**
+** EmuFront is free software: you can redistribute it and/or modify
+** it under the terms of the GNU General Public License version 2 as published by
+** the Free Software Foundation and appearing in the file gpl.txt included in the
+** packaging of this file.
+**
+** EmuFront is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with EmuFront. If not, see <http://www.gnu.org/licenses/>.
+*/
#include <QObject>
+#include <QDir>
#include <QSqlDatabase>
#include <QSqlQuery>
+#include <QSqlRecord>
+#include <QSqlTableModel>
#include <QSqlError>
#include <QDebug>
#include <exception>
#include "dbcreator.h"
+#include "emufrontexception.h"
using namespace std;
-const int DbCreator::TABLES_COUNT = 3;
-const QString DbCreator::TABLES[] = {"platform", "mediatype", "filepath", "mediaimagecontainer_filepath", "mediaimage", "mediaimagecontainer_mediaimage"};
+const int DbCreator::DB_VERSION = 1;
+//const int DbCreator::TABLES_COUNT = 3;
+//const QString DbCreator::TABLES[] = {"platform", "mediatype", "filepath", "mediaimagecontainer_filepath", "mediaimage", "mediaimagecontainer_mediaimage"};
DbCreator::DbCreator(QObject *parent) : QObject(parent)
{
try
{
+
+ /*
+
+ N O T I C E
+ -----------
+
+ When adding a new table, remember to add a drop table
+ clause also!
+
+ When changing the database structure, increase
+ also the version number and create a sql command
+ for updating from last version to new version.
+
+ Update those version upgrade "patches" here as a version history:
+ -----------------------------------------------------------------
+
+ */
+
query.exec("DROP TABLE IF EXISTS mediaimagecontainer_mediaimage");
query.exec("DROP TABLE IF EXISTS mediaimagecontainer_filepath");
query.exec("DROP TABLE IF EXISTS filepath");
query.exec("DROP TABLE IF EXISTS setup");
query.exec("DROP TABLE IF EXISTS mediatype");
query.exec("DROP TABLE IF EXISTS platform");
- query.exec("DROP TABLE IF EXISTS file");
+ query.exec("DROP TABLE IF EXISTS file") ;
query.exec("DROP TABLE IF EXISTS executable");
+ query.exec("DROP TABLE IF EXISTS config");
qDebug() << "Creating TABLE file";
ret = query.exec("CREATE TABLE IF NOT EXISTS config"
- "(tmpdirpath TEXT)"
+ "(tmpdirpath TEXT, "
+ "dbversion INTEGER)"
);
+ if (ret) {
+ query.prepare("INSERT INTO config "
+ "(tmpdirpath, dbversion) "
+ "VALUES (:tmpdir, :dbversion)");
+ query.bindValue(":tmpdir", QDir::homePath());
+ query.bindValue(":dbversion", DbCreator::DB_VERSION);
+ ret = query.exec();
+ }
+
+ if (!ret) throw QString("tbl config");
+
ret = query.exec("CREATE TABLE IF NOT EXISTS file"
"(id INTEGER PRIMARY KEY, "
"name TEXT, "
"type INTEGER, "
"checksum TEXT, "
"size INTEGER, "
- "updatetime NUMERIC)");
+ "updatetime NUMERIC, "
+ "extname TEXT)");
if (!ret) throw QString("tbl file");
catch (QString tbl)
{
QString err = query.lastError().text();
- throw QString("Couldn't CREATE '%1'!").arg(tbl).append(err);
+ throw EmuFrontException(QString("Couldn't CREATE '%1'!").arg(tbl).append(err));
}
return ret;
}
/**
* Check if database already exists.
- * Returns false if doesn't or we don't have a connection.
+ *
+ * Returns 0 if database doesn't exist
+ * or database version number 1 if database exists
+ *
*/
-bool DbCreator::dbExists()
+int DbCreator::dbExists()
{
- for (int i = 0; i < TABLES_COUNT; ++i)
+ int ret = 0;
+ QString sql("SELECT dbversion FROM config");
+ QSqlQuery q;
+ q.exec(sql);
+ if (q.next()) {
+ ret = q.value(0).toInt();
+ qDebug() << "Database version is " << ret
+ << " the application requires " << DB_VERSION;
+ }
+ return ret;
+ /*for (int i = 0; i < TABLES_COUNT; ++i)
{
if (!tableExists(TABLES[i]))
{
}
qDebug() << "Table " << TABLES[i] << " exists.";
}
- return true;
+ return true;*/
}
bool DbCreator::tableExists(QString TABLE)