diff --git a/src/vault/euph.rs b/src/vault/euph.rs index e8b2977..0570226 100644 --- a/src/vault/euph.rs +++ b/src/vault/euph.rs @@ -301,6 +301,28 @@ impl EuphRequest { ])?; } + // Update euph_trees + tx.execute_batch( + " + DELETE FROM euph_trees; + + 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 + ); + ", + )?; + Ok(()) } diff --git a/src/vault/migrate.rs b/src/vault/migrate.rs index c2ca839..1c019bb 100644 --- a/src/vault/migrate.rs +++ b/src/vault/migrate.rs @@ -60,19 +60,11 @@ fn m1(tx: &mut Transaction) -> rusqlite::Result<()> { CHECK (start IS NULL OR end IS NOT NULL) ) STRICT; - CREATE VIEW euph_trees (room, id) AS - SELECT room, id - FROM euph_msgs - WHERE parent IS NULL - UNION - SELECT * - FROM ( - SELECT room, parent - FROM euph_msgs - WHERE parent IS NOT NULL - EXCEPT - SELECT room, id - FROM euph_msgs + CREATE TABLE euph_trees ( + room TEXT NOT NULL, + id INT NOT NULL, + + PRIMARY KEY (room, id) ); CREATE INDEX euph_idx_msgs_room_id_parent