Make euph_trees a temporary database

This commit is contained in:
Joscha 2022-06-24 21:12:52 +02:00
parent f272bc6dcb
commit ad3a67cdc3
3 changed files with 31 additions and 7 deletions

View file

@ -1,5 +1,6 @@
mod euph;
mod migrate;
mod prepare;
use std::path::Path;
use std::{fs, thread};
@ -70,6 +71,7 @@ pub fn launch(path: &Path) -> rusqlite::Result<Vault> {
conn.pragma_update(None, "trusted_schema", false)?;
migrate::migrate(&mut conn)?;
prepare::prepare(&mut conn)?;
let (tx, rx) = mpsc::unbounded_channel();
thread::spawn(move || run(conn, rx));

View file

@ -60,13 +60,6 @@ fn m1(tx: &mut Transaction) -> rusqlite::Result<()> {
CHECK (start IS NULL OR end IS NOT NULL)
) STRICT;
CREATE TABLE euph_trees (
room TEXT NOT NULL,
id INT NOT NULL,
PRIMARY KEY (room, id)
);
CREATE INDEX euph_idx_msgs_room_id_parent
ON euph_msgs (room, id, parent);

29
src/vault/prepare.rs Normal file
View file

@ -0,0 +1,29 @@
use rusqlite::Connection;
pub fn prepare(conn: &mut Connection) -> rusqlite::Result<()> {
conn.execute_batch(
"
CREATE TEMPORARY TABLE euph_trees (
room TEXT NOT NULL,
id INT NOT NULL,
PRIMARY KEY (room, id)
) STRICT;
INSERT INTO euph_trees (room, id)
SELECT room, id
FROM euph_msgs
WHERE parent IS NULL
UNION
SELECT room, parent
FROM euph_msgs
WHERE parent IS NOT NULL
AND NOT EXISTS(
SELECT *
FROM euph_msgs AS parents
WHERE parents.room = euph_msgs.room
AND parents.id = euph_msgs.parent
);
",
)
}