From 0b20bcdbff7c47d7b783ab0192ef62450201a1f8 Mon Sep 17 00:00:00 2001 From: Christopher Jolly Date: Tue, 3 Sep 2024 01:39:56 +0800 Subject: [PATCH] Don't use same table in join when it is also primary target table --- .../Query/Internal/NpgsqlQuerySqlGenerator.cs | 2 +- .../NonSharedModelBulkUpdatesNpgsqlTest.cs | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/EFCore.PG/Query/Internal/NpgsqlQuerySqlGenerator.cs b/src/EFCore.PG/Query/Internal/NpgsqlQuerySqlGenerator.cs index 40bbb33e8..61583bb4e 100644 --- a/src/EFCore.PG/Query/Internal/NpgsqlQuerySqlGenerator.cs +++ b/src/EFCore.PG/Query/Internal/NpgsqlQuerySqlGenerator.cs @@ -341,7 +341,7 @@ protected override Expression VisitUpdate(UpdateExpression updateExpression) var table = selectExpression.Tables[i]; var joinExpression = table as JoinExpressionBase; - if (ReferenceEquals(updateExpression.Table, joinExpression?.Table ?? table)) + if (updateExpression.Table.Alias == (joinExpression?.Table.Alias ?? table.Alias)) { LiftPredicate(table); continue; diff --git a/test/EFCore.PG.FunctionalTests/BulkUpdates/NonSharedModelBulkUpdatesNpgsqlTest.cs b/test/EFCore.PG.FunctionalTests/BulkUpdates/NonSharedModelBulkUpdatesNpgsqlTest.cs index af6d6cfa2..d32b3c4f7 100644 --- a/test/EFCore.PG.FunctionalTests/BulkUpdates/NonSharedModelBulkUpdatesNpgsqlTest.cs +++ b/test/EFCore.PG.FunctionalTests/BulkUpdates/NonSharedModelBulkUpdatesNpgsqlTest.cs @@ -50,12 +50,17 @@ DELETE FROM "Owner" AS o """); } - // TODO: #3253 public override async Task Replace_ColumnExpression_in_column_setter(bool async) { - var exception = await Assert.ThrowsAsync(() => base.Replace_ColumnExpression_in_column_setter(async)); + await base.Replace_ColumnExpression_in_column_setter(async); - Assert.Equal("42712", exception.SqlState); + AssertSql( + """ +UPDATE "OwnedCollection" AS o0 +SET "Value" = 'SomeValue' +FROM "Owner" AS o +WHERE o."Id" = o0."OwnerId" +"""); } public override async Task Delete_aggregate_root_when_table_sharing_with_non_owned_throws(bool async)