123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531 |
- -- ***** 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 <http://www.gnu.org/licenses/>.
- --
- -- ***** 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<DATE_SUB(NOW(), INTERVAL 1 HOUR) AND (syncUploadQueue.sessionID IS NULL OR finished IS NOT NULL);
|