Create unique database connections per thread and remove them using the database connection name from the QSqlDatabase instance being used.

This commit is contained in:
Luis Ángel San Martín
2018-04-24 20:53:24 +02:00
parent 0ff7da1d2c
commit 52c76d5482
7 changed files with 84 additions and 69 deletions

View File

@ -67,8 +67,9 @@ QSqlDatabase DataBaseManagement::createDatabase(QString name, QString path)
}
QSqlDatabase DataBaseManagement::createDatabase(QString dest)
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE",dest);
{
QString threadId = QString::number((long long)QThread::currentThreadId(), 16);
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE",dest+threadId);
db.setDatabaseName(dest);
if (!db.open())
qDebug() << db.lastError();
@ -92,9 +93,10 @@ QSqlDatabase DataBaseManagement::createDatabase(QString dest)
QSqlDatabase DataBaseManagement::loadDatabase(QString path)
{
//TODO check path
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE",path);
db.setDatabaseName(path+"/library.ydb");
//TODO check path
QString threadId = QString::number((long long)QThread::currentThreadId(), 16);
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE",path+threadId);
db.setDatabaseName(path + "/library.ydb");
if (!db.open()) {
//se devuelve una base de datos vacía e inválida
@ -108,8 +110,9 @@ QSqlDatabase DataBaseManagement::loadDatabase(QString path)
QSqlDatabase DataBaseManagement::loadDatabaseFromFile(QString filePath)
{
//TODO check path
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE",filePath);
//TODO check path
QString threadId = QString::number((long long)QThread::currentThreadId(), 16);
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE",filePath+threadId);
db.setDatabaseName(filePath);
if (!db.open()) {
//se devuelve una base de datos vacía e inválida
@ -696,7 +699,8 @@ QString DataBaseManagement::checkValidDB(const QString & fullPath)
}
db.close();
QSqlDatabase::removeDatabase(fullPath);
QSqlDatabase::removeDatabase(db.connectionName());
return versionString;
}
@ -863,7 +867,7 @@ bool DataBaseManagement::updateToCurrentVersion(const QString & path)
}
db.close();
QSqlDatabase::removeDatabase(fullPath);
QSqlDatabase::removeDatabase(db.connectionName());
return returnValue;
}