| // 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. |
| |
| //! Function module contains typing and signature for built-in and user defined functions. |
| |
| use crate::Accumulator; |
| use crate::ColumnarValue; |
| use arrow::datatypes::DataType; |
| use datafusion_common::Result; |
| use std::sync::Arc; |
| |
| /// Scalar function |
| /// |
| /// The Fn param is the wrapped function but be aware that the function will |
| /// be passed with the slice / vec of columnar values (either scalar or array) |
| /// with the exception of zero param function, where a singular element vec |
| /// will be passed. In that case the single element is a null array to indicate |
| /// the batch's row count (so that the generative zero-argument function can know |
| /// the result array size). |
| pub type ScalarFunctionImplementation = |
| Arc<dyn Fn(&[ColumnarValue]) -> Result<ColumnarValue> + Send + Sync>; |
| |
| /// A function's return type |
| pub type ReturnTypeFunction = |
| Arc<dyn Fn(&[DataType]) -> Result<Arc<DataType>> + Send + Sync>; |
| |
| /// the implementation of an aggregate function |
| pub type AccumulatorFunctionImplementation = |
| Arc<dyn Fn() -> Result<Box<dyn Accumulator>> + Send + Sync>; |
| |
| /// This signature corresponds to which types an aggregator serializes |
| /// its state, given its return datatype. |
| pub type StateTypeFunction = |
| Arc<dyn Fn(&DataType) -> Result<Arc<Vec<DataType>>> + Send + Sync>; |