feat(server): SQLite store com migracoes e FTS5

This commit is contained in:
2026-08-05 20:24:00 -03:00
parent bc4de69ab9
commit 9c7cb1c9b8
2 changed files with 68 additions and 0 deletions
+37
View File
@@ -9,5 +9,42 @@ pub fn open(cfg: &Config) -> AppResult<Connection> {
let db = Connection::open(&cfg.db_path)?;
db.pragma_update(None, "journal_mode", "WAL")?;
db.pragma_update(None, "synchronous", "NORMAL")?;
migrate(&db)?;
Ok(db)
}
pub fn migrate(db: &Connection) -> rusqlite::Result<()> {
db.execute_batch(
r#"
CREATE TABLE IF NOT EXISTS files (
id TEXT PRIMARY KEY,
peer_id TEXT NOT NULL,
name TEXT NOT NULL,
description TEXT NOT NULL DEFAULT '',
ftype TEXT NOT NULL,
extension TEXT NOT NULL DEFAULT '',
size_bytes INTEGER NOT NULL,
hash TEXT NOT NULL UNIQUE,
license TEXT NOT NULL DEFAULT 'authored',
tags TEXT NOT NULL DEFAULT '[]',
created_at INTEGER NOT NULL
);
CREATE VIRTUAL TABLE IF NOT EXISTS files_fts USING fts5(
name, description, tags,
content='files', content_rowid='rowid',
tokenize='unicode61'
);
CREATE TRIGGER IF NOT EXISTS files_ai AFTER INSERT ON files BEGIN
INSERT INTO files_fts(rowid, name, description, tags)
VALUES (new.rowid, new.name, new.description, new.tags);
END;
CREATE TRIGGER IF NOT EXISTS files_ad AFTER DELETE ON files BEGIN
INSERT INTO files_fts(files_fts, rowid, name, description, tags)
VALUES ('delete', old.rowid, old.name, old.description, old.tags);
END;
"#,
)
}