1 /*
2  * DatabaseControllerSqlite.cpp
3  *
4  *  Created on: 27 juin 2016
5  *      Author: echopin
6  */
7 
8 #include "DatabaseControllerSqlite.h"
9 
DatabaseControllerSqlite(const DatabaseModel & databaseModel)10 DatabaseControllerSqlite::DatabaseControllerSqlite(const DatabaseModel& databaseModel) : DatabaseController(databaseModel)
11 {
12 	m_db = QSqlDatabase::addDatabase("QSQLITE", QString::number(g_iConnectionIdentifier++));
13 	m_db.setDatabaseName(databaseModel.getDatabasePath());
14 }
15 
~DatabaseControllerSqlite()16 DatabaseControllerSqlite::~DatabaseControllerSqlite()
17 {
18 
19 }
20 
loadTableDescriptionQuery(const QString & szTableName)21 QString DatabaseControllerSqlite::loadTableDescriptionQuery(const QString& szTableName)
22 {
23 	return QString("PRAGMA table_info(%0);").arg(szTableName);
24 }
25 
loadTableDescriptionResult(const QSqlQuery query)26 QStringList DatabaseControllerSqlite::loadTableDescriptionResult(const QSqlQuery query)
27 {
28 	QStringList listRowData;
29 	QString szNotNull;
30 
31 	QString szName = query.value(1).toString();
32 	QString szType = query.value(2).toString();
33 	bool bNotNull = query.value(3).toBool();
34 	if(bNotNull == false)//bNotNull doesn't appear in the table, this is a workaround
35 		szNotNull = "false";
36 	else
37 		szNotNull = "true";//end of workaround
38 	QString szDefaultValue = query.value(4).toString();
39 	QString szPk = query.value(5).toString();
40 	listRowData << szName << szType << szNotNull << szDefaultValue << szPk;
41 
42 	return listRowData;
43 }
44 
loadTableDescriptionColumnNames(const QSqlQuery query)45 QStringList DatabaseControllerSqlite::loadTableDescriptionColumnNames(const QSqlQuery query)
46 {
47 	QStringList listColumnName;
48 	listColumnName << "Field" << "Type" << "Not null" << "Default value" << "Primary key";
49 	return listColumnName;
50 }
51 
loadTableCreationScriptQuery(const QString & szTableName)52 QString DatabaseControllerSqlite::loadTableCreationScriptQuery(const QString& szTableName)
53 {
54 	return QString("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = '"+szTableName+"';");
55 }
56 
makeTableCreationScriptQueryResult(const QSqlQuery query)57 QString DatabaseControllerSqlite::makeTableCreationScriptQueryResult(const QSqlQuery query)
58 {
59 	return QString(query.value(0).toString());
60 }
61 
listColumnNames(const QString & szTableName)62 QStringList DatabaseControllerSqlite::listColumnNames(const QString& szTableName)
63 {
64 	QStringList szListColumnName;
65 	QSqlQuery tableInfoQuery(m_db);
66 	tableInfoQuery.exec(loadTableDescriptionQuery(szTableName));
67 	while (tableInfoQuery.next())
68 	   {
69 		QString szName = tableInfoQuery.value(1).toString();
70 		szListColumnName += szName;
71 	   }
72 	return szListColumnName;
73 }
74