Skip to main content

uqa_execution/type_resolution/
length.rs

1//
2// Unified Query Algebra
3//
4// Copyright (c) 2023-2026 Cognica, Inc.
5//
6
7//! Compatibility API for string and binary length overload resolution.
8
9use uqa_sql::ast::{ColumnType, FunctionBinding};
10use uqa_sql::SQLError;
11
12use super::common::local_routine_name;
13use super::string_binary::{self, ResolvedStringBinaryOverload};
14use super::{function_resolution_error, FunctionTypeResolver};
15
16pub type ResolvedLengthOverload = ResolvedStringBinaryOverload;
17
18#[doc(hidden)]
19pub fn resolve_length_overload(
20    name: &str,
21    binding: Option<&FunctionBinding>,
22    argument_names: &[Option<String>],
23    argument_types: &[Option<ColumnType>],
24    resolver: Option<&dyn FunctionTypeResolver>,
25) -> Result<ResolvedLengthOverload, SQLError> {
26    if !matches!(
27        local_routine_name(name).as_str(),
28        "length" | "char_length" | "character_length" | "octet_length" | "bit_length"
29    ) {
30        return Err(function_resolution_error(
31            "42883",
32            name,
33            argument_names,
34            argument_types,
35            "does not exist",
36        ));
37    }
38    string_binary::resolve_overload(name, binding, argument_names, argument_types, resolver)
39}