Skip to main content

uqa_sql/catalog/
languages.rs

1//
2// Unified Query Algebra
3//
4// Copyright (c) 2023-2026 Cognica, Inc.
5//
6
7//! Language identities shared by routine metadata and catalog dependencies.
8
9pub const INTERNAL_LANGUAGE: u32 = 12;
10pub const C_LANGUAGE: u32 = 13;
11pub const SQL_LANGUAGE: u32 = 14;
12pub const PLPGSQL_LANGUAGE: u32 = 13_647;
13
14pub const fn language_name(oid: u32) -> Option<&'static str> {
15    match oid {
16        INTERNAL_LANGUAGE => Some("internal"),
17        C_LANGUAGE => Some("c"),
18        SQL_LANGUAGE => Some("sql"),
19        PLPGSQL_LANGUAGE => Some("plpgsql"),
20        _ => None,
21    }
22}
23
24pub fn language_oid(name: &str) -> Option<u32> {
25    [
26        INTERNAL_LANGUAGE,
27        C_LANGUAGE,
28        SQL_LANGUAGE,
29        PLPGSQL_LANGUAGE,
30    ]
31    .into_iter()
32    .find(|&oid| language_name(oid).is_some_and(|known| known.eq_ignore_ascii_case(name)))
33}
34
35#[cfg(test)]
36mod tests {
37    use super::*;
38
39    #[test]
40    fn bootstrap_language_names_preserve_postgresql_identities() {
41        for (oid, name) in [
42            (12, "internal"),
43            (13, "c"),
44            (14, "sql"),
45            (13_647, "plpgsql"),
46        ] {
47            assert_eq!(language_name(oid), Some(name));
48            assert_eq!(language_oid(name), Some(oid));
49            assert_eq!(language_oid(&name.to_ascii_uppercase()), Some(oid));
50        }
51        assert_eq!(language_name(0), None);
52        assert_eq!(language_oid("missing"), None);
53    }
54}