athena_rs 3.26.4

Hyper performant polyglot Database driver
Documentation
//! Missing-table counter mutation policy for expected-table evaluation.
//!
//! This module owns counter updates for missing required/optional table keys
//! and missing-column totals when an expected table is absent.

use super::debug_evaluation_contracts::ExpectedTablesEvaluation;

/// Applies missing-table key and missing-column counter mutations.
pub(super) fn apply_missing_table_counters(
    evaluation: &mut ExpectedTablesEvaluation,
    required: bool,
    key: String,
    missing_column_count: usize,
) {
    if required {
        evaluation.missing_required_tables.push(key);
        evaluation.required_missing_column_count = evaluation
            .required_missing_column_count
            .saturating_add(missing_column_count);
    } else {
        evaluation.missing_optional_tables.push(key);
        evaluation.optional_missing_column_count = evaluation
            .optional_missing_column_count
            .saturating_add(missing_column_count);
    }
}

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

    /// Increments required missing-key and missing-column counters for required tables.
    #[test]
    fn missing_counters_increment_required_tracking() {
        let mut evaluation = ExpectedTablesEvaluation::default();

        apply_missing_table_counters(
            &mut evaluation,
            true,
            "public.gateway_request_log".to_string(),
            3,
        );

        assert_eq!(
            evaluation.missing_required_tables,
            vec!["public.gateway_request_log".to_string()]
        );
        assert!(evaluation.missing_optional_tables.is_empty());
        assert_eq!(evaluation.required_missing_column_count, 3);
        assert_eq!(evaluation.optional_missing_column_count, 0);
    }

    /// Increments optional missing-key and missing-column counters for optional tables.
    #[test]
    fn missing_counters_increment_optional_tracking() {
        let mut evaluation = ExpectedTablesEvaluation::default();

        apply_missing_table_counters(
            &mut evaluation,
            false,
            "public.route_request_log".to_string(),
            2,
        );

        assert_eq!(
            evaluation.missing_optional_tables,
            vec!["public.route_request_log".to_string()]
        );
        assert!(evaluation.missing_required_tables.is_empty());
        assert_eq!(evaluation.required_missing_column_count, 0);
        assert_eq!(evaluation.optional_missing_column_count, 2);
    }
}