Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions datafusion/physical-expr/src/planner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,10 @@ pub fn create_physical_expr(
let idx = input_dfschema.index_of_column(c)?;
Ok(Arc::new(Column::new(&c.name, idx)))
}
Expr::OuterReferenceColumn(_datatype, c) => {
let idx = input_dfschema.index_of_column(c)?;
Ok(Arc::new(Column::new(&c.name, idx)))
}
Expr::Literal(value) => Ok(Arc::new(Literal::new(value.clone()))),
Expr::ScalarVariable(_, variable_names) => {
if is_system_variables(variable_names) {
Expand Down
42 changes: 42 additions & 0 deletions datafusion/sql/src/relation/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -400,6 +400,48 @@ impl<S: ContextProvider> SqlToRel<'_, S> {

(unpivot_plan, alias)
}
TableFactor::Function {
name, args, alias, ..
} => {
let tbl_func_name = self.object_name_to_table_reference(name)?;
let schema = planner_context
.outer_query_schema()
.cloned()
.unwrap_or_else(DFSchema::empty);
let func_args = args
.into_iter()
.map(|arg| match arg {
FunctionArg::Unnamed(FunctionArgExpr::Expr(expr)) => {
let expr = self.sql_expr_to_logical_expr(
expr,
&schema,
planner_context,
)?;
Ok((expr, None))
}
FunctionArg::Named {
name,
arg: FunctionArgExpr::Expr(expr),
..
} => {
let expr = self.sql_expr_to_logical_expr(
expr,
&schema,
planner_context,
)?;
Ok((expr, Some(name.value.clone())))
}
_ => plan_err!("Unsupported function argument: {arg:?}"),
})
.collect::<Result<Vec<(Expr, Option<String>)>>>()?;

let provider = self
.context_provider
.get_table_function_source(tbl_func_name.table(), func_args)?;
let plan =
LogicalPlanBuilder::scan(tbl_func_name, provider, None)?.build()?;
(plan, alias)
}
// @todo: Support TableFactory::TableFunction
_ => {
return not_impl_err!(
Expand Down
Loading