From c6dcac96d3aabc5ec42cb76a379a60de2a81490c Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Fri, 14 Apr 2017 12:49:35 -0400 Subject: [PATCH] query tuning. more userid denorm support --- src/Core/Models/Table/FolderCipher.cs | 1 + src/Core/Repositories/SqlServer/CipherRepository.cs | 6 +++++- src/Core/Services/Implementations/CipherService.cs | 3 ++- .../Stored Procedures/CipherDetails_ReadByIdUserId.sql | 9 +++++++-- .../Stored Procedures/CipherDetails_ReadByTypeUserId.sql | 9 +++++++-- 5 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/Core/Models/Table/FolderCipher.cs b/src/Core/Models/Table/FolderCipher.cs index 9551314800..19ac18db8f 100644 --- a/src/Core/Models/Table/FolderCipher.cs +++ b/src/Core/Models/Table/FolderCipher.cs @@ -6,5 +6,6 @@ namespace Bit.Core.Models.Table { public Guid CipherId { get; set; } public Guid FolderId { get; set; } + public Guid UserId { get; set; } } } diff --git a/src/Core/Repositories/SqlServer/CipherRepository.cs b/src/Core/Repositories/SqlServer/CipherRepository.cs index f91fa5c809..c7219f4e33 100644 --- a/src/Core/Repositories/SqlServer/CipherRepository.cs +++ b/src/Core/Repositories/SqlServer/CipherRepository.cs @@ -401,10 +401,13 @@ namespace Bit.Core.Repositories.SqlServer folderCiphersTable.Columns.Add(folderIdColumn); var cipherIdColumn = new DataColumn(nameof(f.CipherId), f.CipherId.GetType()); folderCiphersTable.Columns.Add(cipherIdColumn); + var userIdColumn = new DataColumn(nameof(f.UserId), f.UserId.GetType()); + folderCiphersTable.Columns.Add(userIdColumn); - var keys = new DataColumn[2]; + var keys = new DataColumn[3]; keys[0] = folderIdColumn; keys[1] = cipherIdColumn; + keys[2] = userIdColumn; folderCiphersTable.PrimaryKey = keys; foreach(var folderCipher in folderCiphers) @@ -413,6 +416,7 @@ namespace Bit.Core.Repositories.SqlServer row[folderIdColumn] = folderCipher.FolderId; row[cipherIdColumn] = folderCipher.CipherId; + row[userIdColumn] = folderCipher.UserId; folderCiphersTable.Rows.Add(row); } diff --git a/src/Core/Services/Implementations/CipherService.cs b/src/Core/Services/Implementations/CipherService.cs index d665ebefea..e843fa9e04 100644 --- a/src/Core/Services/Implementations/CipherService.cs +++ b/src/Core/Services/Implementations/CipherService.cs @@ -223,7 +223,8 @@ namespace Bit.Core.Services folderCiphers.Add(new FolderCipher { FolderId = folder.Id, - CipherId = cipher.Id + CipherId = cipher.Id, + UserId = folder.UserId }); } diff --git a/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByIdUserId.sql b/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByIdUserId.sql index 92e1f4c186..a8b7e4d19f 100644 --- a/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByIdUserId.sql +++ b/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByIdUserId.sql @@ -20,7 +20,12 @@ BEGIN WHERE C.Id = @Id AND ( - (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/CipherDetails_ReadByTypeUserId.sql b/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByTypeUserId.sql index 3fc19deef7..40f707ff6b 100644 --- a/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByTypeUserId.sql +++ b/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByTypeUserId.sql @@ -20,7 +20,12 @@ BEGIN WHERE C.[Type] = @Type AND ( - (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