Skip to main content

uqa_execution/type_resolution/
reverse.rs

1//
2// Unified Query Algebra
3//
4// Copyright (c) 2023-2026 Cognica, Inc.
5//
6
7//! Compatibility API for `reverse(text|bytea)` overload resolution.
8
9use 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}