uqa_sql/catalog/index/
output.rs1use crate::{expr::EngineHook, result::format_postgres_text, ColumnType, SQLError};
10use uqa_core::Value;
11
12pub fn format_key_value(
13 value: &Value,
14 ty: &ColumnType,
15 resolver: Option<&dyn EngineHook>,
16) -> Result<String, SQLError> {
17 match ty {
18 ColumnType::Domain { base, .. } => format_key_value(value, base, resolver),
19 ColumnType::Regproc
20 | ColumnType::Regprocedure
21 | ColumnType::Regclass
22 | ColumnType::Regcollation
23 | ColumnType::Regnamespace
24 | ColumnType::Regrole
25 | ColumnType::Regtype => format_postgres_text(value, &ColumnType::Oid, resolver),
26 ColumnType::Int2Vector => format_postgres_text(
27 value,
28 &ColumnType::Array(Box::new(ColumnType::SmallInteger)),
29 resolver,
30 ),
31 _ => format_postgres_text(value, ty, resolver),
32 }
33}
34
35#[cfg(test)]
36mod tests {
37 use super::*;
38 use uqa_core::{LegacyVectorKind, LegacyVectorValue};
39
40 #[test]
41 fn default_btree_input_types_preserve_alias_and_vector_output() {
42 assert_eq!(
43 format_key_value(&Value::Int(42), &ColumnType::Regclass, None).unwrap(),
44 "42"
45 );
46 for (kind, ty, expected) in [
47 (
48 LegacyVectorKind::SmallInteger,
49 ColumnType::Int2Vector,
50 "[0:1]={1,2}",
51 ),
52 (LegacyVectorKind::Oid, ColumnType::OidVector, "1 2"),
53 ] {
54 let value = Value::LegacyVector(
55 LegacyVectorValue::try_new(kind, vec![Value::Int(1), Value::Int(2)]).unwrap(),
56 );
57 assert_eq!(format_key_value(&value, &ty, None).unwrap(), expected);
58 }
59 }
60}