From c7c5ae8f9ab21287d485f185487054e21121f2d4 Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Mon, 17 Apr 2017 13:11:39 -0400 Subject: [PATCH] handle distinct selections from app code --- src/Core/Repositories/SqlServer/CipherRepository.cs | 9 ++++++--- .../Stored Procedures/CipherDetails_ReadByIdUserId.sql | 6 +++--- .../Stored Procedures/CipherDetails_ReadByTypeUserId.sql | 6 +++--- .../dbo/Stored Procedures/CipherDetails_ReadByUserId.sql | 4 ++-- .../CipherDetails_ReadByUserIdHasSubvault.sql | 6 +++--- .../CipherFullDetails_ReadByIdUserId.sql | 6 +++--- 6 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/Core/Repositories/SqlServer/CipherRepository.cs b/src/Core/Repositories/SqlServer/CipherRepository.cs index e22d4089c8..5a9731f38d 100644 --- a/src/Core/Repositories/SqlServer/CipherRepository.cs +++ b/src/Core/Repositories/SqlServer/CipherRepository.cs @@ -57,7 +57,8 @@ namespace Bit.Core.Repositories.SqlServer new { UserId = userId }, commandType: CommandType.StoredProcedure); - return results.ToList(); + // Return distinct Id results + return results.GroupBy(c => c.Id).Select(g => g.First()).ToList(); } } @@ -70,7 +71,8 @@ namespace Bit.Core.Repositories.SqlServer new { UserId = userId }, commandType: CommandType.StoredProcedure); - return results.ToList(); + // Return distinct Id results + return results.GroupBy(c => c.Id).Select(g => g.First()).ToList(); } } @@ -87,7 +89,8 @@ namespace Bit.Core.Repositories.SqlServer }, commandType: CommandType.StoredProcedure); - return results.ToList(); + // Return distinct Id results + return results.GroupBy(c => c.Id).Select(g => g.First()).ToList(); } } diff --git a/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByIdUserId.sql b/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByIdUserId.sql index a8b7e4d19f..71850bf0fa 100644 --- a/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByIdUserId.sql +++ b/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByIdUserId.sql @@ -5,18 +5,18 @@ AS BEGIN SET NOCOUNT ON - SELECT DISTINCT + SELECT TOP 1 C.* FROM [dbo].[CipherDetails](@UserId) C LEFT JOIN - [dbo].[SubvaultCipher] SC ON SC.[CipherId] = C.[Id] + [dbo].[SubvaultCipher] SC ON C.[UserId] IS NULL AND SC.[CipherId] = C.[Id] LEFT JOIN [dbo].[SubvaultUser] SU ON SU.[SubvaultId] = SC.[SubvaultId] LEFT JOIN [dbo].[OrganizationUser] OU ON OU.[Id] = SU.[OrganizationUserId] LEFT JOIN - [dbo].[Organization] O ON O.[Id] = C.[OrganizationId] + [dbo].[Organization] O ON C.[UserId] IS NULL AND O.[Id] = C.[OrganizationId] WHERE C.Id = @Id AND ( diff --git a/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByTypeUserId.sql b/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByTypeUserId.sql index 40f707ff6b..e624a96989 100644 --- a/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByTypeUserId.sql +++ b/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByTypeUserId.sql @@ -5,18 +5,18 @@ AS BEGIN SET NOCOUNT ON - SELECT DISTINCT + SELECT C.* FROM [dbo].[CipherDetails](@UserId) C LEFT JOIN - [dbo].[SubvaultCipher] SC ON SC.[CipherId] = C.[Id] + [dbo].[SubvaultCipher] SC ON C.[UserId] IS NULL AND SC.[CipherId] = C.[Id] LEFT JOIN [dbo].[SubvaultUser] SU ON SU.[SubvaultId] = SC.[SubvaultId] LEFT JOIN [dbo].[OrganizationUser] OU ON OU.[Id] = SU.[OrganizationUserId] LEFT JOIN - [dbo].[Organization] O ON O.[Id] = C.[OrganizationId] + [dbo].[Organization] O ON C.[UserId] IS NULL AND O.[Id] = C.[OrganizationId] WHERE C.[Type] = @Type AND ( diff --git a/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByUserId.sql b/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByUserId.sql index 7d20f5974b..2ace5b4c3a 100644 --- a/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByUserId.sql +++ b/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByUserId.sql @@ -4,7 +4,7 @@ AS BEGIN SET NOCOUNT ON - SELECT DISTINCT + SELECT C.* FROM [dbo].[CipherDetails](@UserId) C @@ -15,7 +15,7 @@ BEGIN LEFT JOIN [dbo].[OrganizationUser] OU ON OU.[Id] = SU.[OrganizationUserId] LEFT JOIN - [dbo].[Organization] O ON O.[Id] = C.[OrganizationId] + [dbo].[Organization] O ON C.[UserId] IS NULL AND O.[Id] = C.[OrganizationId] WHERE C.[UserId] = @UserId OR ( diff --git a/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByUserIdHasSubvault.sql b/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByUserIdHasSubvault.sql index 9bb3099761..6e9da6481a 100644 --- a/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByUserIdHasSubvault.sql +++ b/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByUserIdHasSubvault.sql @@ -4,18 +4,18 @@ AS BEGIN SET NOCOUNT ON - SELECT DISTINCT + SELECT C.* FROM [dbo].[CipherDetails](@UserId) C INNER JOIN - [dbo].[SubvaultCipher] SC ON SC.[CipherId] = C.[Id] + [dbo].[SubvaultCipher] SC ON C.[UserId] IS NULL AND SC.[CipherId] = C.[Id] INNER JOIN [dbo].[SubvaultUser] SU ON SU.[SubvaultId] = SC.[SubvaultId] INNER JOIN [dbo].[OrganizationUser] OU ON OU.[Id] = SU.[OrganizationUserId] INNER JOIN - [dbo].[Organization] O ON O.[Id] = C.[OrganizationId] + [dbo].[Organization] O ON C.[UserId] IS NULL AND O.[Id] = C.[OrganizationId] WHERE OU.[UserId] = @UserId AND OU.[Status] = 2 -- 2 = Confirmed diff --git a/src/Sql/dbo/Stored Procedures/CipherFullDetails_ReadByIdUserId.sql b/src/Sql/dbo/Stored Procedures/CipherFullDetails_ReadByIdUserId.sql index 99a6aad4ed..2d498ad78f 100644 --- a/src/Sql/dbo/Stored Procedures/CipherFullDetails_ReadByIdUserId.sql +++ b/src/Sql/dbo/Stored Procedures/CipherFullDetails_ReadByIdUserId.sql @@ -5,7 +5,7 @@ AS BEGIN SET NOCOUNT ON - SELECT DISTINCT + SELECT TOP 1 C.*, CASE WHEN C.[OrganizationId] IS NULL THEN 1 @@ -14,13 +14,13 @@ BEGIN FROM [dbo].[CipherDetails](@UserId) C LEFT JOIN - [dbo].[SubvaultCipher] SC ON SC.[CipherId] = C.[Id] + [dbo].[SubvaultCipher] SC ON C.[UserId] IS NULL AND SC.[CipherId] = C.[Id] LEFT JOIN [dbo].[SubvaultUser] SU ON SU.[SubvaultId] = SC.[SubvaultId] LEFT JOIN [dbo].[OrganizationUser] OU ON OU.[Id] = SU.[OrganizationUserId] LEFT JOIN - [dbo].[Organization] O ON O.[Id] = C.[OrganizationId] + [dbo].[Organization] O ON C.[UserId] IS NULL AND O.[Id] = C.[OrganizationId] WHERE C.Id = @Id AND (