Database schema update, URLs are not not NOT NULL.

This commit is contained in:
Martin Rotter 2015-12-14 07:06:15 +01:00
parent 662bea00eb
commit a86ab15e2e
7 changed files with 48 additions and 64 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -50,7 +50,7 @@ QString TtRssServiceEntryPoint::description() {
}
QString TtRssServiceEntryPoint::version() {
return QSL("0.0.2");
return APP_VERSION;
}
QString TtRssServiceEntryPoint::author() {