Implement UserOperation_donor_update view and its triggers
Note my comment that the error messages don't work properly on NULL
values. I once in my life spent years wondering about how to handle
three-valued logic problems in SQL. I thought that part of my life
was apparently over, but I guess not. 🤷
This commit is contained in:
parent
fe0cda3232
commit
72f2b5aebd
1 changed files with 71 additions and 1 deletions
|
@ -1,4 +1,4 @@
|
||||||
-- Conservancy Supporter Database, Version 0.2
|
-- Conservancy Supporter Database, Version 0.4
|
||||||
|
|
||||||
DROP TABLE IF EXISTS "donor";
|
DROP TABLE IF EXISTS "donor";
|
||||||
|
|
||||||
|
@ -202,3 +202,73 @@ DELETE FROM _temp_request_configuration_change;
|
||||||
|
|
||||||
END;
|
END;
|
||||||
|
|
||||||
|
-- -------------- END VIEW: UserOperation_fix_tshirt_size_request ---------------------
|
||||||
|
|
||||||
|
-- -------------- VIEW: UserOperation_donor_update ---------------------
|
||||||
|
|
||||||
|
DROP VIEW IF EXISTS UserOperation_donor_update;
|
||||||
|
CREATE VIEW UserOperation_donor_update AS
|
||||||
|
SELECT donor.ledger_entity_id as donor_name, donor.rt_ticket as ticket, donor.display_name as public_name,
|
||||||
|
donor.public_ack as public_acknowledge, donor.is_supporter as is_sustainer, donor.id as donor_id
|
||||||
|
FROM donor
|
||||||
|
ORDER BY donor.ledger_entity_id, donor.id;
|
||||||
|
|
||||||
|
DROP TRIGGER IF EXISTS donor_update_display_name;
|
||||||
|
CREATE TRIGGER donor_update_display_name
|
||||||
|
INSTEAD OF UPDATE OF public_name on UserOperation_donor_update
|
||||||
|
BEGIN
|
||||||
|
|
||||||
|
UPDATE donor SET display_name = NEW.public_name
|
||||||
|
WHERE id = OLD.donor_id
|
||||||
|
AND (display_name = OLD.public_name OR display_name is NULL);
|
||||||
|
|
||||||
|
-- FIXME: I think this error message doesn't properly display when NEW.ticket
|
||||||
|
-- is NOT NULL and the select returns a NULL
|
||||||
|
|
||||||
|
SELECT CASE
|
||||||
|
WHEN ( (SELECT display_name FROM donor WHERE id = OLD.donor_id) != NEW.public_name )
|
||||||
|
THEN RAISE(FAIL, "Error encountered while updating public_name; please verify your changes worked!")
|
||||||
|
END;
|
||||||
|
|
||||||
|
END;
|
||||||
|
|
||||||
|
DROP TRIGGER IF EXISTS donor_update_rt_ticket;
|
||||||
|
CREATE TRIGGER donor_update_rt_ticket
|
||||||
|
INSTEAD OF UPDATE OF ticket on UserOperation_donor_update
|
||||||
|
BEGIN
|
||||||
|
|
||||||
|
UPDATE donor SET rt_ticket = NEW.ticket
|
||||||
|
WHERE id = OLD.donor_id
|
||||||
|
AND (rt_ticket = OLD.ticket or rt_ticket is NULL);
|
||||||
|
|
||||||
|
-- FIXME: I think this error message doesn't properly display when NEW.ticket
|
||||||
|
-- is NOT NULL and the select returns a NULL
|
||||||
|
|
||||||
|
SELECT CASE
|
||||||
|
WHEN ( (SELECT rt_ticket FROM donor WHERE id = OLD.donor_id) != NEW.ticket )
|
||||||
|
THEN RAISE(FAIL, "Error encountered while updating RT ticket; please verify your changes worked!")
|
||||||
|
END;
|
||||||
|
|
||||||
|
END;
|
||||||
|
|
||||||
|
DROP TRIGGER IF EXISTS donor_update_public_acknowledgment;
|
||||||
|
-- FIXME: This trigger does *not* add 'public-ack-change-N' request, as it should. I was not sure *why*
|
||||||
|
-- I'd kept track of public-ack changes in the request table anyway, so I did not implement that here.
|
||||||
|
CREATE TRIGGER donor_update_public_acknowledgment
|
||||||
|
INSTEAD OF UPDATE OF public_acknowledge on UserOperation_donor_update
|
||||||
|
BEGIN
|
||||||
|
|
||||||
|
UPDATE donor SET public_ack = NEW.public_acknowledge
|
||||||
|
WHERE id = OLD.donor_id
|
||||||
|
AND (public_ack = OLD.public_acknowledge OR public_ack is NULL);
|
||||||
|
|
||||||
|
-- FIXME: I think this error message doesn't properly display when NEW.ticket
|
||||||
|
-- is NOT NULL and the select returns a NULL
|
||||||
|
|
||||||
|
SELECT CASE
|
||||||
|
WHEN ( (SELECT public_ack FROM donor WHERE id = OLD.donor_id) != NEW.public_acknowledge )
|
||||||
|
THEN RAISE(FAIL, "Error encountered while updating public_acknowledge setting; please verify your changes worked!")
|
||||||
|
END;
|
||||||
|
|
||||||
|
END;
|
||||||
|
-- -------------- END VIEW: UserOperation_donor_update ---------------------
|
||||||
|
|
Loading…
Reference in a new issue