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

« back to all changes in this revision

Viewing changes to userdb/users.sql

  • Committer: William Grant
  • Date: 2010-02-25 03:18:21 UTC
  • Revision ID: grantw@unimelb.edu.au-20100225031821-mi9a2tm5679fht4d
Shuffle things around so that req.user and req.store only construct when actually retrieved, and ensure they're not retrieved for media files. Saves 50ms of DB connection time per request.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
BEGIN;
 
2
 
 
3
-- Check that the provided name is sane for use in URLs.
 
4
CREATE OR REPLACE FUNCTION valid_url_name(name text) RETURNS boolean AS 
 
5
$$
 
6
    BEGIN
 
7
        RETURN name ~ E'^[a-z0-9][a-z0-9_\+\.\-]*$';
 
8
    END;
 
9
$$ LANGUAGE 'plpgsql';
 
10
 
 
11
-- Just like valid_url_name, except that @ is permitted (so we can use a
 
12
-- reasonable subset of email addresses as usernames).
 
13
CREATE OR REPLACE FUNCTION valid_login_name(name text) RETURNS boolean AS 
 
14
$$
 
15
    BEGIN
 
16
        RETURN name ~ E'^[a-z0-9][a-z0-9@_\+\.\-]*$';
 
17
    END;
 
18
$$ LANGUAGE 'plpgsql';
 
19
 
2
20
CREATE SEQUENCE login_unixid_seq MINVALUE 1000 MAXVALUE 29999 START WITH 5000;
3
21
 
4
22
CREATE TABLE login (
5
23
    loginid     SERIAL PRIMARY KEY NOT NULL,
6
 
    login       VARCHAR UNIQUE NOT NULL,
 
24
    login       VARCHAR UNIQUE NOT NULL CHECK (valid_login_name(login)),
7
25
    passhash    VARCHAR,
8
26
    state       VARCHAR NOT NULL CHECK (state in ('no_agreement', 'pending',
9
27
                                              'enabled', 'disabled'))
28
46
    subjectid       SERIAL PRIMARY KEY NOT NULL,
29
47
    subj_code       VARCHAR UNIQUE NOT NULL,
30
48
    subj_name       VARCHAR NOT NULL,
31
 
    subj_short_name VARCHAR UNIQUE NOT NULL
 
49
    subj_short_name VARCHAR UNIQUE NOT NULL CHECK (valid_url_name(subj_short_name))
32
50
);
33
51
 
34
52
CREATE TABLE semester (
35
53
    semesterid  SERIAL PRIMARY KEY NOT NULL,
36
 
    year        CHAR(4) NOT NULL,
37
 
    semester    CHAR(1) NOT NULL,
 
54
    year        CHAR(4) NOT NULL CHECK (valid_url_name(year)),
 
55
    semester    CHAR(1) NOT NULL CHECK (valid_url_name(semester)),
38
56
    state       TEXT NOT NULL CHECK (state IN ('disabled', 'past',
39
57
                                    'current', 'future')) DEFAULT 'current',
40
58
    UNIQUE (year, semester)
46
64
    semesterid  INTEGER REFERENCES semester (semesterid) NOT NULL,
47
65
    description VARCHAR,
48
66
    url         VARCHAR,
 
67
    show_worksheet_marks BOOLEAN NOT NULL DEFAULT false,
 
68
    worksheet_cutoff TIMESTAMP,
49
69
    groups_student_permissions  VARCHAR NOT NULL DEFAULT 'none',
50
70
    CHECK (groups_student_permissions in ('none', 'invite', 'create')),
51
71
    UNIQUE (subject, semesterid)
62
82
 
63
83
CREATE TABLE project (
64
84
    projectid   SERIAL PRIMARY KEY NOT NULL,
65
 
    short_name  TEXT NOT NULL,
 
85
    short_name  TEXT NOT NULL CHECK (valid_url_name(short_name)),
66
86
    name        TEXT NOT NULL,
67
87
    synopsis    TEXT,
68
88
    url         TEXT,
97
117
    FOR EACH ROW EXECUTE PROCEDURE check_project_namespacing_insertupdate();
98
118
 
99
119
CREATE TABLE project_group (
100
 
    groupnm     VARCHAR NOT NULL,
 
120
    groupnm     VARCHAR NOT NULL CHECK (valid_url_name(groupnm)),
101
121
    groupid     SERIAL PRIMARY KEY NOT NULL,
102
122
    projectsetid  INTEGER REFERENCES project_set (projectsetid) NOT NULL,
103
123
    nick        VARCHAR,
193
213
-- Worksheets
194
214
-- ----------
195
215
CREATE TABLE exercise (
196
 
    identifier  TEXT PRIMARY KEY,
 
216
    identifier  TEXT PRIMARY KEY CHECK (valid_url_name(identifier)),
197
217
    name        TEXT,
198
218
    description TEXT,
199
219
    partial     TEXT,
205
225
CREATE TABLE worksheet (
206
226
    worksheetid SERIAL PRIMARY KEY,
207
227
    offeringid  INT4 REFERENCES offering (offeringid) NOT NULL,
208
 
    identifier  TEXT NOT NULL,
 
228
    identifier  TEXT NOT NULL CHECK (valid_url_name(identifier)),
209
229
    name        TEXT NOT NULL,
210
230
    data        TEXT NOT NULL,
211
231
    assessable  BOOLEAN NOT NULL,
 
232
    published   BOOLEAN NOT NULL DEFAULT true,
212
233
    seq_no      INT4 NOT NULL,
213
234
    format      TEXT NOT NUll,
214
235
    UNIQUE (offeringid, identifier)