]> git.openstreetmap.org Git - osqa.git/blob - forum_modules/pgfulltext/pg_fts_install.sql
putting back the welcome message
[osqa.git] / forum_modules / pgfulltext / pg_fts_install.sql
1   CREATE OR REPLACE FUNCTION public.create_plpgsql_language ()
2       RETURNS TEXT
3       AS $$
4           CREATE LANGUAGE plpgsql;
5           SELECT 'language plpgsql created'::TEXT;
6       $$
7   LANGUAGE 'sql';
8
9   SELECT CASE WHEN
10         (SELECT true::BOOLEAN
11            FROM pg_language
12           WHERE lanname='plpgsql')
13       THEN
14         (SELECT 'language already installed'::TEXT)
15       ELSE
16         (SELECT public.create_plpgsql_language())
17       END;
18
19   DROP FUNCTION public.create_plpgsql_language ();
20
21   CREATE OR REPLACE FUNCTION node_ranking(node_id int, srch text) RETURNS float AS $$
22   declare
23      v tsvector;
24      cv tsvector;
25      rev_id int;
26      child_count int;
27      r record;
28   begin
29      SELECT active_revision_id INTO rev_id FROM forum_node WHERE id = node_id;
30      SELECT tsv INTO v FROM forum_noderevision WHERE id = rev_id;
31
32     SELECT  count(*) INTO child_count FROM forum_node WHERE abs_parent_id = node_id AND NOT deleted;
33
34     IF child_count > 0 THEN
35        FOR r in SELECT * FROM forum_node WHERE abs_parent_id = node_id  AND NOT deleted LOOP
36            SELECT tsv INTO cv FROM forum_noderevision WHERE id = r.active_revision_id;
37            v :=(v || cv);
38        END LOOP;
39      END IF;
40      RAISE NOTICE '%', v;
41
42      RETURN ts_rank_cd(v, plainto_tsquery('english', srch), 32);
43   end
44   $$ LANGUAGE plpgsql;
45
46 select node_ranking(50, 'free');
47
48
49
50   CREATE OR REPLACE FUNCTION set_node_tsv() RETURNS TRIGGER AS $$
51   begin
52       new.tsv :=
53          setweight(to_tsvector('english', coalesce(new.tagnames,'')), 'A') ||
54          setweight(to_tsvector('english', coalesce(new.title,'')), 'B') ||
55          setweight(to_tsvector('english', coalesce(new.body,'')), 'C');
56
57     RETURN new;
58   end
59   $$ LANGUAGE plpgsql;
60
61   CREATE OR REPLACE FUNCTION public.create_tsv_noderevision_column ()
62       RETURNS TEXT
63       AS $$
64           ALTER TABLE forum_noderevision ADD COLUMN tsv tsvector;
65
66           CREATE TRIGGER tsvectorupdate BEFORE INSERT OR UPDATE
67                 ON forum_noderevision FOR EACH ROW EXECUTE PROCEDURE set_node_tsv();
68
69               CREATE INDEX noderevision_tsv ON forum_noderevision USING gin(tsv);
70
71           SELECT 'tsv column created'::TEXT;
72       $$
73   LANGUAGE 'sql';
74
75   SELECT CASE WHEN
76      (SELECT true::BOOLEAN FROM pg_attribute WHERE attrelid = (SELECT oid FROM pg_class WHERE relname = 'forum_noderevision') AND attname = 'tsv')
77   THEN
78      (SELECT 'Tsv column already exists'::TEXT)
79   ELSE
80      (SELECT public.create_tsv_noderevision_column())
81
82   END;
83
84   DROP FUNCTION public.create_tsv_noderevision_column();
85
86   UPDATE forum_noderevision SET id=id WHERE TRUE;