mirror of
https://github.com/YACReader/yacreader
synced 2026-04-12 15:49:53 -04:00
Enable busy_timeout and be more verbose about problems loading the db
This commit is contained in:
@ -129,36 +129,57 @@ QSqlDatabase DataBaseManagement::createDatabase(QString dest)
|
|||||||
|
|
||||||
QSqlDatabase DataBaseManagement::loadDatabase(QString libraryDataPath)
|
QSqlDatabase DataBaseManagement::loadDatabase(QString libraryDataPath)
|
||||||
{
|
{
|
||||||
if (!QFile::exists(libraryDataPath + "/library.ydb")) {
|
const QString dbPath = QDir::cleanPath(libraryDataPath + "/library.ydb");
|
||||||
|
if (!QFile::exists(dbPath)) {
|
||||||
return QSqlDatabase();
|
return QSqlDatabase();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString threadId = QString::number((long long)QThread::currentThreadId(), 16);
|
QString threadId = QString::number((quintptr)QThread::currentThreadId(), 16);
|
||||||
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", libraryDataPath + threadId);
|
QString connectionName = dbPath + threadId;
|
||||||
db.setDatabaseName(libraryDataPath + "/library.ydb");
|
|
||||||
|
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", connectionName);
|
||||||
|
db.setConnectOptions("QSQLITE_BUSY_TIMEOUT=2000");
|
||||||
|
db.setDatabaseName(dbPath);
|
||||||
if (!db.open()) {
|
if (!db.open()) {
|
||||||
|
const QString error = db.lastError().text();
|
||||||
|
db = QSqlDatabase();
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
|
QLOG_ERROR() << "loadDatabase: failed to open" << dbPath << error;
|
||||||
return QSqlDatabase();
|
return QSqlDatabase();
|
||||||
}
|
}
|
||||||
QSqlQuery pragma("PRAGMA foreign_keys = ON", db);
|
QSqlQuery pragmaFK(db);
|
||||||
|
if (!pragmaFK.exec("PRAGMA foreign_keys = ON")) {
|
||||||
|
QLOG_ERROR() << "loadDatabase: failed to enable foreign keys for" << dbPath << pragmaFK.lastError().text();
|
||||||
|
}
|
||||||
|
|
||||||
return db;
|
return db;
|
||||||
}
|
}
|
||||||
|
|
||||||
QSqlDatabase DataBaseManagement::loadDatabaseFromFile(QString filePath)
|
QSqlDatabase DataBaseManagement::loadDatabaseFromFile(QString filePath)
|
||||||
{
|
{
|
||||||
if (!QFile::exists(filePath)) {
|
const QString dbPath = QDir::cleanPath(filePath);
|
||||||
|
if (!QFile::exists(dbPath)) {
|
||||||
return QSqlDatabase();
|
return QSqlDatabase();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString threadId = QString::number((long long)QThread::currentThreadId(), 16);
|
QString threadId = QString::number((quintptr)QThread::currentThreadId(), 16);
|
||||||
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", filePath + threadId);
|
QString connectionName = dbPath + threadId;
|
||||||
db.setDatabaseName(filePath);
|
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", connectionName);
|
||||||
|
db.setConnectOptions("QSQLITE_BUSY_TIMEOUT=2000");
|
||||||
|
db.setDatabaseName(dbPath);
|
||||||
if (!db.open()) {
|
if (!db.open()) {
|
||||||
// se devuelve una base de datos vacía e inválida
|
// se devuelve una base de datos vacía e inválida
|
||||||
|
|
||||||
|
const QString error = db.lastError().text();
|
||||||
|
db = QSqlDatabase();
|
||||||
|
QSqlDatabase::removeDatabase(connectionName);
|
||||||
|
QLOG_ERROR() << "loadDatabaseFromFile: failed to open" << dbPath << error;
|
||||||
return QSqlDatabase();
|
return QSqlDatabase();
|
||||||
}
|
}
|
||||||
QSqlQuery pragma("PRAGMA foreign_keys = ON", db);
|
QSqlQuery pragmaFK(db);
|
||||||
|
if (!pragmaFK.exec("PRAGMA foreign_keys = ON")) {
|
||||||
|
QLOG_ERROR() << "loadDatabaseFromFile: failed to enable foreign keys for" << dbPath << pragmaFK.lastError().text();
|
||||||
|
}
|
||||||
|
|
||||||
return db;
|
return db;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user