relay-knowledge 1.1.17

Graph-database-based knowledge graph project.
Documentation
use std::{
    path::Path,
    sync::{Arc, Mutex},
};

use rusqlite::Connection;

mod mutation;
mod version;

pub(super) use mutation::commit_batch;

use crate::{
    domain::GraphVersion,
    storage::{GraphInspection, StorageError},
};

use super::{
    code_graph,
    connection_runtime::{self, maintenance::SqliteMaintenanceState},
    table_stats::count_rows,
};

pub(super) fn inspect_graph(
    connection: &mut Connection,
    database_path: Option<&Path>,
    maintenance_state: &Arc<Mutex<SqliteMaintenanceState>>,
) -> Result<GraphInspection, StorageError> {
    Ok(GraphInspection {
        graph_version: current_graph_version(connection)?,
        entity_count: count_rows(connection, "entities")?,
        evidence_count: count_rows(connection, "evidence")?,
        relation_count: count_rows(connection, "graph_relations")?,
        claim_count: count_rows(connection, "graph_claims")?,
        event_count: count_rows(connection, "graph_events")?,
        mutation_count: count_rows(connection, "graph_mutations")?,
        code_file_count: count_rows(connection, "code_files")?,
        code_symbol_count: count_rows(connection, "code_symbols")?,
        code_reference_count: count_rows(connection, "code_references")?,
        code_chunk_count: count_rows(connection, "code_chunks")?,
        code_parse_status_counts: code_graph::parse_status_counts(connection)?,
        sqlite: connection_runtime::maintenance::diagnostics(
            connection,
            database_path,
            maintenance_state,
        )?,
    })
}

pub(super) fn current_graph_version(
    connection: &mut Connection,
) -> Result<GraphVersion, StorageError> {
    current_graph_version_in_transaction(connection)
}

pub(in crate::storage::sqlite) fn current_graph_version_in_transaction(
    connection: &Connection,
) -> Result<GraphVersion, StorageError> {
    let value = connection.query_row(
        "SELECT graph_version FROM graph_state WHERE id = 1",
        [],
        |row| row.get::<_, u64>(0),
    )?;

    Ok(GraphVersion::new(value))
}

#[cfg(test)]
#[path = "mod_tests.rs"]
mod tests;