From: Tomek Mrugalski Date: Fri, 15 May 2015 18:03:26 +0000 (+0200) Subject: [3567] Applied updated patch by Adam X-Git-Tag: trac3513_base~3^2 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=17f639468f052cb29af309d16cd35fca50949502;p=thirdparty%2Fkea.git [3567] Applied updated patch by Adam - upgrade 2.0 to 3.0 script added - added unit-tests - dhcpdb_create.mysql script now uses the same database --- diff --git a/configure.ac b/configure.ac index af9811a895..03fc0584f5 100644 --- a/configure.ac +++ b/configure.ac @@ -1439,6 +1439,7 @@ AC_CONFIG_FILES([compatcheck/Makefile src/bin/admin/tests/mysql_tests.sh src/bin/admin/scripts/mysql/Makefile src/bin/admin/scripts/mysql/upgrade_1.0_to_2.0.sh + src/bin/admin/scripts/mysql/upgrade_2.0_to_3.0.sh src/bin/admin/scripts/pgsql/Makefile src/hooks/Makefile src/hooks/dhcp/Makefile diff --git a/src/bin/admin/scripts/mysql/Makefile.am b/src/bin/admin/scripts/mysql/Makefile.am index 7c24017b70..419474510f 100644 --- a/src/bin/admin/scripts/mysql/Makefile.am +++ b/src/bin/admin/scripts/mysql/Makefile.am @@ -1,6 +1,6 @@ SUBDIRS = . sqlscriptsdir = ${datarootdir}/${PACKAGE_NAME}/scripts/mysql -sqlscripts_DATA = dhcpdb_create.mysql upgrade_1.0_to_2.0.sh +sqlscripts_DATA = dhcpdb_create.mysql upgrade_1.0_to_2.0.sh upgrade_2.0_to_3.0.sh -EXTRA_DIST = dhcpdb_create.mysql upgrade_1.0_to_2.0.sh +EXTRA_DIST = dhcpdb_create.mysql upgrade_1.0_to_2.0.sh upgrade_2.0_to_3.0.sh diff --git a/src/bin/admin/scripts/mysql/dhcpdb_create.mysql b/src/bin/admin/scripts/mysql/dhcpdb_create.mysql index ad9164f651..fd7b42b7f8 100644 --- a/src/bin/admin/scripts/mysql/dhcpdb_create.mysql +++ b/src/bin/admin/scripts/mysql/dhcpdb_create.mysql @@ -166,121 +166,88 @@ UPDATE schema_version SET version="2", minor="0"; # This line starts database upgrade to version 3.0. # Upgrade extending MySQL schema with the ability to store hosts. -SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; -SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; -SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; - -CREATE SCHEMA IF NOT EXISTS `kea_host_reservation` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ; -USE `kea_host_reservation` ; - +CREATE TABLE IF NOT EXISTS hosts ( + host_id INT UNSIGNED NOT NULL AUTO_INCREMENT, + dhcp_identifier VARBINARY(128) NOT NULL, + dhcp_identifier_type TINYINT NOT NULL, + dhcp4_subnet_id INT UNSIGNED NULL, + dhcp6_subnet_id INT UNSIGNED NULL, + ipv4_address INT UNSIGNED NULL, + hostname VARCHAR(255) NULL, + dhcp4_client_classes VARCHAR(255) NULL, + dhcp6_client_classes VARCHAR(255) NULL, + PRIMARY KEY (host_id), + INDEX key_dhcp4_identifier_subnet_id (dhcp_identifier ASC , dhcp_identifier_type ASC), + INDEX key_dhcp6_identifier_subnet_id (dhcp_identifier ASC , dhcp_identifier_type ASC , dhcp6_subnet_id ASC) +) ENGINE=INNODB; -- ----------------------------------------------------- --- Table `kea_host_reservation`.`hosts` +-- Table `ipv6_reservations` -- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `kea_host_reservation`.`hosts` ( - `host_id` INT UNSIGNED NOT NULL AUTO_INCREMENT , - `dhcp_identifier` VARBINARY(128) NOT NULL , - `dhcp_identifier_type` TINYINT NOT NULL , - `dhcp4_subnet_id` INT UNSIGNED NULL , - `dhcp6_subnet_id` INT UNSIGNED NULL , - `ipv4_address` INT UNSIGNED NULL , - `hostname` VARCHAR(255) NULL , - `dhcp4_cllient_classes` VARCHAR(255) NULL , - `dhcp6_client_classes` VARCHAR(255) NULL , - PRIMARY KEY (`host_id`) , - INDEX `key_dhcp4_identifier_subnet_id` (`dhcp_identifier` ASC, `dhcp_identifier_type` ASC) , - INDEX `key_dhcp6_identifier_subnet_id` (`dhcp_identifier` ASC, `dhcp_identifier_type` ASC, `dhcp6_subnet_id` ASC) ) -ENGINE = InnoDB; - +CREATE TABLE IF NOT EXISTS ipv6_reservations ( + reservation_id INT NOT NULL AUTO_INCREMENT, + address VARCHAR(39) NOT NULL, + prefix_len TINYINT(3) UNSIGNED NOT NULL DEFAULT 128, + type TINYINT(4) UNSIGNED NOT NULL DEFAULT 0, + dhcp6_iaid INT UNSIGNED NULL, + host_id INT UNSIGNED NOT NULL, + PRIMARY KEY (reservation_id), + INDEX fk_ipv6_reservations_host_idx (host_id ASC), + CONSTRAINT fk_ipv6_reservations_Host FOREIGN KEY (host_id) + REFERENCES hosts (host_id) + ON DELETE NO ACTION ON UPDATE NO ACTION +) ENGINE=INNODB; -- ----------------------------------------------------- --- Table `kea_host_reservation`.`ipv6_reservations` +-- Table `dhcp4_options` -- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `kea_host_reservation`.`ipv6_reservations` ( - `reservation_id` INT NOT NULL AUTO_INCREMENT , - `address` VARCHAR(39) NOT NULL , - `prefix_len` TINYINT(3) UNSIGNED NOT NULL DEFAULT 128 , - `type` TINYINT(4) UNSIGNED NOT NULL DEFAULT 0 , - `dhcp6_iaid` INT UNSIGNED NULL , - `host_id` INT UNSIGNED NOT NULL , - PRIMARY KEY (`reservation_id`) , - INDEX `fk_ipv6_reservations_host_idx` (`host_id` ASC) , - CONSTRAINT `fk_ipv6_reservations_Host` - FOREIGN KEY (`host_id` ) - REFERENCES `kea_host_reservation`.`hosts` (`host_id` ) - ON DELETE NO ACTION - ON UPDATE NO ACTION) -ENGINE = InnoDB; - - --- ----------------------------------------------------- --- Table `kea_host_reservation`.`dhcp4_options` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `kea_host_reservation`.`dhcp4_options` ( - `option_id` INT UNSIGNED NOT NULL AUTO_INCREMENT , - `code` TINYINT UNSIGNED NOT NULL , - `value` BLOB NULL , - `formatted_value` TEXT NULL , - `space` VARCHAR(128) NULL , - `persistent` TINYINT(1) NOT NULL DEFAULT 0 , - `dhcp_client_class` VARCHAR(128) NULL , - `dhcp4_subnet_id` INT NULL , - `host_id` INT UNSIGNED NULL , - PRIMARY KEY (`option_id`) , - UNIQUE INDEX `option_id_UNIQUE` (`option_id` ASC) , - INDEX `fk_options_host1_idx` (`host_id` ASC) , - CONSTRAINT `fk_options_host1` - FOREIGN KEY (`host_id` ) - REFERENCES `kea_host_reservation`.`hosts` (`host_id` ) - ON DELETE NO ACTION - ON UPDATE NO ACTION) -ENGINE = InnoDB; - - +CREATE TABLE IF NOT EXISTS dhcp4_options ( + option_id INT UNSIGNED NOT NULL AUTO_INCREMENT, + code TINYINT UNSIGNED NOT NULL, + value BLOB NULL, + formatted_value TEXT NULL, + space VARCHAR(128) NULL, + persistent TINYINT(1) NOT NULL DEFAULT 0, + dhcp_client_class VARCHAR(128) NULL, + dhcp4_subnet_id INT NULL, + host_id INT UNSIGNED NULL, + PRIMARY KEY (option_id), + UNIQUE INDEX option_id_UNIQUE (option_id ASC), + INDEX fk_options_host1_idx (host_id ASC), + CONSTRAINT fk_options_host1 FOREIGN KEY (host_id) + REFERENCES hosts (host_id) + ON DELETE NO ACTION ON UPDATE NO ACTION +) ENGINE=INNODB; -- ----------------------------------------------------- --- Table `kea_host_reservation`.`dhcp6_options` +-- Table `dhcp6_options` -- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `kea_host_reservation`.`dhcp6_options` ( - `option_id` INT UNSIGNED NOT NULL AUTO_INCREMENT , - `code` INT UNSIGNED NOT NULL , - `value` BLOB NULL , - `formatted_value` TEXT NULL , - `space` VARCHAR(128) NULL , - `persistent` TINYINT(1) NOT NULL DEFAULT 0 , - `dhcp_client_class` VARCHAR(128) NULL , - `dhcp6_subnet_id` INT NULL , - `host_id` INT UNSIGNED NULL , - PRIMARY KEY (`option_id`) , - UNIQUE INDEX `option_id_UNIQUE` (`option_id` ASC) , - INDEX `fk_options_host1_idx` (`host_id` ASC) , - CONSTRAINT `fk_options_host10` - FOREIGN KEY (`host_id` ) - REFERENCES `kea_host_reservation`.`hosts` (`host_id` ) - ON DELETE NO ACTION - ON UPDATE NO ACTION) -ENGINE = InnoDB; - -USE `kea_host_reservation` ; -USE `kea_host_reservation`; +CREATE TABLE IF NOT EXISTS dhcp6_options ( + option_id INT UNSIGNED NOT NULL AUTO_INCREMENT, + code INT UNSIGNED NOT NULL, + value BLOB NULL, + formatted_value TEXT NULL, + space VARCHAR(128) NULL, + persistent TINYINT(1) NOT NULL DEFAULT 0, + dhcp_client_class VARCHAR(128) NULL, + dhcp6_subnet_id INT NULL, + host_id INT UNSIGNED NULL, + PRIMARY KEY (option_id), + UNIQUE INDEX option_id_UNIQUE (option_id ASC), + INDEX fk_options_host1_idx (host_id ASC), + CONSTRAINT fk_options_host10 FOREIGN KEY (host_id) + REFERENCES hosts (host_id) + ON DELETE NO ACTION ON UPDATE NO ACTION +) ENGINE=INNODB; DELIMITER $$ -USE `kea_host_reservation`$$ - - -CREATE TRIGGER `host_BDEL` BEFORE DELETE ON hosts FOR EACH ROW +CREATE TRIGGER host_BDEL BEFORE DELETE ON hosts FOR EACH ROW -- Edit trigger body code below this line. Do not edit lines above this one BEGIN -DELETE FROM `ipv6_reservations` WHERE `ipv6_reservations`.host_id = OLD.host_id; +DELETE FROM ipv6_reservations WHERE ipv6_reservations.host_id = OLD.host_id; END $$ - - DELIMITER ; - -SET SQL_MODE=@OLD_SQL_MODE; -SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; -SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; - - +UPDATE schema_version +SET version = '3', minor = '0'; # This line concludes database upgrade to version 3.0. # Notes: diff --git a/src/bin/admin/scripts/mysql/upgrade_2.0_to_3.0.sh.in b/src/bin/admin/scripts/mysql/upgrade_2.0_to_3.0.sh.in new file mode 100755 index 0000000000..9d275ef1b2 --- /dev/null +++ b/src/bin/admin/scripts/mysql/upgrade_2.0_to_3.0.sh.in @@ -0,0 +1,101 @@ +#!/bin/sh + +# Include utilities. Use installed version if available and +# use build version if it isn't. +if [ -e @datarootdir@/@PACKAGE_NAME@/scripts/admin-utils.sh ]; then + . @datarootdir@/@PACKAGE_NAME@/scripts/admin-utils.sh +else + . @abs_top_builddir@/src/bin/admin/admin-utils.sh +fi + +mysql_version "$@" +VERSION=$_RESULT + +if [ "$VERSION" != "2.0" ]; then + printf "This script upgrades 2.0 to 3.0. Reported version is $VERSION. Skipping upgrade.\n" + exit 0 +fi + +mysql "$@" </dev/null 2>&1 </dev/null 2>&1 </dev/null 2>&1 </dev/null 2>&1 </dev/null 2>&1 < 2.0) mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 < 2.0) mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 < 3.0) + mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 < 3.0) + mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 < 3.0) + mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 < 3.0) + mysql -u$db_user -p$db_pass $db_name >/dev/null 2>&1 <