relay-knowledge 1.1.9

Graph-database-based knowledge graph project.
Documentation
use rusqlite::{Transaction, params};

use crate::{
    domain::{CodeDependencyRecord, CodeIndexBatch},
    storage::StorageError,
};

pub(super) fn insert_dependencies(
    transaction: &Transaction<'_>,
    batch: &CodeIndexBatch,
) -> Result<(), StorageError> {
    insert_dependency_records(transaction, &batch.dependencies)
}

pub(in crate::storage::sqlite::code) fn insert_dependency_records(
    transaction: &Transaction<'_>,
    dependencies: &[CodeDependencyRecord],
) -> Result<(), StorageError> {
    let mut statement = transaction.prepare(
        "
        INSERT INTO code_repository_dependencies (
            repository_id, source_scope, dependency_id, file_id, path, language_id,
            ecosystem, package_name, requirement, resolved_version, dependency_group,
            source_kind, is_lockfile, line_start, line_end, excerpt
        )
        VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14, ?15, ?16)
        ",
    )?;
    let mut search_documents = super::super::SearchDocumentInserter::new(transaction)?;
    for dependency in dependencies {
        statement.execute(params![
            dependency.repository_id,
            dependency.source_scope,
            dependency.dependency_id,
            dependency.file_id,
            dependency.path,
            dependency.language_id,
            dependency.ecosystem,
            dependency.package_name,
            dependency.requirement,
            dependency.resolved_version,
            dependency.dependency_group,
            dependency.source_kind,
            dependency.is_lockfile,
            dependency.line_range.start,
            dependency.line_range.end,
            dependency.excerpt,
        ])?;
        search_documents.insert(
            &dependency.source_scope,
            "dependency",
            &dependency.dependency_id,
            &dependency.path,
            &dependency.language_id,
            [
                dependency.ecosystem.as_str(),
                dependency.package_name.as_str(),
                dependency.requirement.as_deref().unwrap_or_default(),
                dependency.resolved_version.as_deref().unwrap_or_default(),
                dependency.dependency_group.as_str(),
                dependency.source_kind.as_str(),
                dependency.excerpt.as_str(),
                dependency.path.as_str(),
            ],
        )?;
    }

    Ok(())
}