diff --git a/sqlmig b/sqlmig index c72b1f4..959399d 100755 --- a/sqlmig +++ b/sqlmig @@ -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