1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
CREATE TYPE forums_results AS (msg_id integer,
subject text,
post_date integer,
realname character varying(32),
forum_name text
);
CREATE OR REPLACE FUNCTION forums_search(text, integer, text, boolean) RETURNS SETOF forums_results AS '
DECLARE
data forums_results;
BEGIN
IF $3 <> \'\' THEN
IF $4 THEN
FOR data IN SELECT forum.msg_id, headline(forum.subject, q) AS subject, forum.post_date, users.realname, forum_group_list.forum_name
FROM forum, users, forum_group_list, to_tsquery($1) AS q
WHERE users.user_id = forum.posted_by
AND forum_group_list.group_forum_id = forum.group_forum_id
AND forum_group_list.is_public <> 9
AND forum_group_list.group_forum_id IN (\'$3\')
AND forum.msg_id IN (SELECT msg_id FROM forum_idx, to_tsquery($1) AS q
WHERE group_id = $2 AND vectors @@ q ORDER BY rank(vectors, q) DESC) LOOP
RETURN NEXT data;
END LOOP;
ELSE
FOR data IN SELECT forum.msg_id, headline(forum.subject, q) AS subject, forum.post_date, users.realname, forum_group_list.forum_name
FROM forum, users, forum_group_list, to_tsquery($1) AS q
WHERE users.user_id = forum.posted_by
AND forum_group_list.group_forum_id = forum.group_forum_id
AND forum_group_list.is_public <> 9
AND forum_group_list.group_forum_id IN (\'$3\')
AND forum_group_list.is_public = 1
AND forum.msg_id IN (SELECT msg_id FROM forum_idx, to_tsquery($1) AS q
WHERE group_id = $2 AND vectors @@ q ORDER BY rank(vectors, q) DESC) LOOP
RETURN NEXT data;
END LOOP;
END IF;
ELSE
IF $4 THEN
FOR data IN SELECT forum.msg_id, headline(forum.subject, q) AS subject, forum.post_date, users.realname, forum_group_list.forum_name
FROM forum, users, forum_group_list, to_tsquery($1) AS q
WHERE users.user_id = forum.posted_by
AND forum_group_list.group_forum_id = forum.group_forum_id
AND forum_group_list.is_public <> 9
AND forum.msg_id IN (SELECT msg_id FROM forum_idx, to_tsquery($1) AS q
WHERE group_id = $2 AND vectors @@ q ORDER BY rank(vectors, q) DESC) LOOP
RETURN NEXT data;
END LOOP;
ELSE
FOR data IN SELECT forum.msg_id, headline(forum.subject, q) AS subject, forum.post_date, users.realname, forum_group_list.forum_name
FROM forum, users, forum_group_list, to_tsquery($1) AS q
WHERE users.user_id = forum.posted_by
AND forum_group_list.group_forum_id = forum.group_forum_id
AND forum_group_list.is_public <> 9
AND forum_group_list.is_public = 1
AND forum.msg_id IN (SELECT msg_id FROM forum_idx, to_tsquery($1) AS q
WHERE group_id = $2 AND vectors @@ q ORDER BY rank(vectors, q) DESC) LOOP
RETURN NEXT data;
END LOOP;
END IF;
END IF;
RETURN;
END;'
LANGUAGE 'plpgsql';
|