sqlmig: mode fake pour afficher les opérations qui doivent être faites

This commit is contained in:
Jephté Clain 2018-05-11 11:13:33 +04:00
parent e0d6910271
commit 6a6b2a5f32
1 changed files with 36 additions and 6 deletions

42
sqlmig
View File

@ -100,7 +100,7 @@ OPTIONS
répertoire courant vers le répertoire DESTUPDATEDIR
-u, --update
Mettre à jour la base de données. C'est l'option par défaut
-b, --updatedir UPDATEDIR
-t, --updatedir UPDATEDIR
Spécifier le répertoire qui contient les répertoires de mises à jour
pour chaque base de données.
-d, --databasedir DATABASEDIR
@ -109,12 +109,14 @@ OPTIONS
déterminé à partir du nom du répertoire. Si cette option n'est pas
spécifiée, tous les répertoires de base de données de UPDATEDIR sont
considérés.
-n, --database DATABASE
-b, --database DATABASE
Spécifier le nom de la base de données. En principe le nom de la base de
données est calculé à partir du nom du répertoire DATABASEDIR. Cette
option peut être utilisée par exemple pour créer une base de test à
partir des définitions d'une base de prod.
-n, --fake
Ne pas faire les mises à jour, afficher simplement ce qui serait fait
--force, --continue-on-error
Ne pas s'arrêter en cas d'erreur de mise à jour
--no-data-csv
@ -282,7 +284,11 @@ function mysql_admin_qe() {
fi
}
function mysql_tbconf() {
[ -n "$fake" ] && return
# s'assurer que la table des mises à jour existe
local dbname="$1" tb="$2"
if [ -z "$dbname" ]; then
# admin
setx dbname=get_mysql_admindb
@ -420,20 +426,28 @@ function mysql_admin_update() {
MYSQL_ADMIN_CONF_DONE=1
mysql_tbconf
fi
setx done=mysql_get_done "$name" || die
if ! setx done=mysql_get_done "$name"; then
[ -n "$fake" ] || die
fi
[ -n "$done" ] && return
estep "$name"
[ -n "$fake" ] && return
mysql_before_update || die
cat "$update" | mysql_admin_ve || abort_on_error
mysql_after_update || die
}
function mysql_user_update() {
local name="$1" update="$2" dbname="$3" done
setx done=mysql_get_done "$name" "$dbname" || die
if ! setx done=mysql_get_done "$name" "$dbname"; then
[ -n "$fake" ] || die
fi
[ -n "$done" ] && return
estep "$name"
[ -n "$fake" ] && return
mysql_before_update "$dbname" || die
cat "$update" | mysql_user_ve || abort_on_error
mysql_after_update "$dbname" || die
@ -558,6 +572,8 @@ function oracle_user_have_table() {
}
function oracle_tbconf() {
[ -n "$fake" ] && return
# s'assurer que la table des mises à jour existe
local dbname="$1" tb="$2"
if [ -z "$dbname" ]; then
@ -732,6 +748,8 @@ function oracle_admin_update() {
[ -n "$done" ] && return
estep "$name"
[ -n "$fake" ] && return
oracle_before_update || die
cat "$update" | oracle_admin_ve || abort_on_error
oracle_after_update || die
@ -742,6 +760,8 @@ function oracle_user_update() {
[ -n "$done" ] && return
estep "$name"
[ -n "$fake" ] && return
oracle_before_update "$dbname" || die
cat "$update" | oracle_user_ve || abort_on_error
oracle_after_update "$dbname" || die
@ -799,9 +819,10 @@ args=(
-0,--init action=init
-e:,--export: '$action=export; set@ exportdir'
-u,--update action=update
-b:,--updatedir: updatedir=
-t:,--updatedir: updatedir=
-d:,--databasedir: dbdir=
-n:,--database: dbname=
-b:,--database: dbname=
-n,--fake fake=1
--force,--continue-on-error force=1
--no-data-csv data_csv=
--force-data-csv data_csv=force
@ -970,6 +991,7 @@ elif [ "$action" == export ]; then
array_lsfiles updates "$dbdir"
for update in "${updates[@]}"; do
[ -d "$destdir" ] || mkdir -p "$destdir"
[[ "$update" == "*.devel.sql" ]] && continue
copy_update "$update" "$destdir"
done
eend; eclearp
@ -1118,6 +1140,8 @@ for dbdir in "${dbdirs[@]}"; do
setx name=basename "$drop"
[ "$dbmode" == devel -o "${name%.devel.sql}" == "$name" ] || continue
estep "$name"
[ -n "$fake" ] && continue
sed "s/@@database@@/$dbname/g" "$drop" | mysql_admin_qe || abort_on_error "drop: $name"
done
eend
@ -1131,6 +1155,8 @@ for dbdir in "${dbdirs[@]}"; do
setx name=basename "$create"
[ "$dbmode" == devel -o "${name%.devel.sql}" == "$name" ] || continue
estep "$name"
[ -n "$fake" ] && continue
sed "s/@@database@@/$dbname/g" "$create" | mysql_admin_qe || abort_on_error "create: $name"
done
eend; eclearp
@ -1171,6 +1197,8 @@ for dbdir in "${dbdirs[@]}"; do
setx name=basename "$drop"
[ "$dbmode" == devel -o "${name%.devel.sql}" == "$name" ] || continue
estep "$name"
[ -n "$fake" ] && continue
sed "s/@@database@@/$dbname/g" "$drop" | oracle_admin_ve || abort_on_error "drop: $name"
done
eend
@ -1184,6 +1212,8 @@ for dbdir in "${dbdirs[@]}"; do
setx name=basename "$create"
[ "$dbmode" == devel -o "${name%.devel.sql}" == "$name" ] || continue
estep "$name"
[ -n "$fake" ] && continue
sed "s/@@database@@/$dbname/g" "$create" | oracle_admin_ve || abort_on_error "create: $name"
done
eend; eclearp