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