From ec16fcab08a74b67fb096c2e736145287e9f0bb0 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Tue, 3 Jan 2017 07:18:10 +0100 Subject: [PATCH] DB schema updated to "7". Fixed #74. --- resources/misc/db_init_mysql.sql | 2 +- resources/misc/db_update_mysql_5_6.sql | 1 - resources/misc/db_update_mysql_6_7.sql | 22 ++++++++++++++++++++++ resources/misc/db_update_sqlite_6_7.sql | 1 + resources/text/CHANGELOG | 1 + src/definitions/definitions.h | 2 +- src/miscellaneous/databasefactory.cpp | 8 ++++---- src/miscellaneous/databasefactory.h | 2 +- 8 files changed, 31 insertions(+), 8 deletions(-) create mode 100755 resources/misc/db_update_mysql_6_7.sql create mode 100755 resources/misc/db_update_sqlite_6_7.sql diff --git a/resources/misc/db_init_mysql.sql b/resources/misc/db_init_mysql.sql index 9632bb6d0..0040d169c 100644 --- a/resources/misc/db_init_mysql.sql +++ b/resources/misc/db_init_mysql.sql @@ -1,6 +1,6 @@ DROP DATABASE IF EXISTS ##; -- ! -CREATE DATABASE IF NOT EXISTS ## CHARACTER SET utf8 COLLATE utf8_general_ci; +CREATE DATABASE IF NOT EXISTS ## CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- ! USE ##; -- ! diff --git a/resources/misc/db_update_mysql_5_6.sql b/resources/misc/db_update_mysql_5_6.sql index 8d9548a0a..d7d6553fe 100755 --- a/resources/misc/db_update_mysql_5_6.sql +++ b/resources/misc/db_update_mysql_5_6.sql @@ -1,4 +1,3 @@ --- ! ALTER TABLE Messages ADD COLUMN custom_hash TEXT; -- ! diff --git a/resources/misc/db_update_mysql_6_7.sql b/resources/misc/db_update_mysql_6_7.sql new file mode 100755 index 000000000..3377699a9 --- /dev/null +++ b/resources/misc/db_update_mysql_6_7.sql @@ -0,0 +1,22 @@ +-- ! +ALTER DATABASE ## +CHARACTER SET = utf8mb4 +COLLATE = utf8mb4_unicode_ci; +-- ! +USE ## +-- ! +ALTER TABLE messages +CONVERT TO CHARACTER SET utf8mb4 +COLLATE utf8mb4_unicode_ci; +-- ! +ALTER TABLE messages +CHANGE title title TEXT +CHARACTER SET utf8mb4 +COLLATE utf8mb4_unicode_ci; +-- ! +ALTER TABLE messages +CHANGE contents contents TEXT +CHARACTER SET utf8mb4 +COLLATE utf8mb4_unicode_ci; +-- ! +UPDATE Information SET inf_value = '7' WHERE inf_key = 'schema_version'; \ No newline at end of file diff --git a/resources/misc/db_update_sqlite_6_7.sql b/resources/misc/db_update_sqlite_6_7.sql new file mode 100755 index 000000000..6214faa87 --- /dev/null +++ b/resources/misc/db_update_sqlite_6_7.sql @@ -0,0 +1 @@ +UPDATE Information SET inf_value = '7' WHERE inf_key = 'schema_version'; \ No newline at end of file diff --git a/resources/text/CHANGELOG b/resources/text/CHANGELOG index 255921db3..cd3bddf57 100755 --- a/resources/text/CHANGELOG +++ b/resources/text/CHANGELOG @@ -2,6 +2,7 @@ ————— Added: +▪ MySQL database backend now requires at least version 5.5, DB encoding is now changed to utf8mb4 character set. (bug #74) ▪ Height if message attachment image is now configurable, defaults to 36. (issue #69) Changed: diff --git a/src/definitions/definitions.h b/src/definitions/definitions.h index 346676629..8636421ea 100755 --- a/src/definitions/definitions.h +++ b/src/definitions/definitions.h @@ -109,7 +109,7 @@ #define APP_DB_SQLITE_FILE "database.db" // Keep this in sync with schema versions declared in SQL initialization code. -#define APP_DB_SCHEMA_VERSION "6" +#define APP_DB_SCHEMA_VERSION "7" #define APP_DB_UPDATE_FILE_PATTERN "db_update_%1_%2_%3.sql" #define APP_DB_COMMENT_SPLIT "-- !\n" #define APP_DB_WEB_PATH "data/database/web" diff --git a/src/miscellaneous/databasefactory.cpp b/src/miscellaneous/databasefactory.cpp index e541aaa39..97ad87709 100755 --- a/src/miscellaneous/databasefactory.cpp +++ b/src/miscellaneous/databasefactory.cpp @@ -442,7 +442,7 @@ bool DatabaseFactory::sqliteUpdateDatabaseSchema(QSqlDatabase database, const QS return true; } -bool DatabaseFactory::mysqlUpdateDatabaseSchema(QSqlDatabase database, const QString &source_db_schema_version) { +bool DatabaseFactory::mysqlUpdateDatabaseSchema(QSqlDatabase database, const QString &source_db_schema_version, const QString &db_name) { int working_version = QString(source_db_schema_version).remove('.').toInt(); const int current_version = QString(APP_DB_SCHEMA_VERSION).remove('.').toInt(); @@ -464,8 +464,8 @@ bool DatabaseFactory::mysqlUpdateDatabaseSchema(QSqlDatabase database, const QSt QStringList statements = QString(update_file_handle.readAll()).split(APP_DB_COMMENT_SPLIT, QString::SkipEmptyParts); - foreach (const QString &statement, statements) { - QSqlQuery query = database.exec(statement); + foreach (QString statement, statements) { + QSqlQuery query = database.exec(statement.replace(APP_DB_NAME_PLACEHOLDER, db_name)); if (query.lastError().isValid()) { qFatal("Query for updating database schema failed: '%s'.", qPrintable(query.lastError().text())); @@ -691,7 +691,7 @@ QSqlDatabase DatabaseFactory::mysqlInitializeDatabase(const QString &connection_ const QString installed_db_schema = query_db.value(0).toString(); if (installed_db_schema < APP_DB_SCHEMA_VERSION) { - if (mysqlUpdateDatabaseSchema(database, installed_db_schema)) { + if (mysqlUpdateDatabaseSchema(database, installed_db_schema, database_name)) { qDebug("Database schema was updated from '%s' to '%s' successully or it is already up to date.", qPrintable(installed_db_schema), APP_DB_SCHEMA_VERSION); diff --git a/src/miscellaneous/databasefactory.h b/src/miscellaneous/databasefactory.h index 549c90d80..4a7505474 100755 --- a/src/miscellaneous/databasefactory.h +++ b/src/miscellaneous/databasefactory.h @@ -135,7 +135,7 @@ class DatabaseFactory : public QObject { QSqlDatabase mysqlInitializeDatabase(const QString &connection_name); // Updates database schema. - bool mysqlUpdateDatabaseSchema(QSqlDatabase database, const QString &source_db_schema_version); + bool mysqlUpdateDatabaseSchema(QSqlDatabase database, const QString &source_db_schema_version, const QString &db_name); // Runs "VACUUM" on the database. bool mysqlVacuumDatabase();