feat(server): SQLite store com migracoes e FTS5
This commit is contained in:
@@ -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;
|
||||
"#,
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user