-
Notifications
You must be signed in to change notification settings - Fork 64
/
tables.pg.sql
256 lines (237 loc) · 10.1 KB
/
tables.pg.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
--
-- MRBS table creation script - for PostgreSQL 7.3 and above
--
-- Notes:
-- (1) MySQL inserts the current date/time into any timestamp field which is not
-- specified on insert. To get the same effect, use PostgreSQL default
-- value current_timestamp.
--
-- (2) If you have decided to change the prefix of your tables from 'mrbs_'
-- to something else using $db_tbl_prefix then you must edit each
-- 'CREATE TABLE', 'create index', 'INSERT INTO' and 'REFERENCES' line below
-- to replace 'mrbs_' with your new table prefix. A global replace of
-- 'mrbs_' will be sufficient.
--
-- (3) If you add new (standard) fields then you should also change the global variable
-- $standard_fields. Note that if you are just adding custom fields for
-- a single site then this is not necessary.
CREATE TABLE mrbs_area
(
-- smallints in mrbs_area are assumed to represent booleans
id serial primary key,
disabled smallint DEFAULT 0 NOT NULL,
area_name varchar(30),
sort_key varchar(30) DEFAULT '' NOT NULL,
timezone varchar(50),
area_admin_email text,
resolution int,
default_duration int,
default_duration_all_day smallint DEFAULT 0 NOT NULL,
morningstarts int,
morningstarts_minutes int,
eveningends int,
eveningends_minutes int,
private_enabled smallint,
private_default smallint,
private_mandatory smallint,
private_override varchar(32),
min_create_ahead_enabled smallint,
min_create_ahead_secs int,
max_create_ahead_enabled smallint,
max_create_ahead_secs int,
min_delete_ahead_enabled smallint,
min_delete_ahead_secs int,
max_delete_ahead_enabled smallint,
max_delete_ahead_secs int,
max_per_day_enabled smallint DEFAULT 0 NOT NULL,
max_per_day int DEFAULT 0 NOT NULL,
max_per_week_enabled smallint DEFAULT 0 NOT NULL,
max_per_week int DEFAULT 0 NOT NULL,
max_per_month_enabled smallint DEFAULT 0 NOT NULL,
max_per_month int DEFAULT 0 NOT NULL,
max_per_year_enabled smallint DEFAULT 0 NOT NULL,
max_per_year int DEFAULT 0 NOT NULL,
max_per_future_enabled smallint DEFAULT 0 NOT NULL,
max_per_future int DEFAULT 0 NOT NULL,
max_secs_per_day_enabled smallint DEFAULT 0 NOT NULL,
max_secs_per_day int DEFAULT 0 NOT NULL,
max_secs_per_week_enabled smallint DEFAULT 0 NOT NULL,
max_secs_per_week int DEFAULT 0 NOT NULL,
max_secs_per_month_enabled smallint DEFAULT 0 NOT NULL,
max_secs_per_month int DEFAULT 0 NOT NULL,
max_secs_per_year_enabled smallint DEFAULT 0 NOT NULL,
max_secs_per_year int DEFAULT 0 NOT NULL,
max_secs_per_future_enabled smallint DEFAULT 0 NOT NULL,
max_secs_per_future int DEFAULT 0 NOT NULL,
max_duration_enabled smallint DEFAULT 0 NOT NULL,
max_duration_secs int DEFAULT 0 NOT NULL,
max_duration_periods int DEFAULT 0 NOT NULL,
custom_html text,
approval_enabled smallint,
reminders_enabled smallint,
enable_periods smallint,
periods text DEFAULT NULL,
confirmation_enabled smallint,
confirmed_default smallint,
times_along_top smallint DEFAULT 0 NOT NULL,
default_type char DEFAULT 'E' NOT NULL,
CONSTRAINT mrbs_uq_area_name UNIQUE (area_name)
);
CREATE TABLE mrbs_room
(
id serial primary key,
disabled smallint DEFAULT 0 NOT NULL,
area_id int DEFAULT 0 NOT NULL
REFERENCES mrbs_area(id)
ON UPDATE CASCADE
ON DELETE RESTRICT,
room_name varchar(25) NOT NULL,
sort_key varchar(25) NOT NULL,
description varchar(60),
capacity int DEFAULT 0 NOT NULL,
room_admin_email text,
invalid_types varchar(255) DEFAULT NULL,
custom_html text,
CONSTRAINT mrbs_uq_room_name UNIQUE (area_id, room_name)
);
comment on column mrbs_room.invalid_types is 'JSON encoded';
create index mrbs_idxSortKey on mrbs_room(sort_key);
CREATE TABLE mrbs_repeat
(
id serial primary key,
start_time int DEFAULT 0 NOT NULL,
end_time int DEFAULT 0 NOT NULL,
rep_type int DEFAULT 0 NOT NULL,
end_date int DEFAULT 0 NOT NULL,
rep_opt varchar(32) DEFAULT '' NOT NULL,
room_id int DEFAULT 1 NOT NULL
REFERENCES mrbs_room(id)
ON UPDATE CASCADE
ON DELETE RESTRICT,
timestamp timestamptz DEFAULT current_timestamp,
create_by varchar(80) DEFAULT '' NOT NULL,
modified_by varchar(80) DEFAULT '' NOT NULL,
name varchar(80) DEFAULT '' NOT NULL,
type char DEFAULT 'E' NOT NULL,
description text,
rep_interval smallint DEFAULT 1 NOT NULL,
month_absolute smallint DEFAULT NULL,
month_relative varchar(4) DEFAULT NULL,
status smallint DEFAULT 0 NOT NULL,
reminded int,
info_time int,
info_user varchar(80),
info_text text,
ical_uid varchar(255) DEFAULT '' NOT NULL,
ical_sequence smallint DEFAULT 0 NOT NULL
);
comment on column mrbs_repeat.start_time is 'Unix timestamp';
comment on column mrbs_repeat.end_time is 'Unix timestamp';
comment on column mrbs_repeat.end_date is 'Unix timestamp';
CREATE TABLE mrbs_entry
(
id serial primary key,
start_time int DEFAULT 0 NOT NULL,
end_time int DEFAULT 0 NOT NULL,
entry_type int DEFAULT 0 NOT NULL,
repeat_id int DEFAULT NULL
REFERENCES mrbs_repeat(id)
ON UPDATE CASCADE
ON DELETE CASCADE,
room_id int DEFAULT 1 NOT NULL
REFERENCES mrbs_room(id)
ON UPDATE CASCADE
ON DELETE RESTRICT,
timestamp timestamptz DEFAULT current_timestamp,
create_by varchar(80) DEFAULT '' NOT NULL,
modified_by varchar(80) DEFAULT '' NOT NULL,
name varchar(80) DEFAULT '' NOT NULL,
type char DEFAULT 'E' NOT NULL,
description text,
status smallint DEFAULT 0 NOT NULL,
reminded int,
info_time int,
info_user varchar(80),
info_text text,
ical_uid varchar(255) DEFAULT '' NOT NULL,
ical_sequence smallint DEFAULT 0 NOT NULL,
ical_recur_id varchar(16) DEFAULT NULL,
allow_registration smallint DEFAULT 0 NOT NULL,
registrant_limit int DEFAULT 0 NOT NULL,
registrant_limit_enabled smallint DEFAULT 1 NOT NULL,
registration_opens int DEFAULT 1209600 NOT NULL, -- 2 weeks
registration_opens_enabled smallint DEFAULT 0 NOT NULL,
registration_closes int DEFAULT 0 NOT NULL,
registration_closes_enabled smallint DEFAULT 0 NOT NULL
);
comment on column mrbs_entry.start_time is 'Unix timestamp';
comment on column mrbs_entry.end_time is 'Unix timestamp';
comment on column mrbs_entry.registration_opens is 'Seconds before the start time';
comment on column mrbs_entry.registration_closes is 'Seconds before the start time';
create index mrbs_idxStartTime on mrbs_entry(start_time);
create index mrbs_idxEndTime on mrbs_entry(end_time);
create index mrbs_idxRoomStartEnd on mrbs_entry(room_id, start_time, end_time);
CREATE TABLE mrbs_participants
(
id serial primary key,
entry_id int NOT NULL
REFERENCES mrbs_entry(id)
ON UPDATE CASCADE
ON DELETE CASCADE,
username varchar(191),
create_by varchar(255),
registered int,
CONSTRAINT mrbs_uq_entryid_username UNIQUE (entry_id, username)
);
CREATE TABLE mrbs_variables
(
id serial primary key,
variable_name varchar(80),
variable_content text,
CONSTRAINT mrbs_uq_variable_name UNIQUE (variable_name)
);
CREATE TABLE mrbs_zoneinfo
(
id serial primary key,
timezone varchar(127) DEFAULT '' NOT NULL,
outlook_compatible smallint NOT NULL DEFAULT 0,
vtimezone text,
last_updated int NOT NULL DEFAULT 0,
CONSTRAINT mrbs_uq_timezone UNIQUE (timezone, outlook_compatible)
);
CREATE TABLE mrbs_sessions
(
id varchar(191) NOT NULL primary key,
access int DEFAULT NULL,
data text DEFAULT NULL
);
comment on column mrbs_sessions.access is 'Unix timestamp';
create index mrbs_idxAccess on mrbs_sessions(access);
CREATE TABLE mrbs_users
(
id serial primary key,
level smallint DEFAULT 0 NOT NULL, /* play safe and give no rights */
name varchar(30),
display_name varchar(191),
password_hash varchar(255),
email varchar(75),
timestamp timestamptz DEFAULT current_timestamp,
last_login int DEFAULT 0 NOT NULL,
reset_key_hash varchar(255),
reset_key_expiry int DEFAULT 0 NOT NULL,
CONSTRAINT mrbs_uq_name UNIQUE (name)
);
CREATE OR REPLACE FUNCTION update_timestamp_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.timestamp = NOW();
RETURN NEW;
END;
$$ language 'plpgsql';
CREATE TRIGGER update_mrbs_entry_timestamp BEFORE UPDATE ON mrbs_entry FOR EACH ROW EXECUTE PROCEDURE update_timestamp_column();
CREATE TRIGGER update_mrbs_repeat_timestamp BEFORE UPDATE ON mrbs_repeat FOR EACH ROW EXECUTE PROCEDURE update_timestamp_column();
CREATE TRIGGER update_mrbs_users_timestamp BEFORE UPDATE ON mrbs_users FOR EACH ROW EXECUTE PROCEDURE update_timestamp_column();
INSERT INTO mrbs_variables (variable_name, variable_content)
VALUES ('db_version', '82');
INSERT INTO mrbs_variables (variable_name, variable_content)
VALUES ('local_db_version', '1');