]> ruin.nu Git - ndwebbie.git/blob - database/priv_threads.sql
8ab114f4e582af5ca56f55b9e8f7682aec43fbc6
[ndwebbie.git] / database / priv_threads.sql
1 INSERT INTO forum_categories (fcid,category) VALUES(-1000, 'Private');
2 INSERT INTO forum_boards (fcid,fbid,board) VALUES(-1000, -1999, 'Private');
3
4 CREATE TABLE forum_priv_access (
5         uid INTEGER REFERENCES users(uid),
6         ftid INTEGER REFERENCES forum_threads(ftid),
7         PRIMARY KEY(uid,ftid)
8 );
9
10 CREATE OR REPLACE FUNCTION unread_posts(IN uid int, OUT unread int, OUT "new" int) AS
11 $SQL$
12 SELECT count(*)::int AS unread
13         ,count(NULLIF(fp.time > (SELECT max(time) FROM forum_thread_visits WHERE uid = $1),FALSE))::int AS new
14 FROM(
15         SELECT ftid, ftv.time
16         FROM forum_threads ft
17                 LEFT OUTER JOIN (SELECT * FROM forum_thread_visits WHERE uid = $1)
18                         ftv USING (ftid)
19         WHERE COALESCE(ft.mtime > ftv.time,TRUE)
20                 AND ((fbid > 0 AND
21                                 fbid IN (SELECT fbid FROM forum_access WHERE gid IN (SELECT groups($1)))
22                         ) OR ft.ftid IN (SELECT ftid FROM forum_priv_access WHERE uid = $1)
23                 )
24         ) ft
25         JOIN forum_posts fp USING (ftid)
26 WHERE COALESCE(fp.time > ft.time, TRUE)
27 $SQL$ LANGUAGE sql STABLE;