Advertisement
cmptrwz

Message Center Note Link

Feb 22nd, 2016
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ALTER TABLE actor.usr_message
  2. ADD COLUMN usr_note bigint REFERENCES actor.usr_note (id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
  3.  
  4. CREATE OR REPLACE FUNCTION actor.convert_usr_note_to_message()
  5.   RETURNS trigger AS
  6. $BODY$
  7. DECLARE
  8.     sending_ou INTEGER;
  9.     orig_message INTEGER;
  10.     orig_deleted BOOLEAN;
  11. BEGIN
  12.     IF TG_OP = 'UPDATE' THEN
  13.         IF OLD.pub = NEW.pub THEN
  14.             RETURN NEW;
  15.         END IF;
  16.         SELECT INTO orig_message, orig_deleted id, deleted FROM actor.usr_message WHERE usr_note = NEW.id;
  17.     END IF;
  18.  
  19.     IF NEW.pub AND orig_message IS NULL THEN
  20.         SELECT INTO sending_ou aw.owning_lib
  21.         FROM auditor.get_audit_info() agai
  22.         JOIN actor.workstation aw ON (aw.id = agai.eg_ws);
  23.         IF sending_ou IS NULL THEN
  24.             SELECT INTO sending_ou home_ou
  25.             FROM actor.usr
  26.             WHERE id = NEW.creator;
  27.         END IF;
  28.         INSERT INTO actor.usr_message (usr, title, message, sending_lib, usr_note)
  29.             VALUES (NEW.usr, NEW.title, NEW.value, sending_ou, NEW.id);
  30.     END IF;
  31.    
  32.     IF orig_message IS NOT NULL AND orig_deleted = NEW.pub THEN
  33.         UPDATE actor.usr_message SET deleted = NOT NEW.pub WHERE id = orig_message;
  34.     END IF;
  35.  
  36.     RETURN NEW;
  37. END;
  38. $BODY$
  39.   LANGUAGE plpgsql;
  40.  
  41. CREATE OR REPLACE FUNCTION actor.update_usr_note_from_message()
  42.   RETURNS trigger AS
  43. $BODY$
  44. BEGIN
  45.     IF NEW.usr_note IS NOT NULL AND NEW.deleted <> OLD.deleted THEN
  46.         UPDATE actor.usr_note SET pub = NOT NEW.deleted WHERE id = NEW.usr_note;
  47.     END IF;
  48.     RETURN NEW;
  49. END;
  50. $BODY$
  51. LANGUAGE plpgsql;
  52.  
  53. CREATE TRIGGER update_usr_note_from_message_tgr AFTER UPDATE ON actor.usr_message FOR EACH ROW EXECUTE PROCEDURE actor.update_usr_note_from_message();
  54.  
  55. CREATE OR REPLACE RULE usr_note_delete_message AS ON DELETE TO actor.usr_note DO ALSO UPDATE actor.usr_message aum SET deleted = TRUE, usr_note = NULL WHERE aum.usr_note = old.id;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement