From 41050ef0a0e2ab29d0e6f2fe2f87d101a625e19c Mon Sep 17 00:00:00 2001 From: Jia-Xuan Liu Date: Sat, 20 Jul 2024 12:17:24 +0800 Subject: [PATCH] implement map expr function --- datafusion/functions-array/src/map.rs | 30 +++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 datafusion/functions-array/src/map.rs diff --git a/datafusion/functions-array/src/map.rs b/datafusion/functions-array/src/map.rs new file mode 100644 index 000000000000..6beb853c9ff8 --- /dev/null +++ b/datafusion/functions-array/src/map.rs @@ -0,0 +1,30 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +use datafusion_expr::Expr; +use datafusion_expr::expr::ScalarFunction; +use datafusion_functions::core::map::map_udf; +use crate::make_array::make_array; + +pub fn map(keys: Vec, values: Vec) -> Expr { + let keys = make_array(keys); + let values = make_array(values); + Expr::ScalarFunction(ScalarFunction::new_udf( + map_udf(), + vec![keys, values], + )) +}