1
0
mirror of https://github.com/bitwarden/server.git synced 2025-05-21 11:34:31 -05:00

use completion table on login uris update

This commit is contained in:
Kyle Spearrin 2018-03-07 00:27:06 -05:00
parent 8d681738c8
commit c37016e19e

View File

@ -19,17 +19,41 @@
} }
*/ */
SET NOCOUNT ON IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'CompletedIds')
BEGIN
CREATE TABLE [CompletedIds] ([Id] UNIQUEIDENTIFIER PRIMARY KEY)
END
GO
DECLARE @UriPath VARCHAR(50) = '$.Uri' DECLARE @UriPath VARCHAR(50) = '$.Uri'
DECLARE @UrisPath VARCHAR(50) = '$.Uris' DECLARE @UrisPath VARCHAR(50) = '$.Uris'
DECLARE @BatchSize INT = 1000 DECLARE @BatchSize INT = 1000
DECLARE @LastId UNIQUEIDENTIFIER = NULL
-- Step 1: Add new Uris property with data from Uri -- Step 1: Add new Uris property with data from Uri
WHILE @BatchSize > 0 WHILE @BatchSize > 0
BEGIN BEGIN
UPDATE TOP (@BatchSize) SELECT TOP 1
[Cipher] @LastId = [Id]
FROM
[CompletedIds]
ORDER BY
[Id] DESC
;WITH [CTE] AS (
SELECT TOP (@BatchSize)
*
FROM
[Cipher]
WHERE
(@LastId IS NULL OR [Id] > @LastId)
AND JSON_VALUE([Data], @UriPath) IS NOT NULL
AND JSON_QUERY([Data], @UrisPath) IS NULL
ORDER BY
[Id] ASC
)
UPDATE
[CTE]
SET SET
[Data] = JSON_MODIFY( [Data] = JSON_MODIFY(
[Data], [Data],
@ -39,27 +63,51 @@ BEGIN
'$' '$'
) )
) )
WHERE OUTPUT INSERTED.[Id] INTO [CompletedIds]
JSON_VALUE([Data], @UriPath) IS NOT NULL
AND JSON_QUERY([Data], @UrisPath) IS NULL
SET @BatchSize = @@ROWCOUNT SET @BatchSize = @@ROWCOUNT
RAISERROR('Updated %d ciphers with Uris', 0, 1, @BatchSize) WITH NOWAIT RAISERROR('Updated %d ciphers with Uris', 0, 1, @BatchSize) WITH NOWAIT
END END
-- Step 2: Remove old Uri Property -- Reset
TRUNCATE TABLE [CompletedIds]
SET @BatchSize = 1000 SET @BatchSize = 1000
-- Step 2: Remove old Uri Property
WHILE @BatchSize > 0 WHILE @BatchSize > 0
BEGIN BEGIN
UPDATE TOP (@BatchSize) SELECT TOP 1
[Cipher] @LastId = [Id]
FROM
[CompletedIds]
ORDER BY
[Id] DESC
;WITH [CTE] AS (
SELECT TOP (@BatchSize)
*
FROM
[Cipher]
WHERE
(@LastId IS NULL OR [Id] > @LastId)
AND JSON_VALUE([Data], @UriPath) IS NOT NULL
AND JSON_QUERY([Data], @UrisPath) IS NOT NULL
ORDER BY
[Id] ASC
)
UPDATE
[CTE]
SET SET
[Data] = JSON_MODIFY([Data], @UriPath, NULL) [Data] = JSON_MODIFY([Data], @UriPath, NULL)
WHERE OUTPUT INSERTED.[Id] INTO [CompletedIds]
JSON_VALUE([Data], @UriPath) IS NOT NULL
AND JSON_QUERY([Data], @UrisPath) IS NOT NULL
SET @BatchSize = @@ROWCOUNT SET @BatchSize = @@ROWCOUNT
RAISERROR('Updated %d ciphers with Uri removal', 0, 1, @BatchSize) WITH NOWAIT RAISERROR('Updated %d ciphers with Uri removal', 0, 1, @BatchSize) WITH NOWAIT
END END
GO
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'CompletedIds')
BEGIN
DROP TABLE [CompletedIds]
END
GO