uqa_execution/type_resolution/
reverse.rs1use uqa_sql::ast::{ColumnType, FunctionBinding};
10use uqa_sql::SQLError;
11
12use super::string_binary::{self, ResolvedStringBinaryOverload};
13use super::{function_resolution_error, FunctionTypeResolver};
14
15pub type ResolvedReverseOverload = ResolvedStringBinaryOverload;
16
17#[doc(hidden)]
18pub fn resolve_reverse_overload(
19 name: &str,
20 binding: Option<&FunctionBinding>,
21 argument_names: &[Option<String>],
22 argument_types: &[Option<ColumnType>],
23 resolver: Option<&dyn FunctionTypeResolver>,
24) -> Result<ResolvedReverseOverload, SQLError> {
25 if !local_name(name).eq_ignore_ascii_case("reverse") {
26 return Err(function_resolution_error(
27 "42883",
28 name,
29 argument_names,
30 argument_types,
31 "does not exist",
32 ));
33 }
34 string_binary::resolve_overload(name, binding, argument_names, argument_types, resolver)
35}
36
37fn local_name(name: &str) -> String {
38 let lower = name.to_ascii_lowercase();
39 lower
40 .strip_prefix("pg_catalog.")
41 .unwrap_or(&lower)
42 .to_string()
43}