Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<Project>
<PropertyGroup>
<VersionPrefix>10.0.0-preview.7</VersionPrefix>
<VersionPrefix>10.0.0-rc.2</VersionPrefix>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>latest</LangVersion>
<Nullable>enable</Nullable>
Expand Down
4 changes: 2 additions & 2 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project>
<PropertyGroup>
<EFCoreVersion>10.0.0-rc.1.25416.111</EFCoreVersion>
<MicrosoftExtensionsVersion>10.0.0-rc.1.25416.111</MicrosoftExtensionsVersion>
<EFCoreVersion>10.0.0-rc.2.25431.101</EFCoreVersion>
<MicrosoftExtensionsVersion>10.0.0-rc.1.25431.101</MicrosoftExtensionsVersion>
<NpgsqlVersion>9.0.3</NpgsqlVersion>
</PropertyGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,8 @@ public override async Task Update_complex_type_to_parameter(bool async)
"""
@complex_type_p_AddressLine1='New AddressLine1'
@complex_type_p_AddressLine2='New AddressLine2'
@complex_type_p_Tags={ 'new_tag1', 'new_tag2' } (DbType = Object)
@complex_type_p_Tags={ 'new_tag1'
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@cincuranet see this change after syncing to latest upstream EF; this is most likely because of dotnet/efcore#36594. I think we should improve the logic slightly.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The logic there, sadly, is inherently broken and can't be fixed without redoing the whole parameter processing.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well, couldn't we e.g. track parentheses characters in the logic you added ('{', '(', '[') and ignore commas when they're inside?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(for that matter, we should also ignore commas within quotes if we're not already doing so)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, because single quotes are not escaped. I.e. @complex_type_p_AddressLine1='foo'bar'. Although we can "see" that foo'bar is the value, parsing the whole string with parameters is not reliable. We need to change it from having single string without escaping on input to either add escaping, or better pass a list.

'new_tag2' } (DbType = Object)
@complex_type_p_ZipCode='99999' (Nullable = true)
@complex_type_p_Code='FR'
@complex_type_p_FullName='France'
Expand Down Expand Up @@ -163,7 +164,8 @@ public override async Task Update_complex_type_to_inline_without_lambda(bool asy
"""
@complex_type_p_AddressLine1='New AddressLine1'
@complex_type_p_AddressLine2='New AddressLine2'
@complex_type_p_Tags={ 'new_tag1', 'new_tag2' } (DbType = Object)
@complex_type_p_Tags={ 'new_tag1'
'new_tag2' } (DbType = Object)
@complex_type_p_ZipCode='99999' (Nullable = true)
@complex_type_p_Code='FR'
@complex_type_p_FullName='France'
Expand Down Expand Up @@ -225,7 +227,8 @@ public override async Task Update_collection_inside_complex_type(bool async)

AssertExecuteUpdateSql(
"""
@p={ 'new_tag1', 'new_tag2' } (DbType = Object)
@p={ 'new_tag1'
'new_tag2' } (DbType = Object)

UPDATE "Customer" AS c
SET "ShippingAddress_Tags" = @p
Expand Down
14 changes: 1 addition & 13 deletions test/EFCore.PG.FunctionalTests/NpgsqlComplianceTest.cs
Original file line number Diff line number Diff line change
@@ -1,21 +1,9 @@
using Microsoft.EntityFrameworkCore.Query.Relationships.OwnedNavigations;
using Microsoft.EntityFrameworkCore.Query.Relationships.OwnedTableSplitting;

namespace Microsoft.EntityFrameworkCore;
namespace Microsoft.EntityFrameworkCore;

public class NpgsqlComplianceTest : RelationalComplianceTestBase
{
protected override ICollection<Type> IgnoredTestBases { get; } = new HashSet<Type>
{
// Temporary, remove for 10.0.0-rc.2
typeof(OwnedTableSplittingMiscellaneousRelationalTestBase<>),
typeof(OwnedTableSplittingProjectionRelationalTestBase<>),
typeof(OwnedNavigationsCollectionRelationalTestBase<>),
typeof(OwnedNavigationsMiscellaneousRelationalTestBase<>),
typeof(OwnedNavigationsProjectionRelationalTestBase<>),
typeof(OwnedNavigationsStructuralEqualityRelationalTestBase<>),
typeof(OwnedTableSplittingStructuralEqualityRelationalTestBase<>),

// Not implemented
typeof(CompiledModelTestBase), typeof(CompiledModelRelationalTestBase), // #3087
typeof(FromSqlSprocQueryTestBase<>),
Expand Down
54 changes: 38 additions & 16 deletions test/EFCore.PG.FunctionalTests/Query/ArrayArrayQueryTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,8 @@ public override async Task SequenceEqual_with_parameter(bool async)

AssertSql(
"""
@arr={ '3', '4' } (DbType = Object)
@arr={ '3'
'4' } (DbType = Object)

SELECT s."Id", s."ArrayContainerEntityId", s."ArrayOfStringConvertedToDelimitedString", s."Byte", s."ByteArray", s."Bytea", s."EnumConvertedToInt", s."EnumConvertedToString", s."IList", s."IntArray", s."IntList", s."ListOfStringConvertedToDelimitedString", s."NonNullableText", s."NullableEnumConvertedToString", s."NullableEnumConvertedToStringWithNonNullableLambda", s."NullableIntArray", s."NullableIntList", s."NullableStringArray", s."NullableStringList", s."NullableText", s."StringArray", s."StringList", s."ValueConvertedArrayOfEnum", s."ValueConvertedListOfEnum", s."Varchar10", s."Varchar15"
FROM "SomeEntities" AS s
Expand All @@ -145,7 +146,9 @@ public override async Task SequenceEqual_over_nullable_with_parameter(bool async

AssertSql(
"""
@arr={ '3', '4', NULL } (DbType = Object)
@arr={ '3'
'4'
NULL } (DbType = Object)

SELECT s."Id", s."ArrayContainerEntityId", s."ArrayOfStringConvertedToDelimitedString", s."Byte", s."ByteArray", s."Bytea", s."EnumConvertedToInt", s."EnumConvertedToString", s."IList", s."IntArray", s."IntList", s."ListOfStringConvertedToDelimitedString", s."NonNullableText", s."NullableEnumConvertedToString", s."NullableEnumConvertedToStringWithNonNullableLambda", s."NullableIntArray", s."NullableIntList", s."NullableStringArray", s."NullableStringList", s."NullableText", s."StringArray", s."StringList", s."ValueConvertedArrayOfEnum", s."ValueConvertedListOfEnum", s."Varchar10", s."Varchar15"
FROM "SomeEntities" AS s
Expand Down Expand Up @@ -287,7 +290,8 @@ await AssertQuery(

AssertSql(
"""
@array={ 'foo', 'xxx' } (DbType = Object)
@array={ 'foo'
'xxx' } (DbType = Object)

SELECT s."Id", s."ArrayContainerEntityId", s."ArrayOfStringConvertedToDelimitedString", s."Byte", s."ByteArray", s."Bytea", s."EnumConvertedToInt", s."EnumConvertedToString", s."IList", s."IntArray", s."IntList", s."ListOfStringConvertedToDelimitedString", s."NonNullableText", s."NullableEnumConvertedToString", s."NullableEnumConvertedToStringWithNonNullableLambda", s."NullableIntArray", s."NullableIntList", s."NullableStringArray", s."NullableStringList", s."NullableText", s."StringArray", s."StringList", s."ValueConvertedArrayOfEnum", s."ValueConvertedListOfEnum", s."Varchar10", s."Varchar15"
FROM "SomeEntities" AS s
Expand Down Expand Up @@ -323,7 +327,9 @@ public override void Array_param_with_null_Contains_non_nullable_not_found()

AssertSql(
"""
@array={ 'unknown1', 'unknown2', NULL } (DbType = Object)
@array={ 'unknown1'
'unknown2'
NULL } (DbType = Object)

SELECT count(*)::int
FROM "SomeEntities" AS s
Expand All @@ -341,7 +347,9 @@ public override void Array_param_with_null_Contains_non_nullable_not_found_negat

AssertSql(
"""
@array={ 'unknown1', 'unknown2', NULL } (DbType = Object)
@array={ 'unknown1'
'unknown2'
NULL } (DbType = Object)

SELECT count(*)::int
FROM "SomeEntities" AS s
Expand All @@ -359,7 +367,9 @@ public override void Array_param_with_null_Contains_nullable_not_found()

AssertSql(
"""
@array={ 'unknown1', 'unknown2', NULL } (DbType = Object)
@array={ 'unknown1'
'unknown2'
NULL } (DbType = Object)

SELECT count(*)::int
FROM "SomeEntities" AS s
Expand All @@ -377,7 +387,9 @@ public override void Array_param_with_null_Contains_nullable_not_found_negated()

AssertSql(
"""
@array={ 'unknown1', 'unknown2', NULL } (DbType = Object)
@array={ 'unknown1'
'unknown2'
NULL } (DbType = Object)

SELECT count(*)::int
FROM "SomeEntities" AS s
Expand All @@ -395,7 +407,8 @@ await AssertQuery(

AssertSql(
"""
@values={ '1', '999' } (DbType = Object)
@values={ '1'
'999' } (DbType = Object)

SELECT s."Id", s."ArrayContainerEntityId", s."ArrayOfStringConvertedToDelimitedString", s."Byte", s."ByteArray", s."Bytea", s."EnumConvertedToInt", s."EnumConvertedToString", s."IList", s."IntArray", s."IntList", s."ListOfStringConvertedToDelimitedString", s."NonNullableText", s."NullableEnumConvertedToString", s."NullableEnumConvertedToStringWithNonNullableLambda", s."NullableIntArray", s."NullableIntList", s."NullableStringArray", s."NullableStringList", s."NullableText", s."StringArray", s."StringList", s."ValueConvertedArrayOfEnum", s."ValueConvertedListOfEnum", s."Varchar10", s."Varchar15"
FROM "SomeEntities" AS s
Expand Down Expand Up @@ -432,7 +445,8 @@ await AssertQuery(

AssertSql(
"""
@array={ '-2', '-3' } (DbType = Object)
@array={ '-2'
'-3' } (DbType = Object)

SELECT s."Id", s."ArrayContainerEntityId", s."ArrayOfStringConvertedToDelimitedString", s."Byte", s."ByteArray", s."Bytea", s."EnumConvertedToInt", s."EnumConvertedToString", s."IList", s."IntArray", s."IntList", s."ListOfStringConvertedToDelimitedString", s."NonNullableText", s."NullableEnumConvertedToString", s."NullableEnumConvertedToStringWithNonNullableLambda", s."NullableIntArray", s."NullableIntList", s."NullableStringArray", s."NullableStringList", s."NullableText", s."StringArray", s."StringList", s."ValueConvertedArrayOfEnum", s."ValueConvertedListOfEnum", s."Varchar10", s."Varchar15"
FROM "SomeEntities" AS s
Expand All @@ -450,7 +464,8 @@ await AssertQuery(

AssertSql(
"""
@array={ 'Two', 'Three' } (DbType = Object)
@array={ 'Two'
'Three' } (DbType = Object)

SELECT s."Id", s."ArrayContainerEntityId", s."ArrayOfStringConvertedToDelimitedString", s."Byte", s."ByteArray", s."Bytea", s."EnumConvertedToInt", s."EnumConvertedToString", s."IList", s."IntArray", s."IntList", s."ListOfStringConvertedToDelimitedString", s."NonNullableText", s."NullableEnumConvertedToString", s."NullableEnumConvertedToStringWithNonNullableLambda", s."NullableIntArray", s."NullableIntList", s."NullableStringArray", s."NullableStringList", s."NullableText", s."StringArray", s."StringList", s."ValueConvertedArrayOfEnum", s."ValueConvertedListOfEnum", s."Varchar10", s."Varchar15"
FROM "SomeEntities" AS s
Expand All @@ -468,7 +483,8 @@ await AssertQuery(

AssertSql(
"""
@array={ 'Two', 'Three' } (DbType = Object)
@array={ 'Two'
'Three' } (DbType = Object)

SELECT s."Id", s."ArrayContainerEntityId", s."ArrayOfStringConvertedToDelimitedString", s."Byte", s."ByteArray", s."Bytea", s."EnumConvertedToInt", s."EnumConvertedToString", s."IList", s."IntArray", s."IntList", s."ListOfStringConvertedToDelimitedString", s."NonNullableText", s."NullableEnumConvertedToString", s."NullableEnumConvertedToStringWithNonNullableLambda", s."NullableIntArray", s."NullableIntList", s."NullableStringArray", s."NullableStringList", s."NullableText", s."StringArray", s."StringList", s."ValueConvertedArrayOfEnum", s."ValueConvertedListOfEnum", s."Varchar10", s."Varchar15"
FROM "SomeEntities" AS s
Expand All @@ -486,7 +502,8 @@ await AssertQuery(

AssertSql(
"""
@array={ 'Two', 'Three' } (DbType = Object)
@array={ 'Two'
'Three' } (DbType = Object)

SELECT s."Id", s."ArrayContainerEntityId", s."ArrayOfStringConvertedToDelimitedString", s."Byte", s."ByteArray", s."Bytea", s."EnumConvertedToInt", s."EnumConvertedToString", s."IList", s."IntArray", s."IntList", s."ListOfStringConvertedToDelimitedString", s."NonNullableText", s."NullableEnumConvertedToString", s."NullableEnumConvertedToStringWithNonNullableLambda", s."NullableIntArray", s."NullableIntList", s."NullableStringArray", s."NullableStringList", s."NullableText", s."StringArray", s."StringList", s."ValueConvertedArrayOfEnum", s."ValueConvertedListOfEnum", s."Varchar10", s."Varchar15"
FROM "SomeEntities" AS s
Expand Down Expand Up @@ -536,7 +553,8 @@ await AssertQuery(

AssertSql(
"""
@p={ 'Eight', 'Nine' } (DbType = Object)
@p={ 'Eight'
'Nine' } (DbType = Object)

SELECT s."Id", s."ArrayContainerEntityId", s."ArrayOfStringConvertedToDelimitedString", s."Byte", s."ByteArray", s."Bytea", s."EnumConvertedToInt", s."EnumConvertedToString", s."IList", s."IntArray", s."IntList", s."ListOfStringConvertedToDelimitedString", s."NonNullableText", s."NullableEnumConvertedToString", s."NullableEnumConvertedToStringWithNonNullableLambda", s."NullableIntArray", s."NullableIntList", s."NullableStringArray", s."NullableStringList", s."NullableText", s."StringArray", s."StringList", s."ValueConvertedArrayOfEnum", s."ValueConvertedListOfEnum", s."Varchar10", s."Varchar15"
FROM "SomeEntities" AS s
Expand Down Expand Up @@ -685,7 +703,9 @@ await AssertQuery(

AssertSql(
"""
@patternsActual={ 'a%', 'b%', 'c%' } (DbType = Object)
@patternsActual={ 'a%'
'b%'
'c%' } (DbType = Object)

SELECT s."Id", s."ArrayContainerEntityId", s."ArrayOfStringConvertedToDelimitedString", s."Byte", s."ByteArray", s."Bytea", s."EnumConvertedToInt", s."EnumConvertedToString", s."IList", s."IntArray", s."IntList", s."ListOfStringConvertedToDelimitedString", s."NonNullableText", s."NullableEnumConvertedToString", s."NullableEnumConvertedToStringWithNonNullableLambda", s."NullableIntArray", s."NullableIntList", s."NullableStringArray", s."NullableStringList", s."NullableText", s."StringArray", s."StringList", s."ValueConvertedArrayOfEnum", s."ValueConvertedListOfEnum", s."Varchar10", s."Varchar15"
FROM "SomeEntities" AS s
Expand Down Expand Up @@ -745,7 +765,8 @@ public override async Task Any_Contains_between_column_and_List(bool async)

AssertSql(
"""
@ints={ '2', '3' } (DbType = Object)
@ints={ '2'
'3' } (DbType = Object)

SELECT s."Id", s."ArrayContainerEntityId", s."ArrayOfStringConvertedToDelimitedString", s."Byte", s."ByteArray", s."Bytea", s."EnumConvertedToInt", s."EnumConvertedToString", s."IList", s."IntArray", s."IntList", s."ListOfStringConvertedToDelimitedString", s."NonNullableText", s."NullableEnumConvertedToString", s."NullableEnumConvertedToStringWithNonNullableLambda", s."NullableIntArray", s."NullableIntList", s."NullableStringArray", s."NullableStringList", s."NullableText", s."StringArray", s."StringList", s."ValueConvertedArrayOfEnum", s."ValueConvertedListOfEnum", s."Varchar10", s."Varchar15"
FROM "SomeEntities" AS s
Expand All @@ -759,7 +780,8 @@ public override async Task Any_Contains_between_column_and_array(bool async)

AssertSql(
"""
@ints={ '2', '3' } (DbType = Object)
@ints={ '2'
'3' } (DbType = Object)

SELECT s."Id", s."ArrayContainerEntityId", s."ArrayOfStringConvertedToDelimitedString", s."Byte", s."ByteArray", s."Bytea", s."EnumConvertedToInt", s."EnumConvertedToString", s."IList", s."IntArray", s."IntList", s."ListOfStringConvertedToDelimitedString", s."NonNullableText", s."NullableEnumConvertedToString", s."NullableEnumConvertedToStringWithNonNullableLambda", s."NullableIntArray", s."NullableIntList", s."NullableStringArray", s."NullableStringList", s."NullableText", s."StringArray", s."StringList", s."ValueConvertedArrayOfEnum", s."ValueConvertedListOfEnum", s."Varchar10", s."Varchar15"
FROM "SomeEntities" AS s
Expand Down
Loading