| 156 | } |
| 157 | |
| 158 | QSqlDatabase DataBaseManagement::loadDatabaseFromFile(QString filePath) |
| 159 | { |
| 160 | const QString dbPath = QDir::cleanPath(filePath); |
| 161 | if (!QFile::exists(dbPath)) { |
| 162 | return QSqlDatabase(); |
| 163 | } |
| 164 | |
| 165 | QString threadId = QString::number((quintptr)QThread::currentThreadId(), 16); |
| 166 | QString connectionName = dbPath + threadId; |
| 167 | QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", connectionName); |
| 168 | db.setConnectOptions("QSQLITE_BUSY_TIMEOUT=2000"); |
| 169 | db.setDatabaseName(dbPath); |
| 170 | if (!db.open()) { |
| 171 | // se devuelve una base de datos vacía e inválida |
| 172 | |
| 173 | const QString error = db.lastError().text(); |
| 174 | db = QSqlDatabase(); |
| 175 | QSqlDatabase::removeDatabase(connectionName); |
| 176 | QLOG_ERROR() << "loadDatabaseFromFile: failed to open" << dbPath << error; |
| 177 | return QSqlDatabase(); |
| 178 | } |
| 179 | QSqlQuery pragmaFK(db); |
| 180 | if (!pragmaFK.exec("PRAGMA foreign_keys = ON")) { |
| 181 | QLOG_ERROR() << "loadDatabaseFromFile: failed to enable foreign keys for" << dbPath << pragmaFK.lastError().text(); |
| 182 | } |
| 183 | |
| 184 | return db; |
| 185 | } |
| 186 | |
| 187 | bool DataBaseManagement::createTables(QSqlDatabase &database) |
| 188 | { |
nothing calls this directly
no test coverage detected