sqlmig: ajout de l'option --connect

This commit is contained in:
Jephté Clain 2018-05-30 07:18:48 +04:00
parent bad6c4811a
commit a88c24e747
1 changed files with 76 additions and 21 deletions

97
sqlmig
View File

@ -103,6 +103,9 @@ OPTIONS
-e, --export DESTUPDATEDIR -e, --export DESTUPDATEDIR
Exporter les définitions de bases de données et mises à jour du Exporter les définitions de bases de données et mises à jour du
répertoire courant vers le répertoire DESTUPDATEDIR 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 --update-all
Mettre à jour la base de données. C'est l'option par défaut Mettre à jour la base de données. C'est l'option par défaut
-t, --updatedir UPDATEDIR -t, --updatedir UPDATEDIR
@ -278,6 +281,29 @@ function ensure_dbmode() {
fi 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 # MySQL
@ -892,6 +918,7 @@ args=(
--oracle type=oracle --oracle type=oracle
-0,--init action=init -0,--init action=init
-e:,--export: '$action=export; set@ exportdir' -e:,--export: '$action=export; set@ exportdir'
-c,--connect action=connect
--update-all action=update --update-all action=update
-t:,--updatedir: updatedir= -t:,--updatedir: updatedir=
-d:,--databasedir: dbdir= -d:,--databasedir: dbdir=
@ -1074,6 +1101,54 @@ elif [ "$action" == export ]; then
exit 0 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 elif [ "$action" != update ]; then
die "BUG: $action: action non implémentée" die "BUG: $action: action non implémentée"
@ -1082,27 +1157,7 @@ fi
################################################################################ ################################################################################
# update # update
if [ -n "$dbdir" ]; then set_dbdirs
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
[ -n "$updatefile" ] && setx updatefile=abspath "$updatefile" [ -n "$updatefile" ] && setx updatefile=abspath "$updatefile"
# répertoire temporaire pour Oracle # répertoire temporaire pour Oracle