From fc8606acabfe3abfcdea1d201e6d48185e04fb4c Mon Sep 17 00:00:00 2001 From: Rui Tome Date: Tue, 19 Dec 2023 15:46:23 +0000 Subject: [PATCH] [AC-1682] mySql scripts formatting --- ...023-12-06_00_AccessAllCollectionGroups.sql | 18 +++-- ...2023-12-06_01_AccessAllCollectionUsers.sql | 75 +++++++------------ 2 files changed, 35 insertions(+), 58 deletions(-) diff --git a/util/MySqlMigrations/HelperScripts/2023-12-06_00_AccessAllCollectionGroups.sql b/util/MySqlMigrations/HelperScripts/2023-12-06_00_AccessAllCollectionGroups.sql index d9acc096fc..07783974bc 100644 --- a/util/MySqlMigrations/HelperScripts/2023-12-06_00_AccessAllCollectionGroups.sql +++ b/util/MySqlMigrations/HelperScripts/2023-12-06_00_AccessAllCollectionGroups.sql @@ -6,20 +6,22 @@ WHERE `AccessAll` = 1; -- Step 2: Update existing rows in `CollectionGroup` UPDATE `CollectionGroups` CG - INNER JOIN `Collection` C ON CG.`CollectionId` = C.`Id` - INNER JOIN TempGroup TG ON CG.`GroupId` = TG.`GroupId` - SET - CG.`ReadOnly` = 0, - CG.`HidePasswords` = 0, - CG.`Manage` = 0 +INNER JOIN `Collection` C ON CG.`CollectionId` = C.`Id` +INNER JOIN TempGroup TG ON CG.`GroupId` = TG.`GroupId` +SET + CG.`ReadOnly` = 0, + CG.`HidePasswords` = 0, + CG.`Manage` = 0 WHERE C.`OrganizationId` = TG.`OrganizationId`; -- Step 3: Insert new rows into `CollectionGroup` INSERT INTO `CollectionGroups` (`CollectionId`, `GroupId`, `ReadOnly`, `HidePasswords`, `Manage`) SELECT C.`Id`, TG.`GroupId`, 0, 0, 0 FROM `Collection` C - INNER JOIN TempGroup TG ON C.`OrganizationId` = TG.`OrganizationId` - LEFT JOIN `CollectionGroups` CG ON CG.`CollectionId` = C.`Id` AND CG.`GroupId` = TG.`GroupId` +INNER JOIN TempGroup 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; -- Step 4: Drop the temporary table diff --git a/util/MySqlMigrations/HelperScripts/2023-12-06_01_AccessAllCollectionUsers.sql b/util/MySqlMigrations/HelperScripts/2023-12-06_01_AccessAllCollectionUsers.sql index dbdbcf7f2e..bce3d84024 100644 --- a/util/MySqlMigrations/HelperScripts/2023-12-06_01_AccessAllCollectionUsers.sql +++ b/util/MySqlMigrations/HelperScripts/2023-12-06_01_AccessAllCollectionUsers.sql @@ -1,51 +1,26 @@ --- Step 1: Create a temporary table with an additional column for batch processing, update 50 k at a time -CREATE TEMPORARY TABLE TempOrgUser AS -SELECT OrganizationUser.Id AS OrganizationUserId, OrganizationUser.OrganizationId, - CAST(ROW_NUMBER() OVER(ORDER BY OrganizationUser.Id) / 50000 AS SIGNED) AS Batch -FROM OrganizationUser -WHERE AccessAll = 1; +-- Update existing rows in CollectionUsers +UPDATE CollectionUsers AS target +INNER JOIN ( + SELECT C.Id AS CollectionId, T.OrganizationUserId + FROM Collection C + INNER JOIN OrganizationUser T ON C.OrganizationId = T.OrganizationId + WHERE T.AccessAll = 1 +) AS source + ON target.CollectionId = source.CollectionId AND target.OrganizationUserId = source.OrganizationUserId +SET + target.ReadOnly = 0, + target.HidePasswords = 0, + target.Manage = 0; --- Step 2: Get the maximum batch number -SET @MaxBatch := (SELECT MAX(Batch) FROM TempOrgUser); -SET @CurrentBatch := 0; - --- Create the stored procedure -DROP PROCEDURE IF EXISTS ProcessBatches; -CREATE PROCEDURE ProcessBatches(INOUT currentBatch INT, IN maxBatch INT) -BEGIN - WHILE currentBatch <= maxBatch DO - -- Update existing rows in CollectionUsers - UPDATE CollectionUsers AS target - INNER JOIN ( - SELECT C.Id AS CollectionId, T.OrganizationUserId - FROM Collection C - INNER JOIN TempOrgUser T ON C.OrganizationId = T.OrganizationId AND T.Batch = currentBatch - ) AS source - ON target.CollectionId = source.CollectionId AND target.OrganizationUserId = source.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 source.CollectionId, source.OrganizationUserId, 0, 0, 0 - FROM ( - SELECT C.Id AS CollectionId, T.OrganizationUserId - FROM Collection C - INNER JOIN TempOrgUser T ON C.OrganizationId = T.OrganizationId AND T.Batch = currentBatch - ) AS source - LEFT JOIN CollectionUsers AS target - ON target.CollectionId = source.CollectionId AND target.OrganizationUserId = source.OrganizationUserId - WHERE target.CollectionId IS NULL; - - -- Move to the next batch - SET currentBatch := currentBatch + 1; - END WHILE; -END; - --- Step 3: Process each batch by calling the stored procedure -CALL ProcessBatches(@CurrentBatch, @MaxBatch); - --- Step 4: Drop the temporary table -DROP TEMPORARY TABLE IF EXISTS TempOrgUser; +-- Insert new rows into CollectionUsers +INSERT INTO CollectionUsers (CollectionId, OrganizationUserId, ReadOnly, HidePasswords, Manage) +SELECT source.CollectionId, source.OrganizationUserId, 0, 0, 0 +FROM ( + SELECT C.Id AS CollectionId, T.OrganizationUserId + FROM Collection C + INNER JOIN OrganizationUser T ON C.OrganizationId = T.OrganizationId + WHERE T.AccessAll = 1 + ) AS source +LEFT JOIN CollectionUsers AS target + ON target.CollectionId = source.CollectionId AND target.OrganizationUserId = source.OrganizationUserId +WHERE target.CollectionId IS NULL;