From: Thomas Markwalder Date: Tue, 2 Nov 2021 15:06:57 +0000 (-0400) Subject: [#2166] create-drop fixes and 9.2 compatibility X-Git-Tag: eng-drop-2021-11-10~20 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c6bbd461cb3f2f3e7663d69a7a32f3a24a188031;p=thirdparty%2Fkea.git [#2166] create-drop fixes and 9.2 compatibility src/share/database/scripts/pgsql/dhcpdb_create.pgsql src/share/database/scripts/pgsql/upgrade_6.2_to_7.0.sh.in added "OR REPLACE" to function creates made all TIMESTAMP elements "WITH TIME ZONE" replaced use of ON CONFLICT src/share/database/scripts/pgsql/dhcpdb_drop.pgsql Added arguments to function drops. Posgresql requires argument lists to match to drop a function. --- diff --git a/src/share/database/scripts/pgsql/dhcpdb_create.pgsql b/src/share/database/scripts/pgsql/dhcpdb_create.pgsql index 3f2c4cc90a..d832b1f77e 100644 --- a/src/share/database/scripts/pgsql/dhcpdb_create.pgsql +++ b/src/share/database/scripts/pgsql/dhcpdb_create.pgsql @@ -140,7 +140,7 @@ ALTER TABLE lease6 -- -- FUNCTION that returns a result set containing the column names for lease4 dumps. DROP FUNCTION IF EXISTS lease4DumpHeader(); -CREATE FUNCTION lease4DumpHeader() RETURNS text AS $$ +CREATE OR REPLACE FUNCTION lease4DumpHeader() RETURNS text AS $$ select cast('address,hwaddr,client_id,valid_lifetime,expire,subnet_id,fqdn_fwd,fqdn_rev,hostname,state' as text) as result; $$ LANGUAGE SQL; -- @@ -148,7 +148,7 @@ $$ LANGUAGE SQL; -- -- FUNCTION that returns a result set containing the data for lease4 dumps. DROP FUNCTION IF EXISTS lease4DumpData(); -CREATE FUNCTION lease4DumpData() RETURNS +CREATE OR REPLACE FUNCTION lease4DumpData() RETURNS table (address inet, hwaddr text, client_id text, @@ -178,7 +178,7 @@ $$ LANGUAGE SQL; -- -- FUNCTION that returns a result set containing the column names for lease6 dumps. DROP FUNCTION IF EXISTS lease6DumpHeader(); -CREATE FUNCTION lease6DumpHeader() RETURNS text AS $$ +CREATE OR REPLACE FUNCTION lease6DumpHeader() RETURNS text AS $$ select cast('address,duid,valid_lifetime,expire,subnet_id,pref_lifetime,lease_type,iaid,prefix_len,fqdn_fwd,fqdn_rev,hostname,state' as text) as result; $$ LANGUAGE SQL; -- @@ -186,7 +186,7 @@ $$ LANGUAGE SQL; -- -- FUNCTION that returns a result set containing the data for lease6 dumps. DROP FUNCTION IF EXISTS lease6DumpData(); -CREATE FUNCTION lease6DumpData() RETURNS +CREATE OR REPLACE FUNCTION lease6DumpData() RETURNS TABLE ( address text, duid text, @@ -382,7 +382,7 @@ INSERT INTO lease_hwaddr_source VALUES (128, 'HWADDR_SOURCE_DOCSIS_MODEM'); -- -- FUNCTION that returns a result set containing the data for lease4 dumps. DROP FUNCTION IF EXISTS lease4DumpData(); -CREATE FUNCTION lease4DumpData() RETURNS +CREATE OR REPLACE FUNCTION lease4DumpData() RETURNS table (address inet, hwaddr text, client_id text, @@ -419,7 +419,7 @@ ALTER TABLE lease6 -- -- FUNCTION that returns a result set containing the column names for lease6 dumps. DROP FUNCTION IF EXISTS lease6DumpHeader(); -CREATE FUNCTION lease6DumpHeader() RETURNS text AS $$ +CREATE OR REPLACE FUNCTION lease6DumpHeader() RETURNS text AS $$ select cast('address,duid,valid_lifetime,expire,subnet_id,pref_lifetime,lease_type,iaid,prefix_len,fqdn_fwd,fqdn_rev,hostname,state,hwaddr,hwtype,hwaddr_source' as text) as result; $$ LANGUAGE SQL; -- @@ -427,7 +427,7 @@ $$ LANGUAGE SQL; -- -- FUNCTION that returns a result set containing the data for lease6 dumps. DROP FUNCTION IF EXISTS lease6DumpData(); -CREATE FUNCTION lease6DumpData() RETURNS +CREATE OR REPLACE FUNCTION lease6DumpData() RETURNS TABLE ( address text, duid text, @@ -580,7 +580,7 @@ CREATE TABLE lease4_stat ( -- -- Create v4 insert trigger procedure -CREATE FUNCTION proc_stat_lease4_insert () RETURNS trigger AS $stat_lease4_insert$ +CREATE OR REPLACE FUNCTION proc_stat_lease4_insert () RETURNS trigger AS $stat_lease4_insert$ BEGIN IF NEW.state < 2 THEN UPDATE lease4_stat @@ -604,7 +604,7 @@ AFTER INSERT ON lease4 -- -- Create v4 update trigger procedure -CREATE FUNCTION proc_stat_lease4_update () RETURNS trigger AS $stat_lease4_update$ +CREATE OR REPLACE FUNCTION proc_stat_lease4_update () RETURNS trigger AS $stat_lease4_update$ BEGIN IF OLD.state != NEW.state THEN IF OLD.state < 2 THEN @@ -638,7 +638,7 @@ AFTER UPDATE ON lease4 -- -- Create the v4 delete trigger procedure -CREATE FUNCTION proc_stat_lease4_delete () RETURNS trigger AS $stat_lease4_delete$ +CREATE OR REPLACE FUNCTION proc_stat_lease4_delete () RETURNS trigger AS $stat_lease4_delete$ BEGIN IF OLD.state < 2 THEN -- Decrement the state count if record exists @@ -667,7 +667,7 @@ CREATE TABLE lease6_stat ( -- -- Create v6 insert trigger procedure -CREATE FUNCTION proc_stat_lease6_insert () RETURNS trigger AS $stat_lease6_insert$ +CREATE OR REPLACE FUNCTION proc_stat_lease6_insert () RETURNS trigger AS $stat_lease6_insert$ BEGIN IF NEW.state < 2 THEN UPDATE lease6_stat @@ -694,7 +694,7 @@ AFTER INSERT ON lease6 -- -- Create v6 update trigger procedure -CREATE FUNCTION proc_stat_lease6_update () RETURNS trigger AS $stat_lease6_update$ +CREATE OR REPLACE FUNCTION proc_stat_lease6_update () RETURNS trigger AS $stat_lease6_update$ BEGIN IF OLD.state != NEW.state THEN IF OLD.state < 2 THEN @@ -729,7 +729,7 @@ AFTER UPDATE ON lease6 -- -- Create the v6 delete trigger procedure -CREATE FUNCTION proc_stat_lease6_delete() RETURNS trigger AS $stat_lease6_delete$ +CREATE OR REPLACE FUNCTION proc_stat_lease6_delete() RETURNS trigger AS $stat_lease6_delete$ BEGIN IF OLD.state < 2 THEN -- Decrement the state count if record exists @@ -762,14 +762,14 @@ ALTER TABLE lease6 ADD COLUMN user_context TEXT; -- DROP FUNCTION IF EXISTS lease4DumpHeader(); -CREATE FUNCTION lease4DumpHeader() RETURNS text AS $$ +CREATE OR REPLACE FUNCTION lease4DumpHeader() RETURNS text AS $$ select cast('address,hwaddr,client_id,valid_lifetime,expire,subnet_id,fqdn_fwd,fqdn_rev,hostname,state,user_context' as text) as result; $$ LANGUAGE SQL; -- -- DROP FUNCTION IF EXISTS lease4DumpData(); -CREATE FUNCTION lease4DumpData() RETURNS +CREATE OR REPLACE FUNCTION lease4DumpData() RETURNS table (address inet, hwaddr text, client_id text, @@ -801,14 +801,14 @@ $$ LANGUAGE SQL; -- DROP FUNCTION IF EXISTS lease6DumpHeader(); -CREATE FUNCTION lease6DumpHeader() RETURNS text AS $$ +CREATE OR REPLACE FUNCTION lease6DumpHeader() RETURNS text AS $$ select cast('address,duid,valid_lifetime,expire,subnet_id,pref_lifetime,lease_type,iaid,prefix_len,fqdn_fwd,fqdn_rev,hostname,state,hwaddr,hwtype,hwaddr_source,user_context' as text) as result; $$ LANGUAGE SQL; -- -- DROP FUNCTION IF EXISTS lease6DumpData(); -CREATE FUNCTION lease6DumpData() RETURNS +CREATE OR REPLACE FUNCTION lease6DumpData() RETURNS TABLE ( address text, duid text, @@ -1747,10 +1747,10 @@ CREATE INDEX dhcp4_audit_idx2 ON dhcp4_audit (revision_id); -- unit tests. This avoids issues with revision_id -- being null. -- ----------------------------------------------------- -CREATE FUNCTION createAuditRevisionDHCP4(audit_ts TIMESTAMP, - server_tag VARCHAR(256), - audit_log_message TEXT, - cascade_transaction SMALLINT) +CREATE OR REPLACE FUNCTION createAuditRevisionDHCP4(audit_ts TIMESTAMP WITH TIME ZONE, + server_tag VARCHAR(256), + audit_log_message TEXT, + cascade_transaction SMALLINT) RETURNS VOID LANGUAGE plpgsql AS $$ @@ -1794,7 +1794,7 @@ END;$$; -- unit tests. This avoids issues with revision_id -- being null. -- ---------------------------------------------------- -CREATE FUNCTION createAuditEntryDHCP4(object_type_val VARCHAR(256), +CREATE OR REPLACE FUNCTION createAuditEntryDHCP4(object_type_val VARCHAR(256), object_id_val BIGINT, modification_type_val VARCHAR(32)) RETURNS VOID @@ -1895,7 +1895,7 @@ CREATE INDEX key_dhcp4_client_class_order_index on dhcp4_client_class_order (ord -- - old_follow_class_name previous name of the class after which this -- class was positioned within the class hierarchy. -- ----------------------------------------------------------------------- -CREATE FUNCTION setClientClass4Order(id BIGINT, +CREATE OR REPLACE FUNCTION setClientClass4Order(id BIGINT, follow_class_name VARCHAR(128), old_follow_class_name VARCHAR(128)) RETURNS VOID @@ -1987,12 +1987,17 @@ BEGIN -- whenever the dhcp4_client_class record is updated. Such update may include -- test expression changes impacting the dependency on KNOWN/UNKNOWN classes. -- This value will be later adjusted when dependencies are inserted. - -- TKM - note that ON CONFLICT requires PostgreSQL 9.5 or later. --- INSERT INTO dhcp4_client_class_order(class_id, order_index, depend_on_known_indirectly) --- VALUES (id, follow_class_index + 1, 0) --- ON CONFLICT(class_id) DO UPDATE --- SET order_index = excluded.order_index, --- depend_on_known_indirectly = excluded.depend_on_known_indirectly; + -- ON CONFLICT required 9.5 or later + UPDATE dhcp4_client_class_order + SET order_index = follow_class_index + 1, + depend_on_known_indirectly = depend_on_known_indirectly + WHERE class_id = id; + IF FOUND THEN + RETURN; + END IF; + + INSERT INTO dhcp4_client_class_order(class_id, order_index, depend_on_known_indirectly) + VALUES (id, follow_class_index + 1, 0); RETURN; END;$$; @@ -2093,7 +2098,7 @@ CREATE INDEX dhcp4_client_class_dependency_id_idx on dhcp4_client_class_dependen -- - class_id id client class, -- - dependency_id id of the dependency. -- ----------------------------------------------------------------------- -CREATE FUNCTION checkDHCPv4ClientClassDependency(class_id BIGINT, +CREATE OR REPLACE FUNCTION checkDHCPv4ClientClassDependency(class_id BIGINT, dependency_id BIGINT) RETURNS VOID LANGUAGE plpgsql @@ -2201,7 +2206,7 @@ CREATE TRIGGER dhcp4_client_class_check_dependency_BINS -- - client_class_id id of the client class which dependency is set, -- - dependency_id id of the client class on which the given class depends. -- ----------------------------------------------------------------------- -CREATE FUNCTION updateDHCPv4ClientClassKnownDependency(client_class_id BIGINT, +CREATE OR REPLACE FUNCTION updateDHCPv4ClientClassKnownDependency(client_class_id BIGINT, dependency_id BIGINT) RETURNS VOID LANGUAGE plpgsql @@ -2254,7 +2259,7 @@ CREATE TRIGGER dhcp4_client_class_dependency_AINS -- update. It signals an error if it has changed and there is at least -- one class depending on this class. -- ----------------------------------------------------------------------- -CREATE FUNCTION checkDHCPv4ClientClassKnownDependencyChange() +CREATE OR REPLACE FUNCTION checkDHCPv4ClientClassKnownDependencyChange() RETURNS VOID LANGUAGE plpgsql AS $$ @@ -2352,7 +2357,7 @@ CREATE INDEX fk_dhcp4_client_class_server_id ON dhcp4_client_class_server (serve -- unit tests. This avoids issues with revision_id -- being null. -- ----------------------------------------------------- -CREATE FUNCTION createAuditRevisionDHCP6(audit_ts TIMESTAMP, +CREATE OR REPLACE FUNCTION createAuditRevisionDHCP6(audit_ts TIMESTAMP WITH TIME ZONE, server_tag VARCHAR(256), audit_log_message TEXT, cascade_transaction SMALLINT) @@ -2399,7 +2404,7 @@ END;$$; -- unit tests. This avoids issues with revision_id -- being null. -- ---------------------------------------------------- -CREATE FUNCTION createAuditEntryDHCP6(object_type_val VARCHAR(256), +CREATE OR REPLACE FUNCTION createAuditEntryDHCP6(object_type_val VARCHAR(256), object_id_val BIGINT, modification_type_val VARCHAR(32)) RETURNS VOID @@ -2496,7 +2501,7 @@ CREATE INDEX key_dhcp6_client_class_order_index on dhcp6_client_class_order (ord -- - old_follow_class_name previous name of the class after which this -- class was positioned within the class hierarchy. -- ----------------------------------------------------------------------- -CREATE FUNCTION setClientClass6Order(id BIGINT, +CREATE OR REPLACE FUNCTION setClientClass6Order(id BIGINT, follow_class_name VARCHAR(128), old_follow_class_name VARCHAR(128)) RETURNS VOID @@ -2589,11 +2594,16 @@ BEGIN -- test expression changes impacting the dependency on KNOWN/UNKNOWN classes. -- This value will be later adjusted when dependencies are inserted. -- TKM - note that ON CONFLICT requires PostgreSQL 9.5 or later. + UPDATE dhcp6_client_class_order + SET order_index = follow_class_index + 1, + depend_on_known_indirectly = depend_on_known_indirectly + WHERE class_id = id; + IF FOUND THEN + RETURN; + END IF; + INSERT INTO dhcp6_client_class_order(class_id, order_index, depend_on_known_indirectly) - VALUES (id, follow_class_index + 1, 0) - ON CONFLICT(class_id) DO UPDATE - SET order_index = excluded.order_index, - depend_on_known_indirectly = excluded.depend_on_known_indirectly; + VALUES (id, follow_class_index + 1, 0); RETURN; END;$$; @@ -2693,7 +2703,7 @@ CREATE INDEX dhcp6_client_class_dependency_id_idx on dhcp6_client_class_dependen -- - class_id id client class, -- - dependency_id id of the dependency. -- ----------------------------------------------------------------------- -CREATE FUNCTION checkDHCPv6ClientClassDependency(class_id BIGINT, +CREATE OR REPLACE FUNCTION checkDHCPv6ClientClassDependency(class_id BIGINT, dependency_id BIGINT) RETURNS VOID LANGUAGE plpgsql @@ -2801,7 +2811,7 @@ CREATE TRIGGER dhcp6_client_class_check_dependency_BINS -- - client_class_id id of the client class which dependency is set, -- - dependency_id id of the client class on which the given class depends. -- ----------------------------------------------------------------------- -CREATE FUNCTION updateDHCPv6ClientClassKnownDependency(client_class_id BIGINT, +CREATE OR REPLACE FUNCTION updateDHCPv6ClientClassKnownDependency(client_class_id BIGINT, dependency_id BIGINT) RETURNS VOID LANGUAGE plpgsql @@ -2854,7 +2864,7 @@ CREATE TRIGGER dhcp6_client_class_dependency_AINS -- update. It signals an error if it has changed and there is at least -- one class depending on this class. -- ----------------------------------------------------------------------- -CREATE FUNCTION checkDHCPv6ClientClassKnownDependencyChange() +CREATE OR REPLACE FUNCTION checkDHCPv6ClientClassKnownDependencyChange() RETURNS VOID LANGUAGE plpgsql AS $$ @@ -3116,7 +3126,7 @@ CREATE TRIGGER dhcp4_option_def_ADEL -- - modification_ts: modification timestamp of the -- option. -- ----------------------------------------------------- -CREATE FUNCTION createOptionAuditDHCP4(modification_type VARCHAR, +CREATE OR REPLACE FUNCTION createOptionAuditDHCP4(modification_type VARCHAR, scope_id SMALLINT, option_id INT, subnet_id BIGINT, @@ -3377,7 +3387,7 @@ CREATE TRIGGER dhcp6_option_def_ADEL -- - modification_ts: modification timestamp of the -- option. -- ----------------------------------------------------- -CREATE FUNCTION createOptionAuditDHCP6(modification_type VARCHAR(32), +CREATE OR REPLACE FUNCTION createOptionAuditDHCP6(modification_type VARCHAR(32), scope_id SMALLINT, option_id INT, subnet_id BIGINT, diff --git a/src/share/database/scripts/pgsql/dhcpdb_drop.pgsql b/src/share/database/scripts/pgsql/dhcpdb_drop.pgsql index e6da977c9f..d15b458e5e 100644 --- a/src/share/database/scripts/pgsql/dhcpdb_drop.pgsql +++ b/src/share/database/scripts/pgsql/dhcpdb_drop.pgsql @@ -31,13 +31,20 @@ DROP FUNCTION IF EXISTS proc_stat_lease6_delete (); DROP TABLE IF EXISTS logs CASCADE; -- config backend procedures for DHCPv6 -DROP FUNCTION IF EXISTS createAuditRevisionDHCP6; -DROP FUNCTION IF EXISTS createAuditEntryDHCP6; -DROP FUNCTION IF EXISTS createOptionAuditDHCP6; -DROP FUNCTION IF EXISTS setClientClass6Order; -DROP FUNCTION IF EXISTS checkDHCPv6ClientClassDependency; -DROP FUNCTION IF EXISTS updateDHCPv6ClientClassKnownDependency; -DROP FUNCTION IF EXISTS checkDHCPv6ClientClassKnownDependencyChange; +DROP FUNCTION IF EXISTS createAuditRevisionDHCP6(audit_ts TIMESTAMP WITH TIME ZONE, server_tag VARCHAR(256), + audit_log_message TEXT, cascade_transaction SMALLINT); +DROP FUNCTION IF EXISTS createAuditEntryDHCP6(object_type_val VARCHAR(256), object_id_val BIGINT, + modification_type_val VARCHAR(32)); +DROP FUNCTION IF EXISTS createOptionAuditDHCP6(modification_type VARCHAR, scope_id SMALLINT, + option_id INT, subnet_id BIGINT, host_id INT, + network_name VARCHAR, pool_id BIGINT, pd_pool_id BIGINT, + modification_ts TIMESTAMP WITH TIME ZONE); +DROP FUNCTION IF EXISTS setClientClass6Order(id BIGINT, follow_class_name VARCHAR(128), + old_follow_class_name VARCHAR(128)); +DROP FUNCTION IF EXISTS checkDHCPv6ClientClassDependency(class_id BIGINT, dependency_id BIGINT); +DROP FUNCTION IF EXISTS updateDHCPv6ClientClassKnownDependency(client_class_id BIGINT, + dependency_id BIGINT); +DROP FUNCTION IF EXISTS checkDHCPv6ClientClassKnownDependencyChange(); -- config backend tables for DHCPv6 DROP TABLE IF EXISTS dhcp6_audit CASCADE; @@ -60,41 +67,48 @@ DROP TABLE IF EXISTS dhcp6_client_class_order CASCADE; DROP TABLE IF EXISTS dhcp6_client_class CASCADE; -- drop trigger functions for DHCPv6 -DROP FUNCTION IF EXISTS func_dhcp6_client_class_AINS; -DROP FUNCTION IF EXISTS func_dhcp6_client_class_AUPD; -DROP FUNCTION IF EXISTS func_dhcp6_client_class_ADEL; -DROP FUNCTION IF EXISTS func_dhcp6_client_class_check_dependency_BINS; -DROP FUNCTION IF EXISTS func_dhcp6_client_class_dependency_AINS; -DROP FUNCTION IF EXISTS func_dhcp6_pool_BDEL; -DROP FUNCTION IF EXISTS func_dhcp6_global_parameter_AINS; -DROP FUNCTION IF EXISTS func_dhcp6_global_parameter_AUPD; -DROP FUNCTION IF EXISTS func_dhcp6_global_parameter_ADEL; -DROP FUNCTION IF EXISTS func_dhcp6_subnet_AINS; -DROP FUNCTION IF EXISTS func_dhcp6_subnet_AUPD; -DROP FUNCTION IF EXISTS func_dhcp6_shared_network_AINS; -DROP FUNCTION IF EXISTS func_dhcp6_shared_network_AUPD; -DROP FUNCTION IF EXISTS func_dhcp6_shared_network_ADEL; -DROP FUNCTION IF EXISTS func_dhcp6_option_def_AINS; -DROP FUNCTION IF EXISTS func_dhcp6_option_def_AUPD; -DROP FUNCTION IF EXISTS func_dhcp6_option_def_ADEL; -DROP FUNCTION IF EXISTS func_dhcp6_options_AINS; -DROP FUNCTION IF EXISTS func_dhcp6_options_AUPD; -DROP FUNCTION IF EXISTS func_dhcp6_options_ADEL; -DROP FUNCTION IF EXISTS func_dhcp6_server_AINS; -DROP FUNCTION IF EXISTS func_dhcp6_server_AUPD; -DROP FUNCTION IF EXISTS func_dhcp6_server_ADEL; -DROP FUNCTION IF EXISTS func_dhcp6_shared_network_BDEL; -DROP FUNCTION IF EXISTS func_dhcp6_subnet_BDEL; -DROP FUNCTION IF EXISTS func_dhcp6_pd_pool_BDEL; +DROP FUNCTION IF EXISTS func_dhcp6_client_class_AINS(); +DROP FUNCTION IF EXISTS func_dhcp6_client_class_AUPD(); +DROP FUNCTION IF EXISTS func_dhcp6_client_class_ADEL(); +DROP FUNCTION IF EXISTS func_dhcp6_client_class_check_dependency_BINS(); +DROP FUNCTION IF EXISTS func_dhcp6_client_class_dependency_AINS(); +DROP FUNCTION IF EXISTS func_dhcp6_pool_BDEL(); +DROP FUNCTION IF EXISTS func_dhcp6_global_parameter_AINS(); +DROP FUNCTION IF EXISTS func_dhcp6_global_parameter_AUPD(); +DROP FUNCTION IF EXISTS func_dhcp6_global_parameter_ADEL(); +DROP FUNCTION IF EXISTS func_dhcp6_subnet_AINS(); +DROP FUNCTION IF EXISTS func_dhcp6_subnet_AUPD(); +DROP FUNCTION IF EXISTS func_dhcp6_shared_network_AINS(); +DROP FUNCTION IF EXISTS func_dhcp6_shared_network_AUPD(); +DROP FUNCTION IF EXISTS func_dhcp6_shared_network_ADEL(); +DROP FUNCTION IF EXISTS func_dhcp6_option_def_AINS(); +DROP FUNCTION IF EXISTS func_dhcp6_option_def_AUPD(); +DROP FUNCTION IF EXISTS func_dhcp6_option_def_ADEL(); +DROP FUNCTION IF EXISTS func_dhcp6_options_AINS(); +DROP FUNCTION IF EXISTS func_dhcp6_options_AUPD(); +DROP FUNCTION IF EXISTS func_dhcp6_options_ADEL(); +DROP FUNCTION IF EXISTS func_dhcp6_server_AINS(); +DROP FUNCTION IF EXISTS func_dhcp6_server_AUPD(); +DROP FUNCTION IF EXISTS func_dhcp6_server_ADEL(); +DROP FUNCTION IF EXISTS func_dhcp6_shared_network_BDEL(); +DROP FUNCTION IF EXISTS func_dhcp6_subnet_BDEL(); +DROP FUNCTION IF EXISTS func_dhcp6_pd_pool_BDEL(); -- config backend procedures for DHCPv4 -DROP FUNCTION IF EXISTS createAuditRevisionDHCP4; -DROP FUNCTION IF EXISTS createAuditEntryDHCP4; -DROP FUNCTION IF EXISTS createOptionAuditDHCP4; -DROP FUNCTION IF EXISTS setClientClass4Order; -DROP FUNCTION IF EXISTS checkDHCPv4ClientClassDependency; -DROP FUNCTION IF EXISTS updateDHCPv4ClientClassKnownDependency; -DROP FUNCTION IF EXISTS checkDHCPv4ClientClassKnownDependencyChange; +DROP FUNCTION IF EXISTS createAuditRevisionDHCP4(audit_ts TIMESTAMP WITH TIME ZONE, server_tag VARCHAR(256), + audit_log_message TEXT, cascade_transaction SMALLINT); +DROP FUNCTION IF EXISTS createAuditEntryDHCP4(object_type_val VARCHAR(256), object_id_val BIGINT, + modification_type_val VARCHAR(32)); +DROP FUNCTION IF EXISTS createOptionAuditDHCP4(modification_type VARCHAR, scope_id SMALLINT, + option_id INT, subnet_id BIGINT, host_id INT, + network_name VARCHAR, pool_id BIGINT, + modification_ts TIMESTAMP WITH TIME ZONE); +DROP FUNCTION IF EXISTS setClientClass4Order(id BIGINT, follow_class_name VARCHAR(128), + old_follow_class_name VARCHAR(128)); +DROP FUNCTION IF EXISTS checkDHCPv4ClientClassDependency(class_id BIGINT, dependency_id BIGINT); +DROP FUNCTION IF EXISTS updateDHCPv4ClientClassKnownDependency(client_class_id BIGINT, + dependency_id BIGINT); +DROP FUNCTION IF EXISTS checkDHCPv4ClientClassKnownDependencyChange(); -- config backend tables for DHCPv4 DROP TABLE IF EXISTS dhcp4_audit CASCADE; @@ -117,35 +131,35 @@ DROP TABLE IF EXISTS dhcp4_client_class_order CASCADE; DROP TABLE IF EXISTS dhcp4_client_class CASCADE; -- drop trigger functions for DHCPv4 -DROP FUNCTION IF EXISTS func_dhcp4_client_class_AINS; -DROP FUNCTION IF EXISTS func_dhcp4_client_class_AUPD; -DROP FUNCTION IF EXISTS func_dhcp4_client_class_ADEL; -DROP FUNCTION IF EXISTS func_dhcp4_client_class_check_dependency_BINS; -DROP FUNCTION IF EXISTS func_dhcp4_client_class_dependency_AINS; -DROP FUNCTION IF EXISTS func_dhcp4_pool_BDEL; -DROP FUNCTION IF EXISTS func_dhcp4_global_parameter_AINS; -DROP FUNCTION IF EXISTS func_dhcp4_global_parameter_AUPD; -DROP FUNCTION IF EXISTS func_dhcp4_global_parameter_ADEL; -DROP FUNCTION IF EXISTS func_dhcp4_subnet_AINS; -DROP FUNCTION IF EXISTS func_dhcp4_subnet_AUPD; -DROP FUNCTION IF EXISTS func_dhcp4_shared_network_AINS; -DROP FUNCTION IF EXISTS func_dhcp4_shared_network_AUPD; -DROP FUNCTION IF EXISTS func_dhcp4_shared_network_ADEL; -DROP FUNCTION IF EXISTS func_dhcp4_option_def_AINS; -DROP FUNCTION IF EXISTS func_dhcp4_option_def_AUPD; -DROP FUNCTION IF EXISTS func_dhcp4_option_def_ADEL; -DROP FUNCTION IF EXISTS func_dhcp4_options_AINS; -DROP FUNCTION IF EXISTS func_dhcp4_options_AUPD; -DROP FUNCTION IF EXISTS func_dhcp4_options_ADEL; -DROP FUNCTION IF EXISTS func_dhcp4_server_AINS; -DROP FUNCTION IF EXISTS func_dhcp4_server_AUPD; -DROP FUNCTION IF EXISTS func_dhcp4_server_ADEL; -DROP FUNCTION IF EXISTS func_dhcp4_shared_network_BDEL; -DROP FUNCTION IF EXISTS func_dhcp4_subnet_BDEL; +DROP FUNCTION IF EXISTS func_dhcp4_client_class_AINS(); +DROP FUNCTION IF EXISTS func_dhcp4_client_class_AUPD(); +DROP FUNCTION IF EXISTS func_dhcp4_client_class_ADEL(); +DROP FUNCTION IF EXISTS func_dhcp4_client_class_check_dependency_BINS(); +DROP FUNCTION IF EXISTS func_dhcp4_client_class_dependency_AINS(); +DROP FUNCTION IF EXISTS func_dhcp4_pool_BDEL(); +DROP FUNCTION IF EXISTS func_dhcp4_global_parameter_AINS(); +DROP FUNCTION IF EXISTS func_dhcp4_global_parameter_AUPD(); +DROP FUNCTION IF EXISTS func_dhcp4_global_parameter_ADEL(); +DROP FUNCTION IF EXISTS func_dhcp4_subnet_AINS(); +DROP FUNCTION IF EXISTS func_dhcp4_subnet_AUPD(); +DROP FUNCTION IF EXISTS func_dhcp4_shared_network_AINS(); +DROP FUNCTION IF EXISTS func_dhcp4_shared_network_AUPD(); +DROP FUNCTION IF EXISTS func_dhcp4_shared_network_ADEL(); +DROP FUNCTION IF EXISTS func_dhcp4_option_def_AINS(); +DROP FUNCTION IF EXISTS func_dhcp4_option_def_AUPD(); +DROP FUNCTION IF EXISTS func_dhcp4_option_def_ADEL(); +DROP FUNCTION IF EXISTS func_dhcp4_options_AINS(); +DROP FUNCTION IF EXISTS func_dhcp4_options_AUPD(); +DROP FUNCTION IF EXISTS func_dhcp4_options_ADEL(); +DROP FUNCTION IF EXISTS func_dhcp4_server_AINS(); +DROP FUNCTION IF EXISTS func_dhcp4_server_AUPD(); +DROP FUNCTION IF EXISTS func_dhcp4_server_ADEL(); +DROP FUNCTION IF EXISTS func_dhcp4_shared_network_BDEL(); +DROP FUNCTION IF EXISTS func_dhcp4_subnet_BDEL(); -- common tables for config backend DROP TABLE IF EXISTS modification CASCADE; DROP TABLE IF EXISTS parameter_data_type CASCADE; DROP TABLE IF EXISTS ddns_replace_client_name_types CASCADE; -DROP FUNCTION IF EXISTS modification_ts_update; +DROP FUNCTION IF EXISTS modification_ts_update(); diff --git a/src/share/database/scripts/pgsql/upgrade_6.2_to_7.0.sh.in b/src/share/database/scripts/pgsql/upgrade_6.2_to_7.0.sh.in index 4461368e94..c49a317aa8 100644 --- a/src/share/database/scripts/pgsql/upgrade_6.2_to_7.0.sh.in +++ b/src/share/database/scripts/pgsql/upgrade_6.2_to_7.0.sh.in @@ -753,10 +753,10 @@ CREATE INDEX dhcp4_audit_idx2 ON dhcp4_audit (revision_id); -- unit tests. This avoids issues with revision_id -- being null. -- ----------------------------------------------------- -CREATE FUNCTION createAuditRevisionDHCP4(audit_ts TIMESTAMP, - server_tag VARCHAR(256), - audit_log_message TEXT, - cascade_transaction SMALLINT) +CREATE OR REPLACE FUNCTION createAuditRevisionDHCP4(audit_ts TIMESTAMP WITH TIME ZONE, + server_tag VARCHAR(256), + audit_log_message TEXT, + cascade_transaction SMALLINT) RETURNS VOID LANGUAGE plpgsql AS \$\$ @@ -800,7 +800,7 @@ END;\$\$; -- unit tests. This avoids issues with revision_id -- being null. -- ---------------------------------------------------- -CREATE FUNCTION createAuditEntryDHCP4(object_type_val VARCHAR(256), +CREATE OR REPLACE FUNCTION createAuditEntryDHCP4(object_type_val VARCHAR(256), object_id_val BIGINT, modification_type_val VARCHAR(32)) RETURNS VOID @@ -901,7 +901,7 @@ CREATE INDEX key_dhcp4_client_class_order_index on dhcp4_client_class_order (ord -- - old_follow_class_name previous name of the class after which this -- class was positioned within the class hierarchy. -- ----------------------------------------------------------------------- -CREATE FUNCTION setClientClass4Order(id BIGINT, +CREATE OR REPLACE FUNCTION setClientClass4Order(id BIGINT, follow_class_name VARCHAR(128), old_follow_class_name VARCHAR(128)) RETURNS VOID @@ -993,12 +993,17 @@ BEGIN -- whenever the dhcp4_client_class record is updated. Such update may include -- test expression changes impacting the dependency on KNOWN/UNKNOWN classes. -- This value will be later adjusted when dependencies are inserted. - -- TKM - note that ON CONFLICT requires PostgreSQL 9.5 or later. --- INSERT INTO dhcp4_client_class_order(class_id, order_index, depend_on_known_indirectly) --- VALUES (id, follow_class_index + 1, 0) --- ON CONFLICT(class_id) DO UPDATE --- SET order_index = excluded.order_index, --- depend_on_known_indirectly = excluded.depend_on_known_indirectly; + -- ON CONFLICT required 9.5 or later + UPDATE dhcp4_client_class_order + SET order_index = follow_class_index + 1, + depend_on_known_indirectly = depend_on_known_indirectly + WHERE class_id = id; + IF FOUND THEN + RETURN; + END IF; + + INSERT INTO dhcp4_client_class_order(class_id, order_index, depend_on_known_indirectly) + VALUES (id, follow_class_index + 1, 0); RETURN; END;\$\$; @@ -1099,7 +1104,7 @@ CREATE INDEX dhcp4_client_class_dependency_id_idx on dhcp4_client_class_dependen -- - class_id id client class, -- - dependency_id id of the dependency. -- ----------------------------------------------------------------------- -CREATE FUNCTION checkDHCPv4ClientClassDependency(class_id BIGINT, +CREATE OR REPLACE FUNCTION checkDHCPv4ClientClassDependency(class_id BIGINT, dependency_id BIGINT) RETURNS VOID LANGUAGE plpgsql @@ -1207,7 +1212,7 @@ CREATE TRIGGER dhcp4_client_class_check_dependency_BINS -- - client_class_id id of the client class which dependency is set, -- - dependency_id id of the client class on which the given class depends. -- ----------------------------------------------------------------------- -CREATE FUNCTION updateDHCPv4ClientClassKnownDependency(client_class_id BIGINT, +CREATE OR REPLACE FUNCTION updateDHCPv4ClientClassKnownDependency(client_class_id BIGINT, dependency_id BIGINT) RETURNS VOID LANGUAGE plpgsql @@ -1260,7 +1265,7 @@ CREATE TRIGGER dhcp4_client_class_dependency_AINS -- update. It signals an error if it has changed and there is at least -- one class depending on this class. -- ----------------------------------------------------------------------- -CREATE FUNCTION checkDHCPv4ClientClassKnownDependencyChange() +CREATE OR REPLACE FUNCTION checkDHCPv4ClientClassKnownDependencyChange() RETURNS VOID LANGUAGE plpgsql AS \$\$ @@ -1358,7 +1363,7 @@ CREATE INDEX fk_dhcp4_client_class_server_id ON dhcp4_client_class_server (serve -- unit tests. This avoids issues with revision_id -- being null. -- ----------------------------------------------------- -CREATE FUNCTION createAuditRevisionDHCP6(audit_ts TIMESTAMP, +CREATE OR REPLACE FUNCTION createAuditRevisionDHCP6(audit_ts TIMESTAMP WITH TIME ZONE, server_tag VARCHAR(256), audit_log_message TEXT, cascade_transaction SMALLINT) @@ -1405,7 +1410,7 @@ END;\$\$; -- unit tests. This avoids issues with revision_id -- being null. -- ---------------------------------------------------- -CREATE FUNCTION createAuditEntryDHCP6(object_type_val VARCHAR(256), +CREATE OR REPLACE FUNCTION createAuditEntryDHCP6(object_type_val VARCHAR(256), object_id_val BIGINT, modification_type_val VARCHAR(32)) RETURNS VOID @@ -1502,7 +1507,7 @@ CREATE INDEX key_dhcp6_client_class_order_index on dhcp6_client_class_order (ord -- - old_follow_class_name previous name of the class after which this -- class was positioned within the class hierarchy. -- ----------------------------------------------------------------------- -CREATE FUNCTION setClientClass6Order(id BIGINT, +CREATE OR REPLACE FUNCTION setClientClass6Order(id BIGINT, follow_class_name VARCHAR(128), old_follow_class_name VARCHAR(128)) RETURNS VOID @@ -1595,11 +1600,16 @@ BEGIN -- test expression changes impacting the dependency on KNOWN/UNKNOWN classes. -- This value will be later adjusted when dependencies are inserted. -- TKM - note that ON CONFLICT requires PostgreSQL 9.5 or later. + UPDATE dhcp6_client_class_order + SET order_index = follow_class_index + 1, + depend_on_known_indirectly = depend_on_known_indirectly + WHERE class_id = id; + IF FOUND THEN + RETURN; + END IF; + INSERT INTO dhcp6_client_class_order(class_id, order_index, depend_on_known_indirectly) - VALUES (id, follow_class_index + 1, 0) - ON CONFLICT(class_id) DO UPDATE - SET order_index = excluded.order_index, - depend_on_known_indirectly = excluded.depend_on_known_indirectly; + VALUES (id, follow_class_index + 1, 0); RETURN; END;\$\$; @@ -1699,7 +1709,7 @@ CREATE INDEX dhcp6_client_class_dependency_id_idx on dhcp6_client_class_dependen -- - class_id id client class, -- - dependency_id id of the dependency. -- ----------------------------------------------------------------------- -CREATE FUNCTION checkDHCPv6ClientClassDependency(class_id BIGINT, +CREATE OR REPLACE FUNCTION checkDHCPv6ClientClassDependency(class_id BIGINT, dependency_id BIGINT) RETURNS VOID LANGUAGE plpgsql @@ -1807,7 +1817,7 @@ CREATE TRIGGER dhcp6_client_class_check_dependency_BINS -- - client_class_id id of the client class which dependency is set, -- - dependency_id id of the client class on which the given class depends. -- ----------------------------------------------------------------------- -CREATE FUNCTION updateDHCPv6ClientClassKnownDependency(client_class_id BIGINT, +CREATE OR REPLACE FUNCTION updateDHCPv6ClientClassKnownDependency(client_class_id BIGINT, dependency_id BIGINT) RETURNS VOID LANGUAGE plpgsql @@ -1860,7 +1870,7 @@ CREATE TRIGGER dhcp6_client_class_dependency_AINS -- update. It signals an error if it has changed and there is at least -- one class depending on this class. -- ----------------------------------------------------------------------- -CREATE FUNCTION checkDHCPv6ClientClassKnownDependencyChange() +CREATE OR REPLACE FUNCTION checkDHCPv6ClientClassKnownDependencyChange() RETURNS VOID LANGUAGE plpgsql AS \$\$ @@ -2122,7 +2132,7 @@ CREATE TRIGGER dhcp4_option_def_ADEL -- - modification_ts: modification timestamp of the -- option. -- ----------------------------------------------------- -CREATE FUNCTION createOptionAuditDHCP4(modification_type VARCHAR, +CREATE OR REPLACE FUNCTION createOptionAuditDHCP4(modification_type VARCHAR, scope_id SMALLINT, option_id INT, subnet_id BIGINT, @@ -2383,7 +2393,7 @@ CREATE TRIGGER dhcp6_option_def_ADEL -- - modification_ts: modification timestamp of the -- option. -- ----------------------------------------------------- -CREATE FUNCTION createOptionAuditDHCP6(modification_type VARCHAR(32), +CREATE OR REPLACE FUNCTION createOptionAuditDHCP6(modification_type VARCHAR(32), scope_id SMALLINT, option_id INT, subnet_id BIGINT,