use crate::logical_plan::producer::{
DefaultSubstraitProducer, SubstraitProducer, to_substrait_named_struct,
};
use datafusion::execution::SessionState;
use datafusion::logical_expr::{LogicalPlan, SubqueryAlias};
use substrait::proto::{Plan, PlanRel, Rel, RelRoot, plan_rel};
use substrait::version;
#[expect(deprecated)]
pub fn to_substrait_plan(
plan: &LogicalPlan,
state: &SessionState,
) -> datafusion::common::Result<Box<Plan>> {
let mut producer: DefaultSubstraitProducer = DefaultSubstraitProducer::new(state);
let plan_rels = vec![PlanRel {
rel_type: Some(plan_rel::RelType::Root(RelRoot {
input: Some(*producer.handle_plan(plan)?),
names: to_substrait_named_struct(&mut producer, plan.schema())?.names,
})),
}];
let extensions = producer.get_extensions();
Ok(Box::new(Plan {
version: Some(version::version_with_producer("datafusion")),
extension_uris: vec![],
extension_urns: vec![],
extensions: extensions.into(),
relations: plan_rels,
advanced_extensions: None,
expected_type_urls: vec![],
parameter_bindings: vec![],
type_aliases: vec![],
}))
}
pub fn from_subquery_alias(
producer: &mut impl SubstraitProducer,
alias: &SubqueryAlias,
) -> datafusion::common::Result<Box<Rel>> {
producer.handle_plan(alias.input.as_ref())
}