DB schema updated to "7". Fixed #74.

This commit is contained in:
Martin Rotter 2017-01-03 07:18:10 +01:00
parent c9033d1213
commit ec16fcab08
8 changed files with 31 additions and 8 deletions

View File

@ -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 ##;
-- !

View File

@ -1,4 +1,3 @@
-- !
ALTER TABLE Messages
ADD COLUMN custom_hash TEXT;
-- !

View File

@ -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';

View File

@ -0,0 +1 @@
UPDATE Information SET inf_value = '7' WHERE inf_key = 'schema_version';

View File

@ -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:

View File

@ -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"

View File

@ -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);

View File

@ -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();