1515// specific language governing permissions and limitations
1616// under the License.
1717
18+ use std:: collections:: BTreeMap ;
1819use std:: sync:: Arc ;
1920
2021use crate :: planner:: { ContextProvider , PlannerContext , SqlToRel } ;
@@ -24,9 +25,12 @@ use datafusion_common::{
2425 not_impl_err, plan_err, DFSchema , Diagnostic , Result , Span , Spans , TableReference ,
2526} ;
2627use datafusion_expr:: builder:: subquery_alias;
28+ use datafusion_expr:: expr:: FieldMetadata ;
2729use datafusion_expr:: { expr:: Unnest , Expr , LogicalPlan , LogicalPlanBuilder } ;
2830use datafusion_expr:: { Subquery , SubqueryAlias } ;
29- use sqlparser:: ast:: { FunctionArg , FunctionArgExpr , Spanned , TableFactor } ;
31+ use sqlparser:: ast:: {
32+ Expr as SQLExpr , FunctionArg , FunctionArgExpr , Spanned , TableFactor ,
33+ } ;
3034
3135mod join;
3236
@@ -48,15 +52,36 @@ impl<S: ContextProvider> SqlToRel<'_, S> {
4852 let args = func_args
4953 . args
5054 . into_iter ( )
51- . flat_map ( |arg| {
52- if let FunctionArg :: Unnamed ( FunctionArgExpr :: Expr ( expr) ) = arg
53- {
54- self . sql_expr_to_logical_expr (
55+ . flat_map ( |arg| match arg {
56+ FunctionArg :: Unnamed ( FunctionArgExpr :: Expr ( expr) ) => self
57+ . sql_expr_to_logical_expr (
5558 expr,
5659 & DFSchema :: empty ( ) ,
5760 planner_context,
58- )
59- } else {
61+ ) ,
62+ FunctionArg :: ExprNamed {
63+ name : SQLExpr :: Identifier ( ident) ,
64+ arg : FunctionArgExpr :: Expr ( arg) ,
65+ operator : _,
66+ } => match self . sql_expr_to_logical_expr (
67+ arg,
68+ & DFSchema :: empty ( ) ,
69+ planner_context,
70+ ) {
71+ Ok ( Expr :: Literal ( scalar, meta) ) => {
72+ let spice_metadata =
73+ FieldMetadata :: new ( BTreeMap :: from ( [ (
74+ "spice.parameter_name" . to_string ( ) ,
75+ ident. value ,
76+ ) ] ) ) ;
77+ let mut meta =
78+ meta. unwrap_or ( FieldMetadata :: default ( ) ) ;
79+ meta. extend ( spice_metadata) ;
80+ Ok ( Expr :: Literal ( scalar, Some ( meta) ) )
81+ }
82+ other => other,
83+ } ,
84+ _ => {
6085 plan_err ! ( "Unsupported function argument type: {:?}" , arg)
6186 }
6287 } )
0 commit comments