diff --git a/master.sql b/master.sql new file mode 100644 index 0000000..f251a82 --- /dev/null +++ b/master.sql @@ -0,0 +1,530 @@ +-- ***** BEGIN LICENSE BLOCK ***** +-- +-- This file is part of the Zotero Data Server. +-- +-- Copyright © 2010 Center for History and New Media +-- George Mason University, Fairfax, Virginia, USA +-- http://zotero.org +-- +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU Affero General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU Affero General Public License for more details. +-- +-- You should have received a copy of the GNU Affero General Public License +-- along with this program. If not, see . +-- +-- ***** END LICENSE BLOCK ***** + +SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; + +CREATE TABLE `abstractCreators` ( + `creatorID` int(10) unsigned NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `abstractItems` ( + `itemID` int(10) unsigned NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`itemID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `baseFieldMappings` ( + `itemTypeID` smallint(5) unsigned NOT NULL, + `baseFieldID` smallint(5) unsigned NOT NULL, + `fieldID` smallint(5) unsigned NOT NULL, + PRIMARY KEY (`itemTypeID`,`baseFieldID`,`fieldID`), + KEY `baseFieldID` (`baseFieldID`), + KEY `fieldID` (`fieldID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `charsets` ( + `charsetID` tinyint(3) unsigned NOT NULL, + `charset` varchar(50) NOT NULL, + PRIMARY KEY (`charsetID`), + KEY `charset` (`charset`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `creatorTypes` ( + `creatorTypeID` smallint(5) unsigned NOT NULL, + `creatorTypeName` varchar(50) NOT NULL, + `custom` tinyint(1) unsigned NOT NULL, + PRIMARY KEY (`creatorTypeID`), + UNIQUE KEY `creatorTypeName` (`creatorTypeName`), + KEY `custom` (`custom`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `fields` ( + `fieldID` smallint(5) unsigned NOT NULL, + `fieldName` varchar(50) NOT NULL, + `fieldFormatID` tinyint(3) unsigned DEFAULT NULL, + `custom` tinyint(1) unsigned NOT NULL, + PRIMARY KEY (`fieldID`), + UNIQUE KEY `fieldName` (`fieldName`), + KEY `custom` (`custom`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `groups` ( + `groupID` int(10) unsigned NOT NULL AUTO_INCREMENT, + `libraryID` int(10) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `slug` varchar(255) DEFAULT NULL, + `type` enum('PublicOpen','PublicClosed','Private') NOT NULL DEFAULT 'Private', + `libraryEditing` enum('admins','members') NOT NULL DEFAULT 'admins', + `libraryReading` enum('members','all') NOT NULL DEFAULT 'all', + `fileEditing` enum('none','admins','members') NOT NULL DEFAULT 'admins', + `description` text NOT NULL, + `url` varchar(255) NOT NULL, + `hasImage` tinyint(1) unsigned NOT NULL DEFAULT '0', + `dateAdded` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `dateModified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', + `version` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`groupID`), + UNIQUE KEY `libraryID` (`libraryID`), + UNIQUE KEY `slug` (`slug`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `groupUsers` ( + `groupID` int(10) unsigned NOT NULL, + `userID` int(10) unsigned NOT NULL, + `role` enum('owner','admin','member') NOT NULL DEFAULT 'member', + `joined` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', + `lastUpdated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`groupID`,`userID`), + KEY `userID` (`userID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `itemTypeCreatorTypes` ( + `itemTypeID` smallint(5) unsigned NOT NULL, + `creatorTypeID` smallint(5) unsigned NOT NULL, + `primaryField` tinyint(1) unsigned NOT NULL, + PRIMARY KEY (`itemTypeID`,`creatorTypeID`), + KEY `creatorTypeID` (`creatorTypeID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `itemTypeFields` ( + `itemTypeID` smallint(5) unsigned NOT NULL, + `fieldID` smallint(5) unsigned NOT NULL, + `hide` tinyint(3) unsigned NOT NULL DEFAULT '0', + `orderIndex` tinyint(3) unsigned NOT NULL, + PRIMARY KEY (`itemTypeID`,`fieldID`), + KEY `fieldID` (`fieldID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `itemTypes` ( + `itemTypeID` smallint(5) unsigned NOT NULL, + `itemTypeName` varchar(50) NOT NULL, + `custom` tinyint(1) unsigned NOT NULL, + PRIMARY KEY (`itemTypeID`), + UNIQUE KEY `itemTypeName` (`itemTypeName`), + KEY `custom` (`custom`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE IF NOT EXISTS `keyAccessLog` ( + `keyID` int(10) unsigned NOT NULL, + `ipAddress` int(10) unsigned NOT NULL DEFAULT '0', + `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`keyID`,`ipAddress`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + + +CREATE TABLE `keyPermissions` ( + `keyID` int(10) unsigned NOT NULL, + `libraryID` int(10) unsigned NOT NULL, + `permission` enum('library','notes','write') NOT NULL, + `granted` tinyint(1) unsigned NOT NULL, + PRIMARY KEY (`keyID`,`libraryID`,`permission`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `keys` ( + `keyID` int(10) unsigned NOT NULL AUTO_INCREMENT, + `key` char(24) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `userID` int(10) unsigned NOT NULL, + `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `dateAdded` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `lastUsed` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`keyID`), + UNIQUE KEY `key` (`key`), + KEY `userID` (`userID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `libraries` ( + `libraryID` int(10) unsigned NOT NULL AUTO_INCREMENT, + `libraryType` enum('user','group') NOT NULL, + `lastUpdated` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', + `version` int(10) unsigned NOT NULL DEFAULT '0', + `shardID` smallint(5) unsigned NOT NULL, + PRIMARY KEY (`libraryID`), + KEY `libraryType` (`libraryType`), + KEY `shardID` (`shardID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `processorDaemons` ( + `mode` enum('download','upload','error','index') NOT NULL, + `addr` int(10) unsigned NOT NULL, + `port` smallint(5) unsigned NOT NULL, + `lastSeen` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`mode`,`addr`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `sessions` ( + `sessionID` char(32) CHARACTER SET ascii NOT NULL, + `userID` int(10) unsigned NOT NULL, + `ipAddress` int(10) unsigned DEFAULT NULL, + `exclusive` tinyint(1) unsigned NOT NULL DEFAULT '0', + `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`sessionID`), + KEY `userID` (`userID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `shardHosts` ( + `shardHostID` tinyint(3) unsigned NOT NULL, + `address` varchar(15) NOT NULL, + `port` smallint(5) unsigned NOT NULL DEFAULT 3306, + `state` enum('up','readonly','down') NOT NULL, + PRIMARY KEY (`shardHostID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `shards` ( + `shardID` smallint(5) unsigned NOT NULL, + `shardHostID` tinyint(3) unsigned NOT NULL, + `db` varchar(20) NOT NULL, + `state` enum('up','readonly','down') NOT NULL, + `items` mediumint(8) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`shardID`), + KEY `shardHostID` (`shardHostID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `storageAccounts` ( + `userID` int(10) unsigned NOT NULL, + `quota` mediumint(8) unsigned DEFAULT 10000 NOT NULL, + `expiration` timestamp NULL DEFAULT DATE_ADD(CURRENT_TIMESTAMP, INTERVAL 10 YEARS), + PRIMARY KEY (`userID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `storageDownloadLog` ( + `ownerUserID` int(10) unsigned NOT NULL, + `downloadUserID` int(10) unsigned DEFAULT NULL, + `ipAddress` int(10) unsigned NULL, + `storageFileID` int(10) unsigned NOT NULL, + `filename` varchar(1024) NOT NULL, + `size` int(10) unsigned NOT NULL, + `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `storageFiles` ( + `storageFileID` int(10) unsigned NOT NULL AUTO_INCREMENT, + `hash` char(32) NOT NULL, + `filename` varchar(255) NOT NULL, + `size` int(10) unsigned NOT NULL, + `zip` tinyint(1) unsigned NOT NULL, + `lastAdded` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`storageFileID`), + UNIQUE KEY `hash` (`hash`,`filename`,`zip`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `storageFilesExisting` ( + `storageFileID` int(10) unsigned NOT NULL, + PRIMARY KEY (`storageFileID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `storageLastSync` ( + `userID` int(10) unsigned NOT NULL, + `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`userID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `storageUploadLog` ( + `ownerUserID` int(10) unsigned NOT NULL, + `uploadUserID` int(10) unsigned NOT NULL, + `ipAddress` int(10) unsigned NULL, + `storageFileID` int(10) unsigned NOT NULL, + `filename` varchar(1024) NOT NULL, + `size` int(10) unsigned NOT NULL, + `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `storageUploadQueue` ( + `uploadKey` char(32) NOT NULL, + `userID` int(10) unsigned NOT NULL, + `hash` char(32) NOT NULL, + `filename` varchar(1024) NOT NULL, + `zip` tinyint(1) unsigned NOT NULL, + `size` int(10) unsigned NOT NULL, + `mtime` bigint(13) unsigned NOT NULL, + `contentType` varchar(75) DEFAULT NULL, + `charset` varchar(25) DEFAULT NULL, + `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`uploadKey`), + KEY `userID` (`userID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `syncDownloadProcessLog` ( + `userID` int(10) unsigned NOT NULL, + `lastsync` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', + `objects` int(10) unsigned NOT NULL, + `ipAddress` int(10) unsigned NOT NULL, + `processorHost` int(10) unsigned NOT NULL, + `processDuration` float(6,2) NOT NULL, + `totalDuration` smallint(5) unsigned NOT NULL, + `error` tinyint(4) NOT NULL DEFAULT '0', + `finished` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + KEY `finished` (`finished`), + KEY `userID` (`userID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `syncDownloadQueue` ( + `syncDownloadQueueID` int(10) unsigned NOT NULL, + `processorHost` int(10) unsigned DEFAULT NULL, + `userID` int(10) unsigned NOT NULL, + `sessionID` char(32) CHARACTER SET ascii NOT NULL, + `lastsync` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', + `lastsyncMS` smallint(5) unsigned NOT NULL DEFAULT '0', + `version` smallint(5) unsigned NOT NULL, + `params` mediumtext NOT NULL, + `added` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `objects` int(10) unsigned NOT NULL, + `lastCheck` timestamp NULL DEFAULT NULL, + `tries` smallint(5) unsigned NOT NULL DEFAULT '0', + `started` timestamp NULL DEFAULT NULL, + `syncDownloadProcessID` int(10) unsigned DEFAULT NULL, + `finished` timestamp NULL DEFAULT NULL, + `finishedMS` smallint(5) unsigned NOT NULL DEFAULT '0', + `xmldata` longtext, + `errorCode` int(10) unsigned DEFAULT NULL, + `errorMessage` text, + PRIMARY KEY (`syncDownloadQueueID`), + KEY `userID` (`userID`), + KEY `sessionID` (`sessionID`), + KEY `started` (`started`), + KEY `syncDownloadProcessID` (`syncDownloadProcessID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `syncProcesses` ( + `syncProcessID` int(10) unsigned NOT NULL, + `userID` int(10) unsigned NOT NULL, + `started` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`syncProcessID`), + UNIQUE KEY `userID` (`userID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `syncProcessLocks` ( + `syncProcessID` int(10) unsigned NOT NULL, + `libraryID` int(10) unsigned NOT NULL, + PRIMARY KEY (`syncProcessID`,`libraryID`), + KEY `libraryID` (`libraryID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `syncUploadQueue` ( + `syncUploadQueueID` int(10) unsigned NOT NULL, + `processorHost` int(10) unsigned DEFAULT NULL, + `xmldata` longtext NOT NULL, + `dataLength` int(10) unsigned NOT NULL DEFAULT '0', + `hasCreator` tinyint(3) unsigned NOT NULL DEFAULT '0', + `userID` int(10) unsigned NOT NULL, + `sessionID` char(32) CHARACTER SET ascii NOT NULL, + `added` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `errorCheck` tinyint(1) unsigned NOT NULL DEFAULT '0', + `tries` smallint(5) unsigned NOT NULL DEFAULT '0', + `started` timestamp NULL DEFAULT NULL, + `startedMS` smallint(5) unsigned NOT NULL DEFAULT '0', + `syncProcessID` int(10) unsigned DEFAULT NULL, + `finished` timestamp NULL DEFAULT NULL, + `finishedMS` smallint(5) unsigned NOT NULL DEFAULT '0', + `errorCode` int(10) unsigned DEFAULT NULL, + `errorMessage` mediumtext, + PRIMARY KEY (`syncUploadQueueID`), + UNIQUE KEY `sessionID` (`sessionID`), + UNIQUE KEY `syncProcessID` (`syncProcessID`), + KEY `userID` (`userID`), + KEY `started` (`started`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `syncUploadQueueLocks` ( + `syncUploadQueueID` int(10) unsigned NOT NULL, + `libraryID` int(10) unsigned NOT NULL, + PRIMARY KEY (`syncUploadQueueID`,`libraryID`), + KEY `libraryID` (`libraryID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `syncUploadProcessLog` ( + `userID` int(10) unsigned NOT NULL, + `dataLength` int(10) unsigned NOT NULL, + `processorHost` int(10) unsigned NOT NULL, + `processDuration` float(6,2) NOT NULL, + `totalDuration` smallint(5) unsigned NOT NULL, + `error` tinyint(4) NOT NULL DEFAULT '0', + `finished` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + KEY `finished` (`finished`), + KEY `userID` (`userID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `syncUploadQueuePostWriteLog` ( + `syncUploadQueueID` int(10) unsigned NOT NULL, + `objectType` enum('group','groupUser') NOT NULL, + `ids` varchar(30) NOT NULL, + `action` enum('update','delete') NOT NULL, + PRIMARY KEY (`syncUploadQueueID`,`objectType`,`ids`,`action`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +CREATE TABLE `users` ( + `userID` int(10) unsigned NOT NULL, + `libraryID` int(10) unsigned NOT NULL, + `username` varchar(255) NOT NULL, + `joined` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `lastSyncTime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`userID`), + UNIQUE KEY `libraryID` (`libraryID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +ALTER TABLE `baseFieldMappings` + ADD CONSTRAINT `baseFieldMappings_ibfk_1` FOREIGN KEY (`itemTypeID`) REFERENCES `itemTypes` (`itemTypeID`), + ADD CONSTRAINT `baseFieldMappings_ibfk_2` FOREIGN KEY (`baseFieldID`) REFERENCES `fields` (`fieldID`), + ADD CONSTRAINT `baseFieldMappings_ibfk_3` FOREIGN KEY (`fieldID`) REFERENCES `fields` (`fieldID`); + +ALTER TABLE `groups` + ADD CONSTRAINT `groups_ibfk_1` FOREIGN KEY (`libraryID`) REFERENCES `libraries` (`libraryID`) ON DELETE CASCADE; + +ALTER TABLE `groupUsers` + ADD CONSTRAINT `groupUsers_ibfk_1` FOREIGN KEY (`groupID`) REFERENCES `groups` (`groupID`) ON DELETE CASCADE, + ADD CONSTRAINT `groupUsers_ibfk_2` FOREIGN KEY (`userID`) REFERENCES `users` (`userID`) ON DELETE CASCADE, + ADD CONSTRAINT `groupUsers_ibfk_3` FOREIGN KEY (`groupID`) REFERENCES `groups` (`groupID`) ON DELETE CASCADE, + ADD CONSTRAINT `groupUsers_ibfk_4` FOREIGN KEY (`userID`) REFERENCES `users` (`userID`) ON DELETE CASCADE; + +ALTER TABLE `itemTypeCreatorTypes` + ADD CONSTRAINT `itemTypeCreatorTypes_ibfk_1` FOREIGN KEY (`itemTypeID`) REFERENCES `itemTypes` (`itemTypeID`), + ADD CONSTRAINT `itemTypeCreatorTypes_ibfk_2` FOREIGN KEY (`creatorTypeID`) REFERENCES `creatorTypes` (`creatorTypeID`); + +ALTER TABLE `itemTypeFields` + ADD CONSTRAINT `itemTypeFields_ibfk_1` FOREIGN KEY (`itemTypeID`) REFERENCES `itemTypes` (`itemTypeID`), + ADD CONSTRAINT `itemTypeFields_ibfk_2` FOREIGN KEY (`fieldID`) REFERENCES `fields` (`fieldID`); + +ALTER TABLE `keys` + ADD CONSTRAINT `keys_ibfk_1` FOREIGN KEY (`userID`) REFERENCES `users` (`userID`) ON DELETE CASCADE; + +ALTER TABLE `keyPermissions` + ADD CONSTRAINT `keyPermissions_ibfk_1` FOREIGN KEY (`keyID`) REFERENCES `keys` (`keyID`) ON DELETE CASCADE; + +ALTER TABLE `libraries` + ADD CONSTRAINT `libraries_ibfk_1` FOREIGN KEY (`shardID`) REFERENCES `shards` (`shardID`); + +ALTER TABLE `sessions` + ADD CONSTRAINT `sessions_ibfk_1` FOREIGN KEY (`userID`) REFERENCES `users` (`userID`) ON DELETE CASCADE; + +ALTER TABLE `shards` + ADD CONSTRAINT `shards_ibfk_1` FOREIGN KEY (`shardHostID`) REFERENCES `shardHosts` (`shardHostID`); + +ALTER TABLE `storageAccounts` + ADD CONSTRAINT `storageAccounts_ibfk_1` FOREIGN KEY (`userID`) REFERENCES `users` (`userID`) ON DELETE CASCADE ON UPDATE CASCADE; + +ALTER TABLE `storageLastSync` + ADD CONSTRAINT `storageLastSync_ibfk_1` FOREIGN KEY (`userID`) REFERENCES `users` (`userID`) ON DELETE CASCADE ON UPDATE CASCADE; + +ALTER TABLE `storageUploadQueue` + ADD CONSTRAINT `storageUploadQueue_ibfk_1` FOREIGN KEY (`userID`) REFERENCES `users` (`userID`) ON DELETE CASCADE ON UPDATE CASCADE; + +ALTER TABLE `syncDownloadQueue` + ADD CONSTRAINT `syncDownloadQueue_ibfk_1` FOREIGN KEY (`userID`) REFERENCES `users` (`userID`) ON DELETE CASCADE ON UPDATE CASCADE, + ADD CONSTRAINT `syncDownloadQueue_ibfk_3` FOREIGN KEY (`sessionID`) REFERENCES `sessions` (`sessionID`) ON DELETE CASCADE ON UPDATE CASCADE; + +ALTER TABLE `syncProcesses` + ADD CONSTRAINT `syncProcesses_ibfk_1` FOREIGN KEY (`userID`) REFERENCES `users` (`userID`); + +ALTER TABLE `syncProcessLocks` + ADD CONSTRAINT `syncProcessLocks_ibfk_1` FOREIGN KEY (`syncProcessID`) REFERENCES `syncProcesses` (`syncProcessID`) ON DELETE CASCADE ON UPDATE CASCADE, + ADD CONSTRAINT `syncProcessLocks_ibfk_2` FOREIGN KEY (`libraryID`) REFERENCES `libraries` (`libraryID`) ON DELETE CASCADE ON UPDATE CASCADE; + +ALTER TABLE `syncUploadQueue` + ADD CONSTRAINT `syncUploadQueue_ibfk_1` FOREIGN KEY (`userID`) REFERENCES `users` (`userID`) ON DELETE CASCADE ON UPDATE CASCADE, + ADD CONSTRAINT `syncUploadQueue_ibfk_2` FOREIGN KEY (`syncProcessID`) REFERENCES `syncProcesses` (`syncProcessID`) ON DELETE SET NULL, + ADD CONSTRAINT `syncUploadQueue_ibfk_3` FOREIGN KEY (`sessionID`) REFERENCES `sessions` (`sessionID`) ON DELETE CASCADE ON UPDATE CASCADE; + +ALTER TABLE `syncUploadQueueLocks` + ADD CONSTRAINT `syncUploadQueueLocks_ibfk_1` FOREIGN KEY (`syncUploadQueueID`) REFERENCES `syncUploadQueue` (`syncUploadQueueID`) ON DELETE CASCADE ON UPDATE CASCADE, + ADD CONSTRAINT `syncUploadQueueLocks_ibfk_2` FOREIGN KEY (`libraryID`) REFERENCES `libraries` (`libraryID`) ON DELETE CASCADE ON UPDATE CASCADE; + +ALTER TABLE `syncUploadQueuePostWriteLog` + ADD CONSTRAINT `syncUploadQueuePostWriteLog_ibfk_1` FOREIGN KEY (`syncUploadQueueID`) REFERENCES `syncUploadQueue` (`syncUploadQueueID`) ON DELETE CASCADE; + +ALTER TABLE `users` + ADD CONSTRAINT `users_ibfk_1` FOREIGN KEY (`libraryID`) REFERENCES `libraries` (`libraryID`) ON DELETE CASCADE; + + + +CREATE EVENT sessionGC ON SCHEDULE EVERY 5 MINUTE DO + DELETE S FROM sessions S LEFT JOIN syncUploadQueue USING (sessionID) WHERE timestamp