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

« back to all changes in this revision

Viewing changes to userdb/users.sql

  • Committer: William Grant
  • Date: 2009-02-25 01:18:09 UTC
  • Revision ID: grantw@unimelb.edu.au-20090225011809-tshsnb9ke6m6bnwq
Replace Semester.active with Semester.state, allowing more useful state
information.

Show diffs side-by-side

added added

removed removed

Lines of Context:
36
36
    semesterid  SERIAL PRIMARY KEY NOT NULL,
37
37
    year        CHAR(4) NOT NULL,
38
38
    semester    CHAR(1) NOT NULL,
39
 
    active      BOOL NOT NULL,
 
39
    state       TEXT NOT NULL CHECK state IN ('disabled', 'past',
 
40
                                    'current', 'future') DEFAULT 'current',
40
41
    UNIQUE (year, semester)
41
42
);
42
43
 
43
 
CREATE OR REPLACE FUNCTION deactivate_semester_enrolments_update()
44
 
RETURNS trigger AS '
45
 
    BEGIN
46
 
        IF OLD.active = true AND NEW.active = false THEN
47
 
            UPDATE enrolment SET active=false WHERE offeringid IN (
48
 
            SELECT offeringid FROM offering WHERE offering.semesterid = NEW.semesterid);
49
 
        END IF;
50
 
        RETURN NULL;
51
 
    END;
52
 
' LANGUAGE 'plpgsql';
53
 
 
54
 
CREATE TRIGGER deactivate_semester_enrolments
55
 
    AFTER UPDATE ON semester
56
 
    FOR EACH ROW EXECUTE PROCEDURE deactivate_semester_enrolments_update();
57
 
 
58
44
CREATE TABLE offering (
59
45
    offeringid  SERIAL PRIMARY KEY NOT NULL,
60
46
    subject     INT4 REFERENCES subject (subjectid) NOT NULL,
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),