Skip to content

Commit 061d1c7

Browse files
Copilotroji
authored andcommitted
Sync to EF 11.0.0-preview.2.26116.101
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent f894de9 commit 061d1c7

20 files changed

+393
-214
lines changed

Directory.Packages.props

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
<Project>
22
<PropertyGroup>
3-
<EFCoreVersion>11.0.0-preview.1.26104.118</EFCoreVersion>
4-
<MicrosoftExtensionsVersion>11.0.0-preview.1.26104.118</MicrosoftExtensionsVersion>
3+
<EFCoreVersion>11.0.0-preview.2.26116.101</EFCoreVersion>
4+
<MicrosoftExtensionsVersion>11.0.0-preview.2.26116.101</MicrosoftExtensionsVersion>
5+
<MicrosoftExtensionsConfigurationVersion>11.0.0-preview.2.26078.113</MicrosoftExtensionsConfigurationVersion>
56
<NpgsqlVersion>10.0.0</NpgsqlVersion>
67
</PropertyGroup>
78

@@ -16,8 +17,8 @@
1617
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational.Specification.Tests" Version="[$(EFCoreVersion)]" />
1718
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="[$(EFCoreVersion)]" />
1819

19-
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="$(MicrosoftExtensionsVersion)" />
20-
<PackageVersion Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="$(MicrosoftExtensionsVersion)" />
20+
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="$(MicrosoftExtensionsConfigurationVersion)" />
21+
<PackageVersion Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="$(MicrosoftExtensionsConfigurationVersion)" />
2122
<PackageVersion Include="Microsoft.Extensions.Logging" Version="$(MicrosoftExtensionsVersion)" />
2223

2324
<PackageVersion Include="Npgsql" Version="$(NpgsqlVersion)" />

src/EFCore.PG/Extensions/Internal/NpgsqlShapedQueryExpressionExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ public static bool TryExtractJsonArray(
101101
TableValuedFunctionExpression
102102
{
103103
Name: "jsonb_array_elements_text" or "json_array_elements_text",
104-
Arguments: [var json]
104+
Arguments: [SqlExpression json]
105105
} tvf
106106
],
107107
GroupBy: [],

src/EFCore.PG/Infrastructure/Internal/NpgsqlModelValidator.cs

Lines changed: 121 additions & 164 deletions
Large diffs are not rendered by default.

src/EFCore.PG/Query/Expressions/Internal/PgTableValuedFunctionExpression.cs

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,12 @@ namespace Npgsql.EntityFrameworkCore.PostgreSQL.Query.Expressions.Internal;
2121
/// doing so can result in application failures when updating to a new Entity Framework Core release.
2222
/// </para>
2323
/// </remarks>
24-
public class PgTableValuedFunctionExpression : TableValuedFunctionExpression, IEquatable<PgTableValuedFunctionExpression>
24+
public class PgTableValuedFunctionExpression(
25+
string alias,
26+
string name,
27+
IReadOnlyList<Expression> arguments,
28+
IReadOnlyList<PgTableValuedFunctionExpression.ColumnInfo>? columnInfos = null,
29+
bool withOrdinality = true) : TableValuedFunctionExpression(alias, name, schema: null, builtIn: true, arguments), IEquatable<PgTableValuedFunctionExpression>
2530
{
2631
/// <summary>
2732
/// The name of the column to be projected out from the <c>unnest</c> call.
@@ -32,7 +37,7 @@ public class PgTableValuedFunctionExpression : TableValuedFunctionExpression, IE
3237
/// any release. You should only use it directly in your code with extreme caution and knowing that
3338
/// doing so can result in application failures when updating to a new Entity Framework Core release.
3439
/// </remarks>
35-
public virtual IReadOnlyList<ColumnInfo>? ColumnInfos { get; }
40+
public virtual IReadOnlyList<ColumnInfo>? ColumnInfos { get; } = columnInfos;
3641

3742
/// <summary>
3843
/// Whether to project an additional ordinality column containing the index of each element in the array.
@@ -43,25 +48,7 @@ public class PgTableValuedFunctionExpression : TableValuedFunctionExpression, IE
4348
/// any release. You should only use it directly in your code with extreme caution and knowing that
4449
/// doing so can result in application failures when updating to a new Entity Framework Core release.
4550
/// </remarks>
46-
public virtual bool WithOrdinality { get; }
47-
48-
/// <summary>
49-
/// This is an internal API that supports the Entity Framework Core infrastructure and not subject to
50-
/// the same compatibility standards as public APIs. It may be changed or removed without notice in
51-
/// any release. You should only use it directly in your code with extreme caution and knowing that
52-
/// doing so can result in application failures when updating to a new Entity Framework Core release.
53-
/// </summary>
54-
public PgTableValuedFunctionExpression(
55-
string alias,
56-
string name,
57-
IReadOnlyList<SqlExpression> arguments,
58-
IReadOnlyList<ColumnInfo>? columnInfos = null,
59-
bool withOrdinality = true)
60-
: base(alias, name, schema: null, builtIn: true, arguments)
61-
{
62-
ColumnInfos = columnInfos;
63-
WithOrdinality = withOrdinality;
64-
}
51+
public virtual bool WithOrdinality { get; } = withOrdinality;
6552

6653
/// <inheritdoc />
6754
protected override Expression VisitChildren(ExpressionVisitor visitor)
@@ -75,18 +62,18 @@ protected override Expression VisitChildren(ExpressionVisitor visitor)
7562
/// any release. You should only use it directly in your code with extreme caution and knowing that
7663
/// doing so can result in application failures when updating to a new Entity Framework Core release.
7764
/// </summary>
78-
public override PgTableValuedFunctionExpression Update(IReadOnlyList<SqlExpression> arguments)
65+
public override PgTableValuedFunctionExpression Update(IReadOnlyList<Expression> arguments)
7966
=> arguments.SequenceEqual(Arguments, ReferenceEqualityComparer.Instance)
8067
? this
8168
: new PgTableValuedFunctionExpression(Alias, Name, arguments, ColumnInfos, WithOrdinality);
8269

8370
/// <inheritdoc />
8471
public override TableExpressionBase Clone(string? alias, ExpressionVisitor cloningExpressionVisitor)
8572
{
86-
var arguments = new SqlExpression[Arguments.Count];
73+
var arguments = new Expression[Arguments.Count];
8774
for (var i = 0; i < arguments.Length; i++)
8875
{
89-
arguments[i] = (SqlExpression)cloningExpressionVisitor.Visit(Arguments[i]);
76+
arguments[i] = cloningExpressionVisitor.Visit(Arguments[i]);
9077
}
9178

9279
return new PgTableValuedFunctionExpression(Alias, Name, arguments, ColumnInfos, WithOrdinality);

src/EFCore.PG/Query/Expressions/Internal/PgUnnestExpression.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,7 @@ public class PgUnnestExpression : PgTableValuedFunctionExpression
3232
/// any release. You should only use it directly in your code with extreme caution and knowing that
3333
/// doing so can result in application failures when updating to a new Entity Framework Core release.
3434
/// </remarks>
35-
public virtual SqlExpression Array
36-
=> Arguments[0];
35+
public virtual SqlExpression Array { get; }
3736

3837
/// <summary>
3938
/// The name of the column to be projected out from the <c>unnest</c> call.
@@ -60,8 +59,7 @@ public PgUnnestExpression(string alias, SqlExpression array, string columnName,
6059

6160
private PgUnnestExpression(string alias, SqlExpression array, ColumnInfo? columnInfo, bool withOrdinality = true)
6261
: base(alias, "unnest", [array], columnInfo is null ? null : [columnInfo.Value], withOrdinality)
63-
{
64-
}
62+
=> Array = array;
6563

6664
/// <inheritdoc />
6765
protected override Expression VisitChildren(ExpressionVisitor visitor)
@@ -75,8 +73,8 @@ protected override Expression VisitChildren(ExpressionVisitor visitor)
7573
/// any release. You should only use it directly in your code with extreme caution and knowing that
7674
/// doing so can result in application failures when updating to a new Entity Framework Core release.
7775
/// </summary>
78-
public override PgUnnestExpression Update(IReadOnlyList<SqlExpression> arguments)
79-
=> arguments is [var singleArgument]
76+
public override PgUnnestExpression Update(IReadOnlyList<Expression> arguments)
77+
=> arguments is [SqlExpression singleArgument]
8078
? Update(singleArgument)
8179
: throw new ArgumentException();
8280

src/EFCore.PG/Storage/Internal/Mapping/NpgsqlStructuralJsonTypeMapping.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.Mapping;
99
/// See <see cref="NpgsqlJsonTypeMapping" /> for the older Npgsql-specific support, which allows mapping json/jsonb to text, to e.g.
1010
/// <see cref="JsonElement" /> (weakly-typed mapping) or to arbitrary POCOs (but without them being modeled).
1111
/// </summary>
12-
public class NpgsqlStructuralJsonTypeMapping : JsonTypeMapping
12+
public class NpgsqlStructuralJsonTypeMapping : StructuralJsonTypeMapping
1313
{
1414
/// <summary>
1515
/// The database type used by Npgsql (<see cref="NpgsqlDbType.Json" /> or <see cref="NpgsqlDbType.Jsonb" />.

test/EFCore.PG.FunctionalTests/NpgsqlComplianceTest.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ public class NpgsqlComplianceTest : RelationalComplianceTestBase
55
protected override ICollection<Type> IgnoredTestBases { get; } = new HashSet<Type>
66
{
77
// Not implemented
8-
typeof(CompiledModelTestBase), typeof(CompiledModelRelationalTestBase), // #3087
8+
typeof(CompiledModelTestBase),
9+
typeof(CompiledModelRelationalTestBase), // #3087
910
typeof(FromSqlSprocQueryTestBase<>),
1011
typeof(UdfDbFunctionTestBase<>),
1112
typeof(UpdateSqlGeneratorTestBase),

test/EFCore.PG.FunctionalTests/Query/Associations/ComplexJson/ComplexJsonProjectionNpgsqlTest.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ public override async Task Select_unmapped_associate_scalar_property(QueryTracki
151151

152152
AssertSql(
153153
"""
154-
SELECT r."Id", r."Name", r."AssociateCollection", r."OptionalAssociate", r."RequiredAssociate"
154+
SELECT r."RequiredAssociate"
155155
FROM "RootEntity" AS r
156156
""");
157157
}
@@ -279,6 +279,20 @@ public override async Task Select_root_duplicated(QueryTrackingBehavior queryTra
279279
""");
280280
}
281281

282+
public override async Task Select_associate_and_target_to_index_based_binding_via_closure(QueryTrackingBehavior queryTrackingBehavior)
283+
{
284+
await base.Select_associate_and_target_to_index_based_binding_via_closure(queryTrackingBehavior);
285+
286+
if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll)
287+
{
288+
AssertSql(
289+
"""
290+
SELECT r."Id", r."RequiredAssociate"
291+
FROM "RootEntity" AS r
292+
""");
293+
}
294+
}
295+
282296
#endregion Multiple
283297

284298
#region Subquery

test/EFCore.PG.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingProjectionNpgsqlTest.cs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ public override async Task Select_unmapped_associate_scalar_property(QueryTracki
153153

154154
AssertSql(
155155
"""
156-
SELECT r."Id", r."Name", r."OptionalAssociate_Id", r."OptionalAssociate_Int", r."OptionalAssociate_Ints", r."OptionalAssociate_Name", r."OptionalAssociate_String", r."OptionalAssociate_OptionalNestedAssociate_Id", r."OptionalAssociate_OptionalNestedAssociate_Int", r."OptionalAssociate_OptionalNestedAssociate_Ints", r."OptionalAssociate_OptionalNestedAssociate_Name", r."OptionalAssociate_OptionalNestedAssociate_String", r."OptionalAssociate_RequiredNestedAssociate_Id", r."OptionalAssociate_RequiredNestedAssociate_Int", r."OptionalAssociate_RequiredNestedAssociate_Ints", r."OptionalAssociate_RequiredNestedAssociate_Name", r."OptionalAssociate_RequiredNestedAssociate_String", r."RequiredAssociate_Id", r."RequiredAssociate_Int", r."RequiredAssociate_Ints", r."RequiredAssociate_Name", r."RequiredAssociate_String", r."RequiredAssociate_OptionalNestedAssociate_Id", r."RequiredAssociate_OptionalNestedAssociate_Int", r."RequiredAssociate_OptionalNestedAssociate_Ints", r."RequiredAssociate_OptionalNestedAssociate_Name", r."RequiredAssociate_OptionalNestedAssociate_String", r."RequiredAssociate_RequiredNestedAssociate_Id", r."RequiredAssociate_RequiredNestedAssociate_Int", r."RequiredAssociate_RequiredNestedAssociate_Ints", r."RequiredAssociate_RequiredNestedAssociate_Name", r."RequiredAssociate_RequiredNestedAssociate_String"
156+
SELECT r."RequiredAssociate_Id", r."RequiredAssociate_Int", r."RequiredAssociate_Ints", r."RequiredAssociate_Name", r."RequiredAssociate_String", r."RequiredAssociate_OptionalNestedAssociate_Id", r."RequiredAssociate_OptionalNestedAssociate_Int", r."RequiredAssociate_OptionalNestedAssociate_Ints", r."RequiredAssociate_OptionalNestedAssociate_Name", r."RequiredAssociate_OptionalNestedAssociate_String", r."RequiredAssociate_RequiredNestedAssociate_Id", r."RequiredAssociate_RequiredNestedAssociate_Int", r."RequiredAssociate_RequiredNestedAssociate_Ints", r."RequiredAssociate_RequiredNestedAssociate_Name", r."RequiredAssociate_RequiredNestedAssociate_String"
157157
FROM "RootEntity" AS r
158158
""");
159159
}
@@ -191,7 +191,7 @@ public override async Task Select_nested_collection_on_required_associate(QueryT
191191

192192
AssertSql(
193193
"""
194-
SELECT r."Id", r."Name", r."OptionalAssociate_Id", r."OptionalAssociate_Int", r."OptionalAssociate_Ints", r."OptionalAssociate_Name", r."OptionalAssociate_String", r."OptionalAssociate_OptionalNestedAssociate_Id", r."OptionalAssociate_OptionalNestedAssociate_Int", r."OptionalAssociate_OptionalNestedAssociate_Ints", r."OptionalAssociate_OptionalNestedAssociate_Name", r."OptionalAssociate_OptionalNestedAssociate_String", r."OptionalAssociate_RequiredNestedAssociate_Id", r."OptionalAssociate_RequiredNestedAssociate_Int", r."OptionalAssociate_RequiredNestedAssociate_Ints", r."OptionalAssociate_RequiredNestedAssociate_Name", r."OptionalAssociate_RequiredNestedAssociate_String", r."RequiredAssociate_Id", r."RequiredAssociate_Int", r."RequiredAssociate_Ints", r."RequiredAssociate_Name", r."RequiredAssociate_String", r."RequiredAssociate_OptionalNestedAssociate_Id", r."RequiredAssociate_OptionalNestedAssociate_Int", r."RequiredAssociate_OptionalNestedAssociate_Ints", r."RequiredAssociate_OptionalNestedAssociate_Name", r."RequiredAssociate_OptionalNestedAssociate_String", r."RequiredAssociate_RequiredNestedAssociate_Id", r."RequiredAssociate_RequiredNestedAssociate_Int", r."RequiredAssociate_RequiredNestedAssociate_Ints", r."RequiredAssociate_RequiredNestedAssociate_Name", r."RequiredAssociate_RequiredNestedAssociate_String"
194+
SELECT r."RequiredAssociate_Id", r."RequiredAssociate_Int", r."RequiredAssociate_Ints", r."RequiredAssociate_Name", r."RequiredAssociate_String", r."RequiredAssociate_OptionalNestedAssociate_Id", r."RequiredAssociate_OptionalNestedAssociate_Int", r."RequiredAssociate_OptionalNestedAssociate_Ints", r."RequiredAssociate_OptionalNestedAssociate_Name", r."RequiredAssociate_OptionalNestedAssociate_String", r."RequiredAssociate_RequiredNestedAssociate_Id", r."RequiredAssociate_RequiredNestedAssociate_Int", r."RequiredAssociate_RequiredNestedAssociate_Ints", r."RequiredAssociate_RequiredNestedAssociate_Name", r."RequiredAssociate_RequiredNestedAssociate_String"
195195
FROM "RootEntity" AS r
196196
ORDER BY r."Id" NULLS FIRST
197197
""");
@@ -203,7 +203,7 @@ public override async Task Select_nested_collection_on_optional_associate(QueryT
203203

204204
AssertSql(
205205
"""
206-
SELECT r."Id", r."Name", r."OptionalAssociate_Id", r."OptionalAssociate_Int", r."OptionalAssociate_Ints", r."OptionalAssociate_Name", r."OptionalAssociate_String", r."OptionalAssociate_OptionalNestedAssociate_Id", r."OptionalAssociate_OptionalNestedAssociate_Int", r."OptionalAssociate_OptionalNestedAssociate_Ints", r."OptionalAssociate_OptionalNestedAssociate_Name", r."OptionalAssociate_OptionalNestedAssociate_String", r."OptionalAssociate_RequiredNestedAssociate_Id", r."OptionalAssociate_RequiredNestedAssociate_Int", r."OptionalAssociate_RequiredNestedAssociate_Ints", r."OptionalAssociate_RequiredNestedAssociate_Name", r."OptionalAssociate_RequiredNestedAssociate_String", r."RequiredAssociate_Id", r."RequiredAssociate_Int", r."RequiredAssociate_Ints", r."RequiredAssociate_Name", r."RequiredAssociate_String", r."RequiredAssociate_OptionalNestedAssociate_Id", r."RequiredAssociate_OptionalNestedAssociate_Int", r."RequiredAssociate_OptionalNestedAssociate_Ints", r."RequiredAssociate_OptionalNestedAssociate_Name", r."RequiredAssociate_OptionalNestedAssociate_String", r."RequiredAssociate_RequiredNestedAssociate_Id", r."RequiredAssociate_RequiredNestedAssociate_Int", r."RequiredAssociate_RequiredNestedAssociate_Ints", r."RequiredAssociate_RequiredNestedAssociate_Name", r."RequiredAssociate_RequiredNestedAssociate_String"
206+
SELECT r."OptionalAssociate_Id", r."OptionalAssociate_Int", r."OptionalAssociate_Ints", r."OptionalAssociate_Name", r."OptionalAssociate_String", r."OptionalAssociate_OptionalNestedAssociate_Id", r."OptionalAssociate_OptionalNestedAssociate_Int", r."OptionalAssociate_OptionalNestedAssociate_Ints", r."OptionalAssociate_OptionalNestedAssociate_Name", r."OptionalAssociate_OptionalNestedAssociate_String", r."OptionalAssociate_RequiredNestedAssociate_Id", r."OptionalAssociate_RequiredNestedAssociate_Int", r."OptionalAssociate_RequiredNestedAssociate_Ints", r."OptionalAssociate_RequiredNestedAssociate_Name", r."OptionalAssociate_RequiredNestedAssociate_String"
207207
FROM "RootEntity" AS r
208208
ORDER BY r."Id" NULLS FIRST
209209
""");
@@ -248,6 +248,17 @@ public override async Task Select_root_duplicated(QueryTrackingBehavior queryTra
248248
""");
249249
}
250250

251+
public override async Task Select_associate_and_target_to_index_based_binding_via_closure(QueryTrackingBehavior queryTrackingBehavior)
252+
{
253+
await base.Select_associate_and_target_to_index_based_binding_via_closure(queryTrackingBehavior);
254+
255+
AssertSql(
256+
"""
257+
SELECT r."Id", r."RequiredAssociate_Id", r."RequiredAssociate_Int", r."RequiredAssociate_Ints", r."RequiredAssociate_Name", r."RequiredAssociate_String", r."RequiredAssociate_OptionalNestedAssociate_Id", r."RequiredAssociate_OptionalNestedAssociate_Int", r."RequiredAssociate_OptionalNestedAssociate_Ints", r."RequiredAssociate_OptionalNestedAssociate_Name", r."RequiredAssociate_OptionalNestedAssociate_String", r."RequiredAssociate_RequiredNestedAssociate_Id", r."RequiredAssociate_RequiredNestedAssociate_Int", r."RequiredAssociate_RequiredNestedAssociate_Ints", r."RequiredAssociate_RequiredNestedAssociate_Name", r."RequiredAssociate_RequiredNestedAssociate_String"
258+
FROM "RootEntity" AS r
259+
""");
260+
}
261+
251262
#endregion Multiple
252263

253264
#region Subquery

test/EFCore.PG.FunctionalTests/Query/Associations/Navigations/NavigationsProjectionNpgsqlTest.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,22 @@ LEFT JOIN (
349349
""");
350350
}
351351

352+
public override async Task Select_associate_and_target_to_index_based_binding_via_closure(QueryTrackingBehavior queryTrackingBehavior)
353+
{
354+
await base.Select_associate_and_target_to_index_based_binding_via_closure(queryTrackingBehavior);
355+
356+
AssertSql(
357+
"""
358+
SELECT r."Id", a."Id", a."CollectionRootId", a."Int", a."Ints", a."Name", a."OptionalNestedAssociateId", a."RequiredNestedAssociateId", a."String", n."Id", n0."Id", n1."Id", n1."CollectionAssociateId", n1."Int", n1."Ints", n1."Name", n1."String", n."CollectionAssociateId", n."Int", n."Ints", n."Name", n."String", n0."CollectionAssociateId", n0."Int", n0."Ints", n0."Name", n0."String"
359+
FROM "RootEntity" AS r
360+
INNER JOIN "AssociateType" AS a ON r."RequiredAssociateId" = a."Id"
361+
LEFT JOIN "NestedAssociateType" AS n ON a."OptionalNestedAssociateId" = n."Id"
362+
INNER JOIN "NestedAssociateType" AS n0 ON a."RequiredNestedAssociateId" = n0."Id"
363+
LEFT JOIN "NestedAssociateType" AS n1 ON a."Id" = n1."CollectionAssociateId"
364+
ORDER BY r."Id" NULLS FIRST, a."Id" NULLS FIRST, n."Id" NULLS FIRST, n0."Id" NULLS FIRST
365+
""");
366+
}
367+
352368
#endregion Multiple
353369

354370
#region Subquery

0 commit comments

Comments
 (0)