Files
trading_card_games/sql/31101_tri_TCG_MTG_Finish.sql
2026-01-28 22:05:35 +00:00

68 lines
2.1 KiB
PL/PgSQL

CREATE OR REPLACE FUNCTION tcg.public.FN_before_insert_TCG_MTG_Finish()
RETURNS TRIGGER AS $$
BEGIN
NEW.created_on = CURRENT_TIMESTAMP;
NEW.updated_last_on = CURRENT_TIMESTAMP;
IF NEW.change_set_id IS NULL THEN
RAISE EXCEPTION 'Change Set ID must be provided.';
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql
;
CREATE OR REPLACE FUNCTION tcg.public.FN_before_update_TCG_MTG_Finish()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_last_on = CURRENT_TIMESTAMP;
IF OLD.change_set_id IS NOT DISTINCT FROM NEW.change_set_id THEN
RAISE EXCEPTION 'New Change Set ID must be provided.';
END IF;
INSERT INTO tcg.public.TCG_MTG_Finish_Audit (
finish_id
, name_field
, value_prev
, value_new
, change_set_id
)
-- Changed name
SELECT NEW.finish_id, 'name', OLD.name, NEW.name, NEW.change_set_id
WHERE OLD.name IS NOT DISTINCT FROM NEW.name
UNION
-- Changed description
SELECT NEW.finish_id, 'description', OLD.description, NEW.description, NEW.change_set_id
WHERE OLD.description IS NOT DISTINCT FROM NEW.description
UNION
-- Changed price_ratio_min
SELECT NEW.finish_id, 'price_ratio_min', CAST(OLD.price_ratio_min AS VARCHAR), CAST(NEW.price_ratio_min AS VARCHAR), NEW.change_set_id
WHERE OLD.price_ratio_min IS NOT DISTINCT FROM NEW.price_ratio_min
UNION
-- Changed price_ratio_max
SELECT NEW.finish_id, 'price_ratio_max', CAST(OLD.price_ratio_max AS VARCHAR), CAST(NEW.price_ratio_max AS VARCHAR), NEW.change_set_id
WHERE OLD.price_ratio_max IS NOT DISTINCT FROM NEW.price_ratio_max
UNION
-- Changed active
SELECT NEW.finish_id, 'active', OLD.active::TEXT, NEW.active::TEXT, NEW.change_set_id
WHERE OLD.active IS NOT DISTINCT FROM NEW.active
;
RETURN NEW;
END;
$$ LANGUAGE plpgsql
;
CREATE TRIGGER TRI_before_insert_TCG_MTG_Finish
BEFORE INSERT ON tcg.public.TCG_MTG_Finish
FOR EACH ROW
EXECUTE FUNCTION tcg.public.FN_before_insert_TCG_MTG_Finish()
;
CREATE TRIGGER TRI_before_update_TCG_MTG_Finish
BEFORE UPDATE ON tcg.public.TCG_MTG_Finish
FOR EACH ROW
EXECUTE FUNCTION tcg.public.FN_before_update_TCG_MTG_Finish()
;