diff --git a/datafusion/functions/src/crypto/digest.rs b/datafusion/functions/src/crypto/digest.rs index 4f9d4605fe07..60821e04298f 100644 --- a/datafusion/functions/src/crypto/digest.rs +++ b/datafusion/functions/src/crypto/digest.rs @@ -18,11 +18,15 @@ //! "crypto" DataFusion functions use super::basic::{digest, utf8_or_binary_to_binary_type}; use arrow::datatypes::DataType; -use datafusion_common::Result; +use datafusion_common::{ + types::{logical_binary, logical_string}, + Result, +}; use datafusion_expr::{ ColumnarValue, Documentation, ScalarFunctionArgs, ScalarUDFImpl, Signature, - TypeSignature::*, Volatility, + TypeSignature, Volatility, }; +use datafusion_expr_common::signature::{Coercion, TypeSignatureClass}; use datafusion_macros::user_doc; use std::any::Any; @@ -64,15 +68,17 @@ impl Default for DigestFunc { impl DigestFunc { pub fn new() -> Self { - use DataType::*; Self { signature: Signature::one_of( vec![ - Exact(vec![Utf8View, Utf8View]), - Exact(vec![Utf8, Utf8]), - Exact(vec![LargeUtf8, Utf8]), - Exact(vec![Binary, Utf8]), - Exact(vec![LargeBinary, Utf8]), + TypeSignature::Coercible(vec![ + Coercion::new_exact(TypeSignatureClass::Native(logical_string())), + Coercion::new_exact(TypeSignatureClass::Native(logical_string())), + ]), + TypeSignature::Coercible(vec![ + Coercion::new_exact(TypeSignatureClass::Native(logical_string())), + Coercion::new_exact(TypeSignatureClass::Native(logical_binary())), + ]), ], Volatility::Immutable, ), diff --git a/datafusion/functions/src/crypto/md5.rs b/datafusion/functions/src/crypto/md5.rs index 18ad0d6a7ded..68f8142bce1c 100644 --- a/datafusion/functions/src/crypto/md5.rs +++ b/datafusion/functions/src/crypto/md5.rs @@ -18,11 +18,16 @@ //! "crypto" DataFusion functions use crate::crypto::basic::md5; use arrow::datatypes::DataType; -use datafusion_common::{plan_err, Result}; +use datafusion_common::{ + plan_err, + types::{logical_binary, logical_string}, + Result, +}; use datafusion_expr::{ ColumnarValue, Documentation, ScalarFunctionArgs, ScalarUDFImpl, Signature, - Volatility, + TypeSignature, Volatility, }; +use datafusion_expr_common::signature::{Coercion, TypeSignatureClass}; use datafusion_macros::user_doc; use std::any::Any; @@ -52,11 +57,16 @@ impl Default for Md5Func { impl Md5Func { pub fn new() -> Self { - use DataType::*; Self { - signature: Signature::uniform( - 1, - vec![Utf8View, Utf8, LargeUtf8, Binary, LargeBinary], + signature: Signature::one_of( + vec![ + TypeSignature::Coercible(vec![Coercion::new_exact( + TypeSignatureClass::Native(logical_string()), + )]), + TypeSignature::Coercible(vec![Coercion::new_exact( + TypeSignatureClass::Native(logical_binary()), + )]), + ], Volatility::Immutable, ), } diff --git a/datafusion/functions/src/crypto/sha224.rs b/datafusion/functions/src/crypto/sha224.rs index 24fe5e119df3..b155e4efcbb4 100644 --- a/datafusion/functions/src/crypto/sha224.rs +++ b/datafusion/functions/src/crypto/sha224.rs @@ -18,11 +18,15 @@ //! "crypto" DataFusion functions use super::basic::{sha224, utf8_or_binary_to_binary_type}; use arrow::datatypes::DataType; -use datafusion_common::Result; +use datafusion_common::{ + types::{logical_binary, logical_string}, + Result, +}; use datafusion_expr::{ ColumnarValue, Documentation, ScalarFunctionArgs, ScalarUDFImpl, Signature, - Volatility, + TypeSignature, Volatility, }; +use datafusion_expr_common::signature::{Coercion, TypeSignatureClass}; use datafusion_macros::user_doc; use std::any::Any; @@ -53,11 +57,16 @@ impl Default for SHA224Func { impl SHA224Func { pub fn new() -> Self { - use DataType::*; Self { - signature: Signature::uniform( - 1, - vec![Utf8View, Utf8, LargeUtf8, Binary, LargeBinary], + signature: Signature::one_of( + vec![ + TypeSignature::Coercible(vec![Coercion::new_exact( + TypeSignatureClass::Native(logical_string()), + )]), + TypeSignature::Coercible(vec![Coercion::new_exact( + TypeSignatureClass::Native(logical_binary()), + )]), + ], Volatility::Immutable, ), } diff --git a/datafusion/functions/src/crypto/sha256.rs b/datafusion/functions/src/crypto/sha256.rs index c48dda19cbc5..f275295731b1 100644 --- a/datafusion/functions/src/crypto/sha256.rs +++ b/datafusion/functions/src/crypto/sha256.rs @@ -18,11 +18,15 @@ //! "crypto" DataFusion functions use super::basic::{sha256, utf8_or_binary_to_binary_type}; use arrow::datatypes::DataType; -use datafusion_common::Result; +use datafusion_common::{ + types::{logical_binary, logical_string}, + Result, +}; use datafusion_expr::{ ColumnarValue, Documentation, ScalarFunctionArgs, ScalarUDFImpl, Signature, - Volatility, + TypeSignature, Volatility, }; +use datafusion_expr_common::signature::{Coercion, TypeSignatureClass}; use datafusion_macros::user_doc; use std::any::Any; @@ -52,11 +56,16 @@ impl Default for SHA256Func { impl SHA256Func { pub fn new() -> Self { - use DataType::*; Self { - signature: Signature::uniform( - 1, - vec![Utf8View, Utf8, LargeUtf8, Binary, LargeBinary], + signature: Signature::one_of( + vec![ + TypeSignature::Coercible(vec![Coercion::new_exact( + TypeSignatureClass::Native(logical_string()), + )]), + TypeSignature::Coercible(vec![Coercion::new_exact( + TypeSignatureClass::Native(logical_binary()), + )]), + ], Volatility::Immutable, ), } diff --git a/datafusion/functions/src/crypto/sha384.rs b/datafusion/functions/src/crypto/sha384.rs index 11d1d130e929..4f6f8e1774fd 100644 --- a/datafusion/functions/src/crypto/sha384.rs +++ b/datafusion/functions/src/crypto/sha384.rs @@ -18,11 +18,15 @@ //! "crypto" DataFusion functions use super::basic::{sha384, utf8_or_binary_to_binary_type}; use arrow::datatypes::DataType; -use datafusion_common::Result; +use datafusion_common::{ + types::{logical_binary, logical_string}, + Result, +}; use datafusion_expr::{ ColumnarValue, Documentation, ScalarFunctionArgs, ScalarUDFImpl, Signature, - Volatility, + TypeSignature, Volatility, }; +use datafusion_expr_common::signature::{Coercion, TypeSignatureClass}; use datafusion_macros::user_doc; use std::any::Any; @@ -52,11 +56,16 @@ impl Default for SHA384Func { impl SHA384Func { pub fn new() -> Self { - use DataType::*; Self { - signature: Signature::uniform( - 1, - vec![Utf8View, Utf8, LargeUtf8, Binary, LargeBinary], + signature: Signature::one_of( + vec![ + TypeSignature::Coercible(vec![Coercion::new_exact( + TypeSignatureClass::Native(logical_string()), + )]), + TypeSignature::Coercible(vec![Coercion::new_exact( + TypeSignatureClass::Native(logical_binary()), + )]), + ], Volatility::Immutable, ), } diff --git a/datafusion/functions/src/crypto/sha512.rs b/datafusion/functions/src/crypto/sha512.rs index 26fa85a5da3a..bdb4fc74f1e2 100644 --- a/datafusion/functions/src/crypto/sha512.rs +++ b/datafusion/functions/src/crypto/sha512.rs @@ -18,11 +18,15 @@ //! "crypto" DataFusion functions use super::basic::{sha512, utf8_or_binary_to_binary_type}; use arrow::datatypes::DataType; -use datafusion_common::Result; +use datafusion_common::{ + types::{logical_binary, logical_string}, + Result, +}; use datafusion_expr::{ ColumnarValue, Documentation, ScalarFunctionArgs, ScalarUDFImpl, Signature, - Volatility, + TypeSignature, Volatility, }; +use datafusion_expr_common::signature::{Coercion, TypeSignatureClass}; use datafusion_macros::user_doc; use std::any::Any; @@ -52,11 +56,16 @@ impl Default for SHA512Func { impl SHA512Func { pub fn new() -> Self { - use DataType::*; Self { - signature: Signature::uniform( - 1, - vec![Utf8View, Utf8, LargeUtf8, Binary, LargeBinary], + signature: Signature::one_of( + vec![ + TypeSignature::Coercible(vec![Coercion::new_exact( + TypeSignatureClass::Native(logical_string()), + )]), + TypeSignature::Coercible(vec![Coercion::new_exact( + TypeSignatureClass::Native(logical_binary()), + )]), + ], Volatility::Immutable, ), }