88 lines
3.1 KiB
PL/PgSQL
88 lines
3.1 KiB
PL/PgSQL
--liquibase formatted sql
|
|
|
|
|
|
-- ============================================================================
|
|
--changeset michael.hoennig:hs-office-partner-DETAILS-TABLE endDelimiter:--//
|
|
-- ----------------------------------------------------------------------------
|
|
|
|
create table hs_office_partner_details
|
|
(
|
|
uuid uuid unique references rbac.object (uuid) initially deferred,
|
|
version int not null default 0,
|
|
registrationOffice varchar(96),
|
|
registrationNumber varchar(96),
|
|
birthPlace varchar(96),
|
|
birthName varchar(96),
|
|
birthday date,
|
|
dateOfDeath date
|
|
);
|
|
--//
|
|
|
|
|
|
-- ============================================================================
|
|
--changeset michael.hoennig:hs-office-partner-DETAILS-TABLE-JOURNAL endDelimiter:--//
|
|
-- ----------------------------------------------------------------------------
|
|
|
|
call base.create_journal('hs_office_partner_details');
|
|
--//
|
|
|
|
-- ============================================================================
|
|
--changeset michael.hoennig:hs-office-partner-MAIN-TABLE endDelimiter:--//
|
|
-- ----------------------------------------------------------------------------
|
|
|
|
create table hs_office_partner
|
|
(
|
|
uuid uuid unique references rbac.object (uuid) initially deferred,
|
|
version int not null default 0,
|
|
partnerNumber numeric(5) unique not null,
|
|
partnerRelUuid uuid not null references hs_office_relation(uuid), -- deleted in after delete trigger
|
|
detailsUuid uuid not null references hs_office_partner_details(uuid) -- deleted in after delete trigger
|
|
);
|
|
--//
|
|
|
|
|
|
-- ============================================================================
|
|
--changeset michael.hoennig:hs-office-partner-DELETE-DEPENDENTS-TRIGGER endDelimiter:--//
|
|
-- ----------------------------------------------------------------------------
|
|
|
|
/**
|
|
Trigger function to delete related details of a partner to delete.
|
|
*/
|
|
create or replace function deleteHsOfficeDependentsOnPartnerDelete()
|
|
returns trigger
|
|
language PLPGSQL
|
|
as $$
|
|
declare
|
|
counter integer;
|
|
begin
|
|
DELETE FROM hs_office_partner_details d WHERE d.uuid = OLD.detailsUuid;
|
|
GET DIAGNOSTICS counter = ROW_COUNT;
|
|
if counter = 0 then
|
|
raise exception 'partner details % could not be deleted', OLD.detailsUuid;
|
|
end if;
|
|
|
|
DELETE FROM hs_office_relation r WHERE r.uuid = OLD.partnerRelUuid;
|
|
GET DIAGNOSTICS counter = ROW_COUNT;
|
|
if counter = 0 then
|
|
raise exception 'partner relation % could not be deleted', OLD.partnerRelUuid;
|
|
end if;
|
|
|
|
RETURN OLD;
|
|
end; $$;
|
|
|
|
/**
|
|
Triggers deletion of related rows of a partner to delete.
|
|
*/
|
|
create trigger hs_office_partner_delete_dependents_trigger
|
|
after delete
|
|
on hs_office_partner
|
|
for each row
|
|
execute procedure deleteHsOfficeDependentsOnPartnerDelete();
|
|
|
|
-- ============================================================================
|
|
--changeset michael.hoennig:hs-office-partner-MAIN-TABLE-JOURNAL endDelimiter:--//
|
|
-- ----------------------------------------------------------------------------
|
|
|
|
call base.create_journal('hs_office_partner');
|
|
--//
|