From 6facbd5c96fbc4241d100575d15b82fdc3f07078 Mon Sep 17 00:00:00 2001 From: Joscha Date: Fri, 24 Jun 2022 19:19:38 +0200 Subject: [PATCH] Make euph_trees a table instead of a view --- src/vault/euph.rs | 22 ++++++++++++++++++++++ src/vault/migrate.rs | 18 +++++------------- 2 files changed, 27 insertions(+), 13 deletions(-) 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