huan233usc opened a new pull request, #17218:
URL: https://github.com/apache/iceberg/pull/17218

   ## Summary
   
   Reject a geometry/geography CRS that contains a character it could not 
round-trip through the type string.
   
   `GeometryType` serializes as `geometry(<crs>)` and `GeographyType` as 
`geography(<crs>, <algorithm>)`. `Types.fromPrimitiveString` parses the CRS out 
of that string with:
   
   ```
   GEOMETRY_PARAMETERS  = geometry\s*(?:\(\s*([^)]*?)\s*\))?
   GEOGRAPHY_PARAMETERS = geography\s*(?:\(\s*([^,]*?)\s*(?:,\s*(\w*)\s*)?\))?
   ```
   
   so the CRS is read only up to the first `)` (geometry) or the first `,` / 
`)` (geography). Today the constructors accept any non-empty CRS, so a CRS 
containing one of those delimiters is written out by `toString()` but silently 
**truncated** when the type string is parsed back — the schema no longer 
round-trips.
   
   For example:
   
   ```java
   Types.GeometryType.of("foo)bar").toString()   // "geometry(foo)bar)"
   Types.fromPrimitiveString("geometry(foo)bar)") // parses CRS as "foo" — 
wrong, silent
   ```
   
   ## Change
   
   Validate the CRS at construction and fail fast with a clear message instead 
of allowing a value that cannot round-trip:
   
   - `GeometryType` rejects a CRS containing `)`.
   - `GeographyType` rejects a CRS containing `,` or `)` (its type string uses 
both as delimiters).
   
   A geometry CRS may still contain `,` — geometry's type string has no comma 
delimiter, so `geometry(foo,bar)` round-trips fine; that case is covered by a 
positive assertion. Normal CRS values (`EPSG:4326`, `OGC:CRS84`, `srid:<n>`, 
`projjson:<id>`) are unaffected.
   
   ## Tests
   
   Added `TestTypes.testGeospatialCrsRejectsUnrepresentableCharacters`:
   - `GeometryType.of("foo)bar")` and `GeographyType.of("foo)bar")` / 
`of("foo,bar")` throw with a clear message.
   - `GeometryType.of("foo,bar")` is accepted and round-trips through 
`fromPrimitiveString(toString())`.
   
   `:iceberg-api:test`, `spotlessJavaCheck`, `checkstyleMain`, and 
`checkstyleTest` pass.
   
   This pull request and its description were written by Isaac.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to