]> ruin.nu Git - ndwebbie.git/blob - database/wiki.sql
intel role
[ndwebbie.git] / database / wiki.sql
1 CREATE TABLE wiki_namespaces (
2         namespace VARCHAR(16) PRIMARY KEY
3 );
4
5 CREATE TABLE wiki_pages (
6         wpid SERIAL PRIMARY KEY,
7         name VARCHAR(255) NOT NULL,
8         namespace TExt NOT NULL REFERENCES wiki_namespaces(namespace) DEFAULT '',
9         textsearch tsvector NOT NULL DEFAULT to_tsvector(''),
10         time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
11         UNIQUE(namespace,name)
12 );
13
14 CREATE INDEX wiki_pages_textsearch_index ON wiki_pages USING gin (textsearch);
15
16 CREATE TABLE wiki_page_revisions (
17         wpid INTEGER REFERENCES wiki_pages(wpid),
18         wprev SERIAL NOT NULL PRIMARY KEY,
19         parent INTEGER REFERENCES wiki_page_revisions(wprev),
20         text TEXT NOT NULL,
21         comment TEXT NOT NULL,
22         time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
23         uid INTEGER REFERENCES users(uid)
24 );
25
26 ALTER TABLE wiki_pages ADD COLUMN wprev INTEGER REFERENCES wiki_page_revisions(wprev);
27
28 CREATE OR REPLACE FUNCTION update_wiki_page() RETURNS trigger
29 AS $$
30 DECLARE
31         rec RECORD;
32 BEGIN
33         SELECT setweight(to_tsvector(wpr.text), 'D') AS ts
34                 INTO STRICT rec
35                 FROM wiki_page_revisions wpr
36                 WHERE NEW.wprev = wpr.wprev;
37         NEW.textsearch := rec.ts
38                 || setweight(to_tsvector(NEW.namespace || ':' || NEW.name), 'A');
39         NEW.time = NOW();
40         return NEW;
41 END;
42 $$ LANGUAGE plpgsql;
43
44 CREATE TRIGGER update_wiki_page
45         BEFORE UPDATE ON wiki_pages
46         FOR EACH ROW
47         EXECUTE PROCEDURE update_wiki_page();
48
49 CREATE TABLE wiki_namespace_access (
50         namespace TEXT NOT NULL REFERENCES wiki_namespaces(namespace),
51         gid INTEGER NOT NULL REFERENCES groups(gid),
52         edit BOOL NOT NULL DEFAULT FALSE,
53         post BOOL NOT NULL DEFAULT FALSE,
54         moderate BOOL NOT NULL DEFAULT FALSE,
55         PRIMARY KEY(gid,namespace)
56 );
57
58 CREATE TABLE wiki_page_access (
59         wpid INTEGER NOT NULL REFERENCES wiki_pages(wpid),
60         uid INTEGER NOT NULL REFERENCES users(uid),
61         edit BOOL NOT NULL DEFAULT FALSE,
62         moderate BOOL NOT NULL DEFAULT FALSE,
63         PRIMARY KEY(uid,wpid)
64 );
65
66 INSERT INTO wiki_namespaces VALUES ('');
67 INSERT INTO wiki_namespaces VALUES ('Members');
68 INSERT INTO wiki_namespaces VALUES ('HC');
69 INSERT INTO wiki_namespaces VALUES ('Tech');
70 INSERT INTO wiki_namespaces VALUES ('Info');
71
72 INSERT INTO wiki_pages (name,namespace) VALUES('Main','Info');
73 INSERT INTO wiki_page_revisions (wpid,text,comment,uid) VALUES(1,'Welcome to the main page!', 'First revision', 1);
74 UPDATE wiki_pages set wprev = 1 WHERE wpid = 1;
75