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