use sea_query::Func;
pub fn translate_function(func: &Func) -> String {
match func {
Func::Custom(name) => name.to_string().to_uppercase(),
_ => {
let name = format!("{:?}", func);
translate_function_name(&name)
}
}
}
pub fn translate_function_name(name: &str) -> String {
match name.to_uppercase().as_str() {
"NOW" | "CURRENT_TIMESTAMP" => "CURRENT_TIMESTAMP".to_string(),
"CURRENT_DATE" => "CURRENT_DATE".to_string(),
"CURRENT_TIME" => "CURRENT_TIMESTAMP".to_string(),
"COALESCE" => "COALESCE".to_string(),
"IFNULL" | "NVL" => "IFNULL".to_string(),
"NULLIF" => "NULLIF".to_string(),
"GREATEST" => "GREATEST".to_string(),
"LEAST" => "LEAST".to_string(),
"ABS" => "ABS".to_string(),
"CEIL" | "CEILING" => "CEIL".to_string(),
"FLOOR" => "FLOOR".to_string(),
"ROUND" => "ROUND".to_string(),
"TRUNC" | "TRUNCATE" => "TRUNC".to_string(),
"MOD" => "MOD".to_string(),
"POWER" | "POW" => "POWER".to_string(),
"SQRT" => "SQRT".to_string(),
"LENGTH" | "LEN" | "CHAR_LENGTH" | "CHARACTER_LENGTH" => "CHAR_LENGTH".to_string(),
"BYTE_LENGTH" | "OCTET_LENGTH" => "BYTE_LENGTH".to_string(),
"LOWER" | "LCASE" => "LOWER".to_string(),
"UPPER" | "UCASE" => "UPPER".to_string(),
"LTRIM" => "LTRIM".to_string(),
"RTRIM" => "RTRIM".to_string(),
"TRIM" => "TRIM".to_string(),
"SUBSTR" | "SUBSTRING" => "SUBSTR".to_string(),
"CONCAT" => "CONCAT".to_string(),
"REPLACE" => "REPLACE".to_string(),
"REVERSE" => "REVERSE".to_string(),
"SPLIT" => "SPLIT".to_string(),
"STARTS_WITH" => "STARTS_WITH".to_string(),
"ENDS_WITH" => "ENDS_WITH".to_string(),
"CONTAINS" => "CONTAINS".to_string(),
"REGEXP_CONTAINS" => "REGEXP_CONTAINS".to_string(),
"REGEXP_EXTRACT" => "REGEXP_EXTRACT".to_string(),
"REGEXP_REPLACE" => "REGEXP_REPLACE".to_string(),
"DATE" => "DATE".to_string(),
"TIMESTAMP" => "TIMESTAMP".to_string(),
"DATE_ADD" => "DATE_ADD".to_string(),
"DATE_SUB" => "DATE_SUB".to_string(),
"DATE_DIFF" => "DATE_DIFF".to_string(),
"DATE_TRUNC" => "DATE_TRUNC".to_string(),
"EXTRACT" => "EXTRACT".to_string(),
"FORMAT_DATE" => "FORMAT_DATE".to_string(),
"FORMAT_TIMESTAMP" => "FORMAT_TIMESTAMP".to_string(),
"PARSE_DATE" => "PARSE_DATE".to_string(),
"PARSE_TIMESTAMP" => "PARSE_TIMESTAMP".to_string(),
"TIMESTAMP_ADD" => "TIMESTAMP_ADD".to_string(),
"TIMESTAMP_SUB" => "TIMESTAMP_SUB".to_string(),
"TIMESTAMP_DIFF" => "TIMESTAMP_DIFF".to_string(),
"TIMESTAMP_TRUNC" => "TIMESTAMP_TRUNC".to_string(),
"UNIX_DATE" => "UNIX_DATE".to_string(),
"UNIX_SECONDS" => "UNIX_SECONDS".to_string(),
"UNIX_MILLIS" => "UNIX_MILLIS".to_string(),
"UNIX_MICROS" => "UNIX_MICROS".to_string(),
"TIMESTAMP_SECONDS" => "TIMESTAMP_SECONDS".to_string(),
"TIMESTAMP_MILLIS" => "TIMESTAMP_MILLIS".to_string(),
"TIMESTAMP_MICROS" => "TIMESTAMP_MICROS".to_string(),
"COUNT" => "COUNT".to_string(),
"SUM" => "SUM".to_string(),
"AVG" => "AVG".to_string(),
"MIN" => "MIN".to_string(),
"MAX" => "MAX".to_string(),
"ARRAY_AGG" => "ARRAY_AGG".to_string(),
"STRING_AGG" => "STRING_AGG".to_string(),
"COUNTIF" => "COUNTIF".to_string(),
"BIT_AND" => "BIT_AND".to_string(),
"BIT_OR" => "BIT_OR".to_string(),
"BIT_XOR" => "BIT_XOR".to_string(),
"LOGICAL_AND" => "LOGICAL_AND".to_string(),
"LOGICAL_OR" => "LOGICAL_OR".to_string(),
"GENERATE_UUID" => "GENERATE_UUID".to_string(),
"CAST" => "CAST".to_string(),
"SAFE_CAST" => "SAFE_CAST".to_string(),
"IF" => "IF".to_string(),
"CASE" => "CASE".to_string(),
"ARRAY" => "ARRAY".to_string(),
"ARRAY_LENGTH" => "ARRAY_LENGTH".to_string(),
"ARRAY_TO_STRING" => "ARRAY_TO_STRING".to_string(),
"JSON_EXTRACT" => "JSON_EXTRACT".to_string(),
"JSON_EXTRACT_SCALAR" => "JSON_EXTRACT_SCALAR".to_string(),
"JSON_QUERY" => "JSON_QUERY".to_string(),
"JSON_VALUE" => "JSON_VALUE".to_string(),
"TO_JSON" => "TO_JSON".to_string(),
"PARSE_JSON" => "PARSE_JSON".to_string(),
other => other.to_uppercase(),
}
}