adriangb opened a new issue, #24623:
URL: https://github.com/apache/datafusion/issues/24623

   ### Scope
   
   | file | type |
   |---|---|
   | `datasource-csv/src/file_format.rs` | `CsvSink` |
   
   2 hooks (1 encoder, 1 decoder).
   
   `CsvSource` in `datasource-csv/src/source.rs` is being converted as part of 
the fix for #24609 and is not in scope here.
   
   ### Notes
   
   `CsvSink` holds `config` and `writer_options`; the encoder reads neither by 
name today. `writer_options` is where the CSV writer settings live, so the 
destructure should confirm that everything a sink needs to reproduce its output 
format is actually on the wire.
   
   ### Why
   
   Serde hooks that read state through getters or `self.field` make an added 
field invisible to serialization: nothing breaks at compile time, the field 
simply stops round-tripping, and `Debug`-comparing round-trip tests do not 
notice. `HashJoinExec::fetch` was lost exactly this way (#24165), and #24609 is 
a second live instance found by applying the convention to one file.
   
   #24164 established the fix -- exhaustive destructuring in both directions -- 
and applied it to the join plans. The `physical-plan` plan nodes are done. 
`physical-expr` and the `datasource*` crates were never converted.
   
   ### What to do
   
   For each hook in scope:
   
   1. In `try_to_proto`, start with an exhaustive `let Self {{ .. }}` -- **no 
`..` rest pattern**. Fields that are genuinely not serialized bind to `_` with 
a short comment saying why (derived at construction, runtime state, recomputed 
on decode, carried by a parent message).
   2. In `try_from_proto`, destructure the prost-generated node struct the same 
way, so adding a field to `datafusion.proto` is a compile error in every 
decoder.
   3. If the destructure turns up a field that *should* round-trip but has no 
wire representation, add it to the message and cover it with a test that fails 
without the fix.
   
   ### Definition of done
   
   - [ ] Every field of the plan/expression struct is either serialized or 
bound to `_` with a reason.
   - [ ] Every field of the prost node is destructured in the decoder.
   - [ ] Any newly serialized field has a round-trip test, verified to fail 
before the fix.
   
   - Part of #24612.
   


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