#!/bin/sh # Copyright (C) 2019-2023 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). # shellcheck disable=SC2039 # SC2039: In POSIX sh, 'local' is undefined. # 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 test -f "@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=$(mysql_version "$@") if [ "$VERSION" != "8.1" ]; then printf 'This script upgrades 8.1 to 8.2. ' printf 'Reported version is %s. Skipping upgrade.\n' "${VERSION}" exit 0 fi # Get the schema name from database argument. We need this to # query information_schema for the right database. for arg in "${@}" do if ! printf '%s' "${arg}" | grep -Eq -- '^--' then schema="$arg" break fi done # Make sure we can id the schema if [ -z "$schema" ] then printf "Could not find database schema name in cmd line args: %s\n" "${*}" exit 255 fi # Save the command line args, as we use these later change_column function. # Function to rename a column in a table. change_column() { local schema="${1-}"; shift local table="${1-}"; shift local ocolumn="${1-}"; shift local ncolumn="${1-}"; shift # First let's find out if the column name in the table actually needs updating. sql="select count(column_name) from information_schema.columns where table_schema='$schema' and table_name = '$table' and column_name = '$ocolumn'" if ! count=$(mysql -N -B "${@}" -e "${sql}") then printf 'change_column: schema query failed [%s]\n' "${sql}" exit 255 fi # If we found a match record, the column needs to be renamed if [ "$count" -eq 1 ] then sql="ALTER TABLE $table CHANGE COLUMN $ocolumn $ncolumn" if ! mysql -N -B "${@}" -e "${sql}" then printf 'change_column: alter query failed [%s]\n' "${sql}" exit 255 fi else printf '%s column is already correct\n' "${table}" fi } mysql "$@" <