common_function/
helper.rs1use common_query::error::{InvalidInputTypeSnafu, Result};
16use common_query::prelude::{Signature, TypeSignature, Volatility};
17use datatypes::prelude::ConcreteDataType;
18use datatypes::types::cast::cast;
19use datatypes::value::ValueRef;
20use snafu::ResultExt;
21
22pub fn one_of_sigs2(args1: Vec<ConcreteDataType>, args2: Vec<ConcreteDataType>) -> Signature {
24 let mut sigs = Vec::with_capacity(args1.len() * args2.len());
25
26 for arg1 in &args1 {
27 for arg2 in &args2 {
28 sigs.push(TypeSignature::Exact(vec![arg1.clone(), arg2.clone()]));
29 }
30 }
31
32 Signature::one_of(sigs, Volatility::Immutable)
33}
34
35pub fn cast_u64(value: &ValueRef) -> Result<Option<u64>> {
37 cast((*value).into(), &ConcreteDataType::uint64_datatype())
38 .context(InvalidInputTypeSnafu {
39 err_msg: format!(
40 "Failed to cast input into uint64, actual type: {:#?}",
41 value.data_type(),
42 ),
43 })
44 .map(|v| v.as_u64())
45}