also index SearchableFormDef
gitea/wcs/pipeline/head There was a failure building this commit Details

This commit is contained in:
Pierre Ducroquet 2024-02-29 09:11:34 +01:00
parent b6fbb639ec
commit 4b9acaa7c1
1 changed files with 10 additions and 4 deletions

View File

@ -1696,10 +1696,10 @@ def init_search_tokens(conn=None, cur=None):
# Create table
cur.execute("CREATE TABLE wcs_search_tokens(token TEXT PRIMARY KEY);")
# Create triggers from wcs_all_forms
# Create triggers
init_search_tokens_triggers(cur)
# Fill table from wcs_all_forms
# Fill table
init_search_tokens_data(cur)
# Index at the end, small performance trick... not that useful, but it's free...
@ -1749,12 +1749,17 @@ BEGIN
END;
$function$;""")
# Second part: insert and update triggers
# Second part: insert and update triggers for wcs_all_forms
cur.execute("CREATE TRIGGER wcs_all_forms_fts_trg_ins AFTER INSERT ON wcs_all_forms FOR EACH ROW WHEN (NEW.fts IS NOT NULL) EXECUTE PROCEDURE wcs_search_tokens_trigger_fn();")
cur.execute("CREATE TRIGGER wcs_all_forms_fts_trg_upd AFTER UPDATE OF fts ON wcs_all_forms FOR EACH ROW WHEN (NEW.fts IS NOT NULL) EXECUTE PROCEDURE wcs_search_tokens_trigger_fn();")
# Third part: insert and update triggers for searchable_formdefs
cur.execute("CREATE TRIGGER searchable_formdefs_fts_trg_ins AFTER INSERT ON searchable_formdefs FOR EACH ROW WHEN (NEW.fts IS NOT NULL) EXECUTE PROCEDURE wcs_search_tokens_trigger_fn();")
cur.execute("CREATE TRIGGER searchable_formdefs_fts_trg_upd AFTER UPDATE OF fts ON searchable_formdefs FOR EACH ROW WHEN (NEW.fts IS NOT NULL) EXECUTE PROCEDURE wcs_search_tokens_trigger_fn();")
def init_search_tokens_data(cur):
cur.execute("INSERT INTO wcs_search_tokens SELECT unnest(tsvector_to_array(fts)) FROM wcs_all_forms ON CONFLICT(token) DO NOTHING;")
cur.execute("INSERT INTO wcs_search_tokens SELECT unnest(tsvector_to_array(fts)) FROM searchable_formdefs ON CONFLICT(token) DO NOTHING;")
def purge_obsolete_search_tokens(cur=None):
own_cur = False
@ -1762,7 +1767,7 @@ def purge_obsolete_search_tokens(cur=None):
own_cur = True
conn, cur = get_connection_and_cursor()
cur.execute("DELETE FROM wcs_search_tokens WHERE token NOT IN (SELECT unnest(tsvector_to_array(fts)) FROM wcs_all_forms);")
cur.execute("DELETE FROM wcs_search_tokens WHERE token NOT IN (SELECT unnest(tsvector_to_array(fts)) FROM wcs_all_forms) AND token NOT IN (SELECT unnest(tsvector_to_array(fts)) FROM wcs_all_forms);")
if own_cur:
cur.close()
@ -4888,6 +4893,7 @@ class SearchableFormDef(SqlMixin):
CardDef.select(ignore_errors=True), FormDef.select(ignore_errors=True)
):
cls.update(obj=objectdef)
init_search_tokens_data(cur)
@classmethod
def update(cls, obj=None, removed_obj_type=None, removed_obj_id=None):