Fix ST_Extent box2d cast being removed by EF simplifier#3828
Merged
Conversation
ST_Extent returns box2d in PostgreSQL, but the aggregate expression was assigned the geometry type mapping. EF's SqlExpressionSimplifyingExpressionVisitor then stripped the ::geometry cast as a no-op (same store type), leaving the raw box2d result which has no binary output function. Fix by giving the aggregate a box2d store type so the cast is recognized as a real type conversion. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
Adjusts the NetTopologySuite aggregate translation for EnvelopeCombiner.CombineAsGeometry so that EF Core’s SQL simplifier doesn’t strip the required cast when translating to PostGIS ST_Extent. This ensures ST_Extent’s box2d result is properly cast to geometry, avoiding Npgsql binary read failures.
Changes:
- Sets the
ST_Extentaggregate’s result type mapping store type tobox2d(viaWithStoreTypeAndSize) so EF recognizes the subsequent cast togeometryas non-no-op. - Avoids repeated
GetMapping()calls by caching the geometry mapping in a local.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
ST_Extentreturnsbox2din PostgreSQL, but the aggregate expression was assigned thegeometrytype mapping. EF'sSqlExpressionSimplifyingExpressionVisitor(added in the latest sync) stripsConvertnodes when the operand and cast have the same store type. Since both hadgeometry, the::geometrycast was removed, leaving the rawbox2dresult which has no binary output function in Npgsql.Fix: give the
ST_Extentaggregate abox2dstore type (viaWithStoreTypeAndSize), so the cast frombox2dtogeometryis recognized as a real type conversion and preserved.Same root cause as the type mapping fixes in #3827.