mirror of https://gitlab.com/tildes/tildes.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.3 KiB
46 lines
1.3 KiB
-- Copyright (c) 2018 Tildes contributors <code@tildes.net>
|
|
-- SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
-- set topic.deleted_time when it's deleted
|
|
CREATE OR REPLACE FUNCTION set_topic_deleted_time() RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
NEW.deleted_time := current_timestamp;
|
|
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
CREATE TRIGGER delete_topic_set_deleted_time_update
|
|
BEFORE UPDATE ON topics
|
|
FOR EACH ROW
|
|
WHEN (OLD.is_deleted = false AND NEW.is_deleted = true)
|
|
EXECUTE PROCEDURE set_topic_deleted_time();
|
|
|
|
|
|
CREATE OR REPLACE FUNCTION update_topic_search_tsv() RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
NEW.search_tsv :=
|
|
to_tsvector(NEW.title) ||
|
|
to_tsvector(coalesce(NEW.markdown, '')) ||
|
|
-- convert tags to space-separated string and replace periods with spaces
|
|
to_tsvector(replace(array_to_string(NEW.tags, ' '), '.', ' '));
|
|
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
|
|
CREATE TRIGGER topic_update_search_tsv_insert
|
|
BEFORE INSERT ON topics
|
|
FOR EACH ROW
|
|
EXECUTE PROCEDURE update_topic_search_tsv();
|
|
|
|
CREATE TRIGGER topic_update_search_tsv_update
|
|
BEFORE UPDATE ON topics
|
|
FOR EACH ROW
|
|
WHEN (
|
|
(OLD.title IS DISTINCT FROM NEW.title)
|
|
OR (OLD.markdown IS DISTINCT FROM NEW.markdown)
|
|
OR (OLD.tags IS DISTINCT FROM NEW.tags)
|
|
)
|
|
EXECUTE PROCEDURE update_topic_search_tsv();
|