Background
SessionContext::add_analyzer_rule registers an Arc<dyn AnalyzerRule> that runs during plan analysis (the pre-optimization pass that resolves names, applies type coercion, etc.). The Python bindings do not expose this method.
Upstream signature
pub fn add_analyzer_rule(&self, analyzer_rule: Arc<dyn AnalyzerRule + Send + Sync>)
User value
Lets users intercept and transform a logical plan immediately after analysis, before the main optimizer runs. Useful for custom semantic validation, injecting domain-specific defaults, or rewriting unresolved references against an external catalog.
Why deferred
Blocked upstream, same root cause as #1574 (add_optimizer_rule): no FFI bridge exists for the logical AnalyzerRule trait, and a Python-only adapter can observe but not meaningfully transform LogicalPlan nodes because there are no Python constructors for the variants. Tracked here; revisit when upstream lands an FFI_AnalyzerRule.
Background
SessionContext::add_analyzer_ruleregisters anArc<dyn AnalyzerRule>that runs during plan analysis (the pre-optimization pass that resolves names, applies type coercion, etc.). The Python bindings do not expose this method.Upstream signature
User value
Lets users intercept and transform a logical plan immediately after analysis, before the main optimizer runs. Useful for custom semantic validation, injecting domain-specific defaults, or rewriting unresolved references against an external catalog.
Why deferred
Blocked upstream, same root cause as #1574 (add_optimizer_rule): no FFI bridge exists for the logical
AnalyzerRuletrait, and a Python-only adapter can observe but not meaningfully transformLogicalPlannodes because there are no Python constructors for the variants. Tracked here; revisit when upstream lands anFFI_AnalyzerRule.