From a88c24e747a62b1f4b736bb5b1841930fc22b12c Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Wed, 30 May 2018 07:18:48 +0400 Subject: [PATCH] sqlmig: ajout de l'option --connect --- sqlmig | 97 +++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 76 insertions(+), 21 deletions(-) diff --git a/sqlmig b/sqlmig index 684b1bd..8aab7c8 100755 --- a/sqlmig +++ b/sqlmig @@ -103,6 +103,9 @@ OPTIONS -e, --export DESTUPDATEDIR Exporter les définitions de bases de données et mises à jour du répertoire courant vers le répertoire DESTUPDATEDIR + -c, --connect + Se connecter avec le client natif (mysql ou sqlplus) sur la base de + données courante. --update-all Mettre à jour la base de données. C'est l'option par défaut -t, --updatedir UPDATEDIR @@ -278,6 +281,29 @@ function ensure_dbmode() { fi } +function set_dbdirs() { + if [ -n "$dbdir" ]; then + dbdirs=("$dbdir") + elif [ -z "$updatedir" ]; then + array_lsfiles files . "*.sql" + if [ ${#files[*]} -gt 0 ]; then + enote "Autosélection répertoire courant" + dbdir="$cwd" + dbdirs=("$dbdir") + else + die "Vous devez spécifier l'option -b" + fi + elif [ -n "$dbname" ]; then + dbdirs=("$updatedir/$dbname") + else + array_lsdirs dbdirs "$updatedir" + fi + + if [ -n "$dbname" -a ${#dbdirs[*]} -gt 1 ]; then + die "Avec l'option -n, une seule base de données doit être spécifiée" + fi +} + ################################################################################ # MySQL @@ -892,6 +918,7 @@ args=( --oracle type=oracle -0,--init action=init -e:,--export: '$action=export; set@ exportdir' + -c,--connect action=connect --update-all action=update -t:,--updatedir: updatedir= -d:,--databasedir: dbdir= @@ -1074,6 +1101,54 @@ elif [ "$action" == export ]; then exit 0 +################################################################################ +elif [ "$action" == connect ]; then + set_dbdirs + + force_dbname="$dbname" + force_suffix="$suffix" + for dbdir in "${dbdirs[@]}"; do + dbname="$force_dbname" + [ -n "$dbname" ] || setx dbname=basename "$dbdir" + suffix="$force_suffix" + etitle "$dbname" + + ensure_dbtype "$dbdir" "$type" + ensure_dbmode "$dbtype" "$mode" + + if [ "$dbtype" == mysql ]; then + # construire les paramètres pour mysql + mysql_set_userargs "$dbdir" "$dbname" + mysql_set_mysqlargs + + if [ -n "$suffix" ]; then + estepi "Suffixe: $dbname --> $dbname$suffix" + dbname="$dbname$suffix" + fi + + array_del mysqlargs -B # désactiver le mode batch + mysql "${userargs[@]}" "${mysqlargs[@]}" -D "$dbname" + + elif [ "$dbtype" == oracle ]; then + # lire les paramètres + oracle_source_userconf "$dbdir" "$dbname" + oracle_ensure_opdir + + if [ -n "$suffix" ]; then + estepi "Suffixe: $dbname --> $dbname$suffix" + dbname="$dbname$suffix" + fi + + sqlplus "$USERCONNECT@$ORACLE_SID" ${USERDBA:+as sysdba} "$@" + + else + die "BUG: $dbtype: type non implémenté" + fi + + eend + done + exit 0 + ################################################################################ elif [ "$action" != update ]; then die "BUG: $action: action non implémentée" @@ -1082,27 +1157,7 @@ fi ################################################################################ # update -if [ -n "$dbdir" ]; then - dbdirs=("$dbdir") -elif [ -z "$updatedir" ]; then - array_lsfiles files . "*.sql" - if [ ${#files[*]} -gt 0 ]; then - enote "Autosélection répertoire courant" - dbdir="$cwd" - dbdirs=("$dbdir") - else - die "Vous devez spécifier l'option -b" - fi -elif [ -n "$dbname" ]; then - dbdirs=("$updatedir/$dbname") -else - array_lsdirs dbdirs "$updatedir" -fi - -if [ -n "$dbname" -a ${#dbdirs[*]} -gt 1 ]; then - die "Avec l'option -n, une seule base de données doit être spécifiée" -fi - +set_dbdirs [ -n "$updatefile" ] && setx updatefile=abspath "$updatefile" # répertoire temporaire pour Oracle