mirror of
https://github.com/simon987/sist2.git
synced 2025-04-04 07:52:59 +00:00
193 lines
6.2 KiB
C
193 lines
6.2 KiB
C
const char *FtsDatabaseSchema =
|
|
"CREATE TABLE IF NOT EXISTS document_index ("
|
|
" id TEXT NOT NULL,"
|
|
" index_id TEXT NOT NULL,"
|
|
" size INTEGER NOT NULL,"
|
|
" name TEXT NOT NULL,"
|
|
" path TEXT NOT NULL,"
|
|
" mtime INTEGER NOT NULL,"
|
|
" mime TEXT,"
|
|
" json_data TEXT NOT NULL,"
|
|
" PRIMARY KEY (id, index_id)"
|
|
");"
|
|
""
|
|
"CREATE TABLE IF NOT EXISTS stats ("
|
|
" mtime_min INTEGER,"
|
|
" mtime_max INTEGER"
|
|
");"
|
|
""
|
|
"CREATE TABLE IF NOT EXISTS path_index ("
|
|
" path TEXT,"
|
|
" index_id TEXT,"
|
|
" count INTEGER NOT NULL,"
|
|
" depth INTEGER NOT NULL,"
|
|
" PRIMARY KEY (path, index_id)"
|
|
");"
|
|
""
|
|
"CREATE TABLE IF NOT EXISTS mime_index ("
|
|
" index_id TEXT,"
|
|
" mime TEXT,"
|
|
" count INT,"
|
|
" PRIMARY KEY(index_id, mime)"
|
|
");"
|
|
""
|
|
"CREATE TABLE IF NOT EXISTS tag ("
|
|
" id TEXT NOT NULL,"
|
|
" tag TEXT NOT NULL,"
|
|
" PRIMARY KEY (id, tag)"
|
|
");"
|
|
"CREATE INDEX IF NOT EXISTS tag_tag_idx ON tag(tag);"
|
|
"CREATE INDEX IF NOT EXISTS tag_id_idx ON tag(id);"
|
|
""
|
|
"CREATE TABLE IF NOT EXISTS embedding ("
|
|
" id TEXT REFERENCES document(id),"
|
|
" model_id INTEGER NOT NULL REFERENCES model(id),"
|
|
" start INTEGER NOT NULL,"
|
|
" end INTEGER,"
|
|
" embedding BLOB NOT NULL,"
|
|
" PRIMARY KEY (id, model_id, start)"
|
|
");"
|
|
""
|
|
"CREATE TABLE IF NOT EXISTS model ("
|
|
" id INTEGER PRIMARY KEY CHECK (id > 0 AND id < 1000),"
|
|
" size INTEGER NOT NULL"
|
|
");"
|
|
""
|
|
"CREATE TRIGGER IF NOT EXISTS tag_write_trigger"
|
|
" AFTER INSERT ON tag"
|
|
" BEGIN"
|
|
" UPDATE document_index"
|
|
" SET json_data = json_set(json_data, '$.tag', (SELECT json_group_array(tag) FROM tag WHERE id = NEW.id))"
|
|
" WHERE id = NEW.id;"
|
|
" END;"
|
|
""
|
|
"CREATE TRIGGER IF NOT EXISTS tag_delete_trigger"
|
|
" AFTER DELETE ON tag"
|
|
" BEGIN"
|
|
" UPDATE document_index"
|
|
" SET json_data = json_set(json_data, '$.tag', (SELECT json_group_array(tag) FROM tag WHERE id = OLD.id))"
|
|
" WHERE id = OLD.id;"
|
|
" END;"
|
|
""
|
|
"CREATE VIEW IF NOT EXISTS document_view (id, name, content, title)"
|
|
" AS"
|
|
" SELECT rowid,"
|
|
" json_data->>'name',"
|
|
" json_data->>'content',"
|
|
" json_data->>'title'"
|
|
" FROM document_index;"
|
|
""
|
|
"CREATE VIRTUAL TABLE IF NOT EXISTS search USING fts5 ("
|
|
" name,"
|
|
" content,"
|
|
" title,"
|
|
" content='document_view',"
|
|
" content_rowid='id'"
|
|
");"
|
|
// name^8, content^3, title^8
|
|
"INSERT INTO search(search, rank) VALUES('rank', 'bm25(8, 3, 8)');"
|
|
"";
|
|
|
|
const char *IpcDatabaseSchema =
|
|
"CREATE TABLE parse_job ("
|
|
" id INTEGER PRIMARY KEY,"
|
|
" filepath TEXT NOT NULL,"
|
|
" mtime INTEGER NOT NULL,"
|
|
" st_size INTEGER NOT NULL"
|
|
");"
|
|
""
|
|
"CREATE TABLE index_job ("
|
|
" id INTEGER PRIMARY KEY,"
|
|
" doc_id TEXT NOT NULL CHECK ( length(doc_id) = 32 ),"
|
|
" type INTEGER NOT NULL,"
|
|
" line TEXT"
|
|
");";
|
|
|
|
const char *IndexDatabaseSchema =
|
|
"CREATE TABLE thumbnail ("
|
|
" id TEXT NOT NULL CHECK ( length(id) = 32 ),"
|
|
" num INTEGER NOT NULL,"
|
|
" data BLOB NOT NULL,"
|
|
" PRIMARY KEY(id, num)"
|
|
") WITHOUT ROWID;"
|
|
""
|
|
"CREATE TABLE version ("
|
|
" id INTEGER PRIMARY KEY AUTOINCREMENT,"
|
|
" date TEXT NOT NULL DEFAULT (CURRENT_TIMESTAMP)"
|
|
");"
|
|
""
|
|
"CREATE TABLE document ("
|
|
" id TEXT PRIMARY KEY CHECK ( length(id) = 32 ),"
|
|
" marked INTEGER NOT NULL DEFAULT (1),"
|
|
" version INTEGER NOT NULL REFERENCES version(id),"
|
|
" mtime INTEGER NOT NULL,"
|
|
" size INTEGER NOT NULL,"
|
|
" json_data TEXT NOT NULL CHECK ( json_valid(json_data) )"
|
|
") WITHOUT ROWID;"
|
|
""
|
|
"CREATE TABLE delete_list ("
|
|
" id TEXT PRIMARY KEY CHECK ( length(id) = 32 )"
|
|
") WITHOUT ROWID;"
|
|
""
|
|
"CREATE TABLE tag ("
|
|
" id TEXT NOT NULL,"
|
|
" tag TEXT NOT NULL,"
|
|
" PRIMARY KEY (id, tag)"
|
|
");"
|
|
""
|
|
"CREATE TABLE document_sidecar ("
|
|
" id TEXT PRIMARY KEY NOT NULL,"
|
|
" json_data TEXT NOT NULL"
|
|
") WITHOUT ROWID;"
|
|
""
|
|
"CREATE TABLE descriptor ("
|
|
" id TEXT NOT NULL,"
|
|
" version_major INTEGER NOT NULL,"
|
|
" version_minor INTEGER NOT NULL,"
|
|
" version_patch INTEGER NOT NULL,"
|
|
" root TEXT NOT NULL,"
|
|
" name TEXT NOT NULL,"
|
|
" rewrite_url TEXT,"
|
|
" timestamp INTEGER NOT NULL"
|
|
");"
|
|
""
|
|
"CREATE TABLE stats_treemap ("
|
|
" path TEXT NOT NULL,"
|
|
" size INTEGER NOT NULL"
|
|
");"
|
|
""
|
|
"CREATE TABLE stats_size_agg ("
|
|
" bucket INTEGER NOT NULL,"
|
|
" count INTEGER NOT NULL"
|
|
");"
|
|
""
|
|
"CREATE TABLE stats_date_agg ("
|
|
" bucket INTEGER NOT NULL,"
|
|
" count INTEGER NOT NULL"
|
|
");"
|
|
""
|
|
"CREATE TABLE stats_mime_agg ("
|
|
" mime TEXT NOT NULL,"
|
|
" size INTEGER NOT NULL,"
|
|
" count INTEGER NOT NULL"
|
|
");"
|
|
""
|
|
"CREATE TABLE embedding ("
|
|
" id TEXT REFERENCES document(id),"
|
|
" model_id INTEGER NOT NULL references model(id),"
|
|
" start INTEGER NOT NULL,"
|
|
" end INTEGER,"
|
|
" embedding BLOB NOT NULL,"
|
|
" PRIMARY KEY (id, model_id, start)"
|
|
");"
|
|
""
|
|
"CREATE TABLE model ("
|
|
" id INTEGER PRIMARY KEY CHECK (id > 0 AND id < 1000),"
|
|
" name TEXT NOT NULL UNIQUE CHECK ( length(name) < 16 ),"
|
|
" url TEXT,"
|
|
" path TEXT NOT NULL UNIQUE,"
|
|
" size INTEGER NOT NULL,"
|
|
" type TEXT NOT NULL CHECK ( type IN ('flat', 'nested') )"
|
|
");";
|
|
|