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

@ -176,7 +176,7 @@ bool ComicModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int
break;
}
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
//endMoveRows();
@ -470,7 +470,7 @@ void ComicModel::setupFolderModelData(unsigned long long int folderId,const QStr
setupModelData(selectQuery);
}
db.close();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
endResetModel();
/*if(_data.length()==0)
@ -501,7 +501,7 @@ void ComicModel::setupLabelModelData(unsigned long long parentLabel, const QStri
setupModelDataForList(selectQuery);
}
db.close();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
endResetModel();
/*if(_data.length()==0)
@ -558,7 +558,7 @@ void ComicModel::setupReadingListModelData(unsigned long long parentReadingList,
}
db.close();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
endResetModel();
}
@ -585,7 +585,7 @@ void ComicModel::setupFavoritesModelData(const QString &databasePath)
setupModelDataForList(selectQuery);
}
db.close();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
endResetModel();
/*if(_data.length()==0)
@ -614,7 +614,7 @@ void ComicModel::setupReadingModelData(const QString &databasePath)
setupModelDataForList(selectQuery);
}
db.close();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
endResetModel();
/*if(_data.length()==0)
@ -682,7 +682,7 @@ void ComicModel::setupModelData(const SearchModifiers modifier, const QString &f
//selectQuery.finish();
}
db.close();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
endResetModel();
emit searchNumResults(_data.length());
@ -748,7 +748,7 @@ ComicDB ComicModel::getComic(const QModelIndex & mi)
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
ComicDB c = DBHelper::loadComic(_data.at(mi.row())->data(ComicModel::Id).toULongLong(),db);
db.close();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
return c;
}
@ -758,7 +758,7 @@ ComicDB ComicModel::_getComic(const QModelIndex & mi)
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
ComicDB c = DBHelper::loadComic(_data.at(mi.row())->data(ComicModel::Id).toULongLong(),db);
db.close();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
return c;
}
@ -801,7 +801,7 @@ QList<ComicDB> ComicModel::getAllComics()
db.commit();
db.close();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
return comics;
}
@ -819,7 +819,7 @@ QList<ComicDB> ComicModel::getComics(QList<QModelIndex> list)
}
db.commit();
db.close();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
return comics;
}
//TODO
@ -850,7 +850,7 @@ QVector<YACReaderComicReadStatus> ComicModel::setComicsRead(QList<QModelIndex> l
}
db.commit();
db.close();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
emit dataChanged(index(list.first().row(),ComicModel::ReadColumn),index(list.last().row(),ComicModel::HasBeenOpened),QVector<int>() << ReadColumnRole << CurrentPageRole << HasBeenOpenedRole);
@ -873,7 +873,7 @@ qint64 ComicModel::asignNumbers(QList<QModelIndex> list,int startingNumber)
db.commit();
db.close();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
//emit dataChanged(index(0,ComicModel::Number),index(_data.count()-1,ComicModel::HasBeenOpened));
@ -906,7 +906,6 @@ QList<QModelIndex> ComicModel::getIndexesFromIds(const QList<qulonglong> &comicI
void ComicModel::startTransaction()
{
dbTransaction = DataBaseManagement::loadDatabase(_databasePath);
dbTransaction.transaction();
}
@ -915,7 +914,7 @@ void ComicModel::finishTransaction()
{
dbTransaction.commit();
dbTransaction.close();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(dbTransaction.connectionName());
}
void ComicModel::removeInTransaction(int row)
@ -943,7 +942,7 @@ void ComicModel::remove(ComicDB * comic, int row)
_data.removeAt(row);
db.close();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
endRemoveRows();
}
*/
@ -991,7 +990,7 @@ void ComicModel::resetComicRating(const QModelIndex &mi)
emit dataChanged(mi,mi);
db.close();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
}
QUrl ComicModel::getCoverUrlPathForComicHash(const QString &hash) const
@ -1013,7 +1012,7 @@ void ComicModel::addComicsToFavorites(const QList<QModelIndex> & comicsList)
DBHelper::insertComicsInFavorites(comics,db);
db.close();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
}
void ComicModel::addComicsToLabel(const QList<qulonglong> &comicIds, qulonglong labelId)
@ -1030,7 +1029,7 @@ void ComicModel::addComicsToLabel(const QList<QModelIndex> &comicsList, qulonglo
DBHelper::insertComicsInLabel(comics,labelId,db);
db.close();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
}
void ComicModel::addComicsToReadingList(const QList<qulonglong> &comicIds, qulonglong readingListId)
@ -1047,7 +1046,7 @@ void ComicModel::addComicsToReadingList(const QList<QModelIndex> &comicsList, qu
DBHelper::insertComicsInReadingList(comics,readingListId,db);
db.close();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
}
void ComicModel::deleteComicsFromFavorites(const QList<QModelIndex> &comicsList)
@ -1059,7 +1058,7 @@ void ComicModel::deleteComicsFromFavorites(const QList<QModelIndex> &comicsList)
DBHelper::deleteComicsFromFavorites(comics,db);
db.close();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
if(mode == Favorites)
deleteComicsFromModel(comicsList);
@ -1074,7 +1073,7 @@ void ComicModel::deleteComicsFromLabel(const QList<QModelIndex> &comicsList, qul
DBHelper::deleteComicsFromLabel(comics,labelId,db);
db.close();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
deleteComicsFromModel(comicsList);
}
@ -1088,7 +1087,7 @@ void ComicModel::deleteComicsFromReadingList(const QList<QModelIndex> &comicsLis
DBHelper::deleteComicsFromReadingList(comics,readingListId,db);
db.close();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
deleteComicsFromModel(comicsList);
}
@ -1118,7 +1117,7 @@ bool ComicModel::isFavorite(const QModelIndex &index)
isFavorite = DBHelper::isFavoriteComic(_data[index.row()]->data(Id).toLongLong(),db);
db.close();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
return isFavorite;
}
@ -1137,5 +1136,5 @@ void ComicModel::updateRating(int rating, QModelIndex mi)
emit dataChanged(mi,mi);
db.close();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
}

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;
}

View File

@ -306,7 +306,7 @@ void FolderModel::setupModelData(QString path)
}
//selectQuery.finish();
db.close();
QSqlDatabase::removeDatabase(path);
QSqlDatabase::removeDatabase(db.connectionName());
endResetModel();
}
@ -428,7 +428,7 @@ void FolderModel::updateFolderCompletedStatus(const QModelIndexList &list, bool
}
db.commit();
db.close();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
emit dataChanged(index(list.first().row(),FolderModel::Name),index(list.last().row(),FolderModel::Completed));
}
@ -448,7 +448,7 @@ void FolderModel::updateFolderFinishedStatus(const QModelIndexList &list, bool s
}
db.commit();
db.close();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
emit dataChanged(index(list.first().row(),FolderModel::Name),index(list.last().row(),FolderModel::Completed));
}
@ -469,7 +469,7 @@ QStringList FolderModel::getSubfoldersNames(const QModelIndex &mi)
db.commit();
db.close();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
//TODO sort result))
qSort(result.begin(),result.end(),naturalSortLessThanCI);
@ -546,7 +546,7 @@ void FolderModel::fetchMoreFromDB(const QModelIndex &parent)
db.close();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
}
QModelIndex FolderModel::addFolderAtParent(const QString &folderName, const QModelIndex &parent)
@ -566,7 +566,7 @@ QModelIndex FolderModel::addFolderAtParent(const QString &folderName, const QMod
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
newFolder.id = DBHelper::insert(&newFolder, db);
DBHelper::updateChildrenInfo(parentItem->id, db);
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
int destRow = 0;
@ -605,7 +605,7 @@ void FolderModel::deleteFolder(const QModelIndex &mi)
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
DBHelper::removeFromDB(&f,db);
DBHelper::updateChildrenInfo(item->parent()->id, db);
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
endRemoveRows();
}
@ -614,7 +614,7 @@ void FolderModel::updateFolderChildrenInfo(qulonglong folderId)
{
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
DBHelper::updateChildrenInfo(folderId, db);
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
}
//PROXY
@ -729,7 +729,7 @@ void FolderModelProxy::setupFilteredModelData()
}
//selectQuery.finish();
db.close();
QSqlDatabase::removeDatabase(model->_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
endResetModel();
}

View File

@ -396,7 +396,7 @@ void ReadingListModel::addNewLabel(const QString &name, YACReader::LabelColors c
endInsertRows();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
}
void ReadingListModel::addReadingList(const QString &name)
@ -423,7 +423,7 @@ void ReadingListModel::addReadingList(const QString &name)
endInsertRows();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
}
void ReadingListModel::addReadingListAt(const QString &name, const QModelIndex &mi)
@ -452,7 +452,7 @@ void ReadingListModel::addReadingListAt(const QString &name, const QModelIndex &
endInsertRows();
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
}
bool ReadingListModel::isEditable(const QModelIndex &mi)
@ -523,7 +523,7 @@ void ReadingListModel::rename(const QModelIndex &mi, const QString &name)
emit dataChanged(index(mi.row(), 0), index(mi.row(), 0));
}
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
}
void ReadingListModel::deleteItem(const QModelIndex &mi)
@ -557,7 +557,7 @@ void ReadingListModel::deleteItem(const QModelIndex &mi)
DBHelper::removeLabelFromDB(item->getId(), db);
}
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
endRemoveRows();
}
@ -746,7 +746,7 @@ void ReadingListModel::reorderingChildren(QList<ReadingListItem *> children)
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
DBHelper::reasignOrderToSublists(childrenIds, db);
QSqlDatabase::removeDatabase(_databasePath);
QSqlDatabase::removeDatabase(db.connectionName());
}
bool ReadingListModel::rowIsSpecialList(int row, const QModelIndex &parent) const