diff --git a/resources/sql/db_init_mysql.sql b/resources/sql/db_init_mysql.sql new file mode 100644 index 000000000..0040d169c --- /dev/null +++ b/resources/sql/db_init_mysql.sql @@ -0,0 +1,102 @@ +DROP DATABASE IF EXISTS ##; +-- ! +CREATE DATABASE IF NOT EXISTS ## CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; +-- ! +USE ##; +-- ! +DROP TABLE IF EXISTS Information; +-- ! +CREATE TABLE IF NOT EXISTS Information ( + id INTEGER AUTO_INCREMENT PRIMARY KEY, + inf_key TEXT NOT NULL, + inf_value TEXT NOT NULL +); +-- ! +INSERT INTO Information VALUES (1, 'schema_version', '6'); +-- ! +CREATE TABLE IF NOT EXISTS Accounts ( + id INTEGER PRIMARY KEY, + type TEXT NOT NULL +); +-- ! +CREATE TABLE IF NOT EXISTS TtRssAccounts ( + id INTEGER, + username TEXT NOT NULL, + password TEXT, + auth_protected INTEGER(1) NOT NULL DEFAULT 0 CHECK (auth_protected >= 0 AND auth_protected <= 1), + auth_username TEXT, + auth_password TEXT, + url TEXT NOT NULL, + force_update INTEGER(1) NOT NULL DEFAULT 0 CHECK (force_update >= 0 AND force_update <= 1), + + FOREIGN KEY (id) REFERENCES Accounts (id) +); +-- ! +CREATE TABLE IF NOT EXISTS OwnCloudAccounts ( + id INTEGER, + username TEXT NOT NULL, + password TEXT, + url TEXT NOT NULL, + force_update INTEGER(1) NOT NULL DEFAULT 0 CHECK (force_update >= 0 AND force_update <= 1), + + FOREIGN KEY (id) REFERENCES Accounts (id) +); +DROP TABLE IF EXISTS Categories; +-- ! +CREATE TABLE IF NOT EXISTS Categories ( + id INTEGER AUTO_INCREMENT PRIMARY KEY, + parent_id INTEGER NOT NULL, + title VARCHAR(100) NOT NULL CHECK (title != ''), + description TEXT, + date_created BIGINT, + icon BLOB, + account_id INTEGER NOT NULL, + custom_id TEXT, + + FOREIGN KEY (account_id) REFERENCES Accounts (id) +); +-- ! +DROP TABLE IF EXISTS Feeds; +-- ! +CREATE TABLE IF NOT EXISTS Feeds ( + id INTEGER AUTO_INCREMENT PRIMARY KEY, + title TEXT NOT NULL CHECK (title != ''), + description TEXT, + date_created BIGINT, + icon BLOB, + category INTEGER NOT NULL CHECK (category >= -1), + encoding TEXT, + url VARCHAR(100), + protected INTEGER(1) NOT NULL CHECK (protected >= 0 AND protected <= 1), + username TEXT, + password TEXT, + update_type INTEGER(1) NOT NULL CHECK (update_type >= 0), + update_interval INTEGER NOT NULL DEFAULT 15 CHECK (update_interval >= 5), + type INTEGER, + account_id INTEGER NOT NULL, + custom_id TEXT, + + FOREIGN KEY (account_id) REFERENCES Accounts (id) +); +-- ! +DROP TABLE IF EXISTS Messages; +-- ! +CREATE TABLE IF NOT EXISTS Messages ( + id INTEGER AUTO_INCREMENT PRIMARY KEY, + is_read INTEGER(1) NOT NULL DEFAULT 0 CHECK (is_read >= 0 AND is_read <= 1), + is_deleted INTEGER(1) NOT NULL DEFAULT 0 CHECK (is_deleted >= 0 AND is_deleted <= 1), + 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, + author TEXT, + date_created BIGINT NOT NULL CHECK (date_created != 0), + contents TEXT, + is_pdeleted INTEGER(1) NOT NULL DEFAULT 0 CHECK (is_pdeleted >= 0 AND is_pdeleted <= 1), + enclosures TEXT, + account_id INTEGER NOT NULL, + custom_id TEXT, + custom_hash TEXT, + + FOREIGN KEY (account_id) REFERENCES Accounts (id) +); \ No newline at end of file diff --git a/resources/sql/db_init_sqlite.sql b/resources/sql/db_init_sqlite.sql new file mode 100644 index 000000000..aa4f0aa1f --- /dev/null +++ b/resources/sql/db_init_sqlite.sql @@ -0,0 +1,97 @@ +DROP TABLE IF EXISTS Information; +-- ! +CREATE TABLE IF NOT EXISTS Information ( + id INTEGER PRIMARY KEY, + inf_key TEXT NOT NULL, + inf_value TEXT NOT NULL +); +-- ! +INSERT INTO Information VALUES (1, 'schema_version', '6'); +-- ! +CREATE TABLE IF NOT EXISTS Accounts ( + id INTEGER PRIMARY KEY, + type TEXT NOT NULL +); +-- ! +CREATE TABLE IF NOT EXISTS TtRssAccounts ( + id INTEGER, + username TEXT NOT NULL, + password TEXT, + auth_protected INTEGER(1) NOT NULL CHECK (auth_protected >= 0 AND auth_protected <= 1) DEFAULT 0, + auth_username TEXT, + auth_password TEXT, + url TEXT NOT NULL, + force_update INTEGER(1) NOT NULL CHECK (force_update >= 0 AND force_update <= 1) DEFAULT 0, + + FOREIGN KEY (id) REFERENCES Accounts (id) +); +-- ! +CREATE TABLE IF NOT EXISTS OwnCloudAccounts ( + id INTEGER, + username TEXT NOT NULL, + password TEXT, + url TEXT NOT NULL, + force_update INTEGER(1) NOT NULL CHECK (force_update >= 0 AND force_update <= 1) DEFAULT 0, + + FOREIGN KEY (id) REFERENCES Accounts (id) +); +-- ! +DROP TABLE IF EXISTS Categories; +-- ! +CREATE TABLE IF NOT EXISTS Categories ( + id INTEGER PRIMARY KEY, + parent_id INTEGER NOT NULL, + title TEXT NOT NULL CHECK (title != ''), + description TEXT, + date_created INTEGER, + icon BLOB, + account_id INTEGER NOT NULL, + custom_id TEXT, + + FOREIGN KEY (account_id) REFERENCES Accounts (id) +); +-- ! +DROP TABLE IF EXISTS Feeds; +-- ! +CREATE TABLE IF NOT EXISTS Feeds ( + id INTEGER PRIMARY KEY, + title TEXT NOT NULL CHECK (title != ''), + description TEXT, + date_created INTEGER, + icon BLOB, + category INTEGER NOT NULL CHECK (category >= -1), + encoding TEXT, + url TEXT, + protected INTEGER(1) NOT NULL CHECK (protected >= 0 AND protected <= 1), + username TEXT, + password TEXT, + update_type INTEGER(1) NOT NULL CHECK (update_type >= 0), + update_interval INTEGER NOT NULL CHECK (update_interval >= 5) DEFAULT 15, + type INTEGER, + account_id INTEGER NOT NULL, + custom_id TEXT, + + FOREIGN KEY (account_id) REFERENCES Accounts (id) +); +-- ! +DROP TABLE IF EXISTS Messages; +-- ! +CREATE TABLE IF NOT EXISTS Messages ( + id INTEGER PRIMARY KEY, + is_read INTEGER(1) NOT NULL CHECK (is_read >= 0 AND is_read <= 1) DEFAULT 0, + is_deleted INTEGER(1) NOT NULL CHECK (is_deleted >= 0 AND is_deleted <= 1) DEFAULT 0, + 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, + author TEXT, + date_created INTEGER NOT NULL CHECK (date_created != 0), + contents TEXT, + is_pdeleted INTEGER(1) NOT NULL CHECK (is_pdeleted >= 0 AND is_pdeleted <= 1) DEFAULT 0, + enclosures TEXT, + account_id INTEGER NOT NULL, + custom_id TEXT, + custom_hash TEXT, + + FOREIGN KEY (account_id) REFERENCES Accounts (id) +); \ No newline at end of file diff --git a/resources/sql/db_update_mysql_1_2.sql b/resources/sql/db_update_mysql_1_2.sql new file mode 100644 index 000000000..1df47a23d --- /dev/null +++ b/resources/sql/db_update_mysql_1_2.sql @@ -0,0 +1,4 @@ +ALTER TABLE Messages +ADD COLUMN is_pdeleted INTEGER(1) NOT NULL DEFAULT 0 CHECK (is_pdeleted >= 0 AND is_pdeleted <= 1); +-- ! +UPDATE Information SET inf_value = '2' WHERE inf_key = 'schema_version'; \ No newline at end of file diff --git a/resources/sql/db_update_mysql_2_3.sql b/resources/sql/db_update_mysql_2_3.sql new file mode 100644 index 000000000..326b083b8 --- /dev/null +++ b/resources/sql/db_update_mysql_2_3.sql @@ -0,0 +1,4 @@ +ALTER TABLE Messages +ADD COLUMN enclosures TEXT; +-- ! +UPDATE Information SET inf_value = '3' WHERE inf_key = 'schema_version'; diff --git a/resources/sql/db_update_mysql_3_4.sql b/resources/sql/db_update_mysql_3_4.sql new file mode 100644 index 000000000..bb60d6105 --- /dev/null +++ b/resources/sql/db_update_mysql_3_4.sql @@ -0,0 +1,68 @@ +CREATE TABLE Accounts ( + id INTEGER PRIMARY KEY, + type TEXT NOT NULL +); +-- ! +INSERT INTO Accounts (type) VALUES ('std-rss'); +-- ! +DROP TABLE IF EXISTS FeedsData; +-- ! +CREATE TABLE TtRssAccounts ( + id INTEGER, + username TEXT NOT NULL, + password TEXT, + auth_protected INTEGER(1) NOT NULL DEFAULT 0 CHECK (auth_protected >= 0 AND auth_protected <= 1), + auth_username TEXT, + auth_password TEXT, + url TEXT NOT NULL, + force_update INTEGER(1) NOT NULL DEFAULT 0 CHECK (force_update >= 0 AND force_update <= 1), + + FOREIGN KEY (id) REFERENCES Accounts (id) +); +-- ! +ALTER TABLE Messages +ADD COLUMN account_id INTEGER NOT NULL DEFAULT 1; +-- ! +ALTER TABLE Messages +ADD COLUMN custom_id TEXT; +-- ! +ALTER TABLE Messages +DROP FOREIGN KEY feed; +-- ! +ALTER TABLE Messages +MODIFY feed TEXT NOT NULL; +-- ! +ALTER TABLE Messages +MODIFY author TEXT; +-- ! +ALTER TABLE Messages +MODIFY url TEXT; +-- ! +ALTER TABLE Feeds +ADD COLUMN account_id INTEGER NOT NULL DEFAULT 1; +-- ! +ALTER TABLE Feeds +ADD COLUMN custom_id TEXT; +-- ! +ALTER TABLE Feeds +MODIFY date_created BIGINT; +-- ! +ALTER TABLE Feeds +MODIFY encoding TEXT; +-- ! +ALTER TABLE Feeds +MODIFY url VARCHAR(100); +-- ! +ALTER TABLE Feeds +MODIFY type INTEGER; +-- ! +ALTER TABLE Categories +ADD COLUMN account_id INTEGER NOT NULL DEFAULT 1; +-- ! +ALTER TABLE Categories +ADD COLUMN custom_id TEXT; +-- ! +ALTER TABLE Categories +MODIFY date_created BIGINT; +-- ! +UPDATE Information SET inf_value = '4' WHERE inf_key = 'schema_version'; \ No newline at end of file diff --git a/resources/sql/db_update_mysql_4_5.sql b/resources/sql/db_update_mysql_4_5.sql new file mode 100755 index 000000000..44f7af0a6 --- /dev/null +++ b/resources/sql/db_update_mysql_4_5.sql @@ -0,0 +1,23 @@ +CREATE TABLE IF NOT EXISTS OwnCloudAccounts ( + id INTEGER, + username TEXT NOT NULL, + password TEXT, + url TEXT NOT NULL, + force_update INTEGER(1) NOT NULL DEFAULT 0 CHECK (force_update >= 0 AND force_update <= 1), + + FOREIGN KEY (id) REFERENCES Accounts (id) +); +-- ! +UPDATE Categories +SET custom_id = (SELECT id FROM Categories t WHERE t.id = Categories.id) +WHERE Categories.custom_id IS NULL OR Categories.custom_id = ''; +-- ! +UPDATE Feeds +SET custom_id = (SELECT id FROM Feeds t WHERE t.id = Feeds.id) +WHERE Feeds.custom_id IS NULL OR Feeds.custom_id = ''; +-- ! +UPDATE Messages +SET custom_id = (SELECT id FROM Messages t WHERE t.id = Messages.id) +WHERE Messages.custom_id IS NULL OR Messages.custom_id = ''; +-- ! +UPDATE Information SET inf_value = '5' WHERE inf_key = 'schema_version'; \ No newline at end of file diff --git a/resources/sql/db_update_mysql_5_6.sql b/resources/sql/db_update_mysql_5_6.sql new file mode 100755 index 000000000..d7d6553fe --- /dev/null +++ b/resources/sql/db_update_mysql_5_6.sql @@ -0,0 +1,4 @@ +ALTER TABLE Messages +ADD COLUMN custom_hash TEXT; +-- ! +UPDATE Information SET inf_value = '6' WHERE inf_key = 'schema_version'; \ No newline at end of file diff --git a/resources/sql/db_update_mysql_6_7.sql b/resources/sql/db_update_mysql_6_7.sql new file mode 100755 index 000000000..3377699a9 --- /dev/null +++ b/resources/sql/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/sql/db_update_sqlite_1_2.sql b/resources/sql/db_update_sqlite_1_2.sql new file mode 100644 index 000000000..1df47a23d --- /dev/null +++ b/resources/sql/db_update_sqlite_1_2.sql @@ -0,0 +1,4 @@ +ALTER TABLE Messages +ADD COLUMN is_pdeleted INTEGER(1) NOT NULL DEFAULT 0 CHECK (is_pdeleted >= 0 AND is_pdeleted <= 1); +-- ! +UPDATE Information SET inf_value = '2' WHERE inf_key = 'schema_version'; \ No newline at end of file diff --git a/resources/sql/db_update_sqlite_2_3.sql b/resources/sql/db_update_sqlite_2_3.sql new file mode 100644 index 000000000..326b083b8 --- /dev/null +++ b/resources/sql/db_update_sqlite_2_3.sql @@ -0,0 +1,4 @@ +ALTER TABLE Messages +ADD COLUMN enclosures TEXT; +-- ! +UPDATE Information SET inf_value = '3' WHERE inf_key = 'schema_version'; diff --git a/resources/sql/db_update_sqlite_3_4.sql b/resources/sql/db_update_sqlite_3_4.sql new file mode 100644 index 000000000..d357313bb --- /dev/null +++ b/resources/sql/db_update_sqlite_3_4.sql @@ -0,0 +1,103 @@ +CREATE TABLE Accounts ( + id INTEGER PRIMARY KEY, + type TEXT NOT NULL +); +-- ! +INSERT INTO Accounts (type) VALUES ('std-rss'); +-- ! +DROP TABLE IF EXISTS FeedsData; +-- ! +CREATE TABLE TtRssAccounts ( + id INTEGER, + username TEXT NOT NULL, + password TEXT, + auth_protected INTEGER(1) NOT NULL CHECK (auth_protected >= 0 AND auth_protected <= 1) DEFAULT 0, + auth_username TEXT, + auth_password TEXT, + url TEXT NOT NULL, + force_update INTEGER(1) NOT NULL CHECK (force_update >= 0 AND force_update <= 1) DEFAULT 0, + + FOREIGN KEY (id) REFERENCES Accounts (id) +); +-- ! +CREATE TABLE backup_Messages AS SELECT * FROM Messages; +-- ! +DROP TABLE Messages; +-- ! +CREATE TABLE Messages ( + id INTEGER PRIMARY KEY, + is_read INTEGER(1) NOT NULL CHECK (is_read >= 0 AND is_read <= 1) DEFAULT 0, + is_deleted INTEGER(1) NOT NULL CHECK (is_deleted >= 0 AND is_deleted <= 1) DEFAULT 0, + 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, + author TEXT, + date_created INTEGER NOT NULL CHECK (date_created != 0), + contents TEXT, + is_pdeleted INTEGER(1) NOT NULL CHECK (is_pdeleted >= 0 AND is_pdeleted <= 1) DEFAULT 0, + enclosures TEXT, + account_id INTEGER NOT NULL, + custom_id TEXT, + + FOREIGN KEY (account_id) REFERENCES Accounts (id) +); +-- ! +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; +-- ! +CREATE TABLE backup_Feeds AS SELECT * FROM Feeds; +-- ! +DROP TABLE Feeds; +-- ! +CREATE TABLE Feeds ( + id INTEGER PRIMARY KEY, + title TEXT NOT NULL CHECK (title != ''), + description TEXT, + date_created INTEGER, + icon BLOB, + category INTEGER NOT NULL CHECK (category >= -1), + encoding TEXT, + url TEXT, + protected INTEGER(1) NOT NULL CHECK (protected >= 0 AND protected <= 1), + username TEXT, + password TEXT, + update_type INTEGER(1) NOT NULL CHECK (update_type >= 0), + update_interval INTEGER NOT NULL CHECK (update_interval >= 5) DEFAULT 15, + type INTEGER, + account_id INTEGER NOT NULL, + custom_id TEXT, + + FOREIGN KEY (account_id) REFERENCES Accounts (id) +); +-- ! +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; +-- ! +CREATE TABLE backup_Categories AS SELECT * FROM Categories; +-- ! +DROP TABLE Categories; +-- ! +CREATE TABLE Categories ( + id INTEGER PRIMARY KEY, + parent_id INTEGER NOT NULL, + title TEXT NOT NULL CHECK (title != ''), + description TEXT, + date_created INTEGER, + icon BLOB, + account_id INTEGER NOT NULL, + custom_id TEXT, + + FOREIGN KEY (account_id) REFERENCES Accounts (id) +); +-- ! +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; +-- ! +UPDATE Information SET inf_value = '4' WHERE inf_key = 'schema_version'; \ No newline at end of file diff --git a/resources/sql/db_update_sqlite_4_5.sql b/resources/sql/db_update_sqlite_4_5.sql new file mode 100755 index 000000000..8367a5c92 --- /dev/null +++ b/resources/sql/db_update_sqlite_4_5.sql @@ -0,0 +1,23 @@ +CREATE TABLE IF NOT EXISTS OwnCloudAccounts ( + id INTEGER, + username TEXT NOT NULL, + password TEXT, + url TEXT NOT NULL, + force_update INTEGER(1) NOT NULL CHECK (force_update >= 0 AND force_update <= 1) DEFAULT 0, + + FOREIGN KEY (id) REFERENCES Accounts (id) +); +-- ! +UPDATE Categories +SET custom_id = (SELECT id FROM Categories t WHERE t.id = Categories.id) +WHERE Categories.custom_id IS NULL OR Categories.custom_id = ''; +-- ! +UPDATE Feeds +SET custom_id = (SELECT id FROM Feeds t WHERE t.id = Feeds.id) +WHERE Feeds.custom_id IS NULL OR Feeds.custom_id = ''; +-- ! +UPDATE Messages +SET custom_id = (SELECT id FROM Messages t WHERE t.id = Messages.id) +WHERE Messages.custom_id IS NULL OR Messages.custom_id = ''; +-- ! +UPDATE Information SET inf_value = '5' WHERE inf_key = 'schema_version'; \ No newline at end of file diff --git a/resources/sql/db_update_sqlite_5_6.sql b/resources/sql/db_update_sqlite_5_6.sql new file mode 100755 index 000000000..f3443019e --- /dev/null +++ b/resources/sql/db_update_sqlite_5_6.sql @@ -0,0 +1,30 @@ +CREATE TABLE backup_Messages AS SELECT * FROM Messages; +-- ! +DROP TABLE Messages; +-- ! +CREATE TABLE Messages ( + id INTEGER PRIMARY KEY, + is_read INTEGER(1) NOT NULL CHECK (is_read >= 0 AND is_read <= 1) DEFAULT 0, + is_deleted INTEGER(1) NOT NULL CHECK (is_deleted >= 0 AND is_deleted <= 1) DEFAULT 0, + 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, + author TEXT, + date_created INTEGER NOT NULL CHECK (date_created != 0), + contents TEXT, + is_pdeleted INTEGER(1) NOT NULL CHECK (is_pdeleted >= 0 AND is_pdeleted <= 1) DEFAULT 0, + enclosures TEXT, + account_id INTEGER NOT NULL, + custom_id TEXT, + custom_hash TEXT, + + FOREIGN KEY (account_id) REFERENCES Accounts (id) +); +-- ! +INSERT INTO Messages (id, is_read, is_deleted, is_important, feed, title, url, author, date_created, contents, is_pdeleted, enclosures, account_id, custom_id) +SELECT id, is_read, is_deleted, is_important, feed, title, url, author, date_created, contents, is_pdeleted, enclosures, account_id, custom_id FROM backup_Messages; +-- ! +DROP TABLE backup_Messages; +-- ! +UPDATE Information SET inf_value = '6' WHERE inf_key = 'schema_version'; \ No newline at end of file diff --git a/resources/sql/db_update_sqlite_6_7.sql b/resources/sql/db_update_sqlite_6_7.sql new file mode 100755 index 000000000..6214faa87 --- /dev/null +++ b/resources/sql/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