setup: Fix broken FTS DELETE op
Thie previous DELETE statement lead to strange behaviours. It was pure luck this did not blow up before all these years. It appears it may leave the index in an undefined state, and the database recently started to display strange behaviour in connection with newer sqlite version. Now, just remove the previous revision from the FTS index, as for now, search only cares about the most recent revisions. Also, remove redundant UPDATE trigger on revision table We never update revisions, thus such trigger is simply redundant. Relevant: https://gitlab.gnome.org/GNOME/tracker/-/merge_requests/353
Este cometimento está contido em:
ascendente
88816a4015
cometimento
204a72da1f
@ -25,24 +25,13 @@ count integer
|
|||||||
CREATE TABLE category(id INTEGER PRIMARY KEY, name varchar(255));
|
CREATE TABLE category(id INTEGER PRIMARY KEY, name varchar(255));
|
||||||
CREATE TABLE categorymember(id INTEGER PRIMARY KEY, category REFERENCES category(id), page REFERENCES page (id));
|
CREATE TABLE categorymember(id INTEGER PRIMARY KEY, category REFERENCES category(id), page REFERENCES page (id));
|
||||||
CREATE INDEX revisionid ON revision (revisionid DESC);
|
CREATE INDEX revisionid ON revision (revisionid DESC);
|
||||||
CREATE INDEX pagename ON page (name)
|
CREATE INDEX pagename ON page (name);
|
||||||
;
|
CREATE INDEX token ON session (token);
|
||||||
CREATE INDEX token ON session (token)
|
CREATE VIRTUAL TABLE search USING fts5(content, page UNINDEXED, content=revision,content_rowid=id);
|
||||||
;
|
|
||||||
CREATE TRIGGER search_ai AFTER INSERT ON revision BEGIN
|
|
||||||
DELETE FROM search WHERE page = new.page;
|
|
||||||
INSERT INTO search(rowid, content, page) VALUES (new.id, new.content, new.page);
|
|
||||||
END;
|
|
||||||
CREATE TRIGGER search_au AFTER UPDATE ON revision BEGIN
|
|
||||||
DELETE FROM search WHERE page = old.page;
|
|
||||||
INSERT INTO search(rowid, content, page) VALUES (new.id, new.content, new.page);
|
|
||||||
END;
|
|
||||||
CREATE VIRTUAL TABLE search USING fts5(content, page UNINDEXED, content=revision,content_rowid=id)
|
|
||||||
/* search(content,page) */;
|
|
||||||
CREATE TABLE IF NOT EXISTS 'search_data'(id INTEGER PRIMARY KEY, block BLOB);
|
|
||||||
CREATE TABLE IF NOT EXISTS 'search_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
|
|
||||||
CREATE TABLE IF NOT EXISTS 'search_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
|
|
||||||
CREATE TABLE IF NOT EXISTS 'search_config'(k PRIMARY KEY, v) WITHOUT ROWID;
|
|
||||||
CREATE TRIGGER search_ad AFTER DELETE ON revision BEGIN
|
CREATE TRIGGER search_ad AFTER DELETE ON revision BEGIN
|
||||||
INSERT INTO search(search, rowid, content, page) VALUES('delete', old.id, old.content, old.page);
|
INSERT INTO search(search, rowid, content, page) VALUES('delete', old.id, old.content, old.page);
|
||||||
END;
|
END;
|
||||||
|
CREATE TRIGGER search_ai AFTER INSERT ON revision BEGIN
|
||||||
|
INSERT INTO search(search, rowid, content, page) SELECT 'delete', id, content, page FROM revision WHERE page = new.page AND revisionid = new.revisionid - 1;
|
||||||
|
INSERT INTO search(rowid, content, page) VALUES (new.id, new.content, new.page);
|
||||||
|
END;
|
||||||
|
Carregando…
Criar uma nova questão referindo esta
Bloquear um utilizador