Added new base class for EmuFront dialogs, connected database class to
[emufront] / src / db / databasemanager.cpp
1 #include "databasemanager.h"
2 #include <QObject>
3 #include <QSqlDatabase>
4 #include <QSqlError>
5 #include <QSqlQuery>
6 #include <QFile>
7 #include <QDir>
8 #include <QVariant>
9 #include <iostream>
10
11 const QString DatabaseManager::DB_FILENAME = QString("my.db.sqlite");
12 QSqlDatabase DatabaseManager::db = QSqlDatabase::addDatabase("QSQLITE");
13
14 DatabaseManager::DatabaseManager(QObject *parent)
15         : QObject(parent)
16 {}
17
18 DatabaseManager::~DatabaseManager()
19 {}
20
21 bool DatabaseManager::openDB()
22 {
23     if (DatabaseManager::db.databaseName().isEmpty())
24     {
25         DatabaseManager::db.setDatabaseName(DatabaseManager::getDbPath());
26     }
27     return DatabaseManager::db.open();
28 }
29
30 QSqlError DatabaseManager::lastError()
31 {
32         return db.lastError();
33 }
34
35 bool DatabaseManager::deleteDB()
36 {
37         db.close();
38         return QFile::remove(getDbPath());
39 }
40
41 QString DatabaseManager::getDbPath()
42 {
43         QString path;
44 #ifdef Q_OS_LINUX
45         path.append(QDir::home().path());
46         path.append(QDir::separator()).append(DB_FILENAME);
47 #else
48         path.append(DB_FILENAME);       
49 #endif
50         return path;
51 }
52
53 /**
54  * Check if database already exists.
55  * Returns false if doesn't or we don't have a connection.
56 */ 
57 bool DatabaseManager::dbExists() const
58 {
59         using namespace std;
60         if (!db.isOpen()) 
61         {
62                 cerr << "Database is not connected!" << endl;
63                 return false;
64         }
65         QSqlQuery query;
66         query.exec("SELECT name FROM sqlite_master WHERE name='person'");
67         return query.next();
68 }
69
70 bool DatabaseManager::createDB() const
71 {
72         bool ret = false;
73         if (db.isOpen())
74         {
75                 QSqlQuery query;
76                 ret = query.exec("create table platform "
77                                 "(id integer primary key, "
78                                 "name varchar(30), "
79                                 "filename varchar(125))");
80                 /*ret = query.exec("create table media "
81                                                 "(id integer primary key, "
82                                                 "name varchar(30), "
83                                                 "filename varchar(125))");*/
84         }
85         return ret;
86 }
87
88 int DatabaseManager::insertPlatform(QString name, QString filename)
89 {
90         int newId = -1;
91         bool ret = false;
92         if (db.isOpen())
93         {
94                 //http://www.sqlite.org/autoinc.html
95                 // NULL = is the keyword for the autoincrement to generate next value
96                 QSqlQuery query;
97                 query.prepare("insert into platform (id, name, filename) "
98                                                 "values (NULL, :name, :filename)");
99                 query.bindValue(":name", name);
100                 query.bindValue(":filename", filename);
101                 ret = query.exec();
102
103                 /*ret = query.exec(QString("insert into person values(NULL,'%1','%2',%3)")
104                                 .arg(firstname).arg(lastname).arg(age));*/
105                 // Get database given autoincrement value
106                 if (ret)
107                 {
108                         // http://www.sqlite.org/c3ref/last_insert_rowid.html  
109                         QVariant var = query.lastInsertId();
110                         if (var.isValid()) newId = var.toInt();
111                 }
112         }
113         return newId;
114 }
115
116 QString DatabaseManager::getPlatform(int id) const
117 {
118         QString name;
119         QSqlQuery query(QString("select firstname, lastname from person where id = %1").arg(id));
120
121         if (query.next())
122         {
123                 name.append(query.value(0).toString());
124                 name.append(query.value(1).toString());
125         }
126         return name;
127 }
128