2010YOUY01 commented on code in PR #6479:
URL: https://github.com/apache/arrow-datafusion/pull/6479#discussion_r1209583657
##########
datafusion/expr/src/built_in_function.rs:
##########
@@ -429,31 +340,130 @@ impl BuiltinScalarFunction {
}
}
Review Comment:
`/// First alias in the array is used to display function names`
##########
datafusion/expr/src/built_in_function.rs:
##########
@@ -204,117 +208,24 @@ pub enum BuiltinScalarFunction {
}
lazy_static! {
- /// Mapping between SQL function names to `BuiltinScalarFunction` types.
- /// Note that multiple SQL function names can represent the same
`BuiltinScalarFunction`. These are treated as aliases.
- /// In case of such aliases, the first SQL function name in the vector is
used when displaying the function.
- static ref NAME_TO_FUNCTION: Vec<(&'static str, BuiltinScalarFunction)> =
vec![
- // math functions
- ("abs", BuiltinScalarFunction::Abs),
- ("acos", BuiltinScalarFunction::Acos),
- ("acosh", BuiltinScalarFunction::Acosh),
- ("asin", BuiltinScalarFunction::Asin),
- ("asinh", BuiltinScalarFunction::Asinh),
- ("atan", BuiltinScalarFunction::Atan),
- ("atanh", BuiltinScalarFunction::Atanh),
- ("atan2", BuiltinScalarFunction::Atan2),
- ("cbrt", BuiltinScalarFunction::Cbrt),
- ("ceil", BuiltinScalarFunction::Ceil),
- ("cos", BuiltinScalarFunction::Cos),
- ("cosh", BuiltinScalarFunction::Cosh),
- ("degrees", BuiltinScalarFunction::Degrees),
- ("exp", BuiltinScalarFunction::Exp),
- ("factorial", BuiltinScalarFunction::Factorial),
- ("floor", BuiltinScalarFunction::Floor),
- ("gcd", BuiltinScalarFunction::Gcd),
- ("lcm", BuiltinScalarFunction::Lcm),
- ("ln", BuiltinScalarFunction::Ln),
- ("log", BuiltinScalarFunction::Log),
- ("log10", BuiltinScalarFunction::Log10),
- ("log2", BuiltinScalarFunction::Log2),
- ("pi", BuiltinScalarFunction::Pi),
- ("power", BuiltinScalarFunction::Power),
- ("pow", BuiltinScalarFunction::Power),
- ("radians", BuiltinScalarFunction::Radians),
- ("random", BuiltinScalarFunction::Random),
- ("round", BuiltinScalarFunction::Round),
- ("signum", BuiltinScalarFunction::Signum),
- ("sin", BuiltinScalarFunction::Sin),
- ("sinh", BuiltinScalarFunction::Sinh),
- ("sqrt", BuiltinScalarFunction::Sqrt),
- ("tan", BuiltinScalarFunction::Tan),
- ("tanh", BuiltinScalarFunction::Tanh),
- ("trunc", BuiltinScalarFunction::Trunc),
-
- // conditional functions
- ("coalesce", BuiltinScalarFunction::Coalesce),
- ("nullif", BuiltinScalarFunction::NullIf),
+ /// Maps the sql function name to `BuiltinScalarFunction`
+ static ref NAME_TO_FUNCTION: HashMap<&'static str, BuiltinScalarFunction>
= {
+ let mut map: HashMap<&'static str, BuiltinScalarFunction> =
HashMap::new();
+ BuiltinScalarFunction::iter().for_each(|func| {
+ let a = aliases(&func);
+ a.iter().for_each(|a| {map.insert(a, func);});
+ });
+ map
+ };
- // string functions
- ("ascii", BuiltinScalarFunction::Ascii),
- ("bit_length", BuiltinScalarFunction::BitLength),
- ("btrim", BuiltinScalarFunction::Btrim),
- ("character_length", BuiltinScalarFunction::CharacterLength),
- ("char_length", BuiltinScalarFunction::CharacterLength),
- ("concat", BuiltinScalarFunction::Concat),
- ("concat_ws", BuiltinScalarFunction::ConcatWithSeparator),
- ("chr", BuiltinScalarFunction::Chr),
- ("initcap", BuiltinScalarFunction::InitCap),
- ("left", BuiltinScalarFunction::Left),
- ("length", BuiltinScalarFunction::CharacterLength),
- ("lower", BuiltinScalarFunction::Lower),
- ("lpad", BuiltinScalarFunction::Lpad),
- ("ltrim", BuiltinScalarFunction::Ltrim),
- ("octet_length", BuiltinScalarFunction::OctetLength),
- ("repeat", BuiltinScalarFunction::Repeat),
- ("replace", BuiltinScalarFunction::Replace),
- ("reverse", BuiltinScalarFunction::Reverse),
- ("right", BuiltinScalarFunction::Right),
- ("rpad", BuiltinScalarFunction::Rpad),
- ("rtrim", BuiltinScalarFunction::Rtrim),
- ("split_part", BuiltinScalarFunction::SplitPart),
- ("starts_with", BuiltinScalarFunction::StartsWith),
- ("strpos", BuiltinScalarFunction::Strpos),
- ("substr", BuiltinScalarFunction::Substr),
- ("to_hex", BuiltinScalarFunction::ToHex),
- ("translate", BuiltinScalarFunction::Translate),
- ("trim", BuiltinScalarFunction::Trim),
- ("upper", BuiltinScalarFunction::Upper),
- ("uuid", BuiltinScalarFunction::Uuid),
-
- // regex functions
- ("regexp_match", BuiltinScalarFunction::RegexpMatch),
- ("regexp_replace", BuiltinScalarFunction::RegexpReplace),
-
- // time/date functions
- ("now", BuiltinScalarFunction::Now),
- ("current_date", BuiltinScalarFunction::CurrentDate),
- ("current_time", BuiltinScalarFunction::CurrentTime),
- ("date_bin", BuiltinScalarFunction::DateBin),
- ("date_trunc", BuiltinScalarFunction::DateTrunc),
- ("datetrunc", BuiltinScalarFunction::DateTrunc),
- ("date_part", BuiltinScalarFunction::DatePart),
- ("datepart", BuiltinScalarFunction::DatePart),
- ("to_timestamp", BuiltinScalarFunction::ToTimestamp),
- ("to_timestamp_millis", BuiltinScalarFunction::ToTimestampMillis),
- ("to_timestamp_micros", BuiltinScalarFunction::ToTimestampMicros),
- ("to_timestamp_seconds", BuiltinScalarFunction::ToTimestampSeconds),
- ("from_unixtime", BuiltinScalarFunction::FromUnixtime),
-
- // hashing functions
- ("digest", BuiltinScalarFunction::Digest),
- ("md5", BuiltinScalarFunction::MD5),
- ("sha224", BuiltinScalarFunction::SHA224),
- ("sha256", BuiltinScalarFunction::SHA256),
- ("sha384", BuiltinScalarFunction::SHA384),
- ("sha512", BuiltinScalarFunction::SHA512),
-
- // other functions
- ("struct", BuiltinScalarFunction::Struct),
- ("arrow_typeof", BuiltinScalarFunction::ArrowTypeof),
-
- // array functions
- ("make_array", BuiltinScalarFunction::MakeArray),
- ];
+ /// Maps `BuiltinScalarFunction` --> canonical sql function
+ static ref FUNCTION_TO_NAME: HashMap<BuiltinScalarFunction, &'static str>
= {
+ let mut map: HashMap<BuiltinScalarFunction, &'static str> =
HashMap::new();
+ BuiltinScalarFunction::iter().for_each(|func| {
+ map.insert(func,
aliases(&func).iter().next().unwrap_or(&"NO_ALIAS"));
Review Comment:
`.iter().next()` == `.first()`
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]