diff --git a/src/Sql/Sql.sqlproj b/src/Sql/Sql.sqlproj index 65feec7885..cc074a1910 100644 --- a/src/Sql/Sql.sqlproj +++ b/src/Sql/Sql.sqlproj @@ -148,7 +148,6 @@ - diff --git a/src/Sql/dbo/Functions/CipherDetails.sql b/src/Sql/dbo/Functions/CipherDetails.sql index 073fc8a760..f26a6462f2 100644 --- a/src/Sql/dbo/Functions/CipherDetails.sql +++ b/src/Sql/dbo/Functions/CipherDetails.sql @@ -10,6 +10,6 @@ FROM LEFT JOIN [dbo].[Favorite] F ON F.[CipherId] = C.[Id] AND F.[UserId] = @UserId LEFT JOIN - [dbo].[FolderCipher] FC ON FC.[CipherId] = C.[Id] + [dbo].[FolderCipher] FC ON FC.[UserId] = @UserId AND FC.[CipherId] = C.[Id] LEFT JOIN - [dbo].[Folder] FO ON FO.[Id] = FC.[FolderId] AND FO.[UserId] = @UserId \ No newline at end of file + [dbo].[Folder] FO ON FO.[Id] = FC.[FolderId] \ No newline at end of file diff --git a/src/Sql/dbo/Stored Procedures/Cipher_UpdatePartial.sql b/src/Sql/dbo/Stored Procedures/Cipher_UpdatePartial.sql index 10b7b5097d..e1a01dd012 100644 --- a/src/Sql/dbo/Stored Procedures/Cipher_UpdatePartial.sql +++ b/src/Sql/dbo/Stored Procedures/Cipher_UpdatePartial.sql @@ -7,11 +7,24 @@ AS BEGIN SET NOCOUNT ON - IF @FolderId IS NULL + DECLARE @ExistingFolderId UNIQUEIDENTIFIER = NULL + + SELECT TOP 1 + @ExistingFolderId = F.Id + FROM + [dbo].[FolderCipher] FC + INNER JOIN + [dbo].[Folder] F ON F.[Id] = FC.[FolderId] + WHERE + F.[UserId] = @UserId + AND FC.[CipherId] = @Id + + IF @ExistingFolderId IS NOT NULL AND (@FolderId IS NULL OR @FolderId != @ExistingFolderId) BEGIN - EXEC [dbo].[FolderCipher_DeleteByUserId] @UserId, @Id + EXEC [dbo].[FolderCipher_Delete] @ExistingFolderId, @Id END - ELSE IF (SELECT COUNT(1) FROM [dbo].[FolderCipher] WHERE [FolderId] = @FolderId AND [CipherId] = @Id) = 0 + + IF @FolderId IS NOT NULL AND (@ExistingFolderId IS NULL OR @FolderId != @ExistingFolderId) BEGIN EXEC [dbo].[FolderCipher_Create] @FolderId, @Id END diff --git a/src/Sql/dbo/Stored Procedures/FolderCipher_DeleteByUserId.sql b/src/Sql/dbo/Stored Procedures/FolderCipher_DeleteByUserId.sql deleted file mode 100644 index e78b3203d8..0000000000 --- a/src/Sql/dbo/Stored Procedures/FolderCipher_DeleteByUserId.sql +++ /dev/null @@ -1,16 +0,0 @@ -CREATE PROCEDURE [dbo].[FolderCipher_DeleteByUserId] - @UserId UNIQUEIDENTIFIER, - @CipherId UNIQUEIDENTIFIER -AS -BEGIN - SET NOCOUNT ON - - DELETE FC - FROM - [dbo].[FolderCipher] FC - INNER JOIN - [dbo].[Folder] F ON F.[Id] = FC.[FolderId] - WHERE - F.[UserId] = @UserId - AND [CipherId] = @CipherId -END \ No newline at end of file diff --git a/src/Sql/dbo/Tables/FolderCipher.sql b/src/Sql/dbo/Tables/FolderCipher.sql index 5fe9e604ec..bceab2f3e3 100644 --- a/src/Sql/dbo/Tables/FolderCipher.sql +++ b/src/Sql/dbo/Tables/FolderCipher.sql @@ -1,8 +1,10 @@ CREATE TABLE [dbo].[FolderCipher] ( [FolderId] UNIQUEIDENTIFIER NOT NULL, [CipherId] UNIQUEIDENTIFIER NOT NULL, - CONSTRAINT [PK_FolderCipher] PRIMARY KEY CLUSTERED ([FolderId] ASC, [CipherId] ASC), + [UserId] UNIQUEIDENTIFIER NOT NULL, + CONSTRAINT [PK_FolderCipher] PRIMARY KEY CLUSTERED ([UserId] ASC, [FolderId] ASC, [CipherId] ASC), CONSTRAINT [FK_FolderCipher_Cipher] FOREIGN KEY ([CipherId]) REFERENCES [dbo].[Cipher] ([Id]) ON DELETE CASCADE, + CONSTRAINT [FK_FolderCipher_User] FOREIGN KEY ([UserId]) REFERENCES [dbo].[User] ([Id]) ON DELETE CASCADE, CONSTRAINT [FK_FolderCipher_Folder] FOREIGN KEY ([FolderId]) REFERENCES [dbo].[Folder] ([Id]) ); diff --git a/src/SqlUpdate/2017-01-03_01_TableAdjustments.sql b/src/SqlUpdate/2017-01-03_01_TableAdjustments.sql index 254ac99d69..d26b3d3d1e 100644 --- a/src/SqlUpdate/2017-01-03_01_TableAdjustments.sql +++ b/src/SqlUpdate/2017-01-03_01_TableAdjustments.sql @@ -25,7 +25,8 @@ GO CREATE TABLE [dbo].[FolderCipher] ( [FolderId] UNIQUEIDENTIFIER NOT NULL, [CipherId] UNIQUEIDENTIFIER NOT NULL, - CONSTRAINT [PK_FolderCipher] PRIMARY KEY CLUSTERED ([FolderId] ASC, [CipherId] ASC) + [UserId] UNIQUEIDENTIFIER NOT NULL, + CONSTRAINT [PK_FolderCipher] PRIMARY KEY CLUSTERED ([UserId] ASC, [FolderId] ASC, [CipherId] ASC) ) GO diff --git a/src/SqlUpdate/2017-16-03_01_CipherMigration.sql b/src/SqlUpdate/2017-16-03_01_CipherMigration.sql index 59888802c4..dc3fc0ff19 100644 --- a/src/SqlUpdate/2017-16-03_01_CipherMigration.sql +++ b/src/SqlUpdate/2017-16-03_01_CipherMigration.sql @@ -6,7 +6,7 @@ from cipher where [type] = 0 insert into foldercipher -select FolderId, Id +select FolderId, Id, UserId from cipher where [FolderId] is not null