mirror of
https://github.com/nuxsmin/sysPass.git
synced 2026-03-03 07:04:07 +01:00
* [MOD] Improved database queries when upgrading * [MOD] Changed database and table collation to utf8_unicode_ci
832 lines
29 KiB
SQL
832 lines
29 KiB
SQL
DELIMITER $$
|
|
|
|
SET FOREIGN_KEY_CHECKS = 0 $$
|
|
|
|
ALTER SCHEMA DEFAULT COLLATE utf8_unicode_ci $$
|
|
|
|
DROP PROCEDURE IF EXISTS drop_primary $$
|
|
|
|
CREATE PROCEDURE drop_primary(
|
|
tName VARCHAR(64)
|
|
)
|
|
BEGIN
|
|
DECLARE cName VARCHAR(64);
|
|
DECLARE done INT DEFAULT FALSE;
|
|
DECLARE cur CURSOR FOR
|
|
SELECT DISTINCT
|
|
COLUMN_NAME
|
|
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
|
|
WHERE TABLE_SCHEMA = DATABASE()
|
|
AND CONSTRAINT_NAME = 'PRIMARY'
|
|
AND TABLE_NAME = tName COLLATE utf8_unicode_ci;
|
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
|
|
|
|
OPEN cur;
|
|
|
|
read_loop: LOOP
|
|
FETCH cur
|
|
INTO cName;
|
|
IF done
|
|
THEN
|
|
LEAVE read_loop;
|
|
END IF;
|
|
SET @SQL = CONCAT('ALTER TABLE `', tName, '` DROP COLUMN `', cName, '`, DROP PRIMARY KEY');
|
|
PREPARE stmt FROM @SQL;
|
|
EXECUTE stmt;
|
|
DEALLOCATE PREPARE stmt;
|
|
END LOOP;
|
|
|
|
CLOSE cur;
|
|
END $$
|
|
|
|
DROP PROCEDURE IF EXISTS remove_constraints $$
|
|
|
|
CREATE PROCEDURE remove_constraints()
|
|
BEGIN
|
|
DECLARE done INT DEFAULT FALSE;
|
|
DECLARE tName VARCHAR(64);
|
|
DECLARE cName VARCHAR(64);
|
|
DECLARE cur CURSOR FOR
|
|
SELECT DISTINCT
|
|
TABLE_NAME,
|
|
CONSTRAINT_NAME
|
|
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
|
|
WHERE TABLE_SCHEMA = DATABASE()
|
|
AND REFERENCED_TABLE_NAME IS NOT NULL;
|
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
|
|
|
|
OPEN cur;
|
|
|
|
read_loop: LOOP
|
|
FETCH cur
|
|
INTO tName, cName;
|
|
IF done
|
|
THEN
|
|
LEAVE read_loop;
|
|
END IF;
|
|
SET @SQL = CONCAT('ALTER TABLE `', tName, '` DROP FOREIGN KEY `', cName, '`');
|
|
PREPARE stmt FROM @SQL;
|
|
EXECUTE stmt;
|
|
DEALLOCATE PREPARE stmt;
|
|
END LOOP;
|
|
|
|
CLOSE cur;
|
|
END $$
|
|
|
|
DROP PROCEDURE IF EXISTS remove_indexes $$
|
|
|
|
CREATE PROCEDURE remove_indexes()
|
|
BEGIN
|
|
DECLARE done INT DEFAULT FALSE;
|
|
DECLARE tName VARCHAR(64);
|
|
DECLARE iName VARCHAR(64);
|
|
DECLARE cur CURSOR FOR
|
|
SELECT DISTINCT
|
|
TABLE_NAME,
|
|
INDEX_NAME
|
|
FROM INFORMATION_SCHEMA.STATISTICS
|
|
WHERE TABLE_SCHEMA = DATABASE()
|
|
AND NON_UNIQUE = 1;
|
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
|
|
|
|
OPEN cur;
|
|
|
|
read_loop: LOOP
|
|
FETCH cur
|
|
INTO tName, iName;
|
|
IF done
|
|
THEN
|
|
LEAVE read_loop;
|
|
END IF;
|
|
SET @SQL = CONCAT('ALTER TABLE `', tName, '` DROP INDEX `', iName, '`');
|
|
PREPARE stmt FROM @SQL;
|
|
EXECUTE stmt;
|
|
DEALLOCATE PREPARE stmt;
|
|
END LOOP;
|
|
|
|
CLOSE cur;
|
|
END $$
|
|
|
|
CALL remove_constraints() $$
|
|
CALL remove_indexes() $$
|
|
|
|
-- DROP PROCEDURE removeConstraints
|
|
|
|
CREATE TABLE `CustomFieldType` (
|
|
`id` TINYINT(3) UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`name` VARCHAR(50) NOT NULL,
|
|
`text` VARCHAR(50) NOT NULL,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `uk_CustomFieldType_01` (`name`)
|
|
)
|
|
ENGINE = InnoDB
|
|
DEFAULT CHARSET = utf8 $$
|
|
|
|
INSERT INTO CustomFieldType (id, name, text)
|
|
VALUES (1, 'text', 'Texto'), (2, 'password', 'Clave'), (3, 'date', 'Fecha'), (4, 'number', 'Número'),
|
|
(5, 'email', 'Email'), (6, 'telephone', 'Teléfono'), (7, 'url', 'URL'), (8, 'color', 'Color'), (9, 'wiki', 'Wiki'),
|
|
(10, 'textarea', 'Área de Texto') $$
|
|
|
|
-- CustomFieldData
|
|
ALTER TABLE customFieldsData
|
|
CHANGE customfielddata_defId definitionId INT(10) UNSIGNED NOT NULL,
|
|
CHANGE customfielddata_id id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
CHANGE customfielddata_moduleId moduleId SMALLINT(5) UNSIGNED NOT NULL,
|
|
CHANGE customfielddata_itemId itemId INT(10) UNSIGNED NOT NULL,
|
|
CHANGE customfielddata_data data LONGBLOB,
|
|
CHANGE customfielddata_key `key` VARBINARY(1000),
|
|
ADD INDEX idx_CustomFieldData_01 (definitionId ASC),
|
|
ADD INDEX idx_CustomFieldData_02 (itemId ASC, moduleId ASC),
|
|
ADD INDEX idx_CustomFieldData_03 (moduleId ASC),
|
|
COLLATE utf8_unicode_ci,
|
|
RENAME TO CustomFieldData $$
|
|
|
|
-- CustomFieldDefinition
|
|
ALTER TABLE customFieldsDef
|
|
ADD required TINYINT(1) UNSIGNED NULL,
|
|
ADD help VARCHAR(255) NULL,
|
|
ADD showInList TINYINT(1) UNSIGNED NULL,
|
|
ADD name VARCHAR(100) NOT NULL
|
|
AFTER id,
|
|
ADD typeId TINYINT UNSIGNED NOT NULL,
|
|
ADD isEncrypted tinyint(1) unsigned DEFAULT 1 NULL,
|
|
CHANGE customfielddef_id id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
CHANGE customfielddef_module moduleId SMALLINT(5) UNSIGNED NOT NULL,
|
|
CHANGE customfielddef_field field BLOB NULL,
|
|
COLLATE utf8_unicode_ci,
|
|
RENAME TO CustomFieldDefinition $$
|
|
|
|
-- EventLog
|
|
ALTER TABLE log
|
|
CHANGE log_id id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
CHANGE log_date date INT(10) UNSIGNED NOT NULL,
|
|
CHANGE log_login login VARCHAR(25),
|
|
CHANGE log_userId userId SMALLINT(5) UNSIGNED,
|
|
CHANGE log_ipAddress ipAddress VARCHAR(45) NOT NULL,
|
|
CHANGE log_action action VARCHAR(50) NOT NULL,
|
|
CHANGE log_description description TEXT,
|
|
CHANGE log_level level VARCHAR(20) NOT NULL,
|
|
COLLATE utf8_unicode_ci,
|
|
RENAME TO EventLog $$
|
|
|
|
-- Track
|
|
ALTER TABLE track
|
|
CHANGE track_id id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
CHANGE track_userId userId SMALLINT(5) UNSIGNED,
|
|
CHANGE track_source source VARCHAR(100) NOT NULL,
|
|
CHANGE track_time time INT(10) UNSIGNED NOT NULL,
|
|
CHANGE track_ipv4 ipv4 BINARY(4) NOT NULL,
|
|
CHANGE track_ipv6 ipv6 BINARY(16),
|
|
ADD INDEX `idx_Track_01` (userId ASC),
|
|
ADD INDEX `idx_Track_02` (time ASC, ipv4 ASC, ipv6 ASC, source ASC),
|
|
COLLATE utf8_unicode_ci,
|
|
RENAME TO Track $$
|
|
|
|
-- AccountFile
|
|
ALTER TABLE accFiles
|
|
CHANGE accfile_accountId accountId MEDIUMINT(5) UNSIGNED NOT NULL,
|
|
CHANGE accfile_id id INT(11) NOT NULL AUTO_INCREMENT,
|
|
CHANGE accfile_name name VARCHAR(100) NOT NULL,
|
|
CHANGE accfile_type type VARCHAR(100) NOT NULL,
|
|
CHANGE accfile_size size INT(11) NOT NULL,
|
|
CHANGE accfile_content content MEDIUMBLOB NOT NULL,
|
|
CHANGE accfile_extension extension VARCHAR(10) NOT NULL,
|
|
CHANGE accFile_thumb thumb MEDIUMBLOB,
|
|
ADD INDEX idx_AccountFile_01 (accountId ASC),
|
|
COLLATE utf8_unicode_ci,
|
|
RENAME TO AccountFile $$
|
|
|
|
-- Fix NULL user's hash salt
|
|
UPDATE usrData SET user_hashSalt = '' WHERE user_hashSalt IS NULL $$
|
|
|
|
-- User
|
|
ALTER TABLE usrData
|
|
DROP user_secGroupId,
|
|
CHANGE user_id id SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
CHANGE user_name name VARCHAR(80) NOT NULL,
|
|
CHANGE user_groupId userGroupId SMALLINT(5) UNSIGNED NOT NULL,
|
|
CHANGE user_login login VARCHAR(50) NOT NULL,
|
|
ADD ssoLogin VARCHAR(100) NULL
|
|
AFTER login,
|
|
CHANGE user_pass pass VARBINARY(1000) NOT NULL,
|
|
CHANGE user_mPass mPass VARBINARY(1000) DEFAULT NULL,
|
|
CHANGE user_mKey mKey VARBINARY(1000) DEFAULT NULL,
|
|
CHANGE user_email email VARCHAR(80),
|
|
CHANGE user_notes notes TEXT,
|
|
CHANGE user_count loginCount INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
|
CHANGE user_profileId userProfileId SMALLINT(5) UNSIGNED NOT NULL,
|
|
CHANGE user_lastLogin lastLogin DATETIME,
|
|
CHANGE user_lastUpdate lastUpdate DATETIME,
|
|
CHANGE user_lastUpdateMPass lastUpdateMPass INT(11) UNSIGNED NOT NULL DEFAULT '0',
|
|
CHANGE user_isAdminApp isAdminApp TINYINT(1) DEFAULT 0,
|
|
CHANGE user_isAdminAcc isAdminAcc TINYINT(1) DEFAULT 0,
|
|
CHANGE user_isLdap isLdap TINYINT(1) DEFAULT 0,
|
|
CHANGE user_isDisabled isDisabled TINYINT(1) DEFAULT 0,
|
|
CHANGE user_hashSalt hashSalt VARBINARY(128) NOT NULL,
|
|
CHANGE user_isMigrate isMigrate TINYINT(1) DEFAULT 0,
|
|
CHANGE user_isChangePass isChangePass TINYINT(1) DEFAULT 0,
|
|
CHANGE user_isChangedPass isChangedPass TINYINT(1) DEFAULT 0,
|
|
CHANGE user_preferences preferences BLOB,
|
|
ADD INDEX idx_User_01 (pass ASC),
|
|
ADD UNIQUE INDEX `uk_User_01` (`login`, `ssoLogin`),
|
|
COLLATE utf8_unicode_ci,
|
|
RENAME TO User $$
|
|
|
|
-- UserProfile
|
|
ALTER TABLE usrProfiles
|
|
CHANGE userprofile_id id SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
CHANGE userprofile_name name VARCHAR(45) NOT NULL,
|
|
CHANGE userProfile_profile profile BLOB NOT NULL,
|
|
COLLATE utf8_unicode_ci,
|
|
RENAME TO UserProfile $$
|
|
|
|
-- Notice
|
|
ALTER TABLE notices
|
|
CHANGE notice_id id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
CHANGE notice_type type VARCHAR(100),
|
|
CHANGE notice_component component VARCHAR(100) NOT NULL,
|
|
CHANGE notice_description description VARCHAR(500) NOT NULL,
|
|
CHANGE notice_date date INT(10) UNSIGNED NOT NULL,
|
|
CHANGE notice_checked checked TINYINT(1) DEFAULT 0,
|
|
CHANGE notice_userId userId SMALLINT(5) UNSIGNED,
|
|
CHANGE notice_sticky sticky TINYINT(1) DEFAULT 0,
|
|
CHANGE notice_onlyAdmin onlyAdmin TINYINT(1) DEFAULT 0,
|
|
ADD INDEX idx_Notification_01 (userId ASC, checked ASC, date ASC),
|
|
ADD INDEX idx_Notification_02 (component ASC, date ASC, checked ASC, userId ASC),
|
|
COLLATE utf8_unicode_ci,
|
|
RENAME TO Notification $$
|
|
|
|
-- Plugin
|
|
ALTER TABLE `plugins`
|
|
CHANGE plugin_id id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
CHANGE plugin_name name VARCHAR(100) NOT NULL,
|
|
CHANGE plugin_data data VARBINARY(5000),
|
|
CHANGE plugin_enabled enabled TINYINT(1) NOT NULL DEFAULT 0,
|
|
ADD available TINYINT(1) DEFAULT 0,
|
|
ADD UNIQUE INDEX uk_Plugin_01 (name ASC),
|
|
COLLATE utf8_unicode_ci,
|
|
RENAME TO Plugin $$
|
|
|
|
-- PublicLink
|
|
ALTER TABLE publicLinks
|
|
ADD COLUMN `userId` SMALLINT(5) UNSIGNED NOT NULL,
|
|
ADD COLUMN `typeId` INT(10) UNSIGNED NOT NULL
|
|
AFTER `userId`,
|
|
ADD COLUMN `notify` TINYINT(1) NULL DEFAULT 0
|
|
AFTER `typeId`,
|
|
ADD COLUMN `dateAdd` INT UNSIGNED NOT NULL
|
|
AFTER `notify`,
|
|
ADD COLUMN `dateExpire` INT UNSIGNED NOT NULL
|
|
AFTER `dateAdd`,
|
|
ADD COLUMN `dateUpdate` INT UNSIGNED DEFAULT 0
|
|
AFTER `dateExpire`,
|
|
ADD COLUMN `countViews` SMALLINT(5) UNSIGNED NULL DEFAULT 0
|
|
AFTER `dateUpdate`,
|
|
ADD COLUMN `totalCountViews` MEDIUMINT UNSIGNED NULL DEFAULT 0
|
|
AFTER `countViews`,
|
|
ADD COLUMN `maxCountViews` SMALLINT(5) UNSIGNED NOT NULL DEFAULT 0
|
|
AFTER `totalCountViews`,
|
|
ADD COLUMN `useinfo` BLOB NULL
|
|
AFTER `maxCountViews`,
|
|
CHANGE publicLink_id id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
CHANGE publicLink_itemId itemId INT(10) UNSIGNED NOT NULL,
|
|
CHANGE publicLink_hash `hash` VARBINARY(100) NOT NULL,
|
|
CHANGE publicLink_linkData `data` LONGBLOB,
|
|
ADD UNIQUE INDEX uk_PublicLink_01 (`hash` ASC),
|
|
ADD UNIQUE INDEX uk_PublicLink_02 (itemId ASC),
|
|
COLLATE utf8_unicode_ci,
|
|
RENAME TO PublicLink $$
|
|
|
|
-- Fix missing categories hash
|
|
UPDATE categories
|
|
SET category_hash = MD5(CONCAT(category_id, category_name))
|
|
WHERE category_hash IS NULL OR category_hash = '0' $$
|
|
|
|
-- Category
|
|
ALTER TABLE categories
|
|
CHANGE category_id id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
CHANGE category_name name VARCHAR(50) NOT NULL,
|
|
CHANGE category_hash hash VARBINARY(40) NOT NULL,
|
|
CHANGE category_description description VARCHAR(255),
|
|
ADD UNIQUE INDEX uk_Category_01 (`hash` ASC),
|
|
COLLATE utf8_unicode_ci,
|
|
RENAME TO Category $$
|
|
|
|
-- Config
|
|
ALTER TABLE config
|
|
CHANGE config_parameter parameter VARCHAR(50) NOT NULL,
|
|
CHANGE config_value VALUE VARCHAR(4000),
|
|
ADD PRIMARY KEY (parameter),
|
|
COLLATE utf8_unicode_ci,
|
|
RENAME TO Config $$
|
|
|
|
-- Fix missing customers hash
|
|
UPDATE customers
|
|
SET customer_hash = MD5(CONCAT(customer_id, customer_name))
|
|
WHERE customer_hash IS NULL OR customer_hash = '' $$
|
|
|
|
-- Customer
|
|
ALTER TABLE customers
|
|
CHANGE customer_id id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
CHANGE customer_name name VARCHAR(100) NOT NULL,
|
|
CHANGE customer_hash hash VARBINARY(40) NOT NULL,
|
|
CHANGE customer_description description VARCHAR(255),
|
|
ADD `isGlobal` TINYINT(1) DEFAULT 0,
|
|
ADD INDEX uk_Client_01 (`hash` ASC),
|
|
COLLATE utf8_unicode_ci,
|
|
RENAME TO Client $$
|
|
|
|
-- Account
|
|
ALTER TABLE accounts
|
|
CHANGE account_id id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
CHANGE account_userGroupId userGroupId SMALLINT(5) UNSIGNED NOT NULL,
|
|
CHANGE account_userId userId SMALLINT(5) UNSIGNED NOT NULL,
|
|
CHANGE account_userEditId userEditId SMALLINT(5) UNSIGNED NOT NULL,
|
|
CHANGE account_customerId clientId MEDIUMINT(8) UNSIGNED NOT NULL,
|
|
CHANGE account_name name VARCHAR(50) NOT NULL,
|
|
CHANGE account_categoryId categoryId MEDIUMINT UNSIGNED NOT NULL,
|
|
CHANGE account_login login VARCHAR(50),
|
|
CHANGE account_url url VARCHAR(255),
|
|
CHANGE account_pass pass VARBINARY(1000) NOT NULL,
|
|
CHANGE account_key `key` VARBINARY(1000) NOT NULL,
|
|
CHANGE account_notes notes TEXT,
|
|
CHANGE account_countView countView INT(10) UNSIGNED NOT NULL DEFAULT 0,
|
|
CHANGE account_countDecrypt countDecrypt INT(10) UNSIGNED NOT NULL DEFAULT 0,
|
|
CHANGE account_dateAdd dateAdd DATETIME NOT NULL,
|
|
CHANGE account_dateEdit dateEdit DATETIME,
|
|
CHANGE account_otherGroupEdit otherUserGroupEdit TINYINT(1) DEFAULT 0,
|
|
CHANGE account_otherUserEdit otherUserEdit TINYINT(1) DEFAULT 0,
|
|
CHANGE account_isPrivate isPrivate TINYINT(1) DEFAULT 0,
|
|
CHANGE account_isPrivateGroup isPrivateGroup TINYINT(1) DEFAULT 0,
|
|
CHANGE account_passDate passDate INT(11) UNSIGNED,
|
|
CHANGE account_passDateChange passDateChange INT(11) UNSIGNED,
|
|
CHANGE account_parentId parentId MEDIUMINT UNSIGNED,
|
|
ADD INDEX idx_Account_01 (`categoryId` ASC),
|
|
ADD INDEX idx_Account_02 (`userGroupId` ASC, `userId` ASC),
|
|
ADD INDEX idx_Account_03 (`clientId` ASC),
|
|
ADD INDEX idx_Account_04 (`parentId` ASC),
|
|
COLLATE utf8_unicode_ci,
|
|
RENAME TO Account $$
|
|
|
|
-- AccountToFavorite
|
|
ALTER TABLE accFavorites
|
|
CHANGE accfavorite_accountId accountId MEDIUMINT UNSIGNED NOT NULL,
|
|
CHANGE accfavorite_userId userId SMALLINT(5) UNSIGNED NOT NULL,
|
|
ADD INDEX idx_AccountToFavorite_01 (accountId ASC, userId ASC),
|
|
COLLATE utf8_unicode_ci,
|
|
RENAME TO AccountToFavorite $$
|
|
|
|
-- AccountHistory
|
|
ALTER TABLE accHistory
|
|
CHANGE acchistory_id id INT(11) NOT NULL AUTO_INCREMENT,
|
|
CHANGE acchistory_accountId accountId MEDIUMINT UNSIGNED NOT NULL,
|
|
CHANGE acchistory_userGroupId userGroupId SMALLINT(5) UNSIGNED NOT NULL,
|
|
CHANGE acchistory_userId userId SMALLINT(5) UNSIGNED NOT NULL,
|
|
CHANGE acchistory_userEditId userEditId SMALLINT(5) UNSIGNED NOT NULL,
|
|
CHANGE acchistory_customerId clientId MEDIUMINT UNSIGNED NOT NULL,
|
|
CHANGE acchistory_name name VARCHAR(255) NOT NULL,
|
|
CHANGE acchistory_categoryId categoryId MEDIUMINT UNSIGNED NOT NULL,
|
|
CHANGE acchistory_login login VARCHAR(50),
|
|
CHANGE acchistory_url url VARCHAR(255),
|
|
CHANGE acchistory_pass pass VARBINARY(1000) NOT NULL,
|
|
CHANGE acchistory_key `key` VARBINARY(1000) NOT NULL,
|
|
CHANGE acchistory_notes notes TEXT NOT NULL,
|
|
CHANGE acchistory_countView countView INT(10) UNSIGNED NOT NULL DEFAULT 0,
|
|
CHANGE acchistory_countDecrypt countDecrypt INT(10) UNSIGNED NOT NULL DEFAULT 0,
|
|
CHANGE acchistory_dateAdd dateAdd DATETIME NOT NULL,
|
|
CHANGE acchistory_dateEdit dateEdit DATETIME,
|
|
CHANGE acchistory_isModify isModify TINYINT(1) DEFAULT 0,
|
|
CHANGE acchistory_isDeleted isDeleted TINYINT(1) DEFAULT 0,
|
|
CHANGE acchistory_mPassHash mPassHash VARBINARY(255) NOT NULL,
|
|
CHANGE accHistory_otherUserEdit otherUserEdit TINYINT(1) DEFAULT 0,
|
|
CHANGE accHistory_otherGroupEdit otherUserGroupEdit TINYINT(1) DEFAULT 0,
|
|
CHANGE accHistory_passDate passDate INT(10) UNSIGNED,
|
|
CHANGE accHistory_passDateChange passDateChange INT(10) UNSIGNED,
|
|
CHANGE accHistory_parentId parentId MEDIUMINT UNSIGNED,
|
|
CHANGE accHistory_isPrivate isPrivate TINYINT(1) DEFAULT 0,
|
|
CHANGE accHistory_isPrivateGroup isPrivateGroup TINYINT(1) DEFAULT 0,
|
|
ADD INDEX idx_AccountHistory_01 (accountId ASC),
|
|
ADD INDEX idx_AccountHistory_02 (parentId ASC),
|
|
COLLATE utf8_unicode_ci,
|
|
RENAME TO AccountHistory $$
|
|
|
|
|
|
-- Fix missing tags hash
|
|
UPDATE tags
|
|
SET tag_hash = MD5(CONCAT(tag_id, tag_name))
|
|
WHERE tag_hash IS NULL OR tag_hash = '' $$
|
|
|
|
-- Tag
|
|
ALTER TABLE tags
|
|
CHANGE tag_id id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
CHANGE tag_name name VARCHAR(45) NOT NULL,
|
|
CHANGE tag_hash hash VARBINARY(40) NOT NULL,
|
|
ADD UNIQUE INDEX uk_Tag_01 (`hash` ASC),
|
|
ADD INDEX idx_Tag_01 (`name` ASC),
|
|
COLLATE utf8_unicode_ci,
|
|
RENAME TO Tag $$
|
|
|
|
-- AccountToTag
|
|
ALTER TABLE accTags
|
|
CHANGE acctag_accountId accountId MEDIUMINT UNSIGNED NOT NULL,
|
|
CHANGE acctag_tagId tagId INT(10) UNSIGNED NOT NULL,
|
|
COLLATE utf8_unicode_ci,
|
|
RENAME TO AccountToTag $$
|
|
|
|
-- AccountToUserGroup
|
|
ALTER TABLE accGroups
|
|
ADD isEdit tinyint(1) unsigned DEFAULT 0 NULL,
|
|
CHANGE accgroup_accountId accountId MEDIUMINT UNSIGNED NOT NULL,
|
|
CHANGE accgroup_groupId userGroupId SMALLINT(5) UNSIGNED NOT NULL,
|
|
ADD INDEX idx_AccountToUserGroup_01 (`accountId` ASC),
|
|
COLLATE utf8_unicode_ci,
|
|
RENAME TO AccountToUserGroup $$
|
|
|
|
-- AccountToUser
|
|
ALTER TABLE accUsers
|
|
ADD isEdit tinyint(1) unsigned DEFAULT 0 NULL,
|
|
CHANGE accuser_accountId accountId MEDIUMINT UNSIGNED NOT NULL,
|
|
CHANGE accuser_userId userId SMALLINT(5) UNSIGNED NOT NULL,
|
|
ADD INDEX idx_AccountToUser_01 (accountId ASC),
|
|
COLLATE utf8_unicode_ci,
|
|
RENAME TO AccountToUser $$
|
|
|
|
-- UserToUserGroup
|
|
ALTER TABLE usrToGroups
|
|
CHANGE usertogroup_userId userId SMALLINT(5) UNSIGNED NOT NULL,
|
|
CHANGE usertogroup_groupId userGroupId SMALLINT(5) UNSIGNED NOT NULL,
|
|
ADD INDEX idx_UserToUserGroup_01 (userId ASC),
|
|
COLLATE utf8_unicode_ci,
|
|
RENAME TO UserToUserGroup $$
|
|
|
|
-- UserGroup
|
|
ALTER TABLE usrGroups
|
|
CHANGE usergroup_id id SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
CHANGE usergroup_name name VARCHAR(50) NOT NULL,
|
|
CHANGE usergroup_description description VARCHAR(255),
|
|
COLLATE utf8_unicode_ci,
|
|
RENAME TO UserGroup $$
|
|
|
|
-- AuthToken
|
|
ALTER TABLE authTokens
|
|
CHANGE authtoken_id id INT(11) NOT NULL AUTO_INCREMENT,
|
|
CHANGE authtoken_userId userId SMALLINT(5) UNSIGNED NOT NULL,
|
|
CHANGE authtoken_token token VARBINARY(100) NOT NULL,
|
|
CHANGE authtoken_actionId actionId SMALLINT(5) UNSIGNED NOT NULL,
|
|
CHANGE authtoken_createdBy createdBy SMALLINT(5) UNSIGNED NOT NULL,
|
|
CHANGE authtoken_startDate startDate INT(10) UNSIGNED NOT NULL,
|
|
CHANGE authtoken_vault vault VARBINARY(2000),
|
|
CHANGE authtoken_hash hash VARBINARY(1000),
|
|
ADD UNIQUE INDEX uk_AuthToken_01 (token ASC, actionId ASC),
|
|
ADD INDEX idx_AuthToken_01 (userId ASC, actionId ASC, token ASC),
|
|
COLLATE utf8_unicode_ci,
|
|
RENAME TO AuthToken $$
|
|
|
|
-- UserPassRecover
|
|
ALTER TABLE usrPassRecover
|
|
CHANGE userpassr_id id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
CHANGE userpassr_userId userId SMALLINT(5) UNSIGNED NOT NULL,
|
|
CHANGE userpassr_hash hash VARBINARY(128) NOT NULL,
|
|
CHANGE userpassr_date date INT(10) UNSIGNED NOT NULL,
|
|
CHANGE userpassr_used used TINYINT(1) DEFAULT 0,
|
|
ADD INDEX idx_UserPassRecover_01 (userId ASC, date ASC),
|
|
COLLATE utf8_unicode_ci,
|
|
RENAME TO UserPassRecover $$
|
|
|
|
-- Views
|
|
CREATE OR REPLACE VIEW account_search_v AS
|
|
SELECT
|
|
`Account`.`id` AS `id`,
|
|
`Account`.`clientId` AS `clientId`,
|
|
`Account`.`categoryId` AS `categoryId`,
|
|
`Account`.`name` AS `name`,
|
|
`Account`.`login` AS `login`,
|
|
`Account`.`url` AS `url`,
|
|
`Account`.`notes` AS `notes`,
|
|
`Account`.`userId` AS `userId`,
|
|
`Account`.`userGroupId` AS `userGroupId`,
|
|
`Account`.`otherUserEdit` AS `otherUserEdit`,
|
|
`Account`.`otherUserGroupEdit` AS `otherUserGroupEdit`,
|
|
`Account`.`isPrivate` AS `isPrivate`,
|
|
`Account`.`isPrivateGroup` AS `isPrivateGroup`,
|
|
`Account`.`passDate` AS `passDate`,
|
|
`Account`.`passDateChange` AS `passDateChange`,
|
|
`Account`.`parentId` AS `parentId`,
|
|
`Account`.`countView` AS `countView`,
|
|
`Account`.`dateEdit` AS `dateEdit`,
|
|
`User`.`name` AS `userName`,
|
|
`User`.`login` AS `userLogin`,
|
|
`UserGroup`.`name` AS `userGroupName`,
|
|
`Category`.`name` AS `categoryName`,
|
|
`Client`.`name` AS `clientName`,
|
|
(SELECT count(0)
|
|
FROM `AccountFile`
|
|
WHERE (`AccountFile`.`accountId` = `Account`.`id`)) AS `num_files`,
|
|
`PublicLink`.`hash` AS `publicLinkHash`,
|
|
`PublicLink`.`dateExpire` AS `publicLinkDateExpire`,
|
|
`PublicLink`.`totalCountViews` AS `publicLinkTotalCountViews`
|
|
FROM `Account`
|
|
INNER JOIN `Category` ON `Account`.`categoryId` = `Category`.`id`
|
|
INNER JOIN `Client` ON `Client`.`id` = `Account`.`clientId`
|
|
INNER JOIN `User` ON `Account`.`userId` = `User`.`id`
|
|
INNER JOIN `UserGroup` ON `Account`.`userGroupId` = `UserGroup`.`id`
|
|
LEFT JOIN `PublicLink` ON `Account`.`id` = `PublicLink`.`itemId` $$
|
|
|
|
CREATE OR REPLACE VIEW account_data_v AS
|
|
SELECT
|
|
`Account`.`id` AS `id`,
|
|
`Account`.`name` AS `name`,
|
|
`Account`.`categoryId` AS `categoryId`,
|
|
`Account`.`userId` AS `userId`,
|
|
`Account`.`clientId` AS `clientId`,
|
|
`Account`.`userGroupId` AS `userGroupId`,
|
|
`Account`.`userEditId` AS `userEditId`,
|
|
`Account`.`login` AS `login`,
|
|
`Account`.`url` AS `url`,
|
|
`Account`.`notes` AS `notes`,
|
|
`Account`.`countView` AS `countView`,
|
|
`Account`.`countDecrypt` AS `countDecrypt`,
|
|
`Account`.`dateAdd` AS `dateAdd`,
|
|
`Account`.`dateEdit` AS `dateEdit`,
|
|
conv(`Account`.`otherUserEdit`, 10, 2) AS `otherUserEdit`,
|
|
conv(`Account`.`otherUserGroupEdit`, 10, 2) AS `otherUserGroupEdit`,
|
|
conv(`Account`.`isPrivate`, 10, 2) AS `isPrivate`,
|
|
conv(`Account`.`isPrivateGroup`, 10, 2) AS `isPrivateGroup`,
|
|
`Account`.`passDate` AS `passDate`,
|
|
`Account`.`passDateChange` AS `passDateChange`,
|
|
`Account`.`parentId` AS `parentId`,
|
|
`Category`.`name` AS `categoryName`,
|
|
`Client`.`name` AS `clientName`,
|
|
`ug`.`name` AS `userGroupName`,
|
|
`u1`.`name` AS `userName`,
|
|
`u1`.`login` AS `userLogin`,
|
|
`u2`.`name` AS `userEditName`,
|
|
`u2`.`login` AS `userEditLogin`,
|
|
`PublicLink`.`hash` AS `publicLinkHash`
|
|
FROM ((((((`Account`
|
|
LEFT JOIN `Category`
|
|
ON ((`Account`.`categoryId` = `Category`.`id`))) INNER JOIN
|
|
`UserGroup` `ug` ON ((`Account`.`userGroupId` = `ug`.`id`))) INNER JOIN
|
|
`User` `u1` ON ((`Account`.`userId` = `u1`.`id`))) INNER JOIN
|
|
`User` `u2` ON ((`Account`.`userEditId` = `u2`.`id`))) LEFT JOIN
|
|
`Client`
|
|
ON ((`Account`.`clientId` = `Client`.`id`))) LEFT JOIN
|
|
`PublicLink` ON ((`Account`.`id` = `PublicLink`.`itemId`))) $$
|
|
|
|
-- Foreign Keys
|
|
CREATE INDEX fk_Account_userId
|
|
ON Account (userId) $$
|
|
|
|
CREATE INDEX fk_Account_userEditId
|
|
ON Account (userEditId) $$
|
|
|
|
ALTER TABLE Account
|
|
ADD CONSTRAINT fk_Account_userGroupId
|
|
FOREIGN KEY (userGroupId) REFERENCES UserGroup (id) $$
|
|
|
|
ALTER TABLE Account
|
|
ADD CONSTRAINT fk_Account_userId
|
|
FOREIGN KEY (userId) REFERENCES User (id) $$
|
|
|
|
ALTER TABLE Account
|
|
ADD CONSTRAINT fk_Account_userEditId
|
|
FOREIGN KEY (userEditId) REFERENCES User (id) $$
|
|
|
|
ALTER TABLE Account
|
|
ADD CONSTRAINT fk_Account_clientId
|
|
FOREIGN KEY (clientId) REFERENCES Client (id) $$
|
|
|
|
ALTER TABLE Account
|
|
ADD CONSTRAINT fk_Account_categoryId
|
|
FOREIGN KEY (categoryId) REFERENCES Category (id) $$
|
|
|
|
ALTER TABLE AccountFile
|
|
ADD CONSTRAINT fk_AccountFile_accountId
|
|
FOREIGN KEY (accountId) REFERENCES Account (id)
|
|
ON UPDATE CASCADE
|
|
ON DELETE CASCADE $$
|
|
|
|
CREATE INDEX fk_AccountHistory_userGroupId
|
|
ON AccountHistory (userGroupId) $$
|
|
|
|
CREATE INDEX fk_AccountHistory_userId
|
|
ON AccountHistory (userId) $$
|
|
|
|
CREATE INDEX fk_AccountHistory_userEditId
|
|
ON AccountHistory (userEditId) $$
|
|
|
|
CREATE INDEX fk_AccountHistory_clientId
|
|
ON AccountHistory (clientId) $$
|
|
|
|
CREATE INDEX fk_AccountHistory_categoryId
|
|
ON AccountHistory (categoryId) $$
|
|
|
|
ALTER TABLE AccountHistory
|
|
ADD CONSTRAINT fk_AccountHistory_userGroupId
|
|
FOREIGN KEY (userGroupId) REFERENCES UserGroup (id) $$
|
|
|
|
ALTER TABLE AccountHistory
|
|
ADD CONSTRAINT fk_AccountHistory_userId
|
|
FOREIGN KEY (userId) REFERENCES User (id) $$
|
|
|
|
ALTER TABLE AccountHistory
|
|
ADD CONSTRAINT fk_AccountHistory_userEditId
|
|
FOREIGN KEY (userEditId) REFERENCES User (id) $$
|
|
|
|
ALTER TABLE AccountHistory
|
|
ADD CONSTRAINT fk_AccountHistory_clientId
|
|
FOREIGN KEY (clientId) REFERENCES Client (id) $$
|
|
|
|
ALTER TABLE AccountHistory
|
|
ADD CONSTRAINT fk_AccountHistory_categoryId
|
|
FOREIGN KEY (categoryId) REFERENCES Category (id) $$
|
|
|
|
CREATE INDEX fk_AccountToFavorite_userId
|
|
ON AccountToFavorite (userId) $$
|
|
|
|
ALTER TABLE AccountToFavorite
|
|
ADD CONSTRAINT fk_AccountToFavorite_accountId
|
|
FOREIGN KEY (accountId) REFERENCES Account (id)
|
|
ON UPDATE CASCADE
|
|
ON DELETE CASCADE $$
|
|
|
|
ALTER TABLE AccountToFavorite
|
|
ADD CONSTRAINT fk_AccountToFavorite_userId
|
|
FOREIGN KEY (userId) REFERENCES User (id)
|
|
ON UPDATE CASCADE
|
|
ON DELETE CASCADE $$
|
|
|
|
ALTER TABLE AccountToFavorite
|
|
ADD PRIMARY KEY (accountId, userId) $$
|
|
|
|
CREATE INDEX fk_AccountToUserGroup_userGroupId
|
|
ON AccountToUserGroup (userGroupId) $$
|
|
|
|
ALTER TABLE AccountToUserGroup
|
|
ADD CONSTRAINT fk_AccountToUserGroup_accountId
|
|
FOREIGN KEY (accountId) REFERENCES Account (id)
|
|
ON UPDATE CASCADE
|
|
ON DELETE CASCADE $$
|
|
|
|
ALTER TABLE AccountToUserGroup
|
|
ADD CONSTRAINT fk_AccountToUserGroup_userGroupId
|
|
FOREIGN KEY (userGroupId) REFERENCES UserGroup (id)
|
|
ON UPDATE CASCADE
|
|
ON DELETE CASCADE $$
|
|
|
|
CALL drop_primary('AccountToUserGroup') $$
|
|
|
|
ALTER TABLE AccountToUserGroup
|
|
ADD PRIMARY KEY (accountId, userGroupId) $$
|
|
|
|
CREATE INDEX fk_AccountToTag_accountId
|
|
ON AccountToTag (accountId) $$
|
|
|
|
CREATE INDEX fk_AccountToTag_tagId
|
|
ON AccountToTag (tagId) $$
|
|
|
|
-- Fix duplicated tags
|
|
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_tags AS (SELECT
|
|
AT.accountId,
|
|
AT.tagId
|
|
FROM AccountToTag AT
|
|
GROUP BY AT.accountId, AT.tagId
|
|
HAVING COUNT(*) > 1) $$
|
|
|
|
DELETE a FROM AccountToTag AS a
|
|
INNER JOIN tmp_tags AS tmp ON tmp.accountId = a.accountId AND tmp.tagId = a.tagId $$
|
|
|
|
INSERT INTO AccountToTag SELECT
|
|
accountId,
|
|
tagId
|
|
FROM tmp_tags $$
|
|
|
|
DROP TEMPORARY TABLE tmp_tags $$
|
|
|
|
ALTER TABLE AccountToTag
|
|
ADD CONSTRAINT fk_AccountToTag_accountId
|
|
FOREIGN KEY (accountId) REFERENCES Account (id)
|
|
ON UPDATE CASCADE
|
|
ON DELETE CASCADE $$
|
|
|
|
ALTER TABLE AccountToTag
|
|
ADD CONSTRAINT fk_AccountToTag_tagId
|
|
FOREIGN KEY (tagId) REFERENCES Tag (id)
|
|
ON UPDATE CASCADE
|
|
ON DELETE CASCADE $$
|
|
|
|
ALTER TABLE AccountToTag
|
|
ADD PRIMARY KEY (accountId, tagId) $$
|
|
|
|
CREATE INDEX fk_AccountToUser_userId
|
|
ON AccountToUser (userId) $$
|
|
|
|
ALTER TABLE AccountToUser
|
|
ADD CONSTRAINT fk_AccountToUser_accountId
|
|
FOREIGN KEY (accountId) REFERENCES Account (id)
|
|
ON UPDATE CASCADE
|
|
ON DELETE CASCADE $$
|
|
|
|
ALTER TABLE AccountToUser
|
|
ADD CONSTRAINT fk_AccountToUser_userId
|
|
FOREIGN KEY (userId) REFERENCES User (id)
|
|
ON UPDATE CASCADE
|
|
ON DELETE CASCADE $$
|
|
|
|
ALTER TABLE AccountToUser
|
|
ADD PRIMARY KEY (accountId, userId) $$
|
|
|
|
CREATE INDEX fk_AuthToken_actionId
|
|
ON AuthToken (actionId) $$
|
|
|
|
-- Fix missing user's id
|
|
DELETE FROM AuthToken
|
|
WHERE userId NOT IN (SELECT id
|
|
FROM User) $$
|
|
|
|
ALTER TABLE AuthToken
|
|
ADD CONSTRAINT fk_AuthToken_userId
|
|
FOREIGN KEY (userId) REFERENCES User (id)
|
|
ON UPDATE CASCADE
|
|
ON DELETE CASCADE $$
|
|
|
|
ALTER TABLE CustomFieldData
|
|
ADD CONSTRAINT fk_CustomFieldData_definitionId
|
|
FOREIGN KEY (definitionId) REFERENCES CustomFieldDefinition (id) $$
|
|
|
|
CREATE INDEX fk_CustomFieldDefinition_typeId
|
|
ON CustomFieldDefinition (typeId) $$
|
|
|
|
ALTER TABLE CustomFieldDefinition
|
|
ADD CONSTRAINT fk_CustomFieldDefinition_typeId
|
|
FOREIGN KEY (typeId) REFERENCES CustomFieldType (id)
|
|
ON UPDATE CASCADE $$
|
|
|
|
ALTER TABLE Notification
|
|
ADD CONSTRAINT fk_Notification_userId
|
|
FOREIGN KEY (userId) REFERENCES User (id)
|
|
ON UPDATE CASCADE
|
|
ON DELETE CASCADE $$
|
|
|
|
CREATE INDEX fk_PublicLink_userId
|
|
ON PublicLink (userId) $$
|
|
|
|
ALTER TABLE PublicLink
|
|
ADD CONSTRAINT fk_PublicLink_userId
|
|
FOREIGN KEY (userId) REFERENCES User (id) $$
|
|
|
|
CREATE INDEX fk_User_userGroupId
|
|
ON User (userGroupId) $$
|
|
|
|
CREATE INDEX fk_User_userProfileId
|
|
ON User (userProfileId) $$
|
|
|
|
ALTER TABLE User
|
|
ADD CONSTRAINT fk_User_userGroupId
|
|
FOREIGN KEY (userGroupId) REFERENCES UserGroup (id) $$
|
|
|
|
ALTER TABLE User
|
|
ADD CONSTRAINT fk_User_userProfileId
|
|
FOREIGN KEY (userProfileId) REFERENCES UserProfile (id) $$
|
|
|
|
ALTER TABLE UserPassRecover
|
|
ADD CONSTRAINT fk_UserPassRecover_userId
|
|
FOREIGN KEY (userId) REFERENCES User (id)
|
|
ON UPDATE CASCADE
|
|
ON DELETE CASCADE $$
|
|
|
|
CREATE INDEX fk_UserToGroup_userGroupId
|
|
ON UserToUserGroup (userGroupId) $$
|
|
|
|
ALTER TABLE UserToUserGroup
|
|
ADD CONSTRAINT fk_UserToGroup_userId
|
|
FOREIGN KEY (userId) REFERENCES User (id)
|
|
ON UPDATE CASCADE
|
|
ON DELETE CASCADE $$
|
|
|
|
ALTER TABLE UserToUserGroup
|
|
ADD CONSTRAINT fk_UserToGroup_userGroupId
|
|
FOREIGN KEY (userGroupId) REFERENCES UserGroup (id)
|
|
ON UPDATE CASCADE
|
|
ON DELETE CASCADE $$
|
|
|
|
-- Update AccountToUser permissions
|
|
UPDATE AccountToUser AU
|
|
INNER JOIN
|
|
Account A ON AU.accountId = A.id
|
|
SET
|
|
AU.isEdit = 1
|
|
WHERE
|
|
A.otherUserEdit = 1 $$
|
|
|
|
-- Update AccountToUserGroup permissions
|
|
UPDATE AccountToUserGroup AUG
|
|
INNER JOIN
|
|
Account A ON AUG.accountId = A.id
|
|
SET
|
|
AUG.isEdit = 1
|
|
WHERE
|
|
A.otherUserGroupEdit = 1 $$
|
|
|
|
SET FOREIGN_KEY_CHECKS = 1 $$
|
|
DELIMITER ; |