Guest User

Untitled

a guest
Sep 16th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION sync_filter_advertisement() RETURNS trigger AS
  2. $BODY$
  3. DECLARE
  4.   flag INT := 0;
  5. BEGIN
  6.   IF (NEW.is_deleted) THEN
  7.     -- deleting, only when no other ads exist
  8.     IF (NEW.advertisement_type_sid = 1) THEN
  9.       PERFORM
  10.         NULL
  11.       FROM
  12.         advertisement
  13.       WHERE
  14.         profile_sid = NEW.profile_sid AND advertisement_type_sid=1 AND NOT is_deleted AND date >= CURRENT_DATE;
  15.  
  16.       IF NOT FOUND THEN
  17.         UPDATE
  18.           materialisation
  19.         SET
  20.           filter = filter & (~ 128)
  21.         WHERE
  22.           profile_sid = NEW.profile_sid;
  23.       END IF;
  24.     END IF;
  25.  
  26.     PERFORM
  27.       NULL
  28.     FROM
  29.       advertisement
  30.     WHERE
  31.       profile_sid = NEW.profile_sid
  32.     AND
  33.       NOT is_deleted
  34.     AND
  35.       (date = CURRENT_DATE - EXTRACT(DOW FROM CURRENT_DATE)::int + (EXTRACT(DOW FROM CURRENT_DATE)!=0)::int * 7
  36.         OR
  37.       date = CURRENT_DATE - EXTRACT(DOW FROM CURRENT_DATE)::int + 6);
  38.  
  39.     IF NOT FOUND THEN
  40.       UPDATE
  41.         materialisation
  42.       SET
  43.         filter = filter & (~ 256)
  44.       WHERE
  45.         profile_sid = NEW.profile_sid;
  46.     END IF;
  47.   ELSE
  48.     -- speed date open
  49.     IF (NEW.advertisement_type_sid = 1 AND NEW.date >= CURRENT_DATE) THEN
  50.       flag := 128;
  51.     END IF;
  52.  
  53.     -- weekend date
  54.     IF (NEW.date = CURRENT_DATE - EXTRACT(DOW FROM CURRENT_DATE)::int + (EXTRACT(DOW FROM CURRENT_DATE)!=0)::int * 7
  55.           OR
  56.         NEW.date = CURRENT_DATE - EXTRACT(DOW FROM CURRENT_DATE)::int + 6) THEN
  57.  
  58.       flag := flag | 256;
  59.     END IF;
  60.  
  61.     IF flag > 0 THEN
  62.       UPDATE materialisation SET filter = filter | flag WHERE profile_sid = NEW.profile_sid;
  63.     END IF;
  64.   END IF;
  65.  
  66.   RETURN NEW;
  67. END;
  68. $BODY$
  69.   LANGUAGE 'plpgsql' VOLATILE;
  70.  
  71.  
  72. CREATE TRIGGER sync_filter
  73.   AFTER INSERT OR UPDATE
  74.   ON advertisement
  75.   FOR EACH ROW
  76.   EXECUTE PROCEDURE public.sync_filter_advertisement();
Add Comment
Please, Sign In to add comment