diff --git a/resources/misc/db_init_mysql.sql b/resources/misc/db_init_mysql.sql index c882d52af..a3fc21ca9 100644 --- a/resources/misc/db_init_mysql.sql +++ b/resources/misc/db_init_mysql.sql @@ -76,7 +76,7 @@ CREATE TABLE IF NOT EXISTS Messages ( is_important INTEGER(1) NOT NULL DEFAULT 0 CHECK (is_important >= 0 AND is_important <= 1), feed TEXT NOT NULL, title TEXT NOT NULL CHECK (title != ''), - url TEXT NOT NULL, + url TEXT, author TEXT, date_created BIGINT NOT NULL CHECK (date_created != 0), contents TEXT, diff --git a/resources/misc/db_init_sqlite.sql b/resources/misc/db_init_sqlite.sql index 01f7e09ab..72bb11663 100644 --- a/resources/misc/db_init_sqlite.sql +++ b/resources/misc/db_init_sqlite.sql @@ -71,7 +71,7 @@ CREATE TABLE IF NOT EXISTS Messages ( is_important INTEGER(1) NOT NULL CHECK (is_important >= 0 AND is_important <= 1) DEFAULT (0), feed TEXT NOT NULL, title TEXT NOT NULL CHECK (title != ''), - url TEXT NOT NULL, + url TEXT, author TEXT, date_created INTEGER NOT NULL CHECK (date_created != 0), contents TEXT, diff --git a/resources/misc/db_update_mysql_3_4.sql b/resources/misc/db_update_mysql_3_4.sql index 289eec2f2..ae42d6970 100644 --- a/resources/misc/db_update_mysql_3_4.sql +++ b/resources/misc/db_update_mysql_3_4.sql @@ -1,4 +1,4 @@ -CREATE TABLE IF NOT EXISTS Accounts ( +CREATE TABLE Accounts ( id INTEGER PRIMARY KEY, type TEXT NOT NULL ); @@ -7,7 +7,7 @@ INSERT INTO Accounts (type) VALUES ('std-rss'); -- ! DROP TABLE IF EXISTS FeedsData; -- ! -CREATE TABLE IF NOT EXISTS TtRssAccounts ( +CREATE TABLE TtRssAccounts ( id INTEGER, username TEXT NOT NULL, password TEXT, @@ -58,4 +58,7 @@ MODIFY date_created BIGINT; ALTER TABLE Messages MODIFY author TEXT; -- ! +ALTER TABLE Messages +MODIFY url TEXT; +-- ! UPDATE Information SET inf_value = '4' WHERE inf_key = 'schema_version'; \ No newline at end of file diff --git a/resources/misc/db_update_sqlite_3_4.sql b/resources/misc/db_update_sqlite_3_4.sql index 1763e54d9..5923577b3 100644 --- a/resources/misc/db_update_sqlite_3_4.sql +++ b/resources/misc/db_update_sqlite_3_4.sql @@ -1,4 +1,4 @@ -CREATE TABLE IF NOT EXISTS Accounts ( +CREATE TABLE Accounts ( id INTEGER PRIMARY KEY, type TEXT NOT NULL ); @@ -7,7 +7,7 @@ INSERT INTO Accounts (type) VALUES ('std-rss'); -- ! DROP TABLE IF EXISTS FeedsData; -- ! -CREATE TABLE IF NOT EXISTS TtRssAccounts ( +CREATE TABLE TtRssAccounts ( id INTEGER, username TEXT NOT NULL, password TEXT, @@ -16,24 +16,6 @@ CREATE TABLE IF NOT EXISTS TtRssAccounts ( FOREIGN KEY (id) REFERENCES Accounts (id) ); -- ! -ALTER TABLE Messages -ADD COLUMN account_id INTEGER NOT NULL DEFAULT (1); --- ! -ALTER TABLE Feeds -ADD COLUMN account_id INTEGER NOT NULL DEFAULT (1); --- ! -ALTER TABLE Categories -ADD COLUMN account_id INTEGER NOT NULL DEFAULT (1); --- ! -ALTER TABLE Messages -ADD COLUMN custom_id TEXT; --- ! -ALTER TABLE Feeds -ADD COLUMN custom_id TEXT; --- ! -ALTER TABLE Categories -ADD COLUMN custom_id TEXT; --- ! CREATE TABLE backup_Messages AS SELECT * FROM Messages; -- ! DROP TABLE Messages; @@ -45,7 +27,7 @@ CREATE TABLE Messages ( is_important INTEGER(1) NOT NULL CHECK (is_important >= 0 AND is_important <= 1) DEFAULT (0), feed TEXT NOT NULL, title TEXT NOT NULL CHECK (title != ''), - url TEXT NOT NULL, + url TEXT, author TEXT, date_created INTEGER NOT NULL CHECK (date_created != 0), contents TEXT, @@ -57,7 +39,8 @@ CREATE TABLE Messages ( FOREIGN KEY (account_id) REFERENCES Accounts (id) ); -- ! -INSERT INTO Messages SELECT * FROM backup_Messages; +INSERT INTO Messages (id, is_read, is_deleted, is_important, feed, title, url, author, date_created, contents, is_pdeleted, enclosures, account_id) +SELECT id, is_read, is_deleted, is_important, feed, title, url, author, date_created, contents, is_pdeleted, enclosures, 1 FROM backup_Messages; -- ! DROP TABLE backup_Messages; -- ! @@ -86,7 +69,8 @@ CREATE TABLE Feeds ( FOREIGN KEY (account_id) REFERENCES Accounts (id) ); -- ! -INSERT INTO Feeds SELECT * FROM backup_Feeds; +INSERT INTO Feeds (id, title, description, date_created, icon, category, encoding, url, protected, username, password, update_type, update_type, type, account_id) +SELECT id, title, description, date_created, icon, category, encoding, url, protected, username, password, update_type, update_type, type, 1 FROM backup_Feeds; -- ! DROP TABLE backup_Feeds; -- ! @@ -107,7 +91,8 @@ CREATE TABLE Categories ( FOREIGN KEY (account_id) REFERENCES Accounts (id) ); -- ! -INSERT INTO Categories SELECT * FROM backup_Categories; +INSERT INTO Categories (id, parent_id, title, description, date_created, icon, account_id) +SELECT id, parent_id, title, description, date_created, icon, 1 FROM backup_Categories; -- ! DROP TABLE backup_Categories; -- ! diff --git a/src/miscellaneous/databasefactory.cpp b/src/miscellaneous/databasefactory.cpp index 6a7b6da61..374dcf71e 100755 --- a/src/miscellaneous/databasefactory.cpp +++ b/src/miscellaneous/databasefactory.cpp @@ -300,15 +300,17 @@ QSqlDatabase DatabaseFactory::sqliteInitializeFileBasedDatabase(const QString &c QString installed_db_schema = query_db.value(0).toString(); query_db.finish(); - if (!updateDatabaseSchema(database, installed_db_schema)) { - qFatal("Database schema was not updated from '%s' to '%s' successully.", - qPrintable(installed_db_schema), - APP_DB_SCHEMA_VERSION); - } - else if (installed_db_schema != APP_DB_SCHEMA_VERSION) { - 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); + if (installed_db_schema < APP_DB_SCHEMA_VERSION) { + if (sqliteUpdateDatabaseSchema(database, installed_db_schema)) { + 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); + } + else { + qFatal("Database schema was not updated from '%s' to '%s' successully.", + qPrintable(installed_db_schema), + APP_DB_SCHEMA_VERSION); + } } qDebug("File-based SQLite database connection '%s' to file '%s' seems to be established.", @@ -328,24 +330,18 @@ QString DatabaseFactory::sqliteDatabaseFilePath() const { return m_sqliteDatabaseFilePath + QDir::separator() + APP_DB_SQLITE_FILE; } -bool DatabaseFactory::updateDatabaseSchema(QSqlDatabase database, const QString &source_db_schema_version) { - switch (m_activeDatabaseDriver) { - case SQLITE: - case SQLITE_MEMORY: - return sqliteUpdateDatabaseSchema(database, source_db_schema_version); - - case MYSQL: - return mysqlUpdateDatabaseSchema(database, source_db_schema_version); - - default: - return false; - } -} - bool DatabaseFactory::sqliteUpdateDatabaseSchema(QSqlDatabase database, const QString &source_db_schema_version) { int working_version = QString(source_db_schema_version).remove('.').toInt(); int current_version = QString(APP_DB_SCHEMA_VERSION).remove('.').toInt(); + // Now, it would be good to create backup of SQLite DB file. + if (IOFactory::copyFile(sqliteDatabaseFilePath(), sqliteDatabaseFilePath() + ".bak")) { + qDebug("Creating backup of SQLite DB file."); + } + else { + qFatal("Creation of backup SQLite DB file failed."); + } + while (working_version != current_version) { QString update_file_name = QString(APP_MISC_PATH) + QDir::separator() + QString(APP_DB_UPDATE_FILE_PATTERN).arg(QSL("sqlite"), @@ -611,15 +607,18 @@ QSqlDatabase DatabaseFactory::mysqlInitializeDatabase(const QString &connection_ QString installed_db_schema = query_db.value(0).toString(); - if (!mysqlUpdateDatabaseSchema(database, installed_db_schema)) { - qFatal("Database schema was not updated from '%s' to '%s' successully.", - qPrintable(installed_db_schema), - APP_DB_SCHEMA_VERSION); - } - else if (installed_db_schema != APP_DB_SCHEMA_VERSION) { - 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); + if (installed_db_schema < APP_DB_SCHEMA_VERSION) { + if (mysqlUpdateDatabaseSchema(database, installed_db_schema)) { + 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); + + } + else { + qFatal("Database schema was not updated from '%s' to '%s' successully.", + qPrintable(installed_db_schema), + APP_DB_SCHEMA_VERSION); + } } } diff --git a/src/miscellaneous/databasefactory.h b/src/miscellaneous/databasefactory.h index b1f0d2b80..453d8e61f 100755 --- a/src/miscellaneous/databasefactory.h +++ b/src/miscellaneous/databasefactory.h @@ -116,9 +116,6 @@ class DatabaseFactory : public QObject { // application session. void determineDriver(); - // Updates DB schema if necessary. - bool updateDatabaseSchema(QSqlDatabase database, const QString &source_db_schema_version); - // Holds the type of currently activated database backend. UsedDriver m_activeDatabaseDriver; diff --git a/src/services/tt-rss/ttrssserviceentrypoint.cpp b/src/services/tt-rss/ttrssserviceentrypoint.cpp index c0b2565ed..29288cee7 100755 --- a/src/services/tt-rss/ttrssserviceentrypoint.cpp +++ b/src/services/tt-rss/ttrssserviceentrypoint.cpp @@ -50,7 +50,7 @@ QString TtRssServiceEntryPoint::description() { } QString TtRssServiceEntryPoint::version() { - return QSL("0.0.2"); + return APP_VERSION; } QString TtRssServiceEntryPoint::author() {