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