diff --git a/util/MySqlMigrations/HelperScripts/2024-03-22_00_EnableOrgsCollectionEnhancements.sql b/util/MySqlMigrations/HelperScripts/2024-03-22_00_EnableOrgsCollectionEnhancements.sql index c70132acc8..5e18e23c1c 100644 --- a/util/MySqlMigrations/HelperScripts/2024-03-22_00_EnableOrgsCollectionEnhancements.sql +++ b/util/MySqlMigrations/HelperScripts/2024-03-22_00_EnableOrgsCollectionEnhancements.sql @@ -33,113 +33,107 @@ `OU`.`Permissions` IS NOT NULL AND JSON_VALID(`OU`.`Permissions`) AND JSON_VALUE(`OU`.`Permissions`, '$.editAssignedCollections') = 'true')); --- Start transaction -START TRANSACTION; - -- Step 1 - -- Update existing rows in `CollectionGroups` - UPDATE `CollectionGroups` `CG` - INNER JOIN `Collection` `C` ON `CG`.`CollectionId` = `C`.`Id` - INNER JOIN `TempGroupsAccessAll` `TG` ON `CG`.`GroupId` = `TG`.`GroupId` - SET `CG`.`ReadOnly` = 0, - `CG`.`HidePasswords` = 0, - `CG`.`Manage` = 0 - WHERE `C`.`OrganizationId` = `TG`.`OrganizationId`; +-- Step 1 + -- Update existing rows in `CollectionGroups` + UPDATE `CollectionGroups` `CG` + INNER JOIN `Collection` `C` ON `CG`.`CollectionId` = `C`.`Id` + INNER JOIN `TempGroupsAccessAll` `TG` ON `CG`.`GroupId` = `TG`.`GroupId` + SET `CG`.`ReadOnly` = 0, + `CG`.`HidePasswords` = 0, + `CG`.`Manage` = 0 + WHERE `C`.`OrganizationId` = `TG`.`OrganizationId`; - -- Insert new rows into `CollectionGroups` - INSERT INTO `CollectionGroups` (`CollectionId`, `GroupId`, `ReadOnly`, `HidePasswords`, `Manage`) - SELECT `C`.`Id`, `TG`.`GroupId`, 0, 0, 0 - FROM `Collection` `C` - INNER JOIN `TempGroupsAccessAll` `TG` ON `C`.`OrganizationId` = `TG`.`OrganizationId` - LEFT JOIN `CollectionGroups` `CG` ON `CG`.`CollectionId` = `C`.`Id` AND `CG`.`GroupId` = `TG`.`GroupId` - WHERE `CG`.`CollectionId` IS NULL; + -- Insert new rows into `CollectionGroups` + INSERT INTO `CollectionGroups` (`CollectionId`, `GroupId`, `ReadOnly`, `HidePasswords`, `Manage`) + SELECT `C`.`Id`, `TG`.`GroupId`, 0, 0, 0 + FROM `Collection` `C` + INNER JOIN `TempGroupsAccessAll` `TG` ON `C`.`OrganizationId` = `TG`.`OrganizationId` + LEFT JOIN `CollectionGroups` `CG` ON `CG`.`CollectionId` = `C`.`Id` AND `CG`.`GroupId` = `TG`.`GroupId` + WHERE `CG`.`CollectionId` IS NULL; - -- Update `Group` to clear `AccessAll` flag and update `RevisionDate` - UPDATE `Group` `G` - SET `AccessAll` = 0, `RevisionDate` = UTC_TIMESTAMP() - WHERE `G`.`Id` IN (SELECT `GroupId` FROM `TempGroupsAccessAll`); + -- Update `Group` to clear `AccessAll` flag and update `RevisionDate` + UPDATE `Group` `G` + SET `AccessAll` = 0, `RevisionDate` = UTC_TIMESTAMP() + WHERE `G`.`Id` IN (SELECT `GroupId` FROM `TempGroupsAccessAll`); - -- Step 2 - -- Update existing rows in `CollectionUsers` - UPDATE `CollectionUsers` `target` - INNER JOIN `Collection` `C` ON `target`.`CollectionId` = `C`.`Id` - INNER JOIN `TempUsersAccessAll` `TU` - ON `C`.`OrganizationId` = `TU`.`OrganizationId` AND `target`.`OrganizationUserId` = `TU`.`OrganizationUserId` - SET `target`.`ReadOnly` = 0, - `target`.`HidePasswords` = 0, - `target`.`Manage` = 0; +-- Step 2 + -- Update existing rows in `CollectionUsers` + UPDATE `CollectionUsers` `target` + INNER JOIN `Collection` `C` ON `target`.`CollectionId` = `C`.`Id` + INNER JOIN `TempUsersAccessAll` `TU` + ON `C`.`OrganizationId` = `TU`.`OrganizationId` AND `target`.`OrganizationUserId` = `TU`.`OrganizationUserId` + SET `target`.`ReadOnly` = 0, + `target`.`HidePasswords` = 0, + `target`.`Manage` = 0; - -- Insert new rows into `CollectionUsers` - INSERT INTO `CollectionUsers` (`CollectionId`, `OrganizationUserId`, `ReadOnly`, `HidePasswords`, `Manage`) - SELECT `C`.`Id`, `TU`.`OrganizationUserId`, 0, 0, 0 - FROM `Collection` `C` - INNER JOIN `TempUsersAccessAll` `TU` ON `C`.`OrganizationId` = `TU`.`OrganizationId` - LEFT JOIN `CollectionUsers` `target` - ON `target`.`CollectionId` = `C`.`Id` AND `target`.`OrganizationUserId` = `TU`.`OrganizationUserId` - WHERE `target`.`CollectionId` IS NULL; + -- Insert new rows into `CollectionUsers` + INSERT INTO `CollectionUsers` (`CollectionId`, `OrganizationUserId`, `ReadOnly`, `HidePasswords`, `Manage`) + SELECT `C`.`Id`, `TU`.`OrganizationUserId`, 0, 0, 0 + FROM `Collection` `C` + INNER JOIN `TempUsersAccessAll` `TU` ON `C`.`OrganizationId` = `TU`.`OrganizationId` + LEFT JOIN `CollectionUsers` `target` + ON `target`.`CollectionId` = `C`.`Id` AND `target`.`OrganizationUserId` = `TU`.`OrganizationUserId` + WHERE `target`.`CollectionId` IS NULL; - -- Update `OrganizationUser` to clear `AccessAll` flag - UPDATE `OrganizationUser` `OU` - SET `AccessAll` = 0, `RevisionDate` = UTC_TIMESTAMP() - WHERE `OU`.`Id` IN (SELECT `OrganizationUserId` FROM `TempUsersAccessAll`); + -- Update `OrganizationUser` to clear `AccessAll` flag + UPDATE `OrganizationUser` `OU` + SET `AccessAll` = 0, `RevisionDate` = UTC_TIMESTAMP() + WHERE `OU`.`Id` IN (SELECT `OrganizationUserId` FROM `TempUsersAccessAll`); - -- Step 3 - -- Update `CollectionUsers` with `Manage` = 1 using the temporary table - UPDATE `CollectionUsers` `CU` - INNER JOIN `TempUserManagers` `TUM` ON `CU`.`OrganizationUserId` = `TUM`.`OrganizationUserId` - SET `CU`.`ReadOnly` = 0, - `CU`.`HidePasswords` = 0, - `CU`.`Manage` = 1; +-- Step 3 + -- Update `CollectionUsers` with `Manage` = 1 using the temporary table + UPDATE `CollectionUsers` `CU` + INNER JOIN `TempUserManagers` `TUM` ON `CU`.`OrganizationUserId` = `TUM`.`OrganizationUserId` + SET `CU`.`ReadOnly` = 0, + `CU`.`HidePasswords` = 0, + `CU`.`Manage` = 1; - -- Insert rows to `CollectionUsers` with `Manage` = 1 using the temporary table - -- This is for orgUsers who are Managers / EditAssignedCollections but have access via a group - -- We cannot give the whole group Manage permissions so we have to give them a direct assignment - INSERT INTO `CollectionUsers` (`CollectionId`, `OrganizationUserId`, `ReadOnly`, `HidePasswords`, `Manage`) - SELECT DISTINCT `CG`.`CollectionId`, `TUM`.`OrganizationUserId`, 0, 0, 1 - FROM `CollectionGroups` `CG` - INNER JOIN `GroupUser` `GU` ON `CG`.`GroupId` = `GU`.`GroupId` - INNER JOIN `TempUserManagers` `TUM` ON `GU`.`OrganizationUserId` = `TUM`.`OrganizationUserId` - WHERE NOT EXISTS ( - SELECT 1 FROM `CollectionUsers` `CU` - WHERE `CU`.`CollectionId` = `CG`.`CollectionId` AND `CU`.`OrganizationUserId` = `TUM`.`OrganizationUserId` - ); + -- Insert rows to `CollectionUsers` with `Manage` = 1 using the temporary table + -- This is for orgUsers who are Managers / EditAssignedCollections but have access via a group + -- We cannot give the whole group Manage permissions so we have to give them a direct assignment + INSERT INTO `CollectionUsers` (`CollectionId`, `OrganizationUserId`, `ReadOnly`, `HidePasswords`, `Manage`) + SELECT DISTINCT `CG`.`CollectionId`, `TUM`.`OrganizationUserId`, 0, 0, 1 + FROM `CollectionGroups` `CG` + INNER JOIN `GroupUser` `GU` ON `CG`.`GroupId` = `GU`.`GroupId` + INNER JOIN `TempUserManagers` `TUM` ON `GU`.`OrganizationUserId` = `TUM`.`OrganizationUserId` + WHERE NOT EXISTS ( + SELECT 1 FROM `CollectionUsers` `CU` + WHERE `CU`.`CollectionId` = `CG`.`CollectionId` AND `CU`.`OrganizationUserId` = `TUM`.`OrganizationUserId` + ); - -- Update `OrganizationUser` to migrate all OrganizationUsers with Manager role to User role - UPDATE `OrganizationUser` `OU` - SET `OU`.`Type` = 2, `OU`.`RevisionDate` = UTC_TIMESTAMP() -- User - WHERE `OU`.`Id` IN (SELECT `OrganizationUserId` FROM `TempUserManagers` WHERE `IsManager` = 1); + -- Update `OrganizationUser` to migrate all OrganizationUsers with Manager role to User role + UPDATE `OrganizationUser` `OU` + SET `OU`.`Type` = 2, `OU`.`RevisionDate` = UTC_TIMESTAMP() -- User + WHERE `OU`.`Id` IN (SELECT `OrganizationUserId` FROM `TempUserManagers` WHERE `IsManager` = 1); - -- Step 4 - -- Update `User` `AccountRevisionDate` for each unique `OrganizationUserId` - UPDATE `User` `U` - INNER JOIN `OrganizationUser` `OU` ON `U`.`Id` = `OU`.`UserId` - INNER JOIN ( - -- Step 1 - SELECT `GU`.`OrganizationUserId` - FROM `GroupUser` `GU` - INNER JOIN `TempGroupsAccessAll` `TG` ON `GU`.`GroupId` = `TG`.`GroupId` +-- Step 4 + -- Update `User` `AccountRevisionDate` for each unique `OrganizationUserId` + UPDATE `User` `U` + INNER JOIN `OrganizationUser` `OU` ON `U`.`Id` = `OU`.`UserId` + INNER JOIN ( + -- Step 1 + SELECT `GU`.`OrganizationUserId` + FROM `GroupUser` `GU` + INNER JOIN `TempGroupsAccessAll` `TG` ON `GU`.`GroupId` = `TG`.`GroupId` - UNION + UNION - -- Step 2 - SELECT `OrganizationUserId` - FROM `TempUsersAccessAll` + -- Step 2 + SELECT `OrganizationUserId` + FROM `TempUsersAccessAll` - UNION + UNION - -- Step 3 - SELECT `OrganizationUserId` - FROM `TempUserManagers` - ) AS `CombinedOrgUsers` ON `OU`.`Id` = `CombinedOrgUsers`.`OrganizationUserId` - SET `U`.`AccountRevisionDate` = UTC_TIMESTAMP(); + -- Step 3 + SELECT `OrganizationUserId` + FROM `TempUserManagers` + ) AS `CombinedOrgUsers` ON `OU`.`Id` = `CombinedOrgUsers`.`OrganizationUserId` + SET `U`.`AccountRevisionDate` = UTC_TIMESTAMP(); - -- Step 5 - -- Set `FlexibleCollections` = 1 for all organizations that have not yet been migrated. - UPDATE `Organization` - SET `FlexibleCollections` = 1 - WHERE `FlexibleCollections` = 0; - --- Commit transaction -COMMIT; +-- Step 5: Set `FlexibleCollections` = 1 for all organizations that have not yet been migrated. + UPDATE `Organization` + SET `FlexibleCollections` = 1 + WHERE `FlexibleCollections` = 0; -- Step 6: Drop the temporary tables DROP TEMPORARY TABLE IF EXISTS `TempGroupsAccessAll`; diff --git a/util/PostgresMigrations/HelperScripts/2024-03-22_00_EnableOrgsCollectionEnhancements.psql b/util/PostgresMigrations/HelperScripts/2024-03-22_00_EnableOrgsCollectionEnhancements.psql index ced9098ce0..c4fe5808b8 100644 --- a/util/PostgresMigrations/HelperScripts/2024-03-22_00_EnableOrgsCollectionEnhancements.psql +++ b/util/PostgresMigrations/HelperScripts/2024-03-22_00_EnableOrgsCollectionEnhancements.psql @@ -123,8 +123,7 @@ SELECT "OrganizationUserId" FROM "TempUserManagers" ); --- Step 5 - -- Set "FlexibleCollections" = true for all organizations that have not yet been migrated. +-- Step 5: Set "FlexibleCollections" = true for all organizations that have not yet been migrated. UPDATE "Organization" SET "FlexibleCollections" = true WHERE "FlexibleCollections" = false; diff --git a/util/SqliteMigrations/HelperScripts/2024-03-22_00_EnableOrgsCollectionEnhancements.sql b/util/SqliteMigrations/HelperScripts/2024-03-22_00_EnableOrgsCollectionEnhancements.sql index cd0774ef87..39228890b8 100644 --- a/util/SqliteMigrations/HelperScripts/2024-03-22_00_EnableOrgsCollectionEnhancements.sql +++ b/util/SqliteMigrations/HelperScripts/2024-03-22_00_EnableOrgsCollectionEnhancements.sql @@ -141,8 +141,7 @@ ) AS "CombinedOrgUsers" ON "OU"."Id" = "CombinedOrgUsers"."OrganizationUserId" ); --- Step 5 - -- Set "FlexibleCollections" = 1 for all organizations that have not yet been migrated. +-- Step 5: Set "FlexibleCollections" = 1 for all organizations that have not yet been migrated. UPDATE "Organization" SET "FlexibleCollections" = 1 WHERE "FlexibleCollections" = 0;