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]