From bf199a83a3cdbefceb64be53ebe224ecd6aab494 Mon Sep 17 00:00:00 2001 From: Andrew McMillan Date: Sun, 22 Nov 2009 00:19:01 +1300 Subject: [PATCH] Definition of a dav_principal writable view of usr+principal --- dba/views/dav_principal.sql | 64 +++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 dba/views/dav_principal.sql diff --git a/dba/views/dav_principal.sql b/dba/views/dav_principal.sql new file mode 100644 index 00000000..045f223c --- /dev/null +++ b/dba/views/dav_principal.sql @@ -0,0 +1,64 @@ +-- Define an updateable view for dav_principal which conbines the AWL usr +-- record 1:1 with the principal table + + +DROP VIEW dav_principal CASCADE; +CREATE OR REPLACE VIEW dav_principal AS + SELECT user_no, usr.active AS user_active, joined AS created, updated AS last_changed, + username, password, fullname, email, '/' || username || '/' AS dav_name, + email_ok, date_format_type, locale, + principal_id, type_id, displayname, default_privileges + FROM usr JOIN principal USING(user_no); + +CREATE or REPLACE RULE dav_principal_insert AS ON INSERT TO dav_principal +DO INSTEAD +( + INSERT INTO usr ( user_no, active, joined, updated, username, password, fullname, email, email_ok, date_format_type, locale ) + VALUES( + COALESCE( NEW.user_no, nextval('usr_user_no_seq')), + COALESCE( NEW.user_active, TRUE), + COALESCE( NEW.created, current_timestamp), + COALESCE( NEW.last_changed, current_timestamp), + NEW.username, NEW.password, + COALESCE( NEW.fullname, NEW.displayname ), + NEW.email, NEW.email_ok, + COALESCE( NEW.date_format_type, 'E'), + NEW.locale + ); + INSERT INTO principal ( user_no, principal_id, type_id, displayname, default_privileges ) + VALUES( + COALESCE( NEW.user_no, currval('usr_user_no_seq')), + COALESCE( NEW.principal_id, nextval('dav_id_seq')), + NEW.type_id, + COALESCE( NEW.displayname, NEW.fullname ), + COALESCE( NEW.default_privileges, 0::BIT(24)) + ); +); + + +CREATE or REPLACE RULE dav_principal_update AS ON UPDATE TO dav_principal +DO INSTEAD +( + UPDATE usr + SET + user_no=NEW.user_no, + active=NEW.user_active, + updated=current_timestamp, + username=NEW.username, + password=NEW.password, + fullname=NEW.fullname, + email=NEW.email, + email_ok=NEW.email_ok, + date_format_type=NEW.date_format_type, + locale=NEW.locale + WHERE user_no=OLD.user_no; + + UPDATE principal + SET + principal_id = NEW.principal_id, + type_id = NEW.type_id, + displayname = NEW.displayname, + default_privileges = NEW.default_privileges + WHERE principal_id=OLD.principal_id; +); +