relay-knowledge 1.1.10

Graph-database-based knowledge graph project.
Documentation
use rusqlite::Connection;

use crate::storage::StorageError;

pub(super) fn ensure_index_schema_columns(connection: &Connection) -> Result<(), StorageError> {
    super::super::schema_columns::ensure_column(
        connection,
        "index_cursors",
        "source_hash",
        "TEXT",
    )?;
    super::super::schema_columns::ensure_column(
        connection,
        "index_cursors",
        "backend_cursor",
        "TEXT",
    )?;
    super::super::schema_columns::ensure_column(connection, "index_cursors", "model_name", "TEXT")?;
    super::super::schema_columns::ensure_column(
        connection,
        "index_cursors",
        "model_dimension",
        "INTEGER",
    )?;
    super::super::schema_columns::ensure_column(
        connection,
        "index_refresh_tasks",
        "lease_owner",
        "TEXT",
    )?;
    super::super::schema_columns::ensure_column(
        connection,
        "index_refresh_tasks",
        "lease_expires_at_ms",
        "INTEGER",
    )?;
    super::super::schema_columns::ensure_column(
        connection,
        "index_refresh_tasks",
        "attempt_count",
        "INTEGER NOT NULL DEFAULT 0",
    )?;
    super::super::schema_columns::ensure_column(
        connection,
        "index_refresh_tasks",
        "next_retry_at_ms",
        "INTEGER NOT NULL DEFAULT 0",
    )?;
    super::super::schema_columns::ensure_column(
        connection,
        "index_refresh_tasks",
        "input_fingerprint",
        "TEXT NOT NULL DEFAULT ''",
    )?;
    super::super::schema_columns::ensure_column(
        connection,
        "index_refresh_tasks",
        "cursor_before",
        "INTEGER NOT NULL DEFAULT 0",
    )?;
    super::super::schema_columns::ensure_column(
        connection,
        "index_refresh_tasks",
        "cursor_after",
        "INTEGER",
    )?;
    super::super::schema_columns::ensure_column(
        connection,
        "index_refresh_tasks",
        "last_error_kind",
        "TEXT",
    )?;
    super::super::schema_columns::ensure_column(
        connection,
        "index_refresh_tasks",
        "last_error_message",
        "TEXT",
    )?;
    super::super::schema_columns::ensure_column(
        connection,
        "index_refresh_tasks",
        "created_at_ms",
        "INTEGER NOT NULL DEFAULT 0",
    )?;
    super::super::schema_columns::ensure_column(
        connection,
        "index_refresh_tasks",
        "updated_at_ms",
        "INTEGER NOT NULL DEFAULT 0",
    )?;
    connection.execute(
        "
        UPDATE index_refresh_tasks
        SET created_at_ms = CAST(strftime('%s', 'now') AS INTEGER) * 1000
        WHERE created_at_ms IS NULL OR created_at_ms = 0
        ",
        [],
    )?;
    connection.execute(
        "
        UPDATE index_refresh_tasks
        SET updated_at_ms = created_at_ms
        WHERE updated_at_ms IS NULL OR updated_at_ms = 0
        ",
        [],
    )?;
    connection.execute(
        "
        UPDATE index_refresh_tasks
        SET input_fingerprint = kind || ':' || source_scope || ':' || modality || ':' || target_graph_version
        WHERE input_fingerprint IS NULL OR input_fingerprint = ''
        ",
        [],
    )?;

    Ok(())
}