You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix: name the bundle that declared something that is not a rule
A rule the importer refuses used to raise from Rust with nothing but the
capsule name. A caller who passed four bundles could not tell which one was at
fault, and the resolve step is the last place that is known.
`_resolve_declared_rules` looks for the getter in Python first, mirroring what
`_resolve_declared_functions` already does for a declared function:
TypeError A declared optimizer rule must expose
__datafusion_physical_optimizer_rule__, got <object ...> from
<RuleExtension ...>
Scoped to match the sibling rather than to go past it. A getter that is present
but returns a non-capsule still falls through to the importer's `RuntimeError`,
exactly as a declared function does, and `with_extensions` now documents that
case instead of listing only the two errors it raises itself.
`MyRuleExtension`'s two rules append to a run log they share, so the order they
installed in is observable. The counters cannot show it: each rule has its own,
so they say how often a rule ran but not when.
`ffi-internals.md` describes the four-step commit order as a rule for the next
field added to `SessionExtensionComponents`. `physical_optimizer_rules` is that
field, so steps three and four name it rather than leaving the enumeration
stale on the commit that invoked it.
Why rules never collide is now argued once, in the extension guide. The
protocol docstring and the field docstring state it and link there, and the
docstring naming the test that runs its skipped example names the whole test.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
0 commit comments