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

« back to all changes in this revision

Viewing changes to userdb/users.sql

MergedĀ fromĀ trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
8
8
    state       VARCHAR NOT NULL CHECK (state in ('no_agreement', 'pending',
9
9
                                              'enabled', 'disabled'))
10
10
                                 DEFAULT 'no_agreement',
11
 
    rolenm      VARCHAR NOT NULL CHECK (rolenm in ('anyone', 'student',
12
 
                                                   'marker', 'tutor',
13
 
                                                   'lecturer', 'admin')),
 
11
    admin       BOOLEAN NOT NULL DEFAULT false,
14
12
    unixid      INT UNIQUE DEFAULT nextval('login_unixid_seq') NOT NULL,
15
13
    nick        VARCHAR NOT NULL,
16
14
    pass_exp    TIMESTAMP,
38
36
    semesterid  SERIAL PRIMARY KEY NOT NULL,
39
37
    year        CHAR(4) NOT NULL,
40
38
    semester    CHAR(1) NOT NULL,
41
 
    active      BOOL NOT NULL,
 
39
    state       TEXT NOT NULL CHECK (state IN ('disabled', 'past',
 
40
                                    'current', 'future')) DEFAULT 'current',
42
41
    UNIQUE (year, semester)
43
42
);
44
43
 
45
 
CREATE OR REPLACE FUNCTION deactivate_semester_enrolments_update()
46
 
RETURNS trigger AS '
47
 
    BEGIN
48
 
        IF OLD.active = true AND NEW.active = false THEN
49
 
            UPDATE enrolment SET active=false WHERE offeringid IN (
50
 
            SELECT offeringid FROM offering WHERE offering.semesterid = NEW.semesterid);
51
 
        END IF;
52
 
        RETURN NULL;
53
 
    END;
54
 
' LANGUAGE 'plpgsql';
55
 
 
56
 
CREATE TRIGGER deactivate_semester_enrolments
57
 
    AFTER UPDATE ON semester
58
 
    FOR EACH ROW EXECUTE PROCEDURE deactivate_semester_enrolments_update();
59
 
 
60
44
CREATE TABLE offering (
61
45
    offeringid  SERIAL PRIMARY KEY NOT NULL,
62
46
    subject     INT4 REFERENCES subject (subjectid) NOT NULL,
129
113
CREATE TABLE enrolment (
130
114
    loginid     INT4 REFERENCES login (loginid),
131
115
    offeringid  INT4 REFERENCES offering (offeringid),
 
116
    role        TEXT NOT NULL CHECK (role IN ('student', 'tutor',
 
117
                                              'lecturer')) DEFAULT 'student',
132
118
    result      INT,
133
119
    special_result VARCHAR,
134
120
    supp_result INT,
138
124
    PRIMARY KEY (loginid,offeringid)
139
125
);
140
126
 
141
 
CREATE OR REPLACE FUNCTION confirm_active_semester_insertupdate()
142
 
RETURNS trigger AS '
143
 
    DECLARE
144
 
        active BOOL;
145
 
    BEGIN
146
 
        SELECT semester.active INTO active FROM offering, semester WHERE offeringid=NEW.offeringid AND semester.semesterid = offering.semesterid;
147
 
        IF NOT active AND NEW.active = true THEN
148
 
            RAISE EXCEPTION ''cannot have active enrolment for % in offering %, as the semester is inactive'', NEW.loginid, NEW.offeringid;
149
 
        END IF;
150
 
        RETURN NEW;
151
 
    END;
152
 
' LANGUAGE 'plpgsql';
153
 
 
154
 
CREATE TRIGGER confirm_active_semester
155
 
    BEFORE INSERT OR UPDATE ON enrolment
156
 
    FOR EACH ROW EXECUTE PROCEDURE confirm_active_semester_insertupdate();
157
 
 
158
127
CREATE TABLE assessed (
159
128
    assessedid  SERIAL PRIMARY KEY NOT NULL,
160
129
    loginid     INT4 REFERENCES login (loginid),