Skip to content

Instantly share code, notes, and snippets.

@hizel
Created June 28, 2011 07:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hizel/1050674 to your computer and use it in GitHub Desktop.
Save hizel/1050674 to your computer and use it in GitHub Desktop.
fix delete trigger
--
-- Name: msgdel(); Type: FUNCTION; Schema: public; Owner: maxcom
--
CREATE OR REPLACE FUNCTION msgdel() RETURNS trigger
LANGUAGE plpgsql
AS $$
DECLARE
grid int;
stat_1 int;
stat int;
thetopic topics%ROWTYPE;
thecomment comments%ROWTYPE;
BEGIN
SELECT * INTO thetopic FROM topics WHERE id = NEW.msgid;
IF FOUND THEN
SELECT groupid INTO grid FROM topics WHERE id = NEW.msgid;
UPDATE groups SET stat1=stat1-1 WHERE id = grid;
UPDATE topics SET lastmod=CURRENT_TIMESTAMP WHERE id = NEW.msgid;
UPDATE comments SET topic_deleted=true WHERE topic = NEW.msgid;
ELSE
SELECT * INTO thecomment FROM comments WHERE id = NEW.msgid;
SELECT topic INTO grid FROM comments WHERE id = NEW.msgid;
UPDATE topics SET stat1=stat1-1, lastmod=CURRENT_TIMESTAMP WHERE id = grid;
UPDATE topics SET stat2=stat1 WHERE id=grid AND stat2 > stat1;
UPDATE topics SET stat3=stat1 WHERE id=grid AND stat3 > stat1;
UPDATE topics SET stat4=stat1 WHERE id=grid AND stat4 > stat1;
SELECT groupid INTO grid FROM topics WHERE id = grid;
UPDATE groups SET stat1=stat1-1 WHERE id = grid;
END IF;
RETURN NULL;
END;
$$;
@maxcom
Copy link

maxcom commented Jun 28, 2011

не, так плохо - будут отрицательные счетчики :-)

stat1 это общее число сообщений, stat2..stat4 - счетчики сообщений за последний месяц/день/час

@maxcom
Copy link

maxcom commented Jun 28, 2011

и да, в постгрессе есть CREATE OR REPLACE FUNCTION (это чтобы не делать DROP/CREATE)

@maxcom
Copy link

maxcom commented Jun 28, 2011

(блин, на lor канал лег)

@hizel
Copy link
Author

hizel commented Jun 28, 2011

fixed

@maxcom
Copy link

maxcom commented Jun 28, 2011

а можешь еще обновить sql/demo.db? А то у меня тут под рукой только PostgreSQL 9, а 8.4 нету.

Делается это так:

создаешь чистую базу, заливаешь в нее demo.db, потом обновляешь функцию, затем дампишь pg_dump обратно в demo.db и коммитишь его

@hizel
Copy link
Author

hizel commented Jun 28, 2011

сейчас сделаю

@hizel
Copy link
Author

hizel commented Jun 28, 2011

сделал, только что-то много изменений получилось :-|

@maxcom
Copy link

maxcom commented Jun 28, 2011

да, чего-то оно пересортировалось. Ну и ладно, сейчас заберу. В следующий раз наверное надо использовать "git add -p"

@maxcom
Copy link

maxcom commented Jun 28, 2011

выложил, базу на linux.org.ru обновил

@maxcom
Copy link

maxcom commented Jun 28, 2011

спасибо

@hizel
Copy link
Author

hizel commented Jun 28, 2011

пожалуйста :-)
хм, опять по\валился хостер :-(

@maxcom
Copy link

maxcom commented Jun 28, 2011 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment