diff --git a/src/definitions/definitions.h.in b/src/definitions/definitions.h.in index b8d4a5936..2343c3429 100644 --- a/src/definitions/definitions.h.in +++ b/src/definitions/definitions.h.in @@ -68,16 +68,22 @@ #define FILTER_WIDTH 150 #define FILTER_RIGHT_MARGIN 5 -#define APP_DB_TEST_MYSQL "MySQLTest" +#define APP_DB_PSQL_DRIVER "QPSQL" +#define APP_DB_PSQL_PORT 5432 +#define APP_DB_PSQL_FALLBACK_DB "postgres" + +#define APP_DB_MYSQL_DRIVER "QMYSQL" +#define APP_DB_MYSQL_INIT "db_init_mysql.sql" +#define APP_DB_MYSQL_TEST "MySQLTest" #define APP_DB_MYSQL_PORT 3306 -#define APP_DB_DRIVER_SQLITE "QSQLITE" -#define APP_DB_DRIVER_MYSQL "QMYSQL" -#define APP_DB_INIT_MYSQL "db_init_mysql.sql" -#define APP_DB_INIT_SQLITE "db_init_sqlite.sql" -#define APP_DB_INIT_SQLITE_MEMORY "db_init_sqlite_memory.sql" -#define APP_DB_INIT_SPLIT "-- !\n" -#define APP_DB_PATH "data/database/local" -#define APP_DB_FILE "database.db" + +#define APP_DB_SQLITE_DRIVER "QSQLITE" +#define APP_DB_SQLITE_INIT "db_init_sqlite.sql" +#define APP_DB_SQLITE_MEMORY_INIT "db_init_sqlite_memory.sql" +#define APP_DB_SQLITE_PATH "data/database/local" +#define APP_DB_SQLITE_FILE "database.db" + +#define APP_DB_COMMENT_SPLIT "-- !\n" #define APP_DB_WEB_PATH "data/database/web" #define APP_CFG_PATH "data/config" diff --git a/src/gui/formsettings.cpp b/src/gui/formsettings.cpp index e7066df7c..5f9f2805d 100755 --- a/src/gui/formsettings.cpp +++ b/src/gui/formsettings.cpp @@ -513,15 +513,15 @@ void FormSettings::loadDataStorage() { // Load SQLite. m_ui->m_cmbDatabaseDriver->addItem( - tr("SQLite (embedded database)"), APP_DB_DRIVER_SQLITE); + tr("SQLite (embedded database)"), APP_DB_SQLITE_DRIVER); // Load in-memory database status. m_ui->m_checkSqliteUseInMemoryDatabase->setChecked(Settings::instance()->value(APP_CFG_DB, "use_in_memory_db", false).toBool()); - if (QSqlDatabase::isDriverAvailable(APP_DB_DRIVER_MYSQL)) { + if (QSqlDatabase::isDriverAvailable(APP_DB_MYSQL_DRIVER)) { // Load MySQL. m_ui->m_cmbDatabaseDriver->addItem( - tr("MySQL/MariaDB (dedicated database)"), APP_DB_DRIVER_MYSQL); + tr("MySQL/MariaDB (dedicated database)"), APP_DB_MYSQL_DRIVER); // Setup placeholders. m_ui->m_txtMysqlHostname->lineEdit()->setPlaceholderText(tr("Hostname of your MySQL server")); @@ -536,7 +536,7 @@ void FormSettings::loadDataStorage() { int index_current_backend = m_ui->m_cmbDatabaseDriver->findData(Settings::instance()->value(APP_CFG_DB, "database_driver", - APP_DB_DRIVER_SQLITE).toString()); + APP_DB_SQLITE_DRIVER).toString()); if (index_current_backend >= 0) { m_ui->m_cmbDatabaseDriver->setCurrentIndex(index_current_backend); @@ -553,13 +553,13 @@ void FormSettings::saveDataStorage() { } // Save data storage settings. - QString original_db_driver = Settings::instance()->value(APP_CFG_DB, "database_driver", APP_DB_DRIVER_SQLITE).toString(); + QString original_db_driver = Settings::instance()->value(APP_CFG_DB, "database_driver", APP_DB_SQLITE_DRIVER).toString(); QString selected_db_driver = m_ui->m_cmbDatabaseDriver->itemData(m_ui->m_cmbDatabaseDriver->currentIndex()).toString(); // Save SQLite. Settings::instance()->setValue(APP_CFG_DB, "use_in_memory_db", new_inmemory); - if (QSqlDatabase::isDriverAvailable(APP_DB_DRIVER_MYSQL)) { + if (QSqlDatabase::isDriverAvailable(APP_DB_MYSQL_DRIVER)) { // Save MySQL. Settings::instance()->setValue(APP_CFG_DB, "mysql_hostname", m_ui->m_txtMysqlHostname->lineEdit()->text()); Settings::instance()->setValue(APP_CFG_DB, "mysql_username", m_ui->m_txtMysqlUsername->lineEdit()->text()); diff --git a/src/miscellaneous/databasefactory.cpp b/src/miscellaneous/databasefactory.cpp index a0612cdee..11a0be88a 100644 --- a/src/miscellaneous/databasefactory.cpp +++ b/src/miscellaneous/databasefactory.cpp @@ -52,8 +52,8 @@ DatabaseFactory *DatabaseFactory::instance() { DatabaseFactory::MySQLError DatabaseFactory::mysqlTestConnection(const QString &hostname, int port, const QString &username, const QString &password) { - QSqlDatabase database = QSqlDatabase::addDatabase(APP_DB_DRIVER_MYSQL, - APP_DB_TEST_MYSQL); + QSqlDatabase database = QSqlDatabase::addDatabase(APP_DB_MYSQL_DRIVER, + APP_DB_MYSQL_TEST); database.setHostName(hostname); database.setPort(port); @@ -63,7 +63,7 @@ DatabaseFactory::MySQLError DatabaseFactory::mysqlTestConnection(const QString & if (database.open()) { // Connection succeeded, clean up the mess and return OK status. database.close(); - removeConnection(APP_DB_TEST_MYSQL); + removeConnection(APP_DB_MYSQL_TEST); return MySQLOk; } else { @@ -71,7 +71,7 @@ DatabaseFactory::MySQLError DatabaseFactory::mysqlTestConnection(const QString & // error code. MySQLError error_code = static_cast(database.lastError().number()); - removeConnection(APP_DB_TEST_MYSQL); + removeConnection(APP_DB_MYSQL_TEST); return error_code; } } @@ -100,17 +100,17 @@ void DatabaseFactory::sqliteAssemblyDatabaseFilePath() { if (Settings::instance()->type() == Settings::Portable) { m_sqliteDatabaseFilePath = qApp->applicationDirPath() + QDir::separator() + - QString(APP_DB_PATH); + QString(APP_DB_SQLITE_PATH); } else { m_sqliteDatabaseFilePath = QDir::homePath() + QDir::separator() + QString(APP_LOW_H_NAME) + QDir::separator() + - QString(APP_DB_PATH); + QString(APP_DB_SQLITE_PATH); } } QSqlDatabase DatabaseFactory::sqliteInitializeInMemoryDatabase() { - QSqlDatabase database = QSqlDatabase::addDatabase(APP_DB_DRIVER_SQLITE); + QSqlDatabase database = QSqlDatabase::addDatabase(APP_DB_SQLITE_DRIVER); database.setDatabaseName(":memory:"); @@ -136,16 +136,16 @@ QSqlDatabase DatabaseFactory::sqliteInitializeInMemoryDatabase() { if (query_db.lastError().isValid()) { qWarning("Error occurred. In-memory SQLite database is not initialized. Initializing now."); - QFile file_init(APP_MISC_PATH + QDir::separator() + APP_DB_INIT_SQLITE_MEMORY); + QFile file_init(APP_MISC_PATH + QDir::separator() + APP_DB_SQLITE_MEMORY_INIT); if (!file_init.open(QIODevice::ReadOnly | QIODevice::Text)) { // Database initialization file not opened. HUGE problem. qFatal("In-memory SQLite database initialization file '%s' from directory '%s' was not found. In-memory database is uninitialized.", - APP_DB_INIT_SQLITE, + APP_DB_SQLITE_INIT, qPrintable(APP_MISC_PATH)); } - QStringList statements = QString(file_init.readAll()).split(APP_DB_INIT_SPLIT, + QStringList statements = QString(file_init.readAll()).split(APP_DB_COMMENT_SPLIT, QString::SkipEmptyParts); database.transaction(); @@ -154,7 +154,7 @@ QSqlDatabase DatabaseFactory::sqliteInitializeInMemoryDatabase() { if (query_db.lastError().isValid()) { qFatal("In-memory SQLite database initialization failed. Initialization script '%s' is not correct.", - APP_DB_INIT_SQLITE); + APP_DB_SQLITE_INIT); } } @@ -200,7 +200,7 @@ QSqlDatabase DatabaseFactory::sqliteInitializeInMemoryDatabase() { QSqlDatabase DatabaseFactory::sqliteInitializeFileBasedDatabase(const QString &connection_name) { // Prepare file paths. QDir db_path(m_sqliteDatabaseFilePath); - QFile db_file(db_path.absoluteFilePath(APP_DB_FILE)); + QFile db_file(db_path.absoluteFilePath(APP_DB_SQLITE_FILE)); // Check if database directory exists. if (!db_path.exists()) { @@ -216,7 +216,7 @@ QSqlDatabase DatabaseFactory::sqliteInitializeFileBasedDatabase(const QString &c // Folders are created. Create new QSQLDatabase object. QSqlDatabase database; - database = QSqlDatabase::addDatabase(APP_DB_DRIVER_SQLITE, + database = QSqlDatabase::addDatabase(APP_DB_SQLITE_DRIVER, connection_name); database.setDatabaseName(db_file.fileName()); @@ -242,16 +242,16 @@ QSqlDatabase DatabaseFactory::sqliteInitializeFileBasedDatabase(const QString &c if (query_db.lastError().isValid()) { qWarning("Error occurred. File-based SQLite database is not initialized. Initializing now."); - QFile file_init(APP_MISC_PATH + QDir::separator() + APP_DB_INIT_SQLITE); + QFile file_init(APP_MISC_PATH + QDir::separator() + APP_DB_SQLITE_INIT); if (!file_init.open(QIODevice::ReadOnly | QIODevice::Text)) { // Database initialization file not opened. HUGE problem. qFatal("SQLite database initialization file '%s' from directory '%s' was not found. File-based database is uninitialized.", - APP_DB_INIT_SQLITE, + APP_DB_SQLITE_INIT, qPrintable(APP_MISC_PATH)); } - QStringList statements = QString(file_init.readAll()).split(APP_DB_INIT_SPLIT, + QStringList statements = QString(file_init.readAll()).split(APP_DB_COMMENT_SPLIT, QString::SkipEmptyParts); database.transaction(); @@ -260,7 +260,7 @@ QSqlDatabase DatabaseFactory::sqliteInitializeFileBasedDatabase(const QString &c if (query_db.lastError().isValid()) { qFatal("File-based SQLite database initialization failed. Initialization script '%s' is not correct.", - APP_DB_INIT_SQLITE); + APP_DB_SQLITE_INIT); } } @@ -330,9 +330,12 @@ void DatabaseFactory::sqliteSaveMemoryDatabase() { } void DatabaseFactory::determineDriver() { - QString db_driver = Settings::instance()->value(APP_CFG_DB, "database_driver", APP_DB_DRIVER_SQLITE).toString(); + QString db_driver = Settings::instance()->value(APP_CFG_DB, + "database_driver", + APP_DB_SQLITE_DRIVER).toString(); - if (db_driver == APP_DB_DRIVER_MYSQL && QSqlDatabase::isDriverAvailable(APP_DB_DRIVER_MYSQL)) { + if (db_driver == APP_DB_MYSQL_DRIVER && + QSqlDatabase::isDriverAvailable(APP_DB_SQLITE_DRIVER)) { // User wants to use MySQL and MySQL is actually available. Use it. m_activeDatabaseDriver = MYSQL; @@ -377,7 +380,7 @@ QSqlDatabase DatabaseFactory::mysqlConnection(const QString &connection_name) { else { // Database connection with this name does not exist // yet, add it and set it up. - database = QSqlDatabase::addDatabase(APP_DB_DRIVER_MYSQL, connection_name); + database = QSqlDatabase::addDatabase(APP_DB_MYSQL_DRIVER, connection_name); database.setHostName(Settings::instance()->value(APP_CFG_DB, "mysql_hostname").toString()); database.setPort(Settings::instance()->value(APP_CFG_DB, "mysql_port", APP_DB_MYSQL_PORT).toInt()); @@ -402,7 +405,7 @@ QSqlDatabase DatabaseFactory::mysqlConnection(const QString &connection_name) { QSqlDatabase DatabaseFactory::mysqlInitializeDatabase(const QString &connection_name) { // Folders are created. Create new QSQLDatabase object. - QSqlDatabase database = QSqlDatabase::addDatabase(APP_DB_DRIVER_MYSQL, + QSqlDatabase database = QSqlDatabase::addDatabase(APP_DB_MYSQL_DRIVER, connection_name); database.setHostName(Settings::instance()->value(APP_CFG_DB, "mysql_hostname").toString()); @@ -425,16 +428,16 @@ QSqlDatabase DatabaseFactory::mysqlInitializeDatabase(const QString &connection_ // or schema version is wrong, then initialize it. qWarning("Error occurred. MySQL database is not initialized. Initializing now."); - QFile file_init(APP_MISC_PATH + QDir::separator() + APP_DB_INIT_MYSQL); + QFile file_init(APP_MISC_PATH + QDir::separator() + APP_DB_MYSQL_INIT); if (!file_init.open(QIODevice::ReadOnly | QIODevice::Text)) { // Database initialization file not opened. HUGE problem. qFatal("MySQL database initialization file '%s' from directory '%s' was not found. File-based database is uninitialized.", - APP_DB_INIT_MYSQL, + APP_DB_MYSQL_INIT, qPrintable(APP_MISC_PATH)); } - QStringList statements = QString(file_init.readAll()).split(APP_DB_INIT_SPLIT, + QStringList statements = QString(file_init.readAll()).split(APP_DB_COMMENT_SPLIT, QString::SkipEmptyParts); database.transaction(); @@ -443,7 +446,7 @@ QSqlDatabase DatabaseFactory::mysqlInitializeDatabase(const QString &connection_ if (query_db.lastError().isValid()) { qFatal("MySQL database initialization failed. Initialization script '%s' is not correct.", - APP_DB_INIT_MYSQL); + APP_DB_MYSQL_INIT); } } @@ -513,10 +516,10 @@ QSqlDatabase DatabaseFactory::sqliteConnection(const QString &connection_name, else { // Database connection with this name does not exist // yet, add it and set it up. - database = QSqlDatabase::addDatabase(APP_DB_DRIVER_SQLITE, connection_name); + database = QSqlDatabase::addDatabase(APP_DB_SQLITE_DRIVER, connection_name); QDir db_path(m_sqliteDatabaseFilePath); - QFile db_file(db_path.absoluteFilePath(APP_DB_FILE)); + QFile db_file(db_path.absoluteFilePath(APP_DB_SQLITE_FILE)); // Setup database file path. database.setDatabaseName(db_file.fileName()); diff --git a/src/miscellaneous/databasefactory.h b/src/miscellaneous/databasefactory.h index 5513facd3..24093d128 100644 --- a/src/miscellaneous/databasefactory.h +++ b/src/miscellaneous/databasefactory.h @@ -41,6 +41,7 @@ class DatabaseFactory : public QObject { FromSettings }; + // Describes possible MySQL-specific errors. enum MySQLError { MySQLOk = 0, MySQLAccessDenied = 1045,