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

@ -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
);
",
)
}