--
-- 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;
--
--
-- 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,
--
-- 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;
--
--
-- 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,
--
-- 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,
--
-- 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;
--
--
-- 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,
--
-- 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
--
-- 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
--
-- 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
--
-- 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
--
-- 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
--
-- 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
--
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,
--
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,
-- 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 $$
-- 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
-- - 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
-- 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;$$;
-- - 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
-- - 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
-- 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 $$
-- 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)
-- 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
-- - 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
-- 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;$$;
-- - 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
-- - 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
-- 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 $$
-- - 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,
-- - 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,
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;
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;
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();
-- 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 \$\$
-- 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
-- - 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
-- 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;\$\$;
-- - 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
-- - 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
-- 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 \$\$
-- 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)
-- 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
-- - 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
-- 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;\$\$;
-- - 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
-- - 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
-- 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 \$\$
-- - 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,
-- - 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,