[GH-3369] Preserve declared coordinate layouts in WKB output - #3381
Merged
Merged
Conversation
Signed-off-by: Jia Yu <jiayu@apache.org>
Signed-off-by: Jia Yu <jiayu@apache.org>
This was referenced Sep 18, 2026
jiayuasu
marked this pull request as ready for review
September 21, 2026 07:25
1 task
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.
Did you read the Contributor Guide?
Yes.
Is this PR related to a ticket?
Follow-up to #3369. Builds on merged #3374, #3377, and #3378. The diff against master contains only the WKB output changes.
org.datasyslab:jts-io-patch:1.21.0-datasyslab-2is published on Maven Central.What changes were proposed in this PR?
ST_AsBinary,ST_AsEWKB, andST_AsHEXEWKBnow preserve M for measured geometries from any source, including WKT, and retain WKB-declared Z/M layouts for empty points, lines, and polygons and NaN ordinates. This applies to Spark, Flink, and Snowflake, which use the same common output helpers. They use the isolated WKB writer's opt-in preservation mode instead of choosing dimensions from the first coordinate. A finite Z later in a line is no longer dropped, and mixed GeometryCollection members keep their individual layouts.Ordinary XY output, byte order, and SRID behavior remain intact. The public explicit-dimension writer helper keeps its stock JTS return type and behavior. GeoParquet output and explicit 2D adapter writers are unchanged. The GeoParquet follow-up is tracked in #3383. Collections with no members lack sequence metadata and are written as XY.
How was this patch tested?
At
05bbe736951d81b4b57ff1a2859677db4ded5d62, all eightWkbOutputTesttests and the Spark 3.5 / Scala 2.12 function tests passed against the published IO2 artifact (245 Scala test executions, including WKB output after shuffle/cache and null inputs). Formatting and commit hooks passed.Six of eight common tests fail against master's old output helpers. The measured-WKT regression specifically detects the missing M flag. Added coverage checks measured WKT before and after serialization, and MultiPoint, MultiLineString, and MultiPolygon output with an empty member across WKB, EWKB, and both HEXEWKB byte orders.
After synchronizing with master and merged #3377, the combined stack at
6881691d278e27bb160ee6be3f4fbd671e9b0192passed 390 focused common geometry/WKB tests against the publishedorg.datasyslab:jts-io-patch:1.21.0-datasyslab-2.Validated the combined Sedona stack at
76f59c947971e06657d01229a4f940863d3e5253againstorg.datasyslab:jts-io-patch:1.21.0-datasyslab-2-SNAPSHOT, built from merged JTS commit1a382cc402f495adf1ea39c4905cafbac491e40f:ST_GeneratePointsstayed XY.The published
1.21.0-datasyslab-2artifact passes 32 isolated-artifact tests against stock JTS 1.20. All nine implementation class files are byte-for-byte identical to the tested snapshot; public downloads and signatures were verified. The full CI matrix and MySQL/Docker constructor suite were not part of these local checks.Did this PR include necessary documentation updates?
Updated all nine Spark, Flink, and Snowflake output function pages to describe M preservation and the zero-member collection limit. Removed the stale Flink claim that M is ignored and added the measured-output change to the 2.0.0 release notes.