athena_rs 3.23.0

Hyper performant polyglot Database driver
Documentation
//! Missing-table aggregation helpers for `/debug/schema` still-needed diagnostics.
//!
//! This module isolates canonical missing-table key derivation from overall
//! still-needed response orchestration.

use super::debug_evaluation::ExpectedTablesEvaluation;
use super::debug_still_needed_sorted_keys::sorted_unique_keys;

/// Collects canonical required/optional missing-table keys from evaluation output.
pub(super) fn collect_missing_table_keys(
    evaluation: &ExpectedTablesEvaluation,
) -> (Vec<String>, Vec<String>) {
    (
        sorted_unique_keys(&evaluation.missing_required_tables),
        sorted_unique_keys(&evaluation.missing_optional_tables),
    )
}

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

    /// Deduplicates and sorts required/optional missing-table keys deterministically.
    #[test]
    fn missing_table_keys_are_sorted_and_deduplicated() {
        let mut evaluation = ExpectedTablesEvaluation::default();
        evaluation.missing_required_tables = vec![
            "public.gateway_request_log".to_string(),
            "analytics.operation_log".to_string(),
            "public.gateway_request_log".to_string(),
        ];
        evaluation.missing_optional_tables = vec![
            "public.route_request_log".to_string(),
            "analytics.route_request_log".to_string(),
            "public.route_request_log".to_string(),
        ];

        let (required_missing_tables, optional_missing_tables) =
            collect_missing_table_keys(&evaluation);

        assert_eq!(
            required_missing_tables,
            vec![
                "analytics.operation_log".to_string(),
                "public.gateway_request_log".to_string()
            ]
        );
        assert_eq!(
            optional_missing_tables,
            vec![
                "analytics.route_request_log".to_string(),
                "public.route_request_log".to_string()
            ]
        );
    }
}