From 16f70a6527fdca0683631d93be5538841e2ee621 Mon Sep 17 00:00:00 2001 From: Maurycy Markowski Date: Thu, 3 Oct 2019 14:51:38 -0700 Subject: [PATCH] Fix to #17923 - FormatParameterValue results in @__prm='' for parameters whose value is NULL Change formatting to print null/DbNull parameters are NULL instead of '' --- .../DbParameterCollectionExtensions.cs | 4 +- .../DbParameterCollectionExtensionsTest.cs | 8 +- .../BuiltInDataTypesSqlServerTest.cs | 280 +++++++++--------- .../DataAnnotationSqlServerTest.cs | 14 +- .../Query/FromSqlQuerySqlServerTest.cs | 2 +- .../Query/FunkyDataQuerySqlServerTest.cs | 12 +- .../Query/GearsOfWarQuerySqlServerTest.cs | 6 +- .../Query/InheritanceSqlServerTest.cs | 2 +- .../Query/NullSemanticsQuerySqlServerTest.cs | 22 +- .../QueryFilterFuncletizationSqlServerTest.cs | 2 +- ...impleQuerySqlServerTest.ResultOperators.cs | 2 +- .../Query/SimpleQuerySqlServerTest.Where.cs | 8 +- .../DataAnnotationSqliteTest.cs | 14 +- 13 files changed, 188 insertions(+), 188 deletions(-) diff --git a/src/EFCore.Relational/Storage/Internal/DbParameterCollectionExtensions.cs b/src/EFCore.Relational/Storage/Internal/DbParameterCollectionExtensions.cs index c673ffdfae7..ad33a32a6d0 100644 --- a/src/EFCore.Relational/Storage/Internal/DbParameterCollectionExtensions.cs +++ b/src/EFCore.Relational/Storage/Internal/DbParameterCollectionExtensions.cs @@ -134,9 +134,9 @@ public static string FormatParameter( private static void FormatParameterValue(StringBuilder builder, object parameterValue) { - if (parameterValue == null) + if (parameterValue == null || parameterValue == DBNull.Value) { - builder.Append("''"); + builder.Append("NULL"); } else if (parameterValue.GetType() == typeof(DateTime)) { diff --git a/test/EFCore.Relational.Tests/Utilities/DbParameterCollectionExtensionsTest.cs b/test/EFCore.Relational.Tests/Utilities/DbParameterCollectionExtensionsTest.cs index 6fd69f2b203..783876adc54 100644 --- a/test/EFCore.Relational.Tests/Utilities/DbParameterCollectionExtensionsTest.cs +++ b/test/EFCore.Relational.Tests/Utilities/DbParameterCollectionExtensionsTest.cs @@ -98,7 +98,7 @@ public void Formats_non_unicode_non_nullable_sized_string_parameter() public void Formats_null_string_parameter() { Assert.Equal( - "@param=''", + "@param=NULL", DbParameterCollectionExtensions.FormatParameter( "@param", null, true, ParameterDirection.Input, DbType.String, true, 0, 0, 0)); } @@ -107,7 +107,7 @@ public void Formats_null_string_parameter() public void Formats_null_non_unicode_string_parameter() { Assert.Equal( - "@param='' (DbType = AnsiString)", + "@param=NULL (DbType = AnsiString)", DbParameterCollectionExtensions.FormatParameter( "@param", null, true, ParameterDirection.Input, DbType.AnsiString, true, 0, 0, 0)); } @@ -143,7 +143,7 @@ public void Formats_fixed_length_non_nullable_sized_string_parameter() public void Formats_null_fixed_length_string_parameter() { Assert.Equal( - "@param='' (DbType = StringFixedLength)", + "@param=NULL (DbType = StringFixedLength)", DbParameterCollectionExtensions.FormatParameter( "@param", null, true, ParameterDirection.Input, DbType.StringFixedLength, true, 0, 0, 0)); } @@ -206,7 +206,7 @@ public void Formats_int_parameter_with_no_type() public void Formats_null_nullable_int_parameter() { Assert.Equal( - "@param='' (DbType = Int32)", + "@param=NULL (DbType = Int32)", DbParameterCollectionExtensions.FormatParameter( "@param", null, true, ParameterDirection.Input, DbType.Int32, true, 0, 0, 0)); } diff --git a/test/EFCore.SqlServer.FunctionalTests/BuiltInDataTypesSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/BuiltInDataTypesSqlServerTest.cs index 7b202e9ae4e..f5cf9a0dfa1 100644 --- a/test/EFCore.SqlServer.FunctionalTests/BuiltInDataTypesSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/BuiltInDataTypesSqlServerTest.cs @@ -1052,57 +1052,57 @@ public virtual void Can_insert_and_read_back_all_mapped_data_types_set_to_null() var parameters = DumpParameters(); Assert.Equal( @"@p0='78' -@p1='' -@p2='' (DbType = Byte) -@p3='' (Size = 8000) (DbType = Binary) -@p4='' (Size = 8000) (DbType = Binary) -@p5='' (Size = 8000) (DbType = Binary) -@p6='' (Size = 1) (DbType = AnsiString) -@p7='' (Size = 1) (DbType = AnsiString) -@p8='' (DbType = Int32) -@p9='' (Size = 1) -@p10='' (Size = 1) -@p11='' (Size = 1) -@p12='' (Size = 1) -@p13='' (Size = 1) (DbType = AnsiString) -@p14='' (Size = 1) (DbType = AnsiString) -@p15='' (DbType = Date) -@p16='' (DbType = DateTime) -@p17='' (DbType = DateTime2) -@p18='' (DbType = DateTime) -@p19='' (DbType = DateTimeOffset) -@p20='' -@p21='' -@p22='' -@p23='' -@p24='' -@p25='' -@p26='' -@p27='' (Size = 20) -@p28='' (Size = 8000) (DbType = AnsiString) -@p29='' -@p30='' (DbType = Guid) -@p31='' (DbType = Int64) -@p32='' (DbType = Int16) -@p33='' (DbType = Byte) -@p34='' (DbType = Int16) -@p35='' -@p36='' -@p37='' (Size = 8000) (DbType = AnsiString) -@p38='' (Size = 8000) (DbType = AnsiString) -@p39='' (Size = 4000) -@p40='' (Size = 4000) -@p41='' (Size = 4000) -@p42='' (Size = 4000) -@p43='' (Size = 8000) (DbType = AnsiString) -@p44='' (Size = 8000) (DbType = AnsiString) -@p45='' -@p46='' (DbType = Int32) -@p47='' (DbType = Int16) -@p48='' (DbType = Int64) -@p49='' (DbType = Int32) -@p50='' (DbType = Int64) -@p51=''", +@p1=NULL +@p2=NULL (DbType = Byte) +@p3=NULL (Size = 8000) (DbType = Binary) +@p4=NULL (Size = 8000) (DbType = Binary) +@p5=NULL (Size = 8000) (DbType = Binary) +@p6=NULL (Size = 1) (DbType = AnsiString) +@p7=NULL (Size = 1) (DbType = AnsiString) +@p8=NULL (DbType = Int32) +@p9=NULL (Size = 1) +@p10=NULL (Size = 1) +@p11=NULL (Size = 1) +@p12=NULL (Size = 1) +@p13=NULL (Size = 1) (DbType = AnsiString) +@p14=NULL (Size = 1) (DbType = AnsiString) +@p15=NULL (DbType = Date) +@p16=NULL (DbType = DateTime) +@p17=NULL (DbType = DateTime2) +@p18=NULL (DbType = DateTime) +@p19=NULL (DbType = DateTimeOffset) +@p20=NULL +@p21=NULL +@p22=NULL +@p23=NULL +@p24=NULL +@p25=NULL +@p26=NULL +@p27=NULL (Size = 20) +@p28=NULL (Size = 8000) (DbType = AnsiString) +@p29=NULL +@p30=NULL (DbType = Guid) +@p31=NULL (DbType = Int64) +@p32=NULL (DbType = Int16) +@p33=NULL (DbType = Byte) +@p34=NULL (DbType = Int16) +@p35=NULL +@p36=NULL +@p37=NULL (Size = 8000) (DbType = AnsiString) +@p38=NULL (Size = 8000) (DbType = AnsiString) +@p39=NULL (Size = 4000) +@p40=NULL (Size = 4000) +@p41=NULL (Size = 4000) +@p42=NULL (Size = 4000) +@p43=NULL (Size = 8000) (DbType = AnsiString) +@p44=NULL (Size = 8000) (DbType = AnsiString) +@p45=NULL +@p46=NULL (DbType = Int32) +@p47=NULL (DbType = Int16) +@p48=NULL (DbType = Int64) +@p49=NULL (DbType = Int32) +@p50=NULL (DbType = Int64) +@p51=NULL", parameters, ignoreLineEndingDifferences: true); @@ -1271,25 +1271,25 @@ public virtual void Can_insert_and_read_back_nulls_for_all_mapped_sized_data_typ var parameters = DumpParameters(); Assert.Equal( @"@p0='78' -@p1='' (Size = 3) (DbType = Binary) -@p2='' (Size = 3) (DbType = Binary) -@p3='' (Size = 3) (DbType = Binary) -@p4='' (Size = 3) (DbType = AnsiString) -@p5='' (Size = 3) (DbType = AnsiString) -@p6='' (Size = 3) -@p7='' (Size = 3) -@p8='' (Size = 3) -@p9='' (Size = 3) (DbType = AnsiString) -@p10='' (Size = 3) (DbType = AnsiString) -@p11='' (Size = 3) (DbType = AnsiString) -@p12='' (Size = 3) (DbType = AnsiString) -@p13='' (Size = 3) (DbType = AnsiString) -@p14='' (Size = 3) -@p15='' (Size = 3) -@p16='' (Size = 3) -@p17='' (Size = 3) -@p18='' (Size = 3) -@p19='' (Size = 3) (DbType = AnsiString)", +@p1=NULL (Size = 3) (DbType = Binary) +@p2=NULL (Size = 3) (DbType = Binary) +@p3=NULL (Size = 3) (DbType = Binary) +@p4=NULL (Size = 3) (DbType = AnsiString) +@p5=NULL (Size = 3) (DbType = AnsiString) +@p6=NULL (Size = 3) +@p7=NULL (Size = 3) +@p8=NULL (Size = 3) +@p9=NULL (Size = 3) (DbType = AnsiString) +@p10=NULL (Size = 3) (DbType = AnsiString) +@p11=NULL (Size = 3) (DbType = AnsiString) +@p12=NULL (Size = 3) (DbType = AnsiString) +@p13=NULL (Size = 3) (DbType = AnsiString) +@p14=NULL (Size = 3) +@p15=NULL (Size = 3) +@p16=NULL (Size = 3) +@p17=NULL (Size = 3) +@p18=NULL (Size = 3) +@p19=NULL (Size = 3) (DbType = AnsiString)", parameters, ignoreLineEndingDifferences: true); @@ -1806,58 +1806,58 @@ public virtual void Can_insert_and_read_back_all_mapped_data_types_set_to_null_w var parameters = DumpParameters(); Assert.Equal( - @"@p0='' -@p1='' (DbType = Byte) -@p2='' (Size = 8000) (DbType = Binary) -@p3='' (Size = 8000) (DbType = Binary) -@p4='' (Size = 8000) (DbType = Binary) -@p5='' (Size = 1) (DbType = AnsiString) -@p6='' (Size = 1) (DbType = AnsiString) -@p7='' (DbType = Int32) -@p8='' (Size = 1) -@p9='' (Size = 1) -@p10='' (Size = 1) -@p11='' (Size = 1) -@p12='' (Size = 1) (DbType = AnsiString) -@p13='' (Size = 1) (DbType = AnsiString) -@p14='' (DbType = Date) -@p15='' (DbType = DateTime) -@p16='' (DbType = DateTime2) -@p17='' (DbType = DateTime) -@p18='' (DbType = DateTimeOffset) -@p19='' -@p20='' -@p21='' -@p22='' -@p23='' -@p24='' -@p25='' -@p26='' (Size = 20) -@p27='' (Size = 8000) (DbType = AnsiString) -@p28='' -@p29='' (DbType = Guid) + @"@p0=NULL +@p1=NULL (DbType = Byte) +@p2=NULL (Size = 8000) (DbType = Binary) +@p3=NULL (Size = 8000) (DbType = Binary) +@p4=NULL (Size = 8000) (DbType = Binary) +@p5=NULL (Size = 1) (DbType = AnsiString) +@p6=NULL (Size = 1) (DbType = AnsiString) +@p7=NULL (DbType = Int32) +@p8=NULL (Size = 1) +@p9=NULL (Size = 1) +@p10=NULL (Size = 1) +@p11=NULL (Size = 1) +@p12=NULL (Size = 1) (DbType = AnsiString) +@p13=NULL (Size = 1) (DbType = AnsiString) +@p14=NULL (DbType = Date) +@p15=NULL (DbType = DateTime) +@p16=NULL (DbType = DateTime2) +@p17=NULL (DbType = DateTime) +@p18=NULL (DbType = DateTimeOffset) +@p19=NULL +@p20=NULL +@p21=NULL +@p22=NULL +@p23=NULL +@p24=NULL +@p25=NULL +@p26=NULL (Size = 20) +@p27=NULL (Size = 8000) (DbType = AnsiString) +@p28=NULL +@p29=NULL (DbType = Guid) @p30='78' (Nullable = true) -@p31='' (DbType = Int64) -@p32='' (DbType = Int16) -@p33='' (DbType = Byte) -@p34='' (DbType = Int16) -@p35='' -@p36='' -@p37='' (Size = 8000) (DbType = AnsiString) -@p38='' (Size = 8000) (DbType = AnsiString) -@p39='' (Size = 4000) -@p40='' (Size = 4000) -@p41='' (Size = 4000) -@p42='' (Size = 4000) -@p43='' (Size = 8000) (DbType = AnsiString) -@p44='' (Size = 8000) (DbType = AnsiString) -@p45='' -@p46='' (DbType = Int32) -@p47='' (DbType = Int64) -@p48='' (DbType = Int32) -@p49='' (DbType = Int64) -@p50='' -@p51='' (DbType = Int16)", +@p31=NULL (DbType = Int64) +@p32=NULL (DbType = Int16) +@p33=NULL (DbType = Byte) +@p34=NULL (DbType = Int16) +@p35=NULL +@p36=NULL +@p37=NULL (Size = 8000) (DbType = AnsiString) +@p38=NULL (Size = 8000) (DbType = AnsiString) +@p39=NULL (Size = 4000) +@p40=NULL (Size = 4000) +@p41=NULL (Size = 4000) +@p42=NULL (Size = 4000) +@p43=NULL (Size = 8000) (DbType = AnsiString) +@p44=NULL (Size = 8000) (DbType = AnsiString) +@p45=NULL +@p46=NULL (DbType = Int32) +@p47=NULL (DbType = Int64) +@p48=NULL (DbType = Int32) +@p49=NULL (DbType = Int64) +@p50=NULL +@p51=NULL (DbType = Int16)", parameters, ignoreLineEndingDifferences: true); @@ -2027,26 +2027,26 @@ public virtual void Can_insert_and_read_back_nulls_for_all_mapped_sized_data_typ var parameters = DumpParameters(); Assert.Equal( - @"@p0='' (Size = 3) (DbType = Binary) -@p1='' (Size = 3) (DbType = Binary) -@p2='' (Size = 3) (DbType = Binary) -@p3='' (Size = 3) (DbType = AnsiString) -@p4='' (Size = 3) (DbType = AnsiString) -@p5='' (Size = 3) -@p6='' (Size = 3) -@p7='' (Size = 3) -@p8='' (Size = 3) (DbType = AnsiString) + @"@p0=NULL (Size = 3) (DbType = Binary) +@p1=NULL (Size = 3) (DbType = Binary) +@p2=NULL (Size = 3) (DbType = Binary) +@p3=NULL (Size = 3) (DbType = AnsiString) +@p4=NULL (Size = 3) (DbType = AnsiString) +@p5=NULL (Size = 3) +@p6=NULL (Size = 3) +@p7=NULL (Size = 3) +@p8=NULL (Size = 3) (DbType = AnsiString) @p9='78' -@p10='' (Size = 3) (DbType = AnsiString) -@p11='' (Size = 3) (DbType = AnsiString) -@p12='' (Size = 3) (DbType = AnsiString) -@p13='' (Size = 3) (DbType = AnsiString) -@p14='' (Size = 3) -@p15='' (Size = 3) -@p16='' (Size = 3) -@p17='' (Size = 3) -@p18='' (Size = 3) -@p19='' (Size = 3) (DbType = AnsiString)", +@p10=NULL (Size = 3) (DbType = AnsiString) +@p11=NULL (Size = 3) (DbType = AnsiString) +@p12=NULL (Size = 3) (DbType = AnsiString) +@p13=NULL (Size = 3) (DbType = AnsiString) +@p14=NULL (Size = 3) +@p15=NULL (Size = 3) +@p16=NULL (Size = 3) +@p17=NULL (Size = 3) +@p18=NULL (Size = 3) +@p19=NULL (Size = 3) (DbType = AnsiString)", parameters, ignoreLineEndingDifferences: true); diff --git a/test/EFCore.SqlServer.FunctionalTests/DataAnnotationSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/DataAnnotationSqlServerTest.cs index 0aa83fb8cfc..996ceb181f5 100644 --- a/test/EFCore.SqlServer.FunctionalTests/DataAnnotationSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/DataAnnotationSqlServerTest.cs @@ -206,7 +206,7 @@ public override void DatabaseGeneratedAttribute_autogenerates_values_when_set_to base.DatabaseGeneratedAttribute_autogenerates_values_when_set_to_identity(); AssertSql( - @"@p0='' (Size = 10) + @"@p0=NULL (Size = 10) @p1='Third' (Nullable = false) (Size = 4000) @p2='00000000-0000-0000-0000-000000000003' @p3='Third Additional Name' (Size = 4000) @@ -257,7 +257,7 @@ public override void RequiredAttribute_for_navigation_throws_while_inserting_nul base.RequiredAttribute_for_navigation_throws_while_inserting_null_value(); AssertSql( - @"@p0='' (DbType = Int32) + @"@p0=NULL (DbType = Int32) @p1='1' SET NOCOUNT ON; @@ -267,8 +267,8 @@ SELECT [Id] FROM [BookDetails] WHERE @@ROWCOUNT = 1 AND [Id] = scope_identity();", // - @"@p0='' (DbType = Int32) -@p1='' (Nullable = false) (DbType = Int32) + @"@p0=NULL (DbType = Int32) +@p1=NULL (Nullable = false) (DbType = Int32) SET NOCOUNT ON; INSERT INTO [BookDetails] ([AdditionalBookDetailsId], [AnotherBookId]) @@ -283,7 +283,7 @@ public override void RequiredAttribute_for_property_throws_while_inserting_null_ base.RequiredAttribute_for_property_throws_while_inserting_null_value(); AssertSql( - @"@p0='' (Size = 10) + @"@p0=NULL (Size = 10) @p1='ValidString' (Nullable = false) (Size = 4000) @p2='00000000-0000-0000-0000-000000000001' @p3='Two' (Size = 4000) @@ -296,8 +296,8 @@ SELECT [UniqueNo] FROM [Sample] WHERE @@ROWCOUNT = 1 AND [UniqueNo] = scope_identity();", // - @"@p0='' (Size = 10) -@p1='' (Nullable = false) (Size = 4000) + @"@p0=NULL (Size = 10) +@p1=NULL (Nullable = false) (Size = 4000) @p2='00000000-0000-0000-0000-000000000002' @p3='Two' (Size = 4000) @p4='One' (Size = 4000) diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/FromSqlQuerySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/FromSqlQuerySqlServerTest.cs index 58448032930..196de2d981c 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/FromSqlQuerySqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/FromSqlQuerySqlServerTest.cs @@ -322,7 +322,7 @@ public override void FromSqlRaw_queryable_with_null_parameter() base.FromSqlRaw_queryable_with_null_parameter(); AssertSql( - @"p0='' (Nullable = false) + @"p0=NULL (Nullable = false) SELECT * FROM ""Employees"" WHERE ""ReportsTo"" = @p0 OR (""ReportsTo"" IS NULL AND @p0 IS NULL)"); } diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/FunkyDataQuerySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/FunkyDataQuerySqlServerTest.cs index 77fa8072f1a..e19b1071d5b 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/FunkyDataQuerySqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/FunkyDataQuerySqlServerTest.cs @@ -71,7 +71,7 @@ SELECT [f].[FirstName] FROM [FunkyCustomers] AS [f] WHERE ((@__prm2_0 = N'') AND @__prm2_0 IS NOT NULL) OR (CHARINDEX(@__prm2_0, [f].[FirstName]) > 0)", // - @"@__prm3_0='' (Size = 4000) + @"@__prm3_0=NULL (Size = 4000) SELECT [f].[FirstName] FROM [FunkyCustomers] AS [f] @@ -101,7 +101,7 @@ SELECT [f].[FirstName] FROM [FunkyCustomers] AS [f] WHERE ((@__prm7_0 <> N'') OR @__prm7_0 IS NULL) AND (CHARINDEX(@__prm7_0, [f].[FirstName]) <= 0)", // - @"@__prm8_0='' (Size = 4000) + @"@__prm8_0=NULL (Size = 4000) SELECT [f].[FirstName] FROM [FunkyCustomers] AS [f] @@ -184,7 +184,7 @@ SELECT [f].[FirstName] FROM [FunkyCustomers] AS [f] WHERE ((@__prm2_0 = N'') AND @__prm2_0 IS NOT NULL) OR ([f].[FirstName] IS NOT NULL AND (@__prm2_0 IS NOT NULL AND (([f].[FirstName] LIKE [f].[FirstName] + N'%') AND (((LEFT([f].[FirstName], LEN(@__prm2_0)) = @__prm2_0) AND (LEFT([f].[FirstName], LEN(@__prm2_0)) IS NOT NULL AND @__prm2_0 IS NOT NULL)) OR (LEFT([f].[FirstName], LEN(@__prm2_0)) IS NULL AND @__prm2_0 IS NULL)))))", // - @"@__prm3_0='' (Size = 4000) + @"@__prm3_0=NULL (Size = 4000) SELECT [f].[FirstName] FROM [FunkyCustomers] AS [f] @@ -214,7 +214,7 @@ SELECT [f].[FirstName] FROM [FunkyCustomers] AS [f] WHERE ((@__prm7_0 <> N'') OR @__prm7_0 IS NULL) AND ([f].[FirstName] IS NOT NULL AND (@__prm7_0 IS NOT NULL AND (NOT ([f].[FirstName] LIKE [f].[FirstName] + N'%') OR (((LEFT([f].[FirstName], LEN(@__prm7_0)) <> @__prm7_0) OR (LEFT([f].[FirstName], LEN(@__prm7_0)) IS NULL OR @__prm7_0 IS NULL)) AND (LEFT([f].[FirstName], LEN(@__prm7_0)) IS NOT NULL OR @__prm7_0 IS NOT NULL)))))", // - @"@__prm8_0='' (Size = 4000) + @"@__prm8_0=NULL (Size = 4000) SELECT [f].[FirstName] FROM [FunkyCustomers] AS [f] @@ -297,7 +297,7 @@ SELECT [f].[FirstName] FROM [FunkyCustomers] AS [f] WHERE ((@__prm2_0 = N'') AND @__prm2_0 IS NOT NULL) OR ([f].[FirstName] IS NOT NULL AND (@__prm2_0 IS NOT NULL AND (((RIGHT([f].[FirstName], LEN(@__prm2_0)) = @__prm2_0) AND (RIGHT([f].[FirstName], LEN(@__prm2_0)) IS NOT NULL AND @__prm2_0 IS NOT NULL)) OR (RIGHT([f].[FirstName], LEN(@__prm2_0)) IS NULL AND @__prm2_0 IS NULL))))", // - @"@__prm3_0='' (Size = 4000) + @"@__prm3_0=NULL (Size = 4000) SELECT [f].[FirstName] FROM [FunkyCustomers] AS [f] @@ -327,7 +327,7 @@ SELECT [f].[FirstName] FROM [FunkyCustomers] AS [f] WHERE ((@__prm7_0 <> N'') OR @__prm7_0 IS NULL) AND ([f].[FirstName] IS NOT NULL AND (@__prm7_0 IS NOT NULL AND (((RIGHT([f].[FirstName], LEN(@__prm7_0)) <> @__prm7_0) OR (RIGHT([f].[FirstName], LEN(@__prm7_0)) IS NULL OR @__prm7_0 IS NULL)) AND (RIGHT([f].[FirstName], LEN(@__prm7_0)) IS NOT NULL OR @__prm7_0 IS NOT NULL))))", // - @"@__prm8_0='' (Size = 4000) + @"@__prm8_0=NULL (Size = 4000) SELECT [f].[FirstName] FROM [FunkyCustomers] AS [f] diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/GearsOfWarQuerySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/GearsOfWarQuerySqlServerTest.cs index b22d1fd1aae..a27ca449234 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/GearsOfWarQuerySqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/GearsOfWarQuerySqlServerTest.cs @@ -410,7 +410,7 @@ public override async Task Where_nullable_enum_with_nullable_parameter(bool isAs FROM [Weapons] AS [w] WHERE (([w].[AmmunitionType] = @__ammunitionType_0) AND ([w].[AmmunitionType] IS NOT NULL AND @__ammunitionType_0 IS NOT NULL)) OR ([w].[AmmunitionType] IS NULL AND @__ammunitionType_0 IS NULL)", // - @"@__ammunitionType_0='' (DbType = Int32) + @"@__ammunitionType_0=NULL (DbType = Int32) SELECT [w].[Id], [w].[AmmunitionType], [w].[IsAutomatic], [w].[Name], [w].[OwnerFullName], [w].[SynergyWithId] FROM [Weapons] AS [w] @@ -492,7 +492,7 @@ public override async Task Where_bitwise_and_nullable_enum_with_nullable_paramet FROM [Weapons] AS [w] WHERE ([w].[AmmunitionType] & @__ammunitionType_0) > 0", // - @"@__ammunitionType_0='' (DbType = Int32) + @"@__ammunitionType_0=NULL (DbType = Int32) SELECT [w].[Id], [w].[AmmunitionType], [w].[IsAutomatic], [w].[Name], [w].[OwnerFullName], [w].[SynergyWithId] FROM [Weapons] AS [w] @@ -805,7 +805,7 @@ END AS [Cartridge] FROM [Weapons] AS [w] WHERE (([w].[AmmunitionType] = @__ammunitionType_0) AND ([w].[AmmunitionType] IS NOT NULL AND @__ammunitionType_0 IS NOT NULL)) OR ([w].[AmmunitionType] IS NULL AND @__ammunitionType_0 IS NULL)", // - @"@__ammunitionType_0='' (DbType = Int32) + @"@__ammunitionType_0=NULL (DbType = Int32) SELECT [w].[Id], CASE WHEN (([w].[AmmunitionType] = @__ammunitionType_0) AND ([w].[AmmunitionType] IS NOT NULL AND @__ammunitionType_0 IS NOT NULL)) OR ([w].[AmmunitionType] IS NULL AND @__ammunitionType_0 IS NULL) THEN CAST(1 AS bit) diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/InheritanceSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/InheritanceSqlServerTest.cs index 82278de3a8c..0889099f460 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/InheritanceSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/InheritanceSqlServerTest.cs @@ -376,7 +376,7 @@ FROM [Country] AS [c] @p1='1' @p2='Kiwi' (Nullable = false) (Size = 4000) @p3='Little spotted kiwi' (Size = 4000) -@p4='' (Size = 100) +@p4=NULL (Size = 100) @p5='True' @p6='0' (Size = 1) diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/NullSemanticsQuerySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/NullSemanticsQuerySqlServerTest.cs index b8315dbf884..ee0862b6168 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/NullSemanticsQuerySqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/NullSemanticsQuerySqlServerTest.cs @@ -678,7 +678,7 @@ public override void Compare_nullable_with_null_parameter_equal() base.Compare_nullable_with_null_parameter_equal(); AssertSql( - @"@__prm_0='' (Size = 4000) + @"@__prm_0=NULL (Size = 4000) SELECT [e].[Id] FROM [Entities1] AS [e] @@ -770,7 +770,7 @@ public override void Where_multiple_ors_with_nullable_parameter() base.Where_multiple_ors_with_nullable_parameter(); AssertSql( - @"@__prm_0='' (Size = 4000) + @"@__prm_0=NULL (Size = 4000) SELECT [e].[Id] FROM [Entities1] AS [e] @@ -782,8 +782,8 @@ public override void Where_multiple_ands_with_nullable_parameter_and_constant() base.Where_multiple_ands_with_nullable_parameter_and_constant(); AssertSql( - @"@__prm1_0='' (Size = 4000) -@__prm2_1='' (Size = 4000) + @"@__prm1_0=NULL (Size = 4000) +@__prm2_1=NULL (Size = 4000) @__prm3_2='Blah' (Size = 4000) SELECT [e].[Id] @@ -796,8 +796,8 @@ public override void Where_multiple_ands_with_nullable_parameter_and_constant_no base.Where_multiple_ands_with_nullable_parameter_and_constant_not_optimized(); AssertSql( - @"@__prm1_0='' (Size = 4000) -@__prm2_1='' (Size = 4000) + @"@__prm1_0=NULL (Size = 4000) +@__prm2_1=NULL (Size = 4000) @__prm3_2='Blah' (Size = 4000) SELECT [e].[Id] @@ -820,7 +820,7 @@ public override void Where_equal_nullable_with_null_value_parameter() base.Where_equal_nullable_with_null_value_parameter(); AssertSql( - @"@__prm_0='' (Size = 4000) + @"@__prm_0=NULL (Size = 4000) SELECT [e].[Id] FROM [Entities1] AS [e] @@ -832,7 +832,7 @@ public override void Where_not_equal_nullable_with_null_value_parameter() base.Where_not_equal_nullable_with_null_value_parameter(); AssertSql( - @"@__prm_0='' (Size = 4000) + @"@__prm_0=NULL (Size = 4000) SELECT [e].[Id] FROM [Entities1] AS [e] @@ -1091,7 +1091,7 @@ public override void Where_equal_using_relational_null_semantics_with_parameter( base.Where_equal_using_relational_null_semantics_with_parameter(); AssertSql( - @"@__prm_0='' + @"@__prm_0=NULL SELECT [e].[Id] FROM [Entities1] AS [e] @@ -1123,7 +1123,7 @@ public override void Where_not_equal_using_relational_null_semantics_with_parame base.Where_not_equal_using_relational_null_semantics_with_parameter(); AssertSql( - @"@__prm_0='' + @"@__prm_0=NULL SELECT [e].[Id] FROM [Entities1] AS [e] @@ -1199,7 +1199,7 @@ public override void Where_comparison_null_semantics_optimization_works_with_com base.Where_comparison_null_semantics_optimization_works_with_complex_predicates(); AssertSql( - @"@__prm_0='' (Size = 4000) + @"@__prm_0=NULL (Size = 4000) SELECT [e].[Id] FROM [Entities1] AS [e] diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/QueryFilterFuncletizationSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/QueryFilterFuncletizationSqlServerTest.cs index 59451e7d4b5..26684356692 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/QueryFilterFuncletizationSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/QueryFilterFuncletizationSqlServerTest.cs @@ -186,7 +186,7 @@ FROM [ShortCircuitFilter] AS [s] WHERE ([s].[IsDeleted] <> CAST(1 AS bit)) AND ((@__ef_filter__p_0 = CAST(1 AS bit)) OR ((@__ef_filter__IsModerated_1 = [s].[IsModerated]) AND @__ef_filter__IsModerated_1 IS NOT NULL))", // @"@__ef_filter__p_0='True' -@__ef_filter__IsModerated_1='' +@__ef_filter__IsModerated_1=NULL SELECT [s].[Id], [s].[IsDeleted], [s].[IsModerated] FROM [ShortCircuitFilter] AS [s] diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/SimpleQuerySqlServerTest.ResultOperators.cs b/test/EFCore.SqlServer.FunctionalTests/Query/SimpleQuerySqlServerTest.ResultOperators.cs index 10d04eaa365..f78d1e1d294 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/SimpleQuerySqlServerTest.ResultOperators.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/SimpleQuerySqlServerTest.ResultOperators.cs @@ -1152,7 +1152,7 @@ public override void Contains_over_entityType_with_null_should_rewrite_to_identi base.Contains_over_entityType_with_null_should_rewrite_to_identity_equality(); AssertSql( - @"@__entity_equality_p_0_OrderID='' (DbType = Int32) + @"@__entity_equality_p_0_OrderID=NULL (DbType = Int32) SELECT CASE WHEN @__entity_equality_p_0_OrderID IN ( diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/SimpleQuerySqlServerTest.Where.cs b/test/EFCore.SqlServer.FunctionalTests/Query/SimpleQuerySqlServerTest.Where.cs index e5f860b8d82..59fd99e1794 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/SimpleQuerySqlServerTest.Where.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/SimpleQuerySqlServerTest.Where.cs @@ -335,7 +335,7 @@ FROM [Employees] AS [e] FROM [Employees] AS [e] WHERE ((CAST([e].[ReportsTo] AS bigint) = @__p_0) AND (CAST([e].[ReportsTo] AS bigint) IS NOT NULL AND @__p_0 IS NOT NULL)) OR (CAST([e].[ReportsTo] AS bigint) IS NULL AND @__p_0 IS NULL)", // - @"@__p_0='' (DbType = Int64) + @"@__p_0=NULL (DbType = Int64) SELECT [e].[EmployeeID], [e].[City], [e].[Country], [e].[FirstName], [e].[ReportsTo], [e].[Title] FROM [Employees] AS [e] @@ -347,7 +347,7 @@ public override async Task Where_simple_closure_via_query_cache_nullable_type_re await base.Where_simple_closure_via_query_cache_nullable_type_reverse(isAsync); AssertSql( - @"@__p_0='' (DbType = Int64) + @"@__p_0=NULL (DbType = Int64) SELECT [e].[EmployeeID], [e].[City], [e].[Country], [e].[FirstName], [e].[ReportsTo], [e].[Title] FROM [Employees] AS [e] @@ -615,13 +615,13 @@ public override async Task Where_equals_on_null_nullable_int_types(bool isAsync) await base.Where_equals_on_null_nullable_int_types(isAsync); AssertSql( - @"@__nullableIntPrm_0='' (DbType = Int32) + @"@__nullableIntPrm_0=NULL (DbType = Int32) SELECT [e].[EmployeeID], [e].[City], [e].[Country], [e].[FirstName], [e].[ReportsTo], [e].[Title] FROM [Employees] AS [e] WHERE ((@__nullableIntPrm_0 = [e].[ReportsTo]) AND (@__nullableIntPrm_0 IS NOT NULL AND [e].[ReportsTo] IS NOT NULL)) OR (@__nullableIntPrm_0 IS NULL AND [e].[ReportsTo] IS NULL)", // - @"@__nullableIntPrm_0='' (DbType = Int64) + @"@__nullableIntPrm_0=NULL (DbType = Int64) SELECT [e].[EmployeeID], [e].[City], [e].[Country], [e].[FirstName], [e].[ReportsTo], [e].[Title] FROM [Employees] AS [e] diff --git a/test/EFCore.Sqlite.FunctionalTests/DataAnnotationSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/DataAnnotationSqliteTest.cs index ddc657ef19c..65334541c09 100644 --- a/test/EFCore.Sqlite.FunctionalTests/DataAnnotationSqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/DataAnnotationSqliteTest.cs @@ -155,7 +155,7 @@ public override void DatabaseGeneratedAttribute_autogenerates_values_when_set_to base.DatabaseGeneratedAttribute_autogenerates_values_when_set_to_identity(); AssertSql( - @"@p0='' + @"@p0=NULL @p1='Third' (Nullable = false) (Size = 5) @p2='00000000-0000-0000-0000-000000000003' (DbType = String) @p3='Third Additional Name' (Size = 21) @@ -182,7 +182,7 @@ public override void RequiredAttribute_for_navigation_throws_while_inserting_nul base.RequiredAttribute_for_navigation_throws_while_inserting_null_value(); AssertSql( - @"@p0='' + @"@p0=NULL @p1='1' (DbType = String) INSERT INTO ""BookDetails"" (""AdditionalBookDetailsId"", ""AnotherBookId"") @@ -191,8 +191,8 @@ public override void RequiredAttribute_for_navigation_throws_while_inserting_nul FROM ""BookDetails"" WHERE changes() = 1 AND ""rowid"" = last_insert_rowid();", // - @"@p0='' -@p1='' (Nullable = false) + @"@p0=NULL +@p1=NULL (Nullable = false) INSERT INTO ""BookDetails"" (""AdditionalBookDetailsId"", ""AnotherBookId"") VALUES (@p0, @p1); @@ -206,7 +206,7 @@ public override void RequiredAttribute_for_property_throws_while_inserting_null_ base.RequiredAttribute_for_property_throws_while_inserting_null_value(); AssertSql( - @"@p0='' + @"@p0=NULL @p1='ValidString' (Nullable = false) (Size = 11) @p2='00000000-0000-0000-0000-000000000001' (DbType = String) @p3='Two' (Size = 3) @@ -218,8 +218,8 @@ public override void RequiredAttribute_for_property_throws_while_inserting_null_ FROM ""Sample"" WHERE changes() = 1 AND ""rowid"" = last_insert_rowid();", // - @"@p0='' -@p1='' (Nullable = false) + @"@p0=NULL +@p1=NULL (Nullable = false) @p2='00000000-0000-0000-0000-000000000002' (DbType = String) @p3='Two' (Size = 3) @p4='One' (Size = 3)