From da0131c552a355a03b4c380d31facd857b26aa1f Mon Sep 17 00:00:00 2001 From: jaasen-livefront Date: Mon, 17 Nov 2025 18:01:59 -0800 Subject: [PATCH] put joins in tvf --- src/Sql/dbo/Vault/Functions/CipherDetails.sql | 6 +- .../dbo/Vault/Functions/UserCipherDetails.sql | 4 +- .../Cipher/CipherDetails_ReadByIdUserId.sql | 72 ++++++----- .../Cipher/CipherDetails_ReadByUserId.sql | 6 +- ...tails_ReadWithoutOrganizationsByUserId.sql | 12 +- ...-14_00_AddArchiveCipherToCipherDetails.sql | 118 ++---------------- 6 files changed, 56 insertions(+), 162 deletions(-) diff --git a/src/Sql/dbo/Vault/Functions/CipherDetails.sql b/src/Sql/dbo/Vault/Functions/CipherDetails.sql index 9d041d36d1..9f522f346f 100644 --- a/src/Sql/dbo/Vault/Functions/CipherDetails.sql +++ b/src/Sql/dbo/Vault/Functions/CipherDetails.sql @@ -27,6 +27,10 @@ SELECT END [FolderId], C.[DeletedDate], C.[Reprompt], - C.[Key] + C.[Key], + CA.[ArchivedDate] FROM [dbo].[Cipher] C + LEFT JOIN [dbo].[CipherArchive] CA + ON CA.[CipherId] = C.[Id] + AND CA.[UserId] = @UserId; diff --git a/src/Sql/dbo/Vault/Functions/UserCipherDetails.sql b/src/Sql/dbo/Vault/Functions/UserCipherDetails.sql index a8619ff868..6ce3303376 100644 --- a/src/Sql/dbo/Vault/Functions/UserCipherDetails.sql +++ b/src/Sql/dbo/Vault/Functions/UserCipherDetails.sql @@ -23,6 +23,7 @@ SELECT C.Favorite, C.FolderId, C.DeletedDate, + C.ArchivedDate, C.Reprompt, C.[Key], CASE @@ -79,6 +80,7 @@ SELECT C.Favorite, C.FolderId, C.DeletedDate, + C.ArchivedDate, C.Reprompt, C.[Key], 1 [Edit], @@ -88,4 +90,4 @@ SELECT FROM [dbo].[CipherDetails](@UserId) AS C WHERE - C.[UserId] = @UserId; \ No newline at end of file + C.[UserId] = @UserId; diff --git a/src/Sql/dbo/Vault/Stored Procedures/Cipher/CipherDetails_ReadByIdUserId.sql b/src/Sql/dbo/Vault/Stored Procedures/Cipher/CipherDetails_ReadByIdUserId.sql index e1e028a69e..75103dd2d2 100644 --- a/src/Sql/dbo/Vault/Stored Procedures/Cipher/CipherDetails_ReadByIdUserId.sql +++ b/src/Sql/dbo/Vault/Stored Procedures/Cipher/CipherDetails_ReadByIdUserId.sql @@ -6,44 +6,42 @@ BEGIN SET NOCOUNT ON; SELECT - ucd.Id, - ucd.UserId, - ucd.OrganizationId, - ucd.Type, - ucd.Data, - ucd.Attachments, - ucd.CreationDate, - ucd.RevisionDate, - ucd.Favorite, - ucd.FolderId, - ucd.DeletedDate, - ucd.Reprompt, - ucd.[Key], - ucd.OrganizationUseTotp, - MAX(ca.ArchivedDate) AS ArchivedDate, - MAX(ucd.Edit) AS Edit, - MAX(ucd.ViewPassword) AS ViewPassword, - MAX(ucd.Manage) AS Manage + [Id], + [UserId], + [OrganizationId], + [Type], + [Data], + [Attachments], + [CreationDate], + [RevisionDate], + [Favorite], + [FolderId], + [DeletedDate], + [Reprompt], + [Key], + [OrganizationUseTotp], + [ArchivedDate], + MAX([Edit]) AS Edit, + MAX([ViewPassword]) AS ViewPassword, + MAX([Manage]) AS Manage FROM - [dbo].[UserCipherDetails](@UserId) AS ucd - LEFT JOIN [dbo].[CipherArchive] AS ca - ON ca.CipherId = ucd.Id - AND ca.UserId = @UserId + [dbo].[UserCipherDetails](@UserId) WHERE - ucd.Id = @Id + [Id] = @Id GROUP BY - ucd.Id, - ucd.UserId, - ucd.OrganizationId, - ucd.Type, - ucd.Data, - ucd.Attachments, - ucd.CreationDate, - ucd.RevisionDate, - ucd.Favorite, - ucd.FolderId, - ucd.DeletedDate, - ucd.Reprompt, - ucd.[Key], - ucd.OrganizationUseTotp; + [Id], + [UserId], + [OrganizationId], + [Type], + [Data], + [Attachments], + [CreationDate], + [RevisionDate], + [Favorite], + [FolderId], + [DeletedDate], + [Reprompt], + [Key], + [OrganizationUseTotp], + [ArchivedDate] END diff --git a/src/Sql/dbo/Vault/Stored Procedures/Cipher/CipherDetails_ReadByUserId.sql b/src/Sql/dbo/Vault/Stored Procedures/Cipher/CipherDetails_ReadByUserId.sql index d1b79e286a..6e8433c75d 100644 --- a/src/Sql/dbo/Vault/Stored Procedures/Cipher/CipherDetails_ReadByUserId.sql +++ b/src/Sql/dbo/Vault/Stored Procedures/Cipher/CipherDetails_ReadByUserId.sql @@ -5,11 +5,7 @@ BEGIN SET NOCOUNT ON SELECT - c.*, - ca.ArchivedDate + c.* FROM [dbo].[UserCipherDetails](@UserId) AS c - LEFT JOIN [dbo].[CipherArchive] AS ca - ON ca.CipherId = c.Id - AND ca.UserId = @UserId END \ No newline at end of file diff --git a/src/Sql/dbo/Vault/Stored Procedures/Cipher/CipherDetails_ReadWithoutOrganizationsByUserId.sql b/src/Sql/dbo/Vault/Stored Procedures/Cipher/CipherDetails_ReadWithoutOrganizationsByUserId.sql index 1b76242923..170fdc895d 100644 --- a/src/Sql/dbo/Vault/Stored Procedures/Cipher/CipherDetails_ReadWithoutOrganizationsByUserId.sql +++ b/src/Sql/dbo/Vault/Stored Procedures/Cipher/CipherDetails_ReadWithoutOrganizationsByUserId.sql @@ -5,17 +5,13 @@ BEGIN SET NOCOUNT ON SELECT - c.*, + *, 1 [Edit], 1 [ViewPassword], 1 [Manage], - 0 [OrganizationUseTotp], - ca.ArchivedDate + 0 [OrganizationUseTotp] FROM - [dbo].[CipherDetails](@UserId) AS c - LEFT JOIN [dbo].[CipherArchive] AS ca - ON ca.CipherId = c.Id - AND ca.UserId = @UserId + [dbo].[CipherDetails](@UserId) WHERE - c.[UserId] = @UserId + [UserId] = @UserId END \ No newline at end of file diff --git a/util/Migrator/DbScripts/2025-11-14_00_AddArchiveCipherToCipherDetails.sql b/util/Migrator/DbScripts/2025-11-14_00_AddArchiveCipherToCipherDetails.sql index bd300c9dd1..9e64b5b1a7 100644 --- a/util/Migrator/DbScripts/2025-11-14_00_AddArchiveCipherToCipherDetails.sql +++ b/util/Migrator/DbScripts/2025-11-14_00_AddArchiveCipherToCipherDetails.sql @@ -1,56 +1,3 @@ -IF OBJECT_ID('[dbo].[CipherDetails_ReadByUserId]') IS NOT NULL -BEGIN - DROP PROCEDURE [dbo].[CipherDetails_ReadByUserId]; -END -GO - -CREATE PROCEDURE [dbo].[CipherDetails_ReadByUserId] - @UserId UNIQUEIDENTIFIER -AS -BEGIN - SET NOCOUNT ON; - - SELECT - c.*, - ca.ArchivedDate - FROM - [dbo].[UserCipherDetails](@UserId) AS c - LEFT JOIN [dbo].[CipherArchive] AS ca - ON ca.CipherId = c.Id - AND ca.UserId = @UserId; -END -GO - - -IF OBJECT_ID('[dbo].[CipherDetails_ReadWithoutOrganizationsByUserId]') IS NOT NULL -BEGIN - DROP PROCEDURE [dbo].[CipherDetails_ReadWithoutOrganizationsByUserId]; -END -GO - -CREATE PROCEDURE [dbo].[CipherDetails_ReadWithoutOrganizationsByUserId] - @UserId UNIQUEIDENTIFIER -AS -BEGIN - SET NOCOUNT ON - - SELECT - c.*, - 1 [Edit], - 1 [ViewPassword], - 1 [Manage], - 0 [OrganizationUseTotp], - ca.ArchivedDate - FROM - [dbo].[CipherDetails](@UserId) AS c - LEFT JOIN [dbo].[CipherArchive] AS ca - ON ca.CipherId = c.Id - AND ca.UserId = @UserId - WHERE - c.[UserId] = @UserId -END -GO - IF OBJECT_ID('[dbo].[Cipher_Archive]') IS NOT NULL BEGIN DROP PROCEDURE [dbo].[Cipher_Archive]; @@ -206,9 +153,14 @@ SELECT END [FolderId], C.[DeletedDate], C.[Reprompt], - C.[Key] + C.[Key], + CA.[ArchivedDate] FROM [dbo].[Cipher] C + LEFT JOIN [dbo].[CipherArchive] CA + ON CA.[CipherId] = C.[Id] + AND CA.[UserId] = @UserId; + GO IF OBJECT_ID('[dbo].[UserCipherDetails]') IS NOT NULL @@ -242,6 +194,7 @@ SELECT C.Favorite, C.FolderId, C.DeletedDate, + C.ArchivedDate, C.Reprompt, C.[Key], CASE @@ -298,6 +251,7 @@ SELECT C.Favorite, C.FolderId, C.DeletedDate, + C.ArchivedDate, C.Reprompt, C.[Key], 1 [Edit], @@ -308,61 +262,5 @@ FROM [dbo].[CipherDetails](@UserId) AS C WHERE C.[UserId] = @UserId; -GO - -IF OBJECT_ID('[dbo].[CipherDetails_ReadByIdUserId]') IS NOT NULL -BEGIN - DROP PROCEDURE [dbo].[CipherDetails_ReadByIdUserId]; -END -GO - -CREATE PROCEDURE [dbo].[CipherDetails_ReadByIdUserId] - @Id UNIQUEIDENTIFIER, - @UserId UNIQUEIDENTIFIER -AS -BEGIN - SET NOCOUNT ON; - - SELECT - ucd.Id, - ucd.UserId, - ucd.OrganizationId, - ucd.Type, - ucd.Data, - ucd.Attachments, - ucd.CreationDate, - ucd.RevisionDate, - ucd.Favorite, - ucd.FolderId, - ucd.DeletedDate, - ucd.Reprompt, - ucd.[Key], - ucd.OrganizationUseTotp, - MAX(ca.ArchivedDate) AS ArchivedDate, - MAX(ucd.Edit) AS Edit, - MAX(ucd.ViewPassword) AS ViewPassword, - MAX(ucd.Manage) AS Manage - FROM - [dbo].[UserCipherDetails](@UserId) AS ucd - LEFT JOIN [dbo].[CipherArchive] AS ca - ON ca.CipherId = ucd.Id - AND ca.UserId = @UserId - WHERE - ucd.Id = @Id - GROUP BY - ucd.Id, - ucd.UserId, - ucd.OrganizationId, - ucd.Type, - ucd.Data, - ucd.Attachments, - ucd.CreationDate, - ucd.RevisionDate, - ucd.Favorite, - ucd.FolderId, - ucd.DeletedDate, - ucd.Reprompt, - ucd.[Key], - ucd.OrganizationUseTotp; END GO