uqa_sql/catalog/
languages.rs1pub 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}