Added configuration of temporary directory.
[emufront] / src / db / dbcreator.cpp
index be16cb9..5b686af 100644 (file)
@@ -5,9 +5,9 @@
 //
 //
 // EmuFront is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
+// 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
@@ -28,7 +28,7 @@
 using namespace std;
 
 const int DbCreator::TABLES_COUNT = 3;
-const QString DbCreator::TABLES[] = {"platform", "mediatype", "filepath", "mediaimagecontainer", "mediaimage", "mediaimagecontainer_mediaimage"};
+const QString DbCreator::TABLES[] = {"platform", "mediatype", "filepath", "mediaimagecontainer_filepath", "mediaimage", "mediaimagecontainer_mediaimage"};
 
 DbCreator::DbCreator(QObject *parent) : QObject(parent)
 {
@@ -42,8 +42,8 @@ bool DbCreator::createDB()
 
     try
     {
-        query.exec("DROP TABLE IF EXISTS mediaimagecontainer_file");
-        query.exec("DROP TABLE IF EXISTS mediaimagecontainer");
+        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");
@@ -53,6 +53,10 @@ bool DbCreator::createDB()
 
         qDebug() << "Creating TABLE file";
 
+        ret = query.exec("CREATE TABLE IF NOT EXISTS config"
+                "(tmpdirpath TEXT)"
+            );
+
         ret = query.exec("CREATE TABLE IF NOT EXISTS file"
                         "(id INTEGER PRIMARY KEY, "
                         "name TEXT, "
@@ -61,6 +65,8 @@ bool DbCreator::createDB()
                         "size INTEGER, "
                         "updatetime NUMERIC)");
 
+        if (!ret) throw QString("tbl file");
+
         qDebug() << "Creating TABLE platform";
 
         ret = query.exec("CREATE TABLE IF NOT EXISTS platform "
@@ -68,7 +74,7 @@ bool DbCreator::createDB()
                          "name TEXT, "
                          "fileid INTEGER REFERENCES file(id))");
 
-        if (!ret) throw QString("platform.");
+        if (!ret) throw QString("tbl platform");
 
         qDebug() << "Creating TABLE mediatype ";
 
@@ -77,7 +83,7 @@ bool DbCreator::createDB()
                          "name TEXT, "
                          "fileid INTEGER REFERENCES file(id))");
 
-        if (!ret) throw QString("mediatype.");
+        if (!ret) throw QString("tbl mediatype");
 
         qDebug() << "Creating TABLE setup";
 
@@ -87,24 +93,19 @@ bool DbCreator::createDB()
                         "mediatypeid INTEGER REFERENCES mediatype(id) ON DELETE CASCADE, "
                         "filetypeextensions TEXT)");
 
+        if (!ret) throw QString("tbl setup");
+
         qDebug() << "Creating table executable";
 
         ret = query.exec("CREATE TABLE IF NOT EXISTS executable "
                         "(id INTEGER PRIMARY KEY, "
                         "name TEXT, "
+                        "executable TEXT, "
                         "options TEXT, "
                         "type INTEGER, "
                         "setupid INTEGER REFERENCES setup(id))");
 
-        /*qDebug() << "Creating TABLE filetype";
-            ret = query.exec("CREATE TABLE filetype IF NOT EXISTS"
-                             "(id INTEGER PRIMARY KEY, "
-                             "name TEXT)");
-            if (!ret) throw QString("filetype.");
-            query.exec("insert into filetype (id, name) values (1, 'media image container')");
-            query.exec("insert into filetype (id, name) values (2, 'screenshot')");
-            query.exec("insert into filetype (id, name) values (3, 'platform icon')");
-            query.exec("insert into filetype (id, name) values (4, 'media type icon')");*/
+        if (!ret) throw QString("tbl executable");
 
         qDebug() << "Creating TABLE filepath";
 
@@ -116,16 +117,16 @@ bool DbCreator::createDB()
                          "lastscanned NUMERIC, "
                          "FOREIGN KEY (setupid) REFERENCES setup(id))");
 
-        if (!ret) throw QString("filepath");
+        if (!ret) throw QString("tbl filepath");
 
-        qDebug() << "Creating TABLE mediaimagecontainer";
+        qDebug() << "Creating TABLE mediaimagecontainer_filepath";
 
-        ret = query.exec("CREATE TABLE IF NOT EXISTS mediaimagecontainer "
+        ret = query.exec("CREATE TABLE IF NOT EXISTS mediaimagecontainer_filepath "
                         "(fileid INTEGER REFERENCES file(id), "
                         "filepathid INTEGER REFERENCES filepath(id), "
                         "updatetime NUMERIC)");
 
-        if (!ret) throw QString("mediaimagecontainer");
+        if (!ret) throw QString("tbl mediaimagecontainer_filepath");
 
 
         qDebug() << "Creating TABLE mediaimagecontainer_mediaimage";
@@ -134,7 +135,7 @@ bool DbCreator::createDB()
                         "(mediaimagecontainerid INTEGER REFERENCES file(id), "
                         "mediaimageid INTEGER REFERENCES file(id))");
 
-        if (!ret) throw QString("mediaimagecontainer_mediaimage");
+        if (!ret) throw QString("tbl mediaimagecontainer_mediaimage");
 
         query.exec(
             "CREATE TRIGGER IF NOT EXISTS trg_onplatformdelete "
@@ -144,6 +145,8 @@ bool DbCreator::createDB()
             "END;"
             );
 
+        if (!ret) throw QString("trg_onplatformdelete");
+
         query.exec(
             "CREATE TRIGGER IF NOT EXISTS trg_onmediatypedelete "
             "AFTER DELETE ON mediatype "
@@ -152,27 +155,54 @@ bool DbCreator::createDB()
             "END;"
             );
 
+        if (!ret) throw QString("trg_onmediatypedelete");
+
         query.exec(
             "CREATE TRIGGER IF NOT EXISTS trg_onsetupdelete "
             "AFTER DELETE ON setup "
             "BEGIN "
-            "   DELETE FROM filepath WHERE filepath.setupid = old.id;"
+            "   DELETE FROM filepath WHERE filepath.setupid = old.id; "
+            "   DELETE FROM executable WHERE executable.setupid = old.id; "
             "END;"
             );
+
+        if (!ret) throw QString("trg_onsetupdelete");
+
         query.exec(
-            "CREATE TRIGGER IF NOT EXISTS trg_onfiledelete "
-            "AFTER DELETE ON file "
+            "CREATE TRIGGER IF NOT EXISTS trg_onfilepathdelete "
+            "AFTER DELETE ON filepath "
             "BEGIN "
-            "   UPDATE platform SET platform.inconfileid=NULL WHERE platform.iconfileid = old.id;"
-            "   UPDATE mediatype SET mediatype.iconfileid=NULL WHERE mediatype.iconfileid = old.id;"
-            "   DELETE FROM mediaimagecontainer_mediaimage WHERE mediaimagecontainer_mediaimage.fileid = old.id;"
+            "   DELETE FROM mediaimagecontainer_filepath WHERE mediaimagecontainer_filepath.filepathid=old.id; "
             "END;"
         );
+
+        if (!ret) throw QString("trg_onfilepathdelete");
+
+        query.exec(
+            "CREATE TRIGGER IF NOT EXISTS trg_onmediaimagecontainerdelete "
+            "AFTER DELETE ON mediaimagecontainer_filepath "
+            "BEGIN "
+            "   DELETE FROM mediaimagecontainer_mediaimage WHERE mediaimagecontainer_mediaimage.mediaimagecontainerid=old.fileid;"
+            "END;"
+        );
+
+        if (!ret) throw QString("trg_onmediaimagecontainerdelete");
+
+        query.exec(
+            "CREATE TRIGGER IF NOT EXISTS trg_onmediaimagecontainer_mediaimagedelete "
+            "AFTER DELETE ON mediaimagecontainer_mediaimage "
+            "BEGIN "
+            "    DELETE FROM file WHERE file.id=old.mediaimageid; "
+            "    DELETE FROM file WHERE file.id=old.mediaimagecontainerid; "
+            "END;"
+        );
+        if (!ret) throw QString("trg_onmediaimagecontainer_mediaimagedelete");
+
     }
     catch (QString tbl)
     {
         QString err = query.lastError().text();
-        throw QString("Couldn't CREATE table '%1'!").arg(tbl).append(err);
+        throw QString("Couldn't CREATE '%1'!").arg(tbl).append(err);
     }
     return ret;
 }