~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to userdb/users.sql

  • Committer: William Grant
  • Date: 2009-06-24 10:47:38 UTC
  • mfrom: (1288 trunk)
  • mto: (1281.1.8 aufsless)
  • mto: This revision was merged to the branch mainline in revision 1300.
  • Revision ID: grantw@unimelb.edu.au-20090624104738-ezgfy17mjzwz09i3
MergeĀ fromĀ trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
BEGIN;
2
 
 
3
 
CREATE OR REPLACE FUNCTION valid_url_name(name text) RETURNS boolean AS 
4
 
$$
5
 
    BEGIN
6
 
        RETURN name ~ E'^[a-z0-9][a-z0-9_\+\.\-]*$';
7
 
    END;
8
 
$$ LANGUAGE 'plpgsql';
9
 
 
10
 
CREATE OR REPLACE FUNCTION valid_login_name(name text) RETURNS boolean AS 
11
 
$$
12
 
    BEGIN
13
 
        RETURN name ~ E'^[a-z0-9][a-z0-9@_\+\.\-]*$';
14
 
    END;
15
 
$$ LANGUAGE 'plpgsql';
16
 
 
17
2
CREATE SEQUENCE login_unixid_seq MINVALUE 1000 MAXVALUE 29999 START WITH 5000;
18
3
 
19
4
CREATE TABLE login (
20
5
    loginid     SERIAL PRIMARY KEY NOT NULL,
21
 
    login       VARCHAR UNIQUE NOT NULL CHECK (valid_login_name(login)),
 
6
    login       VARCHAR UNIQUE NOT NULL,
22
7
    passhash    VARCHAR,
23
8
    state       VARCHAR NOT NULL CHECK (state in ('no_agreement', 'pending',
24
9
                                              'enabled', 'disabled'))
46
28
    subjectid       SERIAL PRIMARY KEY NOT NULL,
47
29
    subj_code       VARCHAR UNIQUE NOT NULL,
48
30
    subj_name       VARCHAR NOT NULL,
49
 
    subj_short_name VARCHAR UNIQUE NOT NULL CHECK (valid_url_name(subj_short_name))
 
31
    subj_short_name VARCHAR UNIQUE NOT NULL,
 
32
    url             VARCHAR
50
33
);
51
34
 
52
35
CREATE TABLE semester (
53
36
    semesterid  SERIAL PRIMARY KEY NOT NULL,
54
 
    year        TEXT NOT NULL CHECK (valid_url_name(year)),
55
 
    url_name    TEXT NOT NULL CHECK (valid_url_name(url_name)),
56
 
    code        TEXT NOT NULL,
57
 
    display_name TEXT NOT NULL,
 
37
    year        CHAR(4) NOT NULL,
 
38
    semester    CHAR(1) NOT NULL,
58
39
    state       TEXT NOT NULL CHECK (state IN ('disabled', 'past',
59
40
                                    'current', 'future')) DEFAULT 'current',
60
 
    UNIQUE (year, url_name),
61
 
    UNIQUE (year, code)
 
41
    UNIQUE (year, semester)
62
42
);
63
43
 
64
44
CREATE TABLE offering (
65
45
    offeringid  SERIAL PRIMARY KEY NOT NULL,
66
46
    subject     INT4 REFERENCES subject (subjectid) NOT NULL,
67
47
    semesterid  INTEGER REFERENCES semester (semesterid) NOT NULL,
68
 
    description VARCHAR,
69
 
    url         VARCHAR,
70
 
    show_worksheet_marks BOOLEAN NOT NULL DEFAULT false,
71
 
    worksheet_cutoff TIMESTAMP,
72
48
    groups_student_permissions  VARCHAR NOT NULL DEFAULT 'none',
73
49
    CHECK (groups_student_permissions in ('none', 'invite', 'create')),
74
50
    UNIQUE (subject, semesterid)
85
61
 
86
62
CREATE TABLE project (
87
63
    projectid   SERIAL PRIMARY KEY NOT NULL,
88
 
    short_name  TEXT NOT NULL CHECK (valid_url_name(short_name)),
 
64
    short_name  TEXT NOT NULL,
89
65
    name        TEXT NOT NULL,
90
66
    synopsis    TEXT,
91
67
    url         TEXT,
92
68
    projectsetid  INTEGER REFERENCES project_set (projectsetid) NOT NULL,
93
 
    deadline    TIMESTAMP NOT NULL
 
69
    deadline    TIMESTAMP
94
70
);
95
71
 
96
72
CREATE OR REPLACE FUNCTION check_project_namespacing_insertupdate()
120
96
    FOR EACH ROW EXECUTE PROCEDURE check_project_namespacing_insertupdate();
121
97
 
122
98
CREATE TABLE project_group (
123
 
    groupnm     VARCHAR NOT NULL CHECK (valid_url_name(groupnm)),
 
99
    groupnm     VARCHAR NOT NULL,
124
100
    groupid     SERIAL PRIMARY KEY NOT NULL,
125
101
    projectsetid  INTEGER REFERENCES project_set (projectsetid) NOT NULL,
126
102
    nick        VARCHAR,
186
162
        OR (loginid IS NULL AND groupid IS NOT NULL))
187
163
);
188
164
 
189
 
CREATE UNIQUE INDEX assessed_loginid_key ON assessed(loginid, projectid) WHERE loginid IS NOT NULL;
190
 
CREATE UNIQUE INDEX assessed_groupid_key ON assessed(groupid, projectid) WHERE groupid IS NOT NULL;
191
 
 
192
165
CREATE TABLE project_extension (
193
166
    extensionid SERIAL PRIMARY KEY,
194
167
    assessedid  INT4 REFERENCES assessed (assessedid) NOT NULL,
195
 
    days        INT NOT NULL,
 
168
    deadline    TIMESTAMP NOT NULL,
196
169
    approver    INT4 REFERENCES login (loginid) NOT NULL,
197
170
    notes       VARCHAR
198
171
);
220
192
-- Worksheets
221
193
-- ----------
222
194
CREATE TABLE exercise (
223
 
    identifier  TEXT PRIMARY KEY CHECK (valid_url_name(identifier)),
 
195
    identifier  TEXT PRIMARY KEY,
224
196
    name        TEXT,
225
197
    description TEXT,
226
 
    description_xhtml_cache TEXT,
227
198
    partial     TEXT,
228
199
    solution    TEXT,
229
200
    include     TEXT,
233
204
CREATE TABLE worksheet (
234
205
    worksheetid SERIAL PRIMARY KEY,
235
206
    offeringid  INT4 REFERENCES offering (offeringid) NOT NULL,
236
 
    identifier  TEXT NOT NULL CHECK (valid_url_name(identifier)),
 
207
    identifier  TEXT NOT NULL,
237
208
    name        TEXT NOT NULL,
238
209
    data        TEXT NOT NULL,
239
 
    data_xhtml_cache TEXT,
240
210
    assessable  BOOLEAN NOT NULL,
241
 
    published   BOOLEAN NOT NULL DEFAULT true,
242
211
    seq_no      INT4 NOT NULL,
243
212
    format      TEXT NOT NUll,
244
213
    UNIQUE (offeringid, identifier)