Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[release/9.0-staging] Fix to #35393 - GroupJoin in EF Core 9 Returns Null for Joined Entities #35449

Merged
merged 1 commit into from
Jan 14, 2025

Conversation

maumar
Copy link
Contributor

@maumar maumar commented Jan 10, 2025

Fixes #35393

Description
In EF9 we refactored some optimizations we performed on generated SQL - we are now applying them earlier (as part of SqlExpressionFactory. However, one of those optimizations is only correct for non-nullable arguments, and at the time we apply them we don't have full nullability information. Fix is to only apply this optimization when we know the argument is non-nullable.

Customer impact
Data corruption. Queries comparing nullable boolean property to a constant (true/false) produced incorrect results (data corruption). Workaround is to rewrite the query to add missing null checks, but this is not intuitive at all.

How found
Customer report on 9.0.0

Regression
Yes, from 8.0.

Testing
Added tests for the scenarios affected as well as test that brute-forces all combinations of comparisons between nullable arguments in variety of scenarios.

Risk
Low, we are just removing the optimization that was incorrect. After removal, the queries produced are the same as in EF8. Quirk added, just in case.

@maumar maumar marked this pull request as ready for review January 13, 2025 21:20
@maumar
Copy link
Contributor Author

maumar commented Jan 13, 2025

@roji like we suspected, EF8 produces the same sql as this PR (after removing optimization):

SELECT [m].[Id], [m].[Foo]
FROM [MyEntities] AS [m]
WHERE [m].[Foo] <> CAST(1 AS bit) OR [m].[Foo] IS NULL

@maumar maumar requested review from roji and a team January 13, 2025 21:39
@maumar maumar changed the title Simpler/safer patch fix for #35393 that doesn't compensate for some changes [release/9.0-staging] Fix to #35393 - GroupJoin in EF Core 9 Returns Null for Joined Entities Jan 14, 2025
@maumar maumar added this to the 9.0.x milestone Jan 14, 2025
@maumar maumar modified the milestones: 9.0.x, 9.0.3 Jan 14, 2025
@maumar maumar merged commit 4185501 into release/9.0-staging Jan 14, 2025
7 checks passed
@maumar maumar deleted the fix35393_90 branch January 14, 2025 09:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants