From 5a24b6624d8690d312cd3bbfeea16b987997155c Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Thu, 13 Apr 2017 13:16:15 -0400 Subject: [PATCH] sql tuning and migrations --- src/Sql/Sql.sqlproj | 12 +++---- .../CipherDetails_ReadByUserId.sql | 9 +++-- .../Stored Procedures/Organization_Create.sql | 2 +- .../Stored Procedures/Organization_Update.sql | 2 +- src/Sql/dbo/Tables/Cipher.sql | 4 +-- src/Sql/dbo/Tables/FolderCipher.sql | 5 +++ src/Sql/dbo/Tables/SubvaultCipher.sql | 5 +++ src/Sql/dbo/Tables/SubvaultUser.sql | 5 +++ .../2017-01-03_01_TableAdjustments.sql | 33 +++++++++++++++++++ .../2017-16-03_01_CipherMigration.sql | 19 +++++++++++ 10 files changed, 83 insertions(+), 13 deletions(-) create mode 100644 src/SqlUpdate/2017-01-03_01_TableAdjustments.sql diff --git a/src/Sql/Sql.sqlproj b/src/Sql/Sql.sqlproj index 436d0ac70..65feec788 100644 --- a/src/Sql/Sql.sqlproj +++ b/src/Sql/Sql.sqlproj @@ -69,6 +69,7 @@ + @@ -76,7 +77,6 @@ - @@ -84,10 +84,10 @@ + - @@ -106,7 +106,9 @@ + + @@ -155,7 +157,9 @@ + + @@ -177,9 +181,5 @@ - - - - \ No newline at end of file diff --git a/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByUserId.sql b/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByUserId.sql index 48e597b87..3d9664b4e 100644 --- a/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByUserId.sql +++ b/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByUserId.sql @@ -17,6 +17,11 @@ BEGIN LEFT JOIN [dbo].[Organization] O ON O.[Id] = C.[OrganizationId] WHERE - (C.[UserId] IS NOT NULL AND C.[UserId] = @UserId) - OR (OU.[UserId] = @UserId AND OU.[Status] = 2 AND O.[Enabled] = 1) -- 2 = Confirmed + C.[UserId] = @UserId + OR ( + C.[UserId] IS NULL + AND OU.[UserId] = @UserId + AND OU.[Status] = 2 -- 2 = Confirmed + AND O.[Enabled] = 1 + ) END \ No newline at end of file diff --git a/src/Sql/dbo/Stored Procedures/Organization_Create.sql b/src/Sql/dbo/Stored Procedures/Organization_Create.sql index 6e93749ec..0212e1da4 100644 --- a/src/Sql/dbo/Stored Procedures/Organization_Create.sql +++ b/src/Sql/dbo/Stored Procedures/Organization_Create.sql @@ -48,4 +48,4 @@ BEGIN @CreationDate, @RevisionDate ) -END \ No newline at end of file +END diff --git a/src/Sql/dbo/Stored Procedures/Organization_Update.sql b/src/Sql/dbo/Stored Procedures/Organization_Update.sql index 76636c4d6..1773e95ce 100644 --- a/src/Sql/dbo/Stored Procedures/Organization_Update.sql +++ b/src/Sql/dbo/Stored Procedures/Organization_Update.sql @@ -34,4 +34,4 @@ BEGIN [RevisionDate] = @RevisionDate WHERE [Id] = @Id -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 20fc97596..7a59d4c89 100644 --- a/src/Sql/dbo/Tables/Cipher.sql +++ b/src/Sql/dbo/Tables/Cipher.sql @@ -35,7 +35,6 @@ BEGIN WHERE [Id] = @UserId END - GO CREATE TRIGGER [dbo].[Cipher_Updated] ON [dbo].[Cipher] AFTER UPDATE @@ -55,7 +54,6 @@ BEGIN WHERE [Id] = @UserId END - GO CREATE TRIGGER [dbo].[Cipher_Deleted] ON [dbo].[Cipher] AFTER DELETE @@ -74,4 +72,4 @@ BEGIN [AccountRevisionDate] = GETUTCDATE() WHERE [Id] = @UserId -END +END \ No newline at end of file diff --git a/src/Sql/dbo/Tables/FolderCipher.sql b/src/Sql/dbo/Tables/FolderCipher.sql index ebca494e8..5fe9e604e 100644 --- a/src/Sql/dbo/Tables/FolderCipher.sql +++ b/src/Sql/dbo/Tables/FolderCipher.sql @@ -6,3 +6,8 @@ CONSTRAINT [FK_FolderCipher_Folder] FOREIGN KEY ([FolderId]) REFERENCES [dbo].[Folder] ([Id]) ); + +GO +CREATE NONCLUSTERED INDEX [IX_FolderCipher_CipherId] + ON [dbo].[FolderCipher]([CipherId] ASC); + diff --git a/src/Sql/dbo/Tables/SubvaultCipher.sql b/src/Sql/dbo/Tables/SubvaultCipher.sql index 356a8b0f3..681397959 100644 --- a/src/Sql/dbo/Tables/SubvaultCipher.sql +++ b/src/Sql/dbo/Tables/SubvaultCipher.sql @@ -6,3 +6,8 @@ CONSTRAINT [FK_SubvaultCipher_Subvault] FOREIGN KEY ([SubvaultId]) REFERENCES [dbo].[Subvault] ([Id]) ON DELETE CASCADE ); + +GO +CREATE NONCLUSTERED INDEX [IX_SubvaultCipher_CipherId] + ON [dbo].[SubvaultCipher]([CipherId] ASC); + diff --git a/src/Sql/dbo/Tables/SubvaultUser.sql b/src/Sql/dbo/Tables/SubvaultUser.sql index 57f570df6..96bd52322 100644 --- a/src/Sql/dbo/Tables/SubvaultUser.sql +++ b/src/Sql/dbo/Tables/SubvaultUser.sql @@ -10,3 +10,8 @@ CONSTRAINT [FK_SubvaultUser_Subvault] FOREIGN KEY ([SubvaultId]) REFERENCES [dbo].[Subvault] ([Id]) ON DELETE CASCADE ); + +GO +CREATE NONCLUSTERED INDEX [IX_SubvaultUser_SubvaultId] + ON [dbo].[SubvaultUser]([SubvaultId] ASC); + diff --git a/src/SqlUpdate/2017-01-03_01_TableAdjustments.sql b/src/SqlUpdate/2017-01-03_01_TableAdjustments.sql new file mode 100644 index 000000000..254ac99d6 --- /dev/null +++ b/src/SqlUpdate/2017-01-03_01_TableAdjustments.sql @@ -0,0 +1,33 @@ +-- Get rid of history table + +DROP TABLE [History] +GO + +-- Setup new tables + +CREATE TABLE [dbo].[Favorite] ( + [UserId] UNIQUEIDENTIFIER NOT NULL, + [CipherId] UNIQUEIDENTIFIER NOT NULL, + CONSTRAINT [PK_Favorite] PRIMARY KEY CLUSTERED ([UserId] ASC, [CipherId] ASC) +) +GO + +CREATE TABLE [dbo].[Folder] ( + [Id] UNIQUEIDENTIFIER NOT NULL, + [UserId] UNIQUEIDENTIFIER NOT NULL, + [Name] VARCHAR (MAX) NULL, + [CreationDate] DATETIME2 (7) NOT NULL, + [RevisionDate] DATETIME2 (7) NOT NULL, + CONSTRAINT [PK_Folder] PRIMARY KEY CLUSTERED ([Id] ASC) +) +GO + +CREATE TABLE [dbo].[FolderCipher] ( + [FolderId] UNIQUEIDENTIFIER NOT NULL, + [CipherId] UNIQUEIDENTIFIER NOT NULL, + CONSTRAINT [PK_FolderCipher] PRIMARY KEY CLUSTERED ([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 b93836ce4..59888802c 100644 --- a/src/SqlUpdate/2017-16-03_01_CipherMigration.sql +++ b/src/SqlUpdate/2017-16-03_01_CipherMigration.sql @@ -1,3 +1,5 @@ +-- Step 1, Run each statement individually + insert into folder select Id, UserId, JSON_VALUE(Data,'$.Name') AS [Name], CreationDate, RevisionDate from cipher @@ -12,3 +14,20 @@ insert into favorite select UserId, [Id] from cipher where Favorite = 1 + + +-- Step 2, drop each column + +alter table cipher drop constraint [FK_Cipher_Folder] +go + +alter table cipher drop column FolderId +go + +alter table cipher drop column Favorite +go + +-- Step 3, delete old folder ciphers + +delete from cipher where [type] = 0 +