Make euph_trees a table instead of a view

This commit is contained in:
Joscha 2022-06-24 19:19:38 +02:00
parent b30adaf17c
commit 6facbd5c96
2 changed files with 27 additions and 13 deletions

View file

@ -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(()) Ok(())
} }

View file

@ -60,19 +60,11 @@ fn m1(tx: &mut Transaction) -> rusqlite::Result<()> {
CHECK (start IS NULL OR end IS NOT NULL) CHECK (start IS NULL OR end IS NOT NULL)
) STRICT; ) STRICT;
CREATE VIEW euph_trees (room, id) AS CREATE TABLE euph_trees (
SELECT room, id room TEXT NOT NULL,
FROM euph_msgs id INT NOT NULL,
WHERE parent IS NULL
UNION PRIMARY KEY (room, id)
SELECT *
FROM (
SELECT room, parent
FROM euph_msgs
WHERE parent IS NOT NULL
EXCEPT
SELECT room, id
FROM euph_msgs
); );
CREATE INDEX euph_idx_msgs_room_id_parent CREATE INDEX euph_idx_msgs_room_id_parent