From 3ef9931e59ef38d9bbf045b07a4dbab2fd52e3f5 Mon Sep 17 00:00:00 2001 From: Louie S Date: Fri, 23 Feb 2024 19:06:45 -0500 Subject: Implement db creation --- src/backend/db_sqlite.cpp | 61 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/backend/db_sqlite.cpp (limited to 'src/backend/db_sqlite.cpp') diff --git a/src/backend/db_sqlite.cpp b/src/backend/db_sqlite.cpp new file mode 100644 index 0000000..05dc702 --- /dev/null +++ b/src/backend/db_sqlite.cpp @@ -0,0 +1,61 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "db_sqlite.h" + +QString BackendDB::getDBPath() { + QSettings settings; + settings.beginGroup("paths"); + return settings.value("db_path").toString(); +} + +void BackendDB::init() { + QString db_path(BackendDB::getDBPath()); + int i; + + // Check if database already exists + if(QFile::exists(db_path)) + return; + + // Check if directory exists + if(!QFileInfo(db_path).dir().exists()) { + if(!QFileInfo(db_path).dir().mkpath(QFileInfo(db_path).dir().absolutePath())) { + qDebug() << "Error creating db file"; + std::exit(1); + } + } + + // Create database + QSqlDatabase database = QSqlDatabase::addDatabase("QSQLITE"); + database.setDatabaseName(db_path); + + // TODO see if explicitly creating the parent directory is necessary + database.open(); + if(database.isOpenError()) { + // FIXME end-user friendly error message + qDebug() << database.lastError(); + std::exit(1); + } + + QSqlQuery query; + + // Erase database contents so that we don't have duplicates + query.exec("DROP TABLE groups"); + query.exec("DROP TABLE entries"); + query.exec("DROP TABLE rules"); + + for(i = 0; i < BackendDB::create_table_queries.length(); ++i) + query.exec(BackendDB::create_table_queries[i]); + + qDebug() << database.lastError(); + + database.close(); +} -- cgit