From a70a230aaffdc3c64aedfc47f20c0c4f0cd838ad Mon Sep 17 00:00:00 2001 From: Marcin Siodelski Date: Mon, 20 Sep 2021 11:51:34 +0200 Subject: [PATCH] [#2094] Updated MySQL migration 12 The dhcp_client_class values are set to NULL when the options do not belong to a class. --- src/bin/admin/tests/mysql_tests.sh.in | 12 ++++++++++++ src/share/database/scripts/mysql/dhcpdb_create.mysql | 11 +++++++++++ .../database/scripts/mysql/upgrade_011_to_012.sh.in | 11 +++++++++++ 3 files changed, 34 insertions(+) diff --git a/src/bin/admin/tests/mysql_tests.sh.in b/src/bin/admin/tests/mysql_tests.sh.in index 12af0615fa..b8c02b8f0c 100644 --- a/src/bin/admin/tests/mysql_tests.sh.in +++ b/src/bin/admin/tests/mysql_tests.sh.in @@ -1727,6 +1727,18 @@ mysql_client_class_test() { ON c.id = o.class_id WHERE c.name = 'foo'"; run_statement "#get order index of class foo" "$sql" 1 + sql=\ +"SET @disable_audit = 1; \ + INSERT INTO ${table_prefix}_options(code, scope_id, dhcp_client_class, modification_ts) \ + VALUES (222, 0, '', now()); \ + SET @disable_audit = 0;" + run_statement "add option with an empty dhcp_client class" "$sql" + + # Let's make sure that we can upgrade to version 12.0. This version + # introduces a foreign key between dhcpX_client_class and dhcpX_options + # table. The migration should set the dhcp_client_class to NULL. + mysql_upgrade_schema_to_version 12.0 + # Let's wipe the whole database mysql_wipe diff --git a/src/share/database/scripts/mysql/dhcpdb_create.mysql b/src/share/database/scripts/mysql/dhcpdb_create.mysql index a56b95279a..c92e903cf7 100644 --- a/src/share/database/scripts/mysql/dhcpdb_create.mysql +++ b/src/share/database/scripts/mysql/dhcpdb_create.mysql @@ -4046,6 +4046,17 @@ UPDATE schema_version # This line concludes database upgrade to version 11. +# Ensure that dhcp_client_class is NULL when an option does not +# belong to any client class. Later, we will add foreign keys for +# the dhcp_client_class columns, and it requires that the columns +# are NULL when there are no corresponding client classes. +SET @disable_audit = 1; +UPDATE dhcp4_options SET dhcp_client_class = NULL + WHERE scope_id <> 2; +UPDATE dhcp6_options SET dhcp_client_class = NULL + WHERE scope_id <> 2; +SET @disable_audit = 0; + # Add a foreign keys referencing a client classes. If an option is # associated with a client class, the option will be deleted # along with the deleted client class. diff --git a/src/share/database/scripts/mysql/upgrade_011_to_012.sh.in b/src/share/database/scripts/mysql/upgrade_011_to_012.sh.in index f24f6192fb..c4142b2a17 100644 --- a/src/share/database/scripts/mysql/upgrade_011_to_012.sh.in +++ b/src/share/database/scripts/mysql/upgrade_011_to_012.sh.in @@ -53,6 +53,17 @@ fi mysql "$@" < 2; +UPDATE dhcp6_options SET dhcp_client_class = NULL + WHERE scope_id <> 2; +SET @disable_audit = 0; + -- Add a foreign keys referencing a client classes. If an option is -- associated with a client class, the option will be deleted -- along with the deleted client class.