pub struct ScalarUDF { /* private fields */ }Expand description
Logical representation of a Scalar User Defined Function.
A scalar function produces a single row output for each row of input. This struct contains the information DataFusion needs to plan and invoke functions you supply such as name, type signature, return type, and actual implementation.
-
For simple use cases, use
create_udf(examples insimple_udf.rs). -
For advanced use cases, use
ScalarUDFImplwhich provides full API access (examples inadvanced_udf.rs).
See Self::call to create an Expr which invokes a ScalarUDF with arguments.
§API Note
This is a separate struct from ScalarUDFImpl to maintain backwards
compatibility with the older API.
Implementations§
Source§impl ScalarUDF
impl ScalarUDF
Sourcepub fn new_from_impl<F>(fun: F) -> ScalarUDFwhere
F: ScalarUDFImpl + 'static,
pub fn new_from_impl<F>(fun: F) -> ScalarUDFwhere
F: ScalarUDFImpl + 'static,
Create a new ScalarUDF from a [ScalarUDFImpl] trait object
Note this is the same as using the From impl (ScalarUDF::from)
Create a new ScalarUDF from a [ScalarUDFImpl] trait object
Sourcepub fn inner(&self) -> &Arc<dyn ScalarUDFImpl>
pub fn inner(&self) -> &Arc<dyn ScalarUDFImpl>
Return the underlying ScalarUDFImpl trait object for this function
Sourcepub fn with_aliases(
self,
aliases: impl IntoIterator<Item = &'static str>,
) -> ScalarUDF
pub fn with_aliases( self, aliases: impl IntoIterator<Item = &'static str>, ) -> ScalarUDF
Adds additional names that can be used to invoke this function, in
addition to name
If you implement ScalarUDFImpl directly you should return aliases directly.
Sourcepub fn name(&self) -> &str
pub fn name(&self) -> &str
Returns this function’s name.
See ScalarUDFImpl::name for more details.
Sourcepub fn display_name(&self, args: &[Expr]) -> Result<String, DataFusionError>
👎Deprecated since 50.0.0: This method is unused and will be removed in a future release
pub fn display_name(&self, args: &[Expr]) -> Result<String, DataFusionError>
Returns this function’s display_name.
See ScalarUDFImpl::display_name for more details
Sourcepub fn schema_name(&self, args: &[Expr]) -> Result<String, DataFusionError>
pub fn schema_name(&self, args: &[Expr]) -> Result<String, DataFusionError>
Returns this function’s schema_name.
See ScalarUDFImpl::schema_name for more details
Sourcepub fn aliases(&self) -> &[String]
pub fn aliases(&self) -> &[String]
Returns the aliases for this function.
See ScalarUDF::with_aliases for more details
Sourcepub fn signature(&self) -> &Signature
pub fn signature(&self) -> &Signature
Returns this function’s Signature (what input types are accepted).
See ScalarUDFImpl::signature for more details.
Sourcepub fn return_type(
&self,
arg_types: &[DataType],
) -> Result<DataType, DataFusionError>
pub fn return_type( &self, arg_types: &[DataType], ) -> Result<DataType, DataFusionError>
The datatype this function returns given the input argument types.
This function is used when the input arguments are DataTypes.
§Notes
If a function implement ScalarUDFImpl::return_field_from_args,
its ScalarUDFImpl::return_type should raise an error.
See ScalarUDFImpl::return_type for more details.
Sourcepub fn return_field_from_args(
&self,
args: ReturnFieldArgs<'_>,
) -> Result<Arc<Field>, DataFusionError>
pub fn return_field_from_args( &self, args: ReturnFieldArgs<'_>, ) -> Result<Arc<Field>, DataFusionError>
Return the datatype this function returns given the input argument types.
See ScalarUDFImpl::return_field_from_args for more details.
Sourcepub fn simplify(
&self,
args: Vec<Expr>,
info: &dyn SimplifyInfo,
) -> Result<ExprSimplifyResult, DataFusionError>
pub fn simplify( &self, args: Vec<Expr>, info: &dyn SimplifyInfo, ) -> Result<ExprSimplifyResult, DataFusionError>
Do the function rewrite
See ScalarUDFImpl::simplify for more details.
pub fn is_nullable(&self, args: &[Expr], schema: &dyn ExprSchema) -> bool
return_field_from_args instead.Sourcepub fn invoke_with_args(
&self,
args: ScalarFunctionArgs,
) -> Result<ColumnarValue, DataFusionError>
pub fn invoke_with_args( &self, args: ScalarFunctionArgs, ) -> Result<ColumnarValue, DataFusionError>
Invoke the function on args, returning the appropriate result.
See ScalarUDFImpl::invoke_with_args for details.
Sourcepub fn short_circuits(&self) -> bool
pub fn short_circuits(&self) -> bool
Get the circuits of inner implementation
Sourcepub fn evaluate_bounds(
&self,
inputs: &[&Interval],
) -> Result<Interval, DataFusionError>
pub fn evaluate_bounds( &self, inputs: &[&Interval], ) -> Result<Interval, DataFusionError>
Sourcepub fn propagate_constraints(
&self,
interval: &Interval,
inputs: &[&Interval],
) -> Result<Option<Vec<Interval>>, DataFusionError>
pub fn propagate_constraints( &self, interval: &Interval, inputs: &[&Interval], ) -> Result<Option<Vec<Interval>>, DataFusionError>
Updates bounds for child expressions, given a known interval for this function. This is used to propagate constraints down through an expression tree.
§Parameters
intervalis the currently known interval for this function.inputsare the current intervals for the inputs (children) of this function.
§Returns
A Vec of new intervals for the children, in order.
If constraint propagation reveals an infeasibility for any child, returns
None. If none of the children intervals change as a result of
propagation, may return an empty vector instead of cloning children.
This is the default (and conservative) return value.
§Example
If the function is ABS(a), the current interval is [4, 5] and the
input a is given as [-7, 3], then propagation would return [-5, 3].
Sourcepub fn output_ordering(
&self,
inputs: &[ExprProperties],
) -> Result<SortProperties, DataFusionError>
pub fn output_ordering( &self, inputs: &[ExprProperties], ) -> Result<SortProperties, DataFusionError>
Calculates the SortProperties of this function based on its
children’s properties.
pub fn preserves_lex_ordering( &self, inputs: &[ExprProperties], ) -> Result<bool, DataFusionError>
Sourcepub fn coerce_types(
&self,
arg_types: &[DataType],
) -> Result<Vec<DataType>, DataFusionError>
pub fn coerce_types( &self, arg_types: &[DataType], ) -> Result<Vec<DataType>, DataFusionError>
See ScalarUDFImpl::coerce_types for more details.
Sourcepub fn documentation(&self) -> Option<&Documentation>
pub fn documentation(&self) -> Option<&Documentation>
Returns the documentation for this Scalar UDF.
Documentation can be accessed programmatically as well as generating publicly facing documentation.
Sourcepub fn as_async(&self) -> Option<&AsyncScalarUDF>
pub fn as_async(&self) -> Option<&AsyncScalarUDF>
Return true if this function is an async function
Trait Implementations§
Source§impl<F> From<F> for ScalarUDFwhere
F: ScalarUDFImpl + 'static,
impl<F> From<F> for ScalarUDFwhere
F: ScalarUDFImpl + 'static,
Source§impl PartialOrd for ScalarUDF
impl PartialOrd for ScalarUDF
impl Eq for ScalarUDF
Auto Trait Implementations§
impl Freeze for ScalarUDF
impl !RefUnwindSafe for ScalarUDF
impl Send for ScalarUDF
impl Sync for ScalarUDF
impl Unpin for ScalarUDF
impl !UnwindSafe for ScalarUDF
Blanket Implementations§
Source§impl<T> AlignerFor<1> for T
impl<T> AlignerFor<1> for T
Source§impl<T> AlignerFor<1024> for T
impl<T> AlignerFor<1024> for T
Source§type Aligner = AlignTo1024<T>
type Aligner = AlignTo1024<T>
AlignTo* type which aligns Self to ALIGNMENT.Source§impl<T> AlignerFor<128> for T
impl<T> AlignerFor<128> for T
Source§type Aligner = AlignTo128<T>
type Aligner = AlignTo128<T>
AlignTo* type which aligns Self to ALIGNMENT.Source§impl<T> AlignerFor<16> for T
impl<T> AlignerFor<16> for T
Source§impl<T> AlignerFor<16384> for T
impl<T> AlignerFor<16384> for T
Source§type Aligner = AlignTo16384<T>
type Aligner = AlignTo16384<T>
AlignTo* type which aligns Self to ALIGNMENT.Source§impl<T> AlignerFor<2> for T
impl<T> AlignerFor<2> for T
Source§impl<T> AlignerFor<2048> for T
impl<T> AlignerFor<2048> for T
Source§type Aligner = AlignTo2048<T>
type Aligner = AlignTo2048<T>
AlignTo* type which aligns Self to ALIGNMENT.Source§impl<T> AlignerFor<256> for T
impl<T> AlignerFor<256> for T
Source§type Aligner = AlignTo256<T>
type Aligner = AlignTo256<T>
AlignTo* type which aligns Self to ALIGNMENT.Source§impl<T> AlignerFor<32> for T
impl<T> AlignerFor<32> for T
Source§impl<T> AlignerFor<32768> for T
impl<T> AlignerFor<32768> for T
Source§type Aligner = AlignTo32768<T>
type Aligner = AlignTo32768<T>
AlignTo* type which aligns Self to ALIGNMENT.Source§impl<T> AlignerFor<4> for T
impl<T> AlignerFor<4> for T
Source§impl<T> AlignerFor<4096> for T
impl<T> AlignerFor<4096> for T
Source§type Aligner = AlignTo4096<T>
type Aligner = AlignTo4096<T>
AlignTo* type which aligns Self to ALIGNMENT.Source§impl<T> AlignerFor<512> for T
impl<T> AlignerFor<512> for T
Source§type Aligner = AlignTo512<T>
type Aligner = AlignTo512<T>
AlignTo* type which aligns Self to ALIGNMENT.Source§impl<T> AlignerFor<64> for T
impl<T> AlignerFor<64> for T
Source§impl<T> AlignerFor<8> for T
impl<T> AlignerFor<8> for T
Source§impl<T> AlignerFor<8192> for T
impl<T> AlignerFor<8192> for T
Source§type Aligner = AlignTo8192<T>
type Aligner = AlignTo8192<T>
AlignTo* type which aligns Self to ALIGNMENT.Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
Source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<'a, T> RCowCompatibleRef<'a> for Twhere
T: Clone + 'a,
impl<'a, T> RCowCompatibleRef<'a> for Twhere
T: Clone + 'a,
Source§fn as_c_ref(from: &'a T) -> <T as RCowCompatibleRef<'a>>::RefC
fn as_c_ref(from: &'a T) -> <T as RCowCompatibleRef<'a>>::RefC
Source§fn as_rust_ref(from: <T as RCowCompatibleRef<'a>>::RefC) -> &'a T
fn as_rust_ref(from: <T as RCowCompatibleRef<'a>>::RefC) -> &'a T
Source§impl<S> ROExtAcc for S
impl<S> ROExtAcc for S
Source§fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F
fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F
offset. Read moreSource§fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F
fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F
offset. Read moreSource§fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F
fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F
offset. Read moreSource§fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F
fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F
offset. Read moreSource§impl<S> ROExtOps<Aligned> for S
impl<S> ROExtOps<Aligned> for S
Source§fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F
fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F
offset) with value,
returning the previous value of the field. Read moreSource§fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere
F: Copy,
fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere
F: Copy,
Source§impl<S> ROExtOps<Unaligned> for S
impl<S> ROExtOps<Unaligned> for S
Source§fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F
fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F
offset) with value,
returning the previous value of the field. Read moreSource§fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere
F: Copy,
fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere
F: Copy,
Source§impl<T> SelfOps for Twhere
T: ?Sized,
impl<T> SelfOps for Twhere
T: ?Sized,
Source§fn piped<F, U>(self, f: F) -> U
fn piped<F, U>(self, f: F) -> U
Source§fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere
F: FnOnce(&'a Self) -> U,
fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere
F: FnOnce(&'a Self) -> U,
piped except that the function takes &Self
Useful for functions that take &Self instead of Self. Read moreSource§fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere
F: FnOnce(&'a mut Self) -> U,
fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere
F: FnOnce(&'a mut Self) -> U,
piped, except that the function takes &mut Self.
Useful for functions that take &mut Self instead of Self.Source§fn mutated<F>(self, f: F) -> Self
fn mutated<F>(self, f: F) -> Self
Source§fn observe<F>(self, f: F) -> Self
fn observe<F>(self, f: F) -> Self
Source§fn as_ref_<T>(&self) -> &T
fn as_ref_<T>(&self) -> &T
AsRef,
using the turbofish .as_ref_::<_>() syntax. Read more