timsaucer opened a new issue, #1725:
URL: https://github.com/apache/datafusion-python/issues/1725

   `examples/datafusion-ffi-example/src/physical_extension_codec.rs:150` claims 
`node.is::<DataSourceExec>() || node.is::<ForeignExecutionPlan>()`. The second 
arm takes every other library's nodes, which `extension-guide/checklist.md` 
tells authors never to do.
   
   **This is not a bug to fix.** It is G2 in #1719: the arm is load-bearing for 
upstream defect apache/datafusion#25152, and narrowing it to `DataSourceExec` 
alone makes 31 of the 51 tests in `datafusion-ffi-query-planner-example` fail. 
The object registry in the same file is downstream of it — once you claim a 
node you cannot introspect, there is nothing to write down about it, so parking 
it is all that is left.
   
   The goal is to make it impossible to copy by accident while it stays. 
Proposal: move the statics and helpers into a new 
`src/foreign_plan_workaround.rs` behind three deliberately blunt functions — 
`claims()`, `park()`, `take()`. Nobody reads 
`foreign_plan_workaround::park(node, buf)` and thinks they are looking at 
serialization. The 25-line explanation currently buried inside a function body 
at lines 125-149 becomes the module `//!` doc, with three greppable fields:
   
   ```rust
   //! # NOT A PATTERN
   //! **Blocked on:** <https://github.com/apache/datafusion/issues/25152>
   //! **Delete when:** `FFI_PlanProperties` carries `scheduling_type`, or
   //!   `ForeignExecutionPlan` gains a reachable `try_to_proto`.
   //! **Copying this will:** claim every other library's plan nodes, and 
produce
   //!   payloads that decode only in the writing process, exactly once each.
   ```
   
   One honesty note belongs in that doc: the `DataSourceExec` arm *could* be 
durable and is not, because the registry has to exist for the 
`ForeignExecutionPlan` arm regardless. Splitting the two arms across two wire 
formats costs real code and removes nothing. Saying so lets the guide claim the 
registry cannot be removed without also claiming every byte of it is forced.
   
   **Do not rename `MyPhysicalExtensionCodec`** — 21 call sites plus two doc 
references, and the module doc already carries the label.
   
   **Done when:** `grep -rn "NOT A PATTERN" examples/` returns exactly one 
site, and `cargo clippy --no-deps --all-targets` is clean. No test changes 
expected; this is code motion plus documentation.
   


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