Daten aktualisieren
- tw gehts mit einigem SQL-Aufwand:
file: ../../../validad/Xaxos/sql/changes/RT11341_comment_vote.sql
1: -- preSHA1sum c5862deb6c6ee9ac308e3c8cdad64b3a6702d60b
2: -- postSHA1sum 2d67897d926cb97238ff5510eb3b90f6fbc27f19
3: -- split-at: ------
4:
5:
6: set search_path=xaxos,public;
7: ------
8:
9: CREATE TABLE comment_vote (
10: LIKE public.table_template INCLUDING DEFAULTS INCLUDING CONSTRAINTS INCLUDING INDEXES,
11: usr int not null references usr(id),
12: comment int not null references comment(id),
13: vote int not null
14: );
15: ------
16:
17: ALTER TABLE ONLY comment_vote
18: ADD CONSTRAINT comment_vote_modified_by_fkey FOREIGN KEY (modified_by) REFERENCES usr(id);
19: ------
20:
21: ALTER TABLE ONLY comment_vote
22: ADD CONSTRAINT comment_vote_key UNIQUE (comment, usr);
23: ------
24:
25: ALTER TABLE ONLY comment
26: ADD COLUMN vote_up INTEGER DEFAULT 0 NOT NULL;
27: ------
28:
29: ALTER TABLE ONLY comment
30: ADD COLUMN vote_down INTEGER DEFAULT 0 NOT NULL;
31: ------
32:
33:
34: GRANT SELECT on comment_vote to xaxos_admin;
35: ------
36:
37: GRANT SELECT,INSERT on comment_vote to xaxos_web;
38: ------
39:
40: CREATE OR REPLACE FUNCTION xaxos.comment_votes() RETURNS trigger
41: LANGUAGE plpgsql
42: AS $$
43:
44: DECLARE
45: comment_id INTEGER;
46: vote_up_count INTEGER;
47: vote_down_count INTEGER;
48: BEGIN
49:
50: IF (TG_OP = 'DELETE') THEN
51: comment_id = OLD.comment;
52: ELSE
53: comment_id = NEW.comment;
54: END IF;
55:
56: SELECT COALESCE(COUNT(NULLIF(vote,1)),0),COALESCE(COUNT(NULLIF(vote,-1)),0)
57: FROM comment_vote
58: WHERE comment = comment_id
59: INTO vote_down_count,vote_up_count;
60:
61: UPDATE comment SET
62: vote_up = vote_up_count,
63: vote_down = vote_down_count
64: WHERE id = comment_id;
65:
66: RETURN NEW;
67: END;
68: $$;
69: ------
70:
71: CREATE TRIGGER trigger_comment_vote
72: AFTER DELETE OR UPDATE OR INSERT ON xaxos.comment_vote
73: FOR EACH ROW
74: EXECUTE PROCEDURE xaxos.comment_votes();
75: