mirror of
https://github.com/simon987/sist2.git
synced 2025-04-04 07:52:59 +00:00
211 lines
6.8 KiB
C
211 lines
6.8 KiB
C
#ifdef SIST_DEBUG
|
|
#define STRICT " STRICT"
|
|
#else
|
|
#define STRICT ""
|
|
#endif
|
|
|
|
const char *FtsDatabaseSchema =
|
|
"CREATE TABLE IF NOT EXISTS document_index ("
|
|
" id INTEGER PRIMARY KEY,"
|
|
" index_id INTEGER NOT NULL,"
|
|
" size INTEGER NOT NULL,"
|
|
" name TEXT NOT NULL,"
|
|
" path TEXT NOT NULL,"
|
|
" mtime INTEGER NOT NULL,"
|
|
" mime TEXT,"
|
|
" thumbnail_count INTEGER NOT NULL,"
|
|
" json_data TEXT NOT NULL"
|
|
")"STRICT";"
|
|
""
|
|
"CREATE TABLE IF NOT EXISTS stats ("
|
|
" mtime_min INTEGER,"
|
|
" mtime_max INTEGER"
|
|
")"STRICT";"
|
|
""
|
|
"CREATE TABLE IF NOT EXISTS path_index ("
|
|
" path TEXT,"
|
|
" index_id INTEGER,"
|
|
" count INTEGER NOT NULL,"
|
|
" depth INTEGER NOT NULL,"
|
|
" PRIMARY KEY (path, index_id)"
|
|
")"STRICT";"
|
|
""
|
|
"CREATE TABLE IF NOT EXISTS mime_index ("
|
|
" index_id INTEGER,"
|
|
" mime TEXT,"
|
|
" count INTEGER,"
|
|
" PRIMARY KEY(index_id, mime)"
|
|
")"STRICT";"
|
|
""
|
|
"CREATE TABLE IF NOT EXISTS tag ("
|
|
" id INTEGER NOT NULL,"
|
|
" index_id INTEGER NOT NULL,"
|
|
" tag TEXT NOT NULL,"
|
|
" PRIMARY KEY (id, tag)"
|
|
")"STRICT";"
|
|
"CREATE INDEX IF NOT EXISTS tag_tag_idx ON tag(tag);"
|
|
""
|
|
"CREATE TABLE IF NOT EXISTS embedding ("
|
|
" id INTEGER REFERENCES document_index(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)"
|
|
")"STRICT";"
|
|
""
|
|
"CREATE TABLE IF NOT EXISTS model ("
|
|
" id INTEGER PRIMARY KEY CHECK (id > 0 AND id < 1000),"
|
|
" size INTEGER NOT NULL"
|
|
")"STRICT";"
|
|
""
|
|
"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 id,"
|
|
" 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"
|
|
")"STRICT";"
|
|
""
|
|
"CREATE TABLE index_job ("
|
|
" id INTEGER PRIMARY KEY,"
|
|
" sid TEXT NOT NULL,"
|
|
" type INTEGER NOT NULL,"
|
|
" line TEXT"
|
|
")"STRICT";";
|
|
|
|
const char *IndexDatabaseSchema =
|
|
"CREATE TABLE thumbnail ("
|
|
" id INTEGER REFERENCES document(id),"
|
|
" 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)"
|
|
")"STRICT";"
|
|
""
|
|
"CREATE TABLE mime("
|
|
" id INTEGER PRIMARY KEY,"
|
|
" name TEXT"
|
|
")"STRICT";"
|
|
"CREATE UNIQUE INDEX mime_name_idx ON mime(name);"
|
|
""
|
|
"CREATE TABLE document ("
|
|
" id INTEGER PRIMARY KEY,"
|
|
" parent INTEGER REFERENCES document(id),"
|
|
" mime INTEGER REFERENCES mime(id),"
|
|
" path TEXT NOT NULL,"
|
|
" version INTEGER NOT NULL REFERENCES version(id),"
|
|
" mtime INTEGER NOT NULL,"
|
|
" size INTEGER NOT NULL,"
|
|
" thumbnail_count INTEGER NOT NULL,"
|
|
" json_data TEXT CHECK ( json_data IS NULL OR json_valid(json_data) )"
|
|
")"STRICT";"
|
|
"CREATE UNIQUE INDEX document_path_idx ON document(path);"
|
|
"CREATE TABLE marked ("
|
|
" id INTEGER PRIMARY KEY,"
|
|
" marked INTEGER NOT NULL,"
|
|
" mtime INTEGER NOT NULL"
|
|
")"STRICT";"
|
|
""
|
|
"CREATE INDEX marked_marked ON marked(marked);"
|
|
""
|
|
"CREATE TABLE delete_list ("
|
|
" id INTEGER PRIMARY KEY"
|
|
")"STRICT";"
|
|
""
|
|
"CREATE TABLE tag ("
|
|
" id INTEGER NOT NULL REFERENCES document(id),"
|
|
" tag TEXT NOT NULL,"
|
|
" PRIMARY KEY (id, tag)"
|
|
")"STRICT";"
|
|
""
|
|
"CREATE TABLE descriptor ("
|
|
" id INTEGER PRIMARY KEY,"
|
|
" 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"
|
|
")"STRICT";"
|
|
""
|
|
"CREATE TABLE stats_treemap ("
|
|
" path TEXT NOT NULL,"
|
|
" size INTEGER NOT NULL"
|
|
")"STRICT";"
|
|
""
|
|
"CREATE TABLE stats_size_agg ("
|
|
" bucket INTEGER NOT NULL,"
|
|
" count INTEGER NOT NULL"
|
|
")"STRICT";"
|
|
""
|
|
"CREATE TABLE stats_date_agg ("
|
|
" bucket INTEGER NOT NULL,"
|
|
" count INTEGER NOT NULL"
|
|
")"STRICT";"
|
|
""
|
|
"CREATE TABLE stats_mime_agg ("
|
|
" mime TEXT NOT NULL,"
|
|
" size INTEGER NOT NULL,"
|
|
" count INTEGER NOT NULL"
|
|
")"STRICT";"
|
|
""
|
|
"CREATE TABLE embedding ("
|
|
" id INTEGER 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)"
|
|
")"STRICT";"
|
|
""
|
|
"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') )"
|
|
")"STRICT";";
|
|
|