summaryrefslogtreecommitdiffstats
path: root/src/share/database/scripts/pgsql/upgrade_006.0_to_006.1.sh.in
diff options
context:
space:
mode:
Diffstat (limited to 'src/share/database/scripts/pgsql/upgrade_006.0_to_006.1.sh.in')
-rw-r--r--src/share/database/scripts/pgsql/upgrade_006.0_to_006.1.sh.in139
1 files changed, 139 insertions, 0 deletions
diff --git a/src/share/database/scripts/pgsql/upgrade_006.0_to_006.1.sh.in b/src/share/database/scripts/pgsql/upgrade_006.0_to_006.1.sh.in
new file mode 100644
index 0000000..b036c52
--- /dev/null
+++ b/src/share/database/scripts/pgsql/upgrade_006.0_to_006.1.sh.in
@@ -0,0 +1,139 @@
+#!/bin/sh
+
+# Copyright (C) 2020-2022 Internet Systems Consortium, Inc. ("ISC")
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+# shellcheck disable=SC1091
+# SC1091: Not following: ... was not specified as input (see shellcheck -x).
+
+# Exit with error if commands exit with non-zero and if undefined variables are
+# used.
+set -eu
+
+# shellcheck disable=SC2034
+# SC2034: ... appears unused. Verify use (or export if used externally).
+prefix="@prefix@"
+
+# 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
+
+VERSION=$(pgsql_version "$@")
+
+if [ "$VERSION" != "6.0" ]; then
+ printf 'This script upgrades 6.0 to 6.1. '
+ printf 'Reported version is %s. Skipping upgrade.\n' "${VERSION}"
+ exit 0
+fi
+
+psql "$@" >/dev/null <<EOF
+
+START TRANSACTION;
+
+-- Fix v4 update trigger procedure
+CREATE OR REPLACE FUNCTION proc_stat_lease4_update () RETURNS trigger AS \$stat_lease4_update\$
+BEGIN
+ IF OLD.subnet_id != NEW.subnet_id OR OLD.state != NEW.state THEN
+ IF OLD.state < 2 THEN
+ -- Decrement the old state count if record exists
+ UPDATE lease4_stat SET leases = GREATEST(leases - 1, 0)
+ WHERE subnet_id = OLD.subnet_id AND state = OLD.state;
+ END IF;
+
+ IF NEW.state < 2 THEN
+ -- Increment the new state count if record exists
+ UPDATE lease4_stat SET leases = leases + 1
+ WHERE subnet_id = NEW.subnet_id AND state = NEW.state;
+
+ -- Insert new state record if it does not exist
+ IF NOT FOUND THEN
+ INSERT INTO lease4_stat VALUES (NEW.subnet_id, NEW.state, 1);
+ END IF;
+ END IF;
+ END IF;
+
+ -- Return is ignored since this is an after insert
+ RETURN NULL;
+END;
+\$stat_lease4_update\$ LANGUAGE plpgsql;
+
+--
+-- Fix the v4 delete trigger procedure
+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
+ UPDATE lease4_stat SET leases = GREATEST(leases - 1, 0)
+ WHERE subnet_id = OLD.subnet_id AND OLD.state = state;
+ END IF;
+
+ -- Return is ignored since this is an after insert
+ RETURN NULL;
+END;
+\$stat_lease4_delete\$ LANGUAGE plpgsql;
+
+--
+-- Fix v6 update trigger procedure
+CREATE OR REPLACE FUNCTION proc_stat_lease6_update () RETURNS trigger AS \$stat_lease6_update\$
+BEGIN
+ IF OLD.subnet_id != NEW.subnet_id OR
+ OLD.lease_type != NEW.lease_type OR
+ OLD.state != NEW.state THEN
+ IF OLD.state < 2 THEN
+ -- Decrement the old state count if record exists
+ UPDATE lease6_stat SET leases = GREATEST(leases - 1, 0)
+ WHERE subnet_id = OLD.subnet_id AND lease_type = OLD.lease_type
+ AND state = OLD.state;
+ END IF;
+
+ IF NEW.state < 2 THEN
+ -- Increment the new state count if record exists
+ UPDATE lease6_stat SET leases = leases + 1
+ WHERE subnet_id = NEW.subnet_id AND lease_type = NEW.lease_type
+ AND state = NEW.state;
+
+ -- Insert new state record if it does not exist
+ IF NOT FOUND THEN
+ INSERT INTO lease6_stat VALUES (NEW.subnet_id, NEW.lease_type, NEW.state, 1);
+ END IF;
+ END IF;
+ END IF;
+
+ -- Return is ignored since this is an after insert
+ RETURN NULL;
+END;
+\$stat_lease6_update\$ LANGUAGE plpgsql;
+
+--
+-- Fix the v6 delete trigger procedure
+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
+ UPDATE lease6_stat SET leases = GREATEST(leases - 1, 0)
+ WHERE subnet_id = OLD.subnet_id AND lease_type = OLD.lease_type
+ AND OLD.state = state;
+ END IF;
+
+ -- Return is ignored since this is an after insert
+ RETURN NULL;
+END;
+\$stat_lease6_delete\$ LANGUAGE plpgsql;
+
+-- Set 6.1 schema version.
+UPDATE schema_version
+ SET version = '6', minor = '1';
+
+-- Schema 6.1 specification ends here.
+
+-- Commit the script transaction
+COMMIT;
+
+EOF