diff --git a/config.defaults b/config.defaults index a07b908e6e3be610a7f2cc9d33c1979c641f30bd..bd669cb2cc724a74e3dd81fc708a96dfdd6a4ebe 100644 --- a/config.defaults +++ b/config.defaults @@ -55,6 +55,3 @@ DATABASE_USER_PW=random1234 # wildcard for all hosts, so `192.168.0.%` permits logins from the local # network. DATABASE_USER_HOST_LIST=localhost, - -# path to utility scripts -UTILSPATH=`realpath "utils"` diff --git a/make_db b/make_db index bb92bfc5c84d43e12a33cfb33e831636a121bf30..0ff45370344474b05600f4990973450f200fd30e 100755 --- a/make_db +++ b/make_db @@ -24,21 +24,18 @@ INSTALL_SQL_FILE="db_2_0.sql" -source utils/load_settings.sh -source .config || true +if [ -z "$UTILSPATH" ]; then + UTILSPATH="$(realpath $(dirname $0))/utils" + export UTILSPATH +fi -# To fail fast, but beware https://mywiki.wooledge.org/BashFAQ/105 -set -e +source $UTILSPATH/load_settings.sh +source $UTILSPATH/helpers.sh -if [ -z $LOGIN_PATH ] ; then - MYSQL_CONNECTION="--host=${MYSQL_HOST} --port=${MYSQL_PORT} - --user=${MYSQL_USER} - --password=${MYSQL_USER_PASSWORD}" -else - MYSQL_CONNECTION="--login-path=$LOGIN_PATH" -fi +echo "no1 $MYSQL_HOST" +INSTALL_SQL_FILE="db_2_0.sql" -SQL="$MYSQL_CMD $MYSQL_CONNECTION" +set -e function fail() { echo "Some error occured, exiting." @@ -66,7 +63,7 @@ function _execute_tests () { for tfile in $TESTS ; do echo "Running $tfile" echo "----- $tfile -----" >> .TEST_RESULTS - cat $tfile | $SQL --disable-pager --batch --raw --skip-column-names --unbuffered >> .TEST_RESULTS + cat $tfile | $MYSQL_CMD $(get_con_args_nodb) --disable-pager --batch --raw --skip-column-names --unbuffered >> .TEST_RESULTS done; popd @@ -87,7 +84,7 @@ function _install_unit_test_database () { fi fi - sed "s/db_2_0/$DATABASE_NAME/g" "$INSTALL_SQL_FILE" | $SQL + sed "s/db_2_0/$DATABASE_NAME/g" "$INSTALL_SQL_FILE" | $MYSQL_CMD $(get_con_args_nodb) # crate test user grant @@ -111,7 +108,7 @@ function _setup_mytap() { pushd libs > /dev/null unzip -u mytap*.zip > /dev/null pushd mytap*/ > /dev/null - $SQL < mytap.sql > /dev/null || exit 1 + $MYSQL_CMD $(get_con_args_nodb) < mytap.sql > /dev/null || exit 1 popd > /dev/null rm -r mytap*/ popd > /dev/null @@ -146,17 +143,18 @@ Call 'make drop-$DATABASE_NAME' to delete that database or reconfigure with exit 0 fi - sed "s/db_2_0/$DATABASE_NAME/g" "$INSTALL_SQL_FILE" | $SQL + sed "s/db_2_0/$DATABASE_NAME/g" "$INSTALL_SQL_FILE" | $MYSQL_CMD $(get_con_args_nodb) } # Inserts the dump (arg 1) into the database function restore_db() { SQL_FILE="$1" - $SQL -D "$DATABASE_NAME" < "$SQL_FILE" + $MYSQL_CMD $(get_con_args) < "$SQL_FILE" } function test-connection() { - $SQL -e "select 0;" + echo $SQL + $MYSQL_CMD $(get_con_args_nodb) -e "select 0;" } # Creates a user and grants it sufficient rights. @@ -180,7 +178,7 @@ function grant() { if [[ "$1" == "--strict" ]] ; then for host in ${DATABASE_USER_HOST_LIST//,/ } ; do CMD="SELECT COUNT(*) FROM mysql.user WHERE user='${DATABASE_USER}' AND host='${host}';" - [[ $($SQL -s -N -e "$CMD") == 0 ]] || { + [[ $($MYSQL_CMD $(get_con_args_nodb) -s -N -e "$CMD") == 0 ]] || { echo "The user '${DATABASE_USER}@${host}' is already in the database." echo "Please use another user or delete it, e.g. with" echo "'mysql -u ${MYSQL_USER} -p -e \"DROP USER ${DATABASE_USER}@${host};\"'" @@ -191,7 +189,7 @@ function grant() { for host in ${DATABASE_USER_HOST_LIST//,/ } ; do echo "Granting admin privileges to '$DATABASE_USER'@'$host'" - $SQL <<EOF + $MYSQL_CMD $(get_con_args_nodb) <<EOF CREATE USER IF NOT EXISTS '$DATABASE_USER'@'$host' identified by '$DATABASE_USER_PW'; GRANT USAGE ON *.* TO '$DATABASE_USER'@'$host'; @@ -206,16 +204,16 @@ EOF function drop() { DROPDB="$1" for host in ${DATABASE_USER_HOST_LIST//,/ } ; do - $SQL -e "DROP USER '${DATABASE_USER}'@'${host}';" || true + $MYSQL_CMD $(get_con_args_nodb) -e "DROP USER '${DATABASE_USER}'@'${host}';" || true done - "$MYSQLADMIN_CMD" $MYSQL_CONNECTION -f drop "$DROPDB" + "$MYSQLADMIN_CMD" $(get_con_args_nodb) -f drop "$DROPDB" } # Returns 0 or non-zero, depending on whether the database exists already. # Optional parameter: [DATABASE_NAME], else $DATABASE_NAME is used. function _db_exists() { - $SQL -D "${1-${DATABASE_NAME}}" -e "show tables;" > /dev/null 2>&1 \ + $MYSQL_CMD $(get_con_args_nodb) -D "${1-${DATABASE_NAME}}" -e "show tables;" > /dev/null 2>&1 \ && return 0 || return 1 } diff --git a/makefile b/makefile index f08e739d464c274f6c23138dc73a8383895d90ca..50b685817f62e8a42b45ca9f4ed2f5a9ed4c8c13 100644 --- a/makefile +++ b/makefile @@ -22,15 +22,16 @@ # SHELL=/bin/bash -include .config - INSTALL_SQL_FILE=db_2_0.sql -ifdef LOGIN_PATH - M_MYSQL_CONNECTION=--login-path=$(M_LOGIN_PATH) -else - MYSQL_CONNECTION=--host="$(MYSQL_HOST)" --port="$(MYSQL_PORT)" \ - --user="$(MYSQL_USER)" --password="$(MYSQL_USER_PASSWORD)" -endif + + +# TODO can this be removed? +#ifdef LOGIN_PATH +# M_MYSQL_CONNECTION=--login-path=$(M_LOGIN_PATH) +#else +# MYSQL_CONNECTION=--host="$(MYSQL_HOST)" --port="$(MYSQL_PORT)" \ +# --user="$(MYSQL_USER)" --password="$(MYSQL_USER_PASSWORD)" +#endif .PHONY: test-connection test-connection: diff --git a/patches/patch20151022-0/patch.sh b/patches/patch20151022-0/patch.sh index 7952afe1badf709095cb29e0df43091c31df433c..43bc753f0248725212c312d3a8ef59ba78bdcd46 100755 --- a/patches/patch20151022-0/patch.sh +++ b/patches/patch20151022-0/patch.sh @@ -35,7 +35,7 @@ fi check_version $OLD_VERSION function addIdx { - $MYSQL_CMD $MYSQL_CONNECTION -D $DATABASE -e "ALTER TABLE $1 ADD COLUMN pidx TINYINT UNSIGNED NOT NULL DEFAULT 0;" + $MYSQL_CMD $(get_con_args) -e "ALTER TABLE $1 ADD COLUMN pidx TINYINT UNSIGNED NOT NULL DEFAULT 0;" } addIdx "reference_data" diff --git a/utils/backup.sh b/utils/backup.sh index d041d57c60c3af3718eb7281200e14390ab5ccb7..64455cf976cf8b9fb59ecd28eb7516d17a207b80 100755 --- a/utils/backup.sh +++ b/utils/backup.sh @@ -75,7 +75,7 @@ function backup() { failure "dumpfile already exists." fi echo "Dumping database $NARG_NAME to $NARG_FILE ... " - $MYSQLDUMP_CMD $MYSQL_CONNECTION_NO_DB $* --opt --default-character-set=utf8 --routines \ + $MYSQLDUMP_CMD $(get_con_args_no_db) $* --opt --default-character-set=utf8 --routines \ "$NARG_NAME" > "$NARG_FILE" if [[ "$YAML" == "true" ]] ; then diff --git a/utils/helpers.sh b/utils/helpers.sh index ff937508ac079520af18a3cc8fcee7633d22f495..cbe6d23c63b13defd4b3b5b01f4c2f8813509eb6 100644 --- a/utils/helpers.sh +++ b/utils/helpers.sh @@ -19,14 +19,14 @@ # along with this program. If not, see <https://www.gnu.org/licenses/>. function dump_table { - $MYSQLDUMP_CMD $MYSQL_CONNECTION_NO_DB $DATABASE_NAME $1 \ + $MYSQLDUMP_CMD $(get_con_args_nodb) $DATABASE_NAME $1 \ > ${DATABASE_NAME}.${1}.${OLD_VERSION}.dump.sql } function mysql_execute { set +e - echo $MYSQL_CMD $MYSQL_CONNECTION -e "$1" - $MYSQL_CMD $MYSQL_CONNECTION -e "$1" + echo $MYSQL_CMD $(get_con_args) -e "$1" + $MYSQL_CMD $(get_con_args) -e "$1" ret=${PIPESTATUS[0]} if [ "$ret" -ne 0 ]; then failure "MYSQL ERROR" @@ -34,8 +34,32 @@ function mysql_execute { set -e } +function get_con_args { + echo "$(get_con_args_nodb) --database=$DATABASE_NAME" +} + +function get_con_args_nodb { + if [ "$LOGIN_PATH" ]; then + mysql_con_arguments="--login-path=$LOGIN_PATH" + mysql_con_arguments="$mysql_con_arguments" + else + if [ "$DATABASE_USER" ]; then + mysql_con_arguments="--user=$DATABASE_USER" + fi + if [ "$DATABASE_USER_PW" ]; then + mysql_con_arguments="$mysql_con_arguments --password=$DATABASE_USER_PW" + fi + if [[ "$MYSQL_HOST" && ( "$MYSQL_HOST" != "localhost" ) ]]; then + mysql_con_arguments="$mysql_con_arguments --host=$MYSQL_HOST" + if [ "$MYSQL_PORT" ]; then + mysql_con_arguments="$mysql_con_arguments --port=$MYSQL_PORT" + fi + fi + fi + echo $mysql_con_arguments +} function redo_table { - $MYSQL_CMD $MYSQL_CONNECTION < ${DATABASE_NAME}.${1}.${OLD_VERSION}.dump.sql + $MYSQL_CMD $(get_con_args) < ${DATABASE_NAME}.${1}.${OLD_VERSION}.dump.sql } function success { diff --git a/utils/load_settings.sh b/utils/load_settings.sh index 2feaeb4926d770c1a3b0e15b8429b2760d4ec245..4c36b37b13eca940b0602d49fdd38820b7195996 100644 --- a/utils/load_settings.sh +++ b/utils/load_settings.sh @@ -22,42 +22,15 @@ [[ -n ".config" ]] && source ".config" [[ -n "$ENV_FILE" ]] && source "$ENV_FILE" -if [[ -z "$DATABASE_NAME" && -z "$MYSQL_CONNECTION" ]] -then - echo "A database or a mysql connection need to be set via the corresponding" \ - "environment variables." - exit 1 -fi - -if [ "$LOGIN_PATH" ]; then - MYSQL_CONNECTION="--login-path=$LOGIN_PATH" - MYSQL_CONNECTION_NO_DB="$MYSQL_CONNECTION" - MYSQL_CONNECTION="$MYSQL_CONNECTION --database=$DATABASE_NAME" - -elif [[ -z "$MYSQL_CONNECTION" ]]; then - MYSQL_CONNECTION="" - if [ "$DATABASE_USER" ] - then - MYSQL_CONNECTION="--user=$DATABASE_USER" - fi - if [ "$DATABASE_USER_PW" ] - then - MYSQL_CONNECTION="$MYSQL_CONNECTION --password=$DATABASE_USER_PW" - fi - if [[ "$MYSQL_HOST" && ( "$MYSQL_HOST" != "localhost" ) ]]; then - MYSQL_CONNECTION="$MYSQL_CONNECTION --host=$MYSQL_HOST" - if [ "$MYSQL_PORT" ]; then - MYSQL_CONNECTION="$MYSQL_CONNECTION --port=$MYSQL_PORT" - fi - fi - # This option should come last, so we also have one version without the database - MYSQL_CONNECTION_NO_DB="$MYSQL_CONNECTION" - MYSQL_CONNECTION="$MYSQL_CONNECTION --database=$DATABASE_NAME" -fi - export MYSQL_CMD export MYSQLDUMP_CMD -export MYSQL_CONNECTION -export MYSQL_CONNECTION_NO_DB +export MYSQLADMIN_CMD +export MYSQL_CONFIG_EDITOR_CMD +export MYSQL_HOST +export MYSQL_PORT +export MYSQL_USER export DATABASE_NAME +export DATABASE_USER +export DATABASE_USER_PW +export DATABASE_USER_HOST_LIST export UTILSPATH diff --git a/utils/patch_header.sh b/utils/patch_header.sh index 5a4039fed68b6d03db1c4bc9019644767c556c45..c0ce98ffceb5d4452b9ff5edd727ca647d9dfbf9 100644 --- a/utils/patch_header.sh +++ b/utils/patch_header.sh @@ -25,6 +25,7 @@ # load useful functions ####################################################### . $UTILSPATH/helpers.sh +echo $(get_con_args) USAGE="$1 [ --env=ENV_FILE ] [ --patch=PATCH ] [ --backupdir=BACKUPDIR ]\n\n" CMD_OPTIONS=$(cat <<EOF @@ -110,7 +111,7 @@ fi # @param $1: db version string, e.g. v2.0.0 # @return: 0 on success, 1 on failure function check_version { - local version=$($MYSQL_CMD $MYSQL_CONNECTION -B -e "Select CaosDBVersion();") + local version=$($MYSQL_CMD $(get_con_args) -B -e "Select CaosDBVersion();") if [[ "$(echo $version | sed 's/^CaosDBVersion()\s//')" = "$1" ]]; then return 0 fi