Upgrade Guides#

DataFusion 57.0.0#

Note: DataFusion 57.0.0 has not been released yet. The information provided in this section pertains to features and changes that have already been merged to the main branch and are awaiting release in this version.

Substrait consumers use explicit scope context#

Add a final &SubstraitConsumerContext argument to custom relation and expression callbacks on SubstraitConsumer. Forward it when calling conversion helpers or consuming child relations and expressions.

Remove implementations of push_outer_schema, pop_outer_schema, get_outer_schema, push_lambda_parameters, pop_lambda_parameters, and lambda_variable, and remove embedded DefaultSubstraitLambdaConsumer values. Use the context’s get_outer_schema and lambda_variable methods to resolve outer references and lambda parameters. To enter a scope, derive a child with context.with_outer_schema(...) or context.with_lambda_parameters(...) and pass it to nested conversions. No pop operation is needed; the parent stays unchanged.

from_substrait_plan and from_substrait_plan_with_consumer create the root context. For a new conversion started directly through a helper, pass &SubstraitConsumerContext::default(). Nested conversions must receive the current context.

Custom scoped values can be stored with context.with_extension(Arc::new(value)) and retrieved with context.get_extension::<MyScope>(). Pass the returned child context to nested conversions. Children inherit values; replacing a value leaves parents and siblings unchanged. The values themselves are shared through Arc.

Update logical-plan snapshots if needed: generated lambda parameter names are local to lexical scopes, so sibling lambdas may reuse names.