zhengxiang378928908-code commented on issue #12814:
URL: https://github.com/apache/seatunnel/issues/12814#issuecomment-6228405643

   @DanielLeens Thanks. I've updated the issue description with an "Agreed 
design" section that writes down the exact boundaries before any code:
   
   - Carrier only when every container on the path is a `ROW`; any `ARRAY` / 
`MAP` on the path fails at preflight.
   - The preflight check runs per source table before 
`MultiTableManager.mergeSchema` (the merge renames columns to `column0..N`), so 
the error can name the real table and column path (`.element` / `.key` / 
`.value`).
   - The workarounds are source-side only (leave the column out with e.g. 
`doris.read.field`, cast it in the source query, or run on Zeta/Flink). A `Sql` 
transform `CAST` cannot help on Spark, because the source schema is built and 
fails before any transform runs.
   - Carrier text rules for both `InternalRowConverter` and 
`SeaTunnelRowConverter` (the transform path uses `GenericRow` with 
`java.lang.String`): plain text only, `null` stays null, lossless `setScale` on 
write, exact scale/precision check on read, and malformed values are rejected 
with the column path.
   - Tests: unit round trips plus Spark 2.4 / 3.3 end-to-end runs with the 
signed 128-bit extrema, 0, NULL, and `DECIMAL(50, 10)`; Doris Spark containers 
stay enabled; EN/ZH docs and the incompatible-changes entries are listed.
   - The MySQL clamp stays out of scope; I'll open a separate issue for it.
   
   Please let me know if any boundary should change. I'll start the code once 
this section is accepted.
   


-- 
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]

Reply via email to