Skip to main content

xz_knowledge_graph/store/
sqlite_schema.rs

1pub const DDL: &[&str] = &[
2    "CREATE TABLE IF NOT EXISTS entities (
3        id TEXT PRIMARY KEY,
4        name TEXT NOT NULL,
5        entity_type TEXT NOT NULL,
6        attributes_json TEXT NOT NULL DEFAULT '{}',
7        description TEXT,
8        created_at INTEGER NOT NULL,
9        updated_at INTEGER NOT NULL,
10        version INTEGER NOT NULL DEFAULT 1,
11        source TEXT,
12        tags_json TEXT NOT NULL DEFAULT '[]',
13        aliases_json TEXT NOT NULL DEFAULT '[]'
14    )",
15    "CREATE INDEX IF NOT EXISTS idx_entities_name ON entities(name)",
16    "CREATE INDEX IF NOT EXISTS idx_entities_type ON entities(entity_type)",
17    "CREATE INDEX IF NOT EXISTS idx_entities_created ON entities(created_at)",
18    "CREATE INDEX IF NOT EXISTS idx_entities_source ON entities(source)",
19    "CREATE TABLE IF NOT EXISTS relations (
20        id TEXT PRIMARY KEY,
21        source_id TEXT NOT NULL,
22        target_id TEXT NOT NULL,
23        relation_type TEXT NOT NULL,
24        properties_json TEXT NOT NULL DEFAULT '{}',
25        confidence REAL NOT NULL DEFAULT 0.5,
26        provenance_json TEXT,
27        valid_from INTEGER,
28        valid_to INTEGER,
29        created_at INTEGER NOT NULL,
30        weight REAL
31    )",
32    "CREATE INDEX IF NOT EXISTS idx_relations_source ON relations(source_id)",
33    "CREATE INDEX IF NOT EXISTS idx_relations_target ON relations(target_id)",
34    "CREATE INDEX IF NOT EXISTS idx_relations_type ON relations(relation_type)",
35    "CREATE INDEX IF NOT EXISTS idx_relations_confidence ON relations(confidence)",
36    "CREATE INDEX IF NOT EXISTS idx_relations_valid ON relations(valid_from, valid_to)",
37    "CREATE VIRTUAL TABLE IF NOT EXISTS entities_fts USING fts5(
38        name, aliases, description, content='entities', content_rowid='rowid'
39    )",
40];
41
42pub const FTS_TRIGGERS: &[&str] = &[
43    "CREATE TRIGGER IF NOT EXISTS entities_fts_insert AFTER INSERT ON entities BEGIN
44        INSERT INTO entities_fts(rowid, name, aliases, description)
45        VALUES (new.rowid, new.name, new.aliases_json, new.description);
46    END",
47    "CREATE TRIGGER IF NOT EXISTS entities_fts_delete AFTER DELETE ON entities BEGIN
48        INSERT INTO entities_fts(entities_fts, rowid, name, aliases, description)
49        VALUES ('delete', old.rowid, old.name, old.aliases_json, old.description);
50    END",
51    "CREATE TRIGGER IF NOT EXISTS entities_fts_update AFTER UPDATE ON entities BEGIN
52        INSERT INTO entities_fts(entities_fts, rowid, name, aliases, description)
53        VALUES ('delete', old.rowid, old.name, old.aliases_json, old.description);
54        INSERT INTO entities_fts(rowid, name, aliases, description)
55        VALUES (new.rowid, new.name, new.aliases_json, new.description);
56    END",
57];