MCPcopy Create free account
hub / github.com/apache/datafusion / sql_lambda_to_logical_lambda

Method sql_lambda_to_logical_lambda

datafusion/sql/src/expr/function.rs:915–956  ·  view source on GitHub ↗
(
        &self,
        planner_context: &mut PlannerContext,
        schema: &DFSchema,
        lambda: LambdaFunction,
        lambda_params: Vec<FieldRef>,
    )

Source from the content-addressed store, hash-verified

913 }
914
915 fn sql_lambda_to_logical_lambda(
916 &self,
917 planner_context: &mut PlannerContext,
918 schema: &DFSchema,
919 lambda: LambdaFunction,
920 lambda_params: Vec<FieldRef>,
921 ) -> Result<Lambda> {
922 if lambda.params.len() > lambda_params.len() {
923 return plan_err!(
924 "lambda defined {} params but UDF support only {}",
925 lambda.params.len(),
926 lambda_params.len()
927 );
928 }
929
930 if lambda.params.iter().any(|p| p.data_type.is_some()) {
931 return not_impl_err!(
932 "Lambda parameters with explicit data types are not supported"
933 );
934 }
935 let params = lambda
936 .params
937 .iter()
938 .map(|p| crate::utils::normalize_ident(p.name.clone()))
939 .collect();
940
941 let lambda_parameters = std::iter::zip(lambda_params, &params)
942 .map(|(f, n): (FieldRef, &String)| f.renamed(n.as_str()));
943
944 let mut planner_context = planner_context
945 .clone()
946 .with_lambda_parameters(lambda_parameters);
947
948 Ok(Lambda {
949 params,
950 body: Box::new(self.sql_expr_to_logical_expr(
951 *lambda.body,
952 schema,
953 &mut planner_context,
954 )?),
955 })
956 }
957
958 pub(super) fn sql_fn_name_to_expr(
959 &self,

Callers 1

sql_function_to_exprMethod · 0.80

Calls 12

normalize_identFunction · 0.85
newFunction · 0.85
collectMethod · 0.80
renamedMethod · 0.80
lenMethod · 0.45
anyMethod · 0.45
iterMethod · 0.45
mapMethod · 0.45
cloneMethod · 0.45
as_strMethod · 0.45

Tested by

no test coverage detected