diff --git a/database.cpp b/database.cpp index 5006db4..7976fea 100644 --- a/database.cpp +++ b/database.cpp @@ -15,7 +15,7 @@ bool Database::init() QString path = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); QDir dir(path); - m_database = QSqlDatabase::addDatabase("QSQLITE"); + QSqlDatabase m_database = QSqlDatabase::addDatabase("QSQLITE"); if(!dir.mkpath(".")) return false; @@ -30,6 +30,7 @@ bool Database::init() m_database.exec("CREATE TABLE IF NOT EXISTS fits_files (id INTEGER PRIMARY KEY AUTOINCREMENT, file VARCHAR(255) UNIQUE, mtime DATETIME)"); m_database.exec("CREATE TABLE IF NOT EXISTS fits_headers (id INTEGER PRIMARY KEY AUTOINCREMENT, id_file INTEGER," "key VARCHAR(81), value VARCHAR(81), comment VARCHAR(81), FOREIGN KEY(id_file) REFERENCES fits_files(id) ON DELETE CASCADE)"); + m_database.exec("CREATE INDEX IF NOT EXISTS key_value ON fits_headers(key, value)"); QSqlError error = m_database.lastError(); if(error.type() == QSqlError::NoError) @@ -64,27 +65,27 @@ bool Database::mark(const QString &filename) { m_markQuery.bindValue(0, filename); m_markQuery.exec(); - return checkError(); + return checkError(m_markQuery); } bool Database::unmark(const QString &filename) { m_unmarkQuery.bindValue(0, filename); m_unmarkQuery.exec(); - return checkError(); + return checkError(m_unmarkQuery); } bool Database::isMarked(const QString &filename) { m_isMarkedQuery.bindValue(":name", filename); m_isMarkedQuery.exec(); - checkError(); + checkError(m_isMarkedQuery); return m_isMarkedQuery.next(); } QStringList Database::getMarkedFiles() { - QSqlQuery markedFiles("SELECT * from files", m_database); + QSqlQuery markedFiles("SELECT * from files"); QStringList files; while(markedFiles.next()) @@ -96,9 +97,9 @@ QStringList Database::getMarkedFiles() return files; } -bool Database::checkError() +bool Database::checkError(QSqlQuery &query) { - QSqlError error = m_database.lastError(); + QSqlError error = query.lastError(); if(error.type() == QSqlError::NoError) return true; else @@ -124,11 +125,12 @@ void Database::indexDir(const QDir &dir, QProgressDialog *progress) m_progress = 0; int count = countFiles(dir); progress->setMaximum(count); - m_database.transaction(); + QSqlDatabase database = QSqlDatabase::database(); + database.transaction(); if(indexDir2(dir, progress)) - m_database.commit(); + database.commit(); else - m_database.rollback(); + database.rollback(); } QStringList Database::getFitsKeywords() diff --git a/database.h b/database.h index f2500ca..888d216 100644 --- a/database.h +++ b/database.h @@ -10,7 +10,6 @@ class Database : public QObject { Q_OBJECT - QSqlDatabase m_database; QSqlQuery m_markQuery; QSqlQuery m_unmarkQuery; QSqlQuery m_isMarkedQuery; @@ -34,7 +33,7 @@ public: QStringList getFitsKeywords(); protected: bool indexDir2(const QDir &dir, QProgressDialog *progress); - bool checkError(); + bool checkError(QSqlQuery &query); }; #endif // DATABASE_H