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