You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
182 lines
4.6 KiB
C++
182 lines
4.6 KiB
C++
#include "common.h"
|
|
#include "cdatabase.h"
|
|
|
|
#include <QSettings>
|
|
|
|
#include <QDebug>
|
|
|
|
|
|
cDatabase::cDatabase()
|
|
{
|
|
QSettings settings;
|
|
|
|
m_databaseType = settings.value("database/databasetype", "").toString();
|
|
m_hostName = settings.value("database/hostname", "").toString();
|
|
m_port = settings.value("database/port", "").toInt();
|
|
m_databaseName = settings.value("database/databaseName").toString();
|
|
m_userName = settings.value("database/username", "").toString();
|
|
m_password = settings.value("database/password").toString();
|
|
|
|
addTranslate("AUTOINCREMENT", "QMYSQL", "AUTO_INCREMENT");
|
|
addTranslate("AUTOINCREMENT", "QSQLITE", "AUTOINCREMENT");
|
|
}
|
|
|
|
cDatabase::~cDatabase()
|
|
{
|
|
if(m_db.isOpen())
|
|
m_db.close();
|
|
}
|
|
|
|
void cDatabase::addTranslate(const QString& sql, const QString& dbType, const QString& translated)
|
|
{
|
|
SQLTRANSLATE st = { sql, dbType, translated };
|
|
m_sqlTranslate.append(st);
|
|
}
|
|
|
|
QString cDatabase::translate(const QString& sql, const QString& dbType)
|
|
{
|
|
for(QList<SQLTRANSLATE>::iterator st = m_sqlTranslate.begin();st != m_sqlTranslate.end();st++)
|
|
{
|
|
if(st->sql == sql && st->dbType == dbType)
|
|
return(st->translated);
|
|
}
|
|
return(sql);
|
|
}
|
|
|
|
bool cDatabase::connect()
|
|
{
|
|
m_db = QSqlDatabase::addDatabase(m_databaseType);
|
|
m_db.setHostName(m_hostName);
|
|
m_db.setPort(m_port);
|
|
m_db.setDatabaseName(m_databaseName);
|
|
m_db.setUserName(m_userName);
|
|
m_db.setPassword(m_password);
|
|
|
|
if(!m_db.open())
|
|
{
|
|
myDebug << m_db.lastError().text();
|
|
return(false);
|
|
}
|
|
|
|
if(!checkDB())
|
|
{
|
|
myDebug << m_db.lastError().text();
|
|
return(false);
|
|
}
|
|
|
|
return(true);
|
|
}
|
|
|
|
QSqlDatabase cDatabase::db()
|
|
{
|
|
return(m_db);
|
|
}
|
|
|
|
bool cDatabase::checkDB()
|
|
{
|
|
QSqlQuery query(m_db);
|
|
if(!query.exec("SELECT version FROM config;"))
|
|
{
|
|
if(!createTables())
|
|
return(false);
|
|
|
|
if(!query.exec("SELECT version FROM config;"))
|
|
return(false);
|
|
}
|
|
|
|
query.first();
|
|
QString version = query.value("version").toString();
|
|
if(version.compare(APP_VERSION))
|
|
{
|
|
if(!upgradeDB(APP_VERSION))
|
|
return(false);
|
|
}
|
|
|
|
return(true);
|
|
}
|
|
|
|
bool cDatabase::createTables()
|
|
{
|
|
QSqlQuery query(m_db);
|
|
|
|
// CONFIG
|
|
if(!query.exec("CREATE TABLE config "
|
|
"( version VARCHAR(32) NOT NULL "
|
|
");"))
|
|
{
|
|
myDebug << query.lastError().text();
|
|
return(false);
|
|
}
|
|
|
|
if(!query.exec(QString("INSERT INTO config (version) VALUES ('%1');").arg(APP_VERSION)))
|
|
{
|
|
myDebug << query.lastError().text();
|
|
return(false);
|
|
}
|
|
|
|
// MANUFACTURER
|
|
if(!query.exec(QString("CREATE TABLE manufacturer "
|
|
"( id INTEGER PRIMARY KEY %1, "
|
|
" name VARCHAR(255) NOT NULL, "
|
|
" address VARCHAR(2000), "
|
|
" url VARCHAR(255), "
|
|
" email VARCHAR(255), "
|
|
" phone VARCHAR(255), "
|
|
" fax VARCHAR(255), "
|
|
" comment VARCHAR(2000) "
|
|
");").arg(translate("AUTOINCREMENT", m_databaseType))))
|
|
{
|
|
myDebug << query.lastError().text();
|
|
return(false);
|
|
}
|
|
|
|
// DISTRIBUTOR
|
|
if(!query.exec(QString("CREATE TABLE distributor "
|
|
"( id INTEGER PRIMARY KEY %1, "
|
|
" name VARCHAR(255) NOT NULL, "
|
|
" address VARCHAR(2000), "
|
|
" url VARCHAR(255), "
|
|
" email VARCHAR(255), "
|
|
" phone VARCHAR(255), "
|
|
" fax VARCHAR(255), "
|
|
" comment VARCHAR(2000) "
|
|
");").arg(translate("AUTOINCREMENT", m_databaseType))))
|
|
{
|
|
myDebug << query.lastError().text();
|
|
return(false);
|
|
}
|
|
|
|
// STORAGE_CATEGORY
|
|
if(!query.exec(QString("CREATE TABLE storage_category "
|
|
"( id INTEGER PRIMARY KEY %1, "
|
|
" parent INTEGER, "
|
|
" name VARCHAR(255) NOT NULL, "
|
|
" description VARCHAR(2000), "
|
|
" CONSTRAINT FK_storage_category_id FOREIGN KEY (parent) REFERENCES storage_category(id) "
|
|
");").arg(translate("AUTOINCREMENT", m_databaseType))))
|
|
{
|
|
myDebug << query.lastError().text();
|
|
return(false);
|
|
}
|
|
|
|
// STORAGE
|
|
if(!query.exec(QString("CREATE TABLE storage "
|
|
"( id INTEGER PRIMARY KEY %1, "
|
|
" storage_category_id INTEGER, "
|
|
" name VARCHAR(255) NOT NULL, "
|
|
" description VARCHAR(2000), "
|
|
" CONSTRAINT FK_storage_storage_category_id FOREIGN KEY (storage_category_id) REFERENCES storage_category(id) "
|
|
");").arg(translate("AUTOINCREMENT", m_databaseType))))
|
|
{
|
|
myDebug << query.lastError().text();
|
|
return(false);
|
|
}
|
|
|
|
return(true);
|
|
}
|
|
|
|
bool cDatabase::upgradeDB(const QString& /*version*/)
|
|
{
|
|
return(true);
|
|
}
|