athena_rs 3.26.3

Hyper performant polyglot Database driver
//! Observed-relation seeding helpers for `/debug/schema`.
//!
//! This module owns relation-row ingestion and normalization into a keyed
//! observed-table map before discovered columns are attached.

use super::debug_observed_table_contracts::{LoggingSchemaObservedTable, ObservedTablesMap};
use super::debug_observed_table_keys::normalize_relation_type;
use super::service::SchemaRelationRecord;

/// Seeds a relation-keyed observed table map from discovered relation rows.
pub(super) fn seed_observed_tables_from_relations(
    relations: Vec<SchemaRelationRecord>,
) -> ObservedTablesMap {
    let mut observed_map: ObservedTablesMap = ObservedTablesMap::default();

    for relation in relations {
        observed_map.insert(
            relation.key(),
            LoggingSchemaObservedTable {
                table_schema: relation.table_schema,
                table_name: relation.table_name,
                relation_type: normalize_relation_type(&relation.relation_type),
                columns: Vec::new(),
            },
        );
    }

    observed_map
}

#[cfg(test)]
mod tests {
    use super::*;

    /// Seeds relation entries using normalized relation type and stable keys.
    #[test]
    fn seed_observed_tables_from_relations_normalizes_relation_type() {
        let relations = vec![SchemaRelationRecord {
            table_schema: " public ".to_string(),
            table_name: " gateway_request_log ".to_string(),
            relation_type: "base table".to_string(),
        }];

        let map = seed_observed_tables_from_relations(relations);
        let table = map
            .get("public.gateway_request_log")
            .expect("table present");

        assert_eq!(table.relation_type, "BASE TABLE");
        assert!(table.columns.is_empty());
    }
}