diff --git a/src/Sql/Sql.sqlproj b/src/Sql/Sql.sqlproj
index f36e6a45e..33f20d595 100644
--- a/src/Sql/Sql.sqlproj
+++ b/src/Sql/Sql.sqlproj
@@ -62,8 +62,9 @@
+
-
+
@@ -83,9 +84,11 @@
+
-
+
+
@@ -93,18 +96,17 @@
+
+
-
-
-
@@ -117,28 +119,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -156,22 +171,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
\ No newline at end of file
diff --git a/src/Sql/dbo/Functions/CipherDetails.sql b/src/Sql/dbo/Functions/CipherDetails.sql
new file mode 100644
index 000000000..073fc8a76
--- /dev/null
+++ b/src/Sql/dbo/Functions/CipherDetails.sql
@@ -0,0 +1,15 @@
+CREATE FUNCTION [dbo].[CipherDetails](@UserId UNIQUEIDENTIFIER)
+RETURNS TABLE
+AS RETURN
+SELECT
+ C.*,
+ CASE WHEN F.[CipherId] IS NULL THEN 0 ELSE 1 END [Favorite],
+ FO.[Id] [FolderId]
+FROM
+ [dbo].[Cipher] C
+LEFT JOIN
+ [dbo].[Favorite] F ON F.[CipherId] = C.[Id] AND F.[UserId] = @UserId
+LEFT JOIN
+ [dbo].[FolderCipher] FC ON FC.[CipherId] = C.[Id]
+LEFT JOIN
+ [dbo].[Folder] FO ON FO.[Id] = FC.[FolderId] AND FO.[UserId] = @UserId
\ No newline at end of file
diff --git a/src/Sql/dbo/Stored Procedures/CipherDetails_ReadById.sql b/src/Sql/dbo/Stored Procedures/CipherDetails_ReadById.sql
deleted file mode 100644
index 6463096a0..000000000
--- a/src/Sql/dbo/Stored Procedures/CipherDetails_ReadById.sql
+++ /dev/null
@@ -1,13 +0,0 @@
-CREATE PROCEDURE [dbo].[CipherDetails_ReadById]
- @Id UNIQUEIDENTIFIER
-AS
-BEGIN
- SET NOCOUNT ON
-
- SELECT
- *
- FROM
- [dbo].[CipherDetailsView]
- WHERE
- [Id] = @Id
-END
\ No newline at end of file
diff --git a/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByIdUserId.sql b/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByIdUserId.sql
index 8b7b1c18b..da6d32d03 100644
--- a/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByIdUserId.sql
+++ b/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByIdUserId.sql
@@ -8,7 +8,7 @@ BEGIN
SELECT DISTINCT
C.*
FROM
- [dbo].[CipherDetailsView] C
+ [dbo].[CipherDetails](@UserId) C
LEFT JOIN
[dbo].[SubvaultCipher] SC ON SC.[CipherId] = C.[Id]
LEFT JOIN
diff --git a/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByRevisionDateUserWithDeleteHistory.sql b/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByRevisionDateUserWithDeleteHistory.sql
index 310e5fe64..e50e40b2e 100644
--- a/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByRevisionDateUserWithDeleteHistory.sql
+++ b/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByRevisionDateUserWithDeleteHistory.sql
@@ -8,7 +8,7 @@ BEGIN
SELECT
*
FROM
- [dbo].[CipherDetailsView]
+ [dbo].[CipherDetails](@UserId) C
WHERE
[RevisionDate] > @SinceRevisionDate
AND [UserId] = @UserId
@@ -21,4 +21,4 @@ BEGIN
[Date] > @SinceRevisionDate
AND [Event] = 2 -- Only cipher delete events.
AND [UserId] = @UserId
-END
\ No newline at end of file
+END
diff --git a/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByTypeUserId.sql b/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByTypeUserId.sql
index d46435977..1f3d026df 100644
--- a/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByTypeUserId.sql
+++ b/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByTypeUserId.sql
@@ -8,7 +8,7 @@ BEGIN
SELECT DISTINCT
C.*
FROM
- [dbo].[CipherDetailsView] C
+ [dbo].[CipherDetails](@UserId) C
LEFT JOIN
[dbo].[SubvaultCipher] SC ON SC.[CipherId] = C.[Id]
LEFT JOIN
diff --git a/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByUserId.sql b/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByUserId.sql
index d9d44c1cc..a7014ebf5 100644
--- a/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByUserId.sql
+++ b/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByUserId.sql
@@ -7,7 +7,7 @@ BEGIN
SELECT DISTINCT
C.*
FROM
- [dbo].[CipherDetailsView] C
+ [dbo].[CipherDetails](@UserId) C
LEFT JOIN
[dbo].[SubvaultCipher] SC ON SC.[CipherId] = C.[Id]
LEFT JOIN
diff --git a/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByUserIdHasSubvault.sql b/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByUserIdHasSubvault.sql
index 1d212e4dc..7a17fb1f7 100644
--- a/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByUserIdHasSubvault.sql
+++ b/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByUserIdHasSubvault.sql
@@ -7,7 +7,7 @@ BEGIN
SELECT DISTINCT
C.*
FROM
- [dbo].[CipherDetailsView] C
+ [dbo].[CipherDetails](@UserId) C
INNER JOIN
[dbo].[SubvaultCipher] SC ON SC.[CipherId] = C.[Id]
INNER JOIN
diff --git a/src/Sql/dbo/Stored Procedures/Cipher_DeleteById.sql b/src/Sql/dbo/Stored Procedures/Cipher_DeleteById.sql
index 025ac74af..52074d74a 100644
--- a/src/Sql/dbo/Stored Procedures/Cipher_DeleteById.sql
+++ b/src/Sql/dbo/Stored Procedures/Cipher_DeleteById.sql
@@ -9,4 +9,4 @@ BEGIN
[dbo].[Cipher]
WHERE
[Id] = @Id
-END
\ No newline at end of file
+END
diff --git a/src/Sql/dbo/Stored Procedures/Folder_ReadByUserId.sql b/src/Sql/dbo/Stored Procedures/Folder_ReadByUserId.sql
index 1244383ed..79f3aa50f 100644
--- a/src/Sql/dbo/Stored Procedures/Folder_ReadByUserId.sql
+++ b/src/Sql/dbo/Stored Procedures/Folder_ReadByUserId.sql
@@ -10,4 +10,4 @@ BEGIN
[dbo].[FolderView]
WHERE
[UserId] = @UserId
-END
\ No newline at end of file
+END
diff --git a/src/Sql/dbo/Stored Procedures/SubvaultCipher_ReadByUserId.sql b/src/Sql/dbo/Stored Procedures/SubvaultCipher_ReadByUserId.sql
index 0efcb1c39..5183572b0 100644
--- a/src/Sql/dbo/Stored Procedures/SubvaultCipher_ReadByUserId.sql
+++ b/src/Sql/dbo/Stored Procedures/SubvaultCipher_ReadByUserId.sql
@@ -14,4 +14,4 @@ BEGIN
[dbo].[OrganizationUser] OU ON OU.[Id] = SU.[OrganizationUserId]
WHERE
[OU].[UserId] = @UserId
-END
\ No newline at end of file
+END
diff --git a/src/Sql/dbo/Stored Procedures/Subvault_ReadByIdAdminUserId.sql b/src/Sql/dbo/Stored Procedures/Subvault_ReadByUserId.sql
similarity index 98%
rename from src/Sql/dbo/Stored Procedures/Subvault_ReadByIdAdminUserId.sql
rename to src/Sql/dbo/Stored Procedures/Subvault_ReadByUserId.sql
index 6111d2ad8..8875929ca 100644
--- a/src/Sql/dbo/Stored Procedures/Subvault_ReadByIdAdminUserId.sql
+++ b/src/Sql/dbo/Stored Procedures/Subvault_ReadByUserId.sql
@@ -14,4 +14,4 @@ BEGIN
[OrganizationUser] OU ON OU.[Id] = SU.[OrganizationUserId]
WHERE
OU.[UserId] = @UserId
-END
\ No newline at end of file
+END
diff --git a/src/Sql/dbo/Stored Procedures/User_DeleteById.sql b/src/Sql/dbo/Stored Procedures/User_DeleteById.sql
index 9ceac6033..b6caa221c 100644
--- a/src/Sql/dbo/Stored Procedures/User_DeleteById.sql
+++ b/src/Sql/dbo/Stored Procedures/User_DeleteById.sql
@@ -36,4 +36,4 @@ BEGIN
[Id] = @Id
COMMIT TRANSACTION User_DeleteById
-END
\ No newline at end of file
+END
diff --git a/src/Sql/dbo/Tables/Cipher.sql b/src/Sql/dbo/Tables/Cipher.sql
index f5816377a..f29e03999 100644
--- a/src/Sql/dbo/Tables/Cipher.sql
+++ b/src/Sql/dbo/Tables/Cipher.sql
@@ -1,11 +1,11 @@
CREATE TABLE [dbo].[Cipher] (
- [Id] UNIQUEIDENTIFIER NOT NULL,
- [UserId] UNIQUEIDENTIFIER NULL,
- [OrganizationId] UNIQUEIDENTIFIER NULL,
- [Type] TINYINT NOT NULL,
- [Data] NVARCHAR (MAX) NOT NULL,
- [CreationDate] DATETIME2 (7) NOT NULL,
- [RevisionDate] DATETIME2 (7) NOT NULL,
+ [Id] UNIQUEIDENTIFIER NOT NULL,
+ [UserId] UNIQUEIDENTIFIER NULL,
+ [OrganizationId] UNIQUEIDENTIFIER NULL,
+ [Type] TINYINT NOT NULL,
+ [Data] NVARCHAR (MAX) NOT NULL,
+ [CreationDate] DATETIME2 (7) NOT NULL,
+ [RevisionDate] DATETIME2 (7) NOT NULL,
CONSTRAINT [PK_Cipher] PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [FK_Cipher_User] FOREIGN KEY ([UserId]) REFERENCES [dbo].[User] ([Id])
);
@@ -50,6 +50,7 @@ BEGIN
WHERE
[Id] = @UserId
END
+
GO
CREATE TRIGGER [dbo].[Cipher_Updated]
ON [dbo].[Cipher] AFTER UPDATE
@@ -84,6 +85,7 @@ BEGIN
WHERE
[Id] = @UserId
END
+
GO
CREATE TRIGGER [dbo].[Cipher_Deleted]
ON [dbo].[Cipher] AFTER DELETE
@@ -117,4 +119,4 @@ BEGIN
[AccountRevisionDate] = GETUTCDATE()
WHERE
[Id] = @UserId
-END
\ No newline at end of file
+END
diff --git a/src/Sql/dbo/Tables/Favorite.sql b/src/Sql/dbo/Tables/Favorite.sql
index 4f9a8f8b6..8f9d19415 100644
--- a/src/Sql/dbo/Tables/Favorite.sql
+++ b/src/Sql/dbo/Tables/Favorite.sql
@@ -2,7 +2,7 @@
[UserId] UNIQUEIDENTIFIER NOT NULL,
[CipherId] UNIQUEIDENTIFIER NOT NULL,
CONSTRAINT [PK_Favorite] PRIMARY KEY CLUSTERED ([UserId] ASC, [CipherId] ASC),
- CONSTRAINT [FK_Favorite_Cipher] FOREIGN KEY ([CipherId]) REFERENCES [dbo].[Cipher] ([Id]),
+ CONSTRAINT [FK_Favorite_Cipher] FOREIGN KEY ([CipherId]) REFERENCES [dbo].[Cipher] ([Id]) ON DELETE CASCADE,
CONSTRAINT [FK_Favorite_User] FOREIGN KEY ([UserId]) REFERENCES [dbo].[User] ([Id])
);
diff --git a/src/Sql/dbo/Tables/FolderCipher.sql b/src/Sql/dbo/Tables/FolderCipher.sql
index 2e35c9516..ebca494e8 100644
--- a/src/Sql/dbo/Tables/FolderCipher.sql
+++ b/src/Sql/dbo/Tables/FolderCipher.sql
@@ -2,7 +2,7 @@
[FolderId] UNIQUEIDENTIFIER NOT NULL,
[CipherId] UNIQUEIDENTIFIER NOT NULL,
CONSTRAINT [PK_FolderCipher] PRIMARY KEY CLUSTERED ([FolderId] ASC, [CipherId] ASC),
- CONSTRAINT [FK_FolderCipher_Cipher] FOREIGN KEY ([CipherId]) REFERENCES [dbo].[Cipher] ([Id]),
+ CONSTRAINT [FK_FolderCipher_Cipher] FOREIGN KEY ([CipherId]) REFERENCES [dbo].[Cipher] ([Id]) ON DELETE CASCADE,
CONSTRAINT [FK_FolderCipher_Folder] FOREIGN KEY ([FolderId]) REFERENCES [dbo].[Folder] ([Id])
);
diff --git a/src/Sql/dbo/Tables/GroupUser.sql b/src/Sql/dbo/Tables/GroupUser.sql
index a6cedec99..747c4d282 100644
--- a/src/Sql/dbo/Tables/GroupUser.sql
+++ b/src/Sql/dbo/Tables/GroupUser.sql
@@ -2,7 +2,7 @@
[GroupId] UNIQUEIDENTIFIER NOT NULL,
[UserId] UNIQUEIDENTIFIER NOT NULL,
CONSTRAINT [PK_GroupUser] PRIMARY KEY CLUSTERED ([GroupId] ASC, [UserId] ASC),
- CONSTRAINT [FK_GroupUser_Group] FOREIGN KEY ([GroupId]) REFERENCES [dbo].[Group] ([Id]),
+ CONSTRAINT [FK_GroupUser_Group] FOREIGN KEY ([GroupId]) REFERENCES [dbo].[Group] ([Id]) ON DELETE CASCADE,
CONSTRAINT [FK_GroupUser_User] FOREIGN KEY ([UserId]) REFERENCES [dbo].[User] ([Id])
);
diff --git a/src/Sql/dbo/Tables/SubvaultCipher.sql b/src/Sql/dbo/Tables/SubvaultCipher.sql
index 05951ed66..356a8b0f3 100644
--- a/src/Sql/dbo/Tables/SubvaultCipher.sql
+++ b/src/Sql/dbo/Tables/SubvaultCipher.sql
@@ -2,7 +2,7 @@
[SubvaultId] UNIQUEIDENTIFIER NOT NULL,
[CipherId] UNIQUEIDENTIFIER NOT NULL,
CONSTRAINT [PK_SubvaultCipher] PRIMARY KEY CLUSTERED ([SubvaultId] ASC, [CipherId] ASC),
- CONSTRAINT [FK_SubvaultCipher_Cipher] FOREIGN KEY ([CipherId]) REFERENCES [dbo].[Cipher] ([Id]),
- CONSTRAINT [FK_SubvaultCipher_Subvault] FOREIGN KEY ([SubvaultId]) REFERENCES [dbo].[Subvault] ([Id])
+ CONSTRAINT [FK_SubvaultCipher_Cipher] FOREIGN KEY ([CipherId]) REFERENCES [dbo].[Cipher] ([Id]) ON DELETE CASCADE,
+ CONSTRAINT [FK_SubvaultCipher_Subvault] FOREIGN KEY ([SubvaultId]) REFERENCES [dbo].[Subvault] ([Id]) ON DELETE CASCADE
);
diff --git a/src/Sql/dbo/Tables/SubvaultGroup.sql b/src/Sql/dbo/Tables/SubvaultGroup.sql
index 9443af67e..4551dbf13 100644
--- a/src/Sql/dbo/Tables/SubvaultGroup.sql
+++ b/src/Sql/dbo/Tables/SubvaultGroup.sql
@@ -2,7 +2,7 @@
[SubvaultId] UNIQUEIDENTIFIER NOT NULL,
[GroupId] UNIQUEIDENTIFIER NOT NULL,
CONSTRAINT [PK_SubvaultGroup] PRIMARY KEY CLUSTERED ([SubvaultId] ASC, [GroupId] ASC),
- CONSTRAINT [FK_SubvaultGroup_Group] FOREIGN KEY ([GroupId]) REFERENCES [dbo].[Group] ([Id]),
- CONSTRAINT [FK_SubvaultGroup_Subvault] FOREIGN KEY ([SubvaultId]) REFERENCES [dbo].[Subvault] ([Id])
+ CONSTRAINT [FK_SubvaultGroup_Group] FOREIGN KEY ([GroupId]) REFERENCES [dbo].[Group] ([Id]) ON DELETE CASCADE,
+ CONSTRAINT [FK_SubvaultGroup_Subvault] FOREIGN KEY ([SubvaultId]) REFERENCES [dbo].[Subvault] ([Id]) ON DELETE CASCADE
);
diff --git a/src/Sql/dbo/Tables/SubvaultUser.sql b/src/Sql/dbo/Tables/SubvaultUser.sql
index c32b5beb8..878b38364 100644
--- a/src/Sql/dbo/Tables/SubvaultUser.sql
+++ b/src/Sql/dbo/Tables/SubvaultUser.sql
@@ -7,7 +7,7 @@
[CreationDate] DATETIME2 (7) NOT NULL,
[RevisionDate] DATETIME2 (7) NOT NULL,
CONSTRAINT [PK_SubvaultUser] PRIMARY KEY CLUSTERED ([Id] ASC),
- CONSTRAINT [FK_SubvaultUser_OrganizationUser] FOREIGN KEY ([OrganizationUserId]) REFERENCES [dbo].[OrganizationUser] ([Id]),
- CONSTRAINT [FK_SubvaultUser_Subvault] FOREIGN KEY ([SubvaultId]) REFERENCES [dbo].[Subvault] ([Id])
+ CONSTRAINT [FK_SubvaultUser_OrganizationUser] FOREIGN KEY ([OrganizationUserId]) REFERENCES [dbo].[OrganizationUser] ([Id]) ON DELETE CASCADE,
+ CONSTRAINT [FK_SubvaultUser_Subvault] FOREIGN KEY ([SubvaultId]) REFERENCES [dbo].[Subvault] ([Id]) ON DELETE CASCADE
);
diff --git a/src/Sql/dbo/User Defined Types/GuidIdArray.sql b/src/Sql/dbo/User Defined Types/GuidIdArray.sql
new file mode 100644
index 000000000..d139f105d
--- /dev/null
+++ b/src/Sql/dbo/User Defined Types/GuidIdArray.sql
@@ -0,0 +1,3 @@
+CREATE TYPE [dbo].[GuidIdArray] AS TABLE (
+ [Id] UNIQUEIDENTIFIER NOT NULL);
+
diff --git a/src/Sql/dbo/UserDefinedTypes/GuidIdArray.sql b/src/Sql/dbo/UserDefinedTypes/GuidIdArray.sql
deleted file mode 100644
index 4d3f49e4e..000000000
--- a/src/Sql/dbo/UserDefinedTypes/GuidIdArray.sql
+++ /dev/null
@@ -1 +0,0 @@
-CREATE TYPE [dbo].[GuidIdArray] AS TABLE ([Id] UNIQUEIDENTIFIER NOT NULL);
diff --git a/src/Sql/dbo/Views/CipherDetailsView.sql b/src/Sql/dbo/Views/CipherDetailsView.sql
deleted file mode 100644
index 4ac8cd8c0..000000000
--- a/src/Sql/dbo/Views/CipherDetailsView.sql
+++ /dev/null
@@ -1,12 +0,0 @@
-CREATE VIEW [dbo].[CipherDetailsView]
-AS
-SELECT
- C.*,
- CASE WHEN F.[CipherId] IS NULL THEN 0 ELSE 1 END [Favorite],
- FC.[FolderId]
-FROM
- [dbo].[Cipher] C
-LEFT JOIN
- [dbo].[Favorite] F ON F.[CipherId] = C.[Id]
-LEFT JOIN
- [dbo].[FolderCipher] FC ON FC.[CipherId] = C.[Id]
\ No newline at end of file
diff --git a/src/Sql/dbo/Views/FolderView.sql b/src/Sql/dbo/Views/FolderView.sql
index 959248e30..4a6fc9158 100644
--- a/src/Sql/dbo/Views/FolderView.sql
+++ b/src/Sql/dbo/Views/FolderView.sql
@@ -3,4 +3,4 @@ AS
SELECT
*
FROM
- [dbo].[Folder]
\ No newline at end of file
+ [dbo].[Folder]