mirror of
https://gitlab.com/davical-project/davical.git
synced 2026-07-27 12:59:54 +00:00
Ensure these patches will work in more obscure situations.
This commit is contained in:
parent
6e59b8717f
commit
41db2b7050
@ -35,7 +35,7 @@ CREATE TABLE caldav_data (
|
||||
|
||||
PRIMARY KEY ( user_no, dav_name )
|
||||
);
|
||||
|
||||
CREATE INDEX caldav_data_collection_id_fkey ON caldav_data(collection_id);
|
||||
|
||||
-- Not particularly needed, perhaps, except as a way to collect
|
||||
-- a bunch of valid iCalendar time zone specifications... :-)
|
||||
@ -81,6 +81,7 @@ CREATE TABLE calendar_item (
|
||||
|
||||
PRIMARY KEY ( user_no, dav_name )
|
||||
);
|
||||
CREATE INDEX calendar_item_collection_id_fkey ON calendar_item(collection_id);
|
||||
|
||||
|
||||
-- Each user can be related to each other user. This mechanism can also
|
||||
@ -178,19 +179,21 @@ CREATE TABLE principal_type (
|
||||
principal_type_desc TEXT
|
||||
);
|
||||
|
||||
|
||||
-- web needs SELECT,INSERT,UPDATE,DELETE
|
||||
CREATE TABLE principal (
|
||||
principal_id SERIAL PRIMARY KEY,
|
||||
type_id INT8 NOT NULL REFERENCES principal_type(principal_type_id),
|
||||
user_no INT8 NULL REFERENCES usr(user_no),
|
||||
type_id INT8 NOT NULL REFERENCES principal_type(principal_type_id) ON UPDATE CASCADE ON DELETE RESTRICT DEFERRABLE,
|
||||
user_no INT8 NULL REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE,
|
||||
displayname TEXT,
|
||||
active BOOLEAN
|
||||
);
|
||||
|
||||
|
||||
-- Allowing identification of group members.
|
||||
CREATE TABLE group_member (
|
||||
group_id INT8 REFERENCES principal(principal_id),
|
||||
member_id INT8 REFERENCES principal(principal_id)
|
||||
group_id INT8 REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE,
|
||||
member_id INT8 REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE
|
||||
);
|
||||
CREATE UNIQUE INDEX group_member_pk ON group_member(group_id,member_id);
|
||||
CREATE INDEX group_member_sk ON group_member(member_id);
|
||||
@ -203,18 +206,19 @@ CREATE TABLE dav_resource_type (
|
||||
resource_type_desc TEXT
|
||||
);
|
||||
|
||||
|
||||
CREATE TABLE dav_resource (
|
||||
dav_id INT8 PRIMARY KEY DEFAULT nextval('dav_id_seq'),
|
||||
dav_name TEXT,
|
||||
resource_type_id INT8 REFERENCES dav_resource_type(resource_type_id),
|
||||
owner_id INT8 REFERENCES principal(principal_id)
|
||||
resource_type_id INT8 REFERENCES dav_resource_type(resource_type_id) ON UPDATE CASCADE ON DELETE RESTRICT DEFERRABLE,
|
||||
owner_id INT8 REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE
|
||||
);
|
||||
|
||||
|
||||
CREATE TABLE privilege (
|
||||
granted_to_id INT8 REFERENCES principal(principal_id),
|
||||
resource_id INT8 REFERENCES dav_resource(dav_id),
|
||||
granted_by_id INT8 REFERENCES principal(principal_id),
|
||||
granted_to_id INT8 REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE,
|
||||
resource_id INT8 REFERENCES dav_resource(dav_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE,
|
||||
granted_by_id INT8 REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE RESTRICT DEFERRABLE,
|
||||
can_read BOOLEAN,
|
||||
can_write BOOLEAN,
|
||||
can_write_properties BOOLEAN,
|
||||
|
||||
@ -60,20 +60,29 @@ ALTER TABLE collection ADD UNIQUE (user_no,dav_name);
|
||||
ALTER TABLE collection ADD CONSTRAINT collection_pkey PRIMARY KEY (collection_id);
|
||||
|
||||
ALTER TABLE calendar_item ADD COLUMN collection_id INT8;
|
||||
INSERT INTO collection ( user_no, parent_container, dav_name, dav_etag, dav_displayname, is_calendar, created, modified)
|
||||
SELECT user_no, '/'||username||'/', '/'||username||'/home/', md5(user_no::text||'/'||username||'/home/'),
|
||||
fullname, TRUE, current_timestamp, current_timestamp
|
||||
FROM usr
|
||||
WHERE NOT EXISTS (SELECT 1 FROM collection WHERE dav_name ~ ('^/'||username||'/'));
|
||||
|
||||
UPDATE caldav_data SET dav_name = (select collection.dav_name FROM collection WHERE collection.user_no = caldav_data.user_no limit 1)
|
||||
|| regexp_replace( caldav_data.dav_name, '^.*/([^/]+)$', E'ex-\\1')
|
||||
WHERE dav_name ~ '^/[^/]+/[^/]+$';
|
||||
UPDATE calendar_item SET collection_id = collection.collection_id
|
||||
FROM collection WHERE collection.dav_name = regexp_replace( calendar_item.dav_name, '/[^/]+$', '/');
|
||||
ALTER TABLE calendar_item ALTER COLUMN collection_id SET NOT NULL;
|
||||
ALTER TABLE calendar_item ADD CONSTRAINT
|
||||
calendar_item_collection_id_fkey FOREIGN KEY (collection_id) REFERENCES collection(collection_id);
|
||||
CREATE INDEX calendar_item_collection_id_fkey ON calendar_item(collection_id,user_no);
|
||||
calendar_item_collection_id_fkey FOREIGN KEY (collection_id) REFERENCES collection(collection_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE;
|
||||
CREATE INDEX calendar_item_collection_id_fkey ON calendar_item(collection_id);
|
||||
|
||||
ALTER TABLE caldav_data ADD COLUMN collection_id INT8;
|
||||
UPDATE caldav_data SET collection_id = collection.collection_id
|
||||
FROM collection WHERE collection.dav_name = regexp_replace( caldav_data.dav_name, '/[^/]+$', '/');
|
||||
ALTER TABLE caldav_data ALTER COLUMN collection_id SET NOT NULL;
|
||||
ALTER TABLE caldav_data ADD CONSTRAINT
|
||||
caldav-data_collection_id_fkey FOREIGN KEY (collection_id) REFERENCES collection(collection_id);
|
||||
CREATE INDEX caldav_data_collection_id_fkey ON caldav_data(collection_id,user_no);
|
||||
caldav_data_collection_id_fkey FOREIGN KEY (collection_id) REFERENCES collection(collection_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE;
|
||||
CREATE INDEX caldav_data_collection_id_fkey ON caldav_data(collection_id);
|
||||
|
||||
SELECT new_db_revision(1,2,1, 'Janvier' );
|
||||
|
||||
|
||||
@ -15,16 +15,16 @@ CREATE TABLE principal_type (
|
||||
-- web needs SELECT,INSERT,UPDATE,DELETE
|
||||
CREATE TABLE principal (
|
||||
principal_id SERIAL PRIMARY KEY,
|
||||
type_id INT8 NOT NULL REFERENCES principal_type(principal_type_id),
|
||||
user_no INT8 NULL REFERENCES usr(user_no),
|
||||
type_id INT8 NOT NULL REFERENCES principal_type(principal_type_id) ON UPDATE CASCADE ON DELETE RESTRICT DEFERRABLE,
|
||||
user_no INT8 NULL REFERENCES usr(user_no) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE,
|
||||
displayname TEXT,
|
||||
active BOOLEAN
|
||||
);
|
||||
|
||||
-- Allowing identification of group members.
|
||||
CREATE TABLE group_member (
|
||||
group_id INT8 REFERENCES principal(principal_id),
|
||||
member_id INT8 REFERENCES principal(principal_id)
|
||||
group_id INT8 REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE,
|
||||
member_id INT8 REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE
|
||||
);
|
||||
CREATE UNIQUE INDEX group_member_pk ON group_member(group_id,member_id);
|
||||
CREATE INDEX group_member_sk ON group_member(member_id);
|
||||
@ -40,15 +40,15 @@ CREATE TABLE dav_resource_type (
|
||||
CREATE TABLE dav_resource (
|
||||
dav_id INT8 PRIMARY KEY DEFAULT nextval('dav_id_seq'),
|
||||
dav_name TEXT,
|
||||
resource_type_id INT8 REFERENCES dav_resource_type(resource_type_id),
|
||||
owner_id INT8 REFERENCES principal(principal_id)
|
||||
resource_type_id INT8 REFERENCES dav_resource_type(resource_type_id) ON UPDATE CASCADE ON DELETE RESTRICT DEFERRABLE,
|
||||
owner_id INT8 REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE
|
||||
);
|
||||
|
||||
|
||||
CREATE TABLE privilege (
|
||||
granted_to_id INT8 REFERENCES principal(principal_id),
|
||||
resource_id INT8 REFERENCES dav_resource(dav_id),
|
||||
granted_by_id INT8 REFERENCES principal(principal_id),
|
||||
granted_to_id INT8 REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE,
|
||||
resource_id INT8 REFERENCES dav_resource(dav_id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE,
|
||||
granted_by_id INT8 REFERENCES principal(principal_id) ON UPDATE CASCADE ON DELETE RESTRICT DEFERRABLE,
|
||||
can_read BOOLEAN,
|
||||
can_write BOOLEAN,
|
||||
can_write_properties BOOLEAN,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user