xz_knowledge_graph/store/
sqlite_schema.rs1pub 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];