xz-knowledge-graph 0.2.0

Structured knowledge graph storage engine with graph traversal
Documentation
pub const DDL: &[&str] = &[
    "CREATE TABLE IF NOT EXISTS entities (
        id TEXT PRIMARY KEY,
        name TEXT NOT NULL,
        entity_type TEXT NOT NULL,
        attributes_json TEXT NOT NULL DEFAULT '{}',
        description TEXT,
        created_at INTEGER NOT NULL,
        updated_at INTEGER NOT NULL,
        version INTEGER NOT NULL DEFAULT 1,
        source TEXT,
        tags_json TEXT NOT NULL DEFAULT '[]',
        aliases_json TEXT NOT NULL DEFAULT '[]'
    )",
    "CREATE INDEX IF NOT EXISTS idx_entities_name ON entities(name)",
    "CREATE INDEX IF NOT EXISTS idx_entities_type ON entities(entity_type)",
    "CREATE INDEX IF NOT EXISTS idx_entities_created ON entities(created_at)",
    "CREATE INDEX IF NOT EXISTS idx_entities_source ON entities(source)",
    "CREATE TABLE IF NOT EXISTS relations (
        id TEXT PRIMARY KEY,
        source_id TEXT NOT NULL,
        target_id TEXT NOT NULL,
        relation_type TEXT NOT NULL,
        properties_json TEXT NOT NULL DEFAULT '{}',
        confidence REAL NOT NULL DEFAULT 0.5,
        provenance_json TEXT,
        valid_from INTEGER,
        valid_to INTEGER,
        created_at INTEGER NOT NULL,
        weight REAL
    )",
    "CREATE INDEX IF NOT EXISTS idx_relations_source ON relations(source_id)",
    "CREATE INDEX IF NOT EXISTS idx_relations_target ON relations(target_id)",
    "CREATE INDEX IF NOT EXISTS idx_relations_type ON relations(relation_type)",
    "CREATE INDEX IF NOT EXISTS idx_relations_confidence ON relations(confidence)",
    "CREATE INDEX IF NOT EXISTS idx_relations_valid ON relations(valid_from, valid_to)",
    "CREATE VIRTUAL TABLE IF NOT EXISTS entities_fts USING fts5(
        name, aliases, description, content='entities', content_rowid='rowid'
    )",
];

pub const FTS_TRIGGERS: &[&str] = &[
    "CREATE TRIGGER IF NOT EXISTS entities_fts_insert AFTER INSERT ON entities BEGIN
        INSERT INTO entities_fts(rowid, name, aliases, description)
        VALUES (new.rowid, new.name, new.aliases_json, new.description);
    END",
    "CREATE TRIGGER IF NOT EXISTS entities_fts_delete AFTER DELETE ON entities BEGIN
        INSERT INTO entities_fts(entities_fts, rowid, name, aliases, description)
        VALUES ('delete', old.rowid, old.name, old.aliases_json, old.description);
    END",
    "CREATE TRIGGER IF NOT EXISTS entities_fts_update AFTER UPDATE ON entities BEGIN
        INSERT INTO entities_fts(entities_fts, rowid, name, aliases, description)
        VALUES ('delete', old.rowid, old.name, old.aliases_json, old.description);
        INSERT INTO entities_fts(rowid, name, aliases, description)
        VALUES (new.rowid, new.name, new.aliases_json, new.description);
    END",
];