From 4fb70354ced94ecc933cdffc39c8f558eabed68f Mon Sep 17 00:00:00 2001 From: Lukas Metzger Date: Wed, 10 Feb 2016 17:06:56 +0100 Subject: [PATCH] Updated database schema with additional foreign keys and ON DELETE CASCADE to secure consistency --- api/install.php | 14 +++++++++----- api/upgrade.php | 25 +++++++++++++++++++++++++ lib/checkversion.php | 2 +- 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/api/install.php b/api/install.php index c43caae..5716cc2 100644 --- a/api/install.php +++ b/api/install.php @@ -60,6 +60,9 @@ CREATE TABLE IF NOT EXISTS records ( KEY domain_id (domain_id) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; +ALTER TABLE records + ADD CONSTRAINT records_ibfk_1 FOREIGN KEY (domain_id) REFERENCES domains (id) ON DELETE CASCADE; + CREATE TABLE IF NOT EXISTS user ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(50) NOT NULL, @@ -69,8 +72,9 @@ CREATE TABLE IF NOT EXISTS user ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1; ALTER TABLE permissions - ADD CONSTRAINT permissions_ibfk_2 FOREIGN KEY (domain) REFERENCES domains (id), - ADD CONSTRAINT permissions_ibfk_1 FOREIGN KEY (user) REFERENCES user (id); + ADD CONSTRAINT permissions_ibfk_1 FOREIGN KEY (domain) REFERENCES domains (id) ON DELETE CASCADE; +ALTER TABLE permissions + ADD CONSTRAINT permissions_ibfk_2 FOREIGN KEY (user) REFERENCES user (id) ON DELETE CASCADE; CREATE TABLE IF NOT EXISTS remote ( id int(11) NOT NULL AUTO_INCREMENT, @@ -83,8 +87,8 @@ CREATE TABLE IF NOT EXISTS remote ( KEY record (record) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -ALTER TABLE `remote` - ADD CONSTRAINT `remote_ibfk_1` FOREIGN KEY (`record`) REFERENCES `records` (`id`); +ALTER TABLE remote + ADD CONSTRAINT remote_ibfk_1 FOREIGN KEY (record) REFERENCES records (id) ON DELETE CASCADE; CREATE TABLE IF NOT EXISTS options ( name varchar(255) NOT NULL, @@ -92,7 +96,7 @@ CREATE TABLE IF NOT EXISTS options ( PRIMARY KEY (name) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -INSERT INTO options(name,value) VALUES ('schema_version', 1); +INSERT INTO options(name,value) VALUES ('schema_version', 2); "; diff --git a/api/upgrade.php b/api/upgrade.php index e977c8f..7cdd926 100644 --- a/api/upgrade.php +++ b/api/upgrade.php @@ -58,6 +58,31 @@ if(isset($input->action) && $input->action == "requestUpgrade") { $db->multi_query($sql); while ($db->next_result()) {;} } + if($currentVersion < 2) { + $sql = " + ALTER TABLE permissions + DROP FOREIGN KEY permissions_ibfk_1; + ALTER TABLE permissions + DROP FOREIGN KEY permissions_ibfk_2; + ALTER TABLE permissions + ADD CONSTRAINT permissions_ibfk_1 FOREIGN KEY (domain) REFERENCES domains (id) ON DELETE CASCADE; + ALTER TABLE permissions + ADD CONSTRAINT permissions_ibfk_2 FOREIGN KEY (user) REFERENCES user (id) ON DELETE CASCADE; + + ALTER TABLE remote + DROP FOREIGN KEY remote_ibfk_1; + ALTER TABLE remote + ADD CONSTRAINT remote_ibfk_1 FOREIGN KEY (record) REFERENCES records (id) ON DELETE CASCADE; + + ALTER TABLE records + ADD CONSTRAINT records_ibfk_1 FOREIGN KEY (domain_id) REFERENCES domains (id) ON DELETE CASCADE; + + UPDATE options SET value=2 WHERE name='schema_version'; + "; + + $db->multi_query($sql); + while ($db->next_result()) {;} + } $retval['status'] = "success"; } diff --git a/lib/checkversion.php b/lib/checkversion.php index 6a8af8b..086a2b7 100644 --- a/lib/checkversion.php +++ b/lib/checkversion.php @@ -17,7 +17,7 @@ */ function getExpectedVersion() { - return 1; + return 2; } function checkVersion($db) {