2021-09-08 10:06:38 -07:00
|
|
|
-- Copyright (c) HashiCorp, Inc.
|
|
|
|
|
-- SPDX-License-Identifier: BUSL-1.1
|
2023-02-02 17:15:17 -08:00
|
|
|
|
2021-09-08 10:06:38 -07:00
|
|
|
begin;
|
|
|
|
|
|
|
|
|
|
-- We are adding the name to the base host catalog type. This allows the db
|
|
|
|
|
-- to ensure that catalog names are unique in a scope across all subtypes.
|
|
|
|
|
alter table host_catalog
|
|
|
|
|
add column name wt_name;
|
|
|
|
|
|
|
|
|
|
alter table host_catalog
|
|
|
|
|
add constraint host_catalog_scope_id_name_uq
|
|
|
|
|
unique (scope_id, name);
|
|
|
|
|
|
|
|
|
|
-- Now that we've added the name column to the base type, we copy
|
|
|
|
|
-- the name from the static host catalog table into the base table.
|
|
|
|
|
update host_catalog
|
|
|
|
|
set name = st.name
|
|
|
|
|
from
|
|
|
|
|
static_host_catalog st
|
|
|
|
|
where
|
|
|
|
|
host_catalog.public_id = st.public_id and
|
|
|
|
|
st.name is not null;
|
|
|
|
|
|
|
|
|
|
-- Replace the insert_host_catalog_subtype function defined in 0/20_host.up.sql
|
|
|
|
|
-- to include the name.
|
|
|
|
|
-- insert_host_catalog_subtype() is a before insert trigger
|
|
|
|
|
-- function for subtypes of host_catalog
|
2022-07-20 16:24:46 -07:00
|
|
|
-- Replaced in 44/02_hosts.up.sql
|
2022-08-08 18:17:57 -04:00
|
|
|
create or replace function insert_host_catalog_subtype() returns trigger
|
2021-09-08 10:06:38 -07:00
|
|
|
as $$
|
|
|
|
|
begin
|
|
|
|
|
insert into host_catalog
|
|
|
|
|
(public_id, scope_id, name)
|
|
|
|
|
values
|
|
|
|
|
(new.public_id, new.scope_id, new.name);
|
|
|
|
|
return new;
|
|
|
|
|
end;
|
|
|
|
|
$$ language plpgsql;
|
|
|
|
|
comment on function insert_host_catalog_subtype() is
|
|
|
|
|
'insert_host_catalog_subtype() inserts sub type name into the base type host catalog table';
|
|
|
|
|
|
|
|
|
|
-- Now that we are tracking the name, which is mutable, we need to also
|
|
|
|
|
-- update the base table when the subtype tables are updated.
|
|
|
|
|
-- update_host_catalog_subtype() is intended to be used as a before update
|
|
|
|
|
-- trigger for all host catalog sub types. The purpose is to ensure that the
|
|
|
|
|
-- base table for host catalog to contain the updated names for each host catalog
|
|
|
|
|
-- in order to enforce uniqueness across all host catalogs, regardless of subtype,
|
|
|
|
|
-- in a given scope.
|
2022-08-08 18:17:57 -04:00
|
|
|
create function update_host_catalog_subtype() returns trigger
|
2021-09-08 10:06:38 -07:00
|
|
|
as $$
|
|
|
|
|
begin
|
|
|
|
|
update host_catalog set name = new.name where public_id = new.public_id and new.name != name;
|
|
|
|
|
return new;
|
|
|
|
|
end;
|
|
|
|
|
$$ language plpgsql;
|
|
|
|
|
comment on function update_host_catalog_subtype() is
|
|
|
|
|
'update_host_catalog_subtype() will update base host catalog type name column with new values from sub type';
|
|
|
|
|
|
|
|
|
|
create trigger update_host_catalog_subtype before update on static_host_catalog
|
|
|
|
|
for each row execute procedure update_host_catalog_subtype();
|
|
|
|
|
|
|
|
|
|
commit;
|