sea-query-spanner 0.1.0

Spanner SQL dialect for sea-query
Documentation
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(),
    }
}