sqlmig: ajout de l'option --update-one

This commit is contained in:
Jephté Clain 2018-05-15 10:02:43 +04:00
parent 6a6b2a5f32
commit 7181725056
1 changed files with 77 additions and 37 deletions

64
sqlmig
View File

@ -98,7 +98,7 @@ 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
-u, --update -u, --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
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
@ -114,6 +114,10 @@ OPTIONS
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.
-f, --update-one UPDATE
Forcer l'application de la mise à jour spécifiée. Ne pas mettre à jour
l'état des mises à jour installées. Avec cette option, tout se passe
comme si le seul fichier existant est celui spécifié.
-n, --fake -n, --fake
Ne pas faire les mises à jour, afficher simplement ce qui serait fait Ne pas faire les mises à jour, afficher simplement ce qui serait fait
@ -421,7 +425,8 @@ function mysql_set_mysqlargs() {
} }
MYSQL_ADMIN_CONF_DONE= MYSQL_ADMIN_CONF_DONE=
function mysql_admin_update() { function mysql_admin_update() {
local name="$1" update="$2" done local name="$1" update="$2" updatefile="$3" done
if [ -z "$updatefile" ]; then
if [ -z "$MYSQL_ADMIN_CONF_DONE" ]; then if [ -z "$MYSQL_ADMIN_CONF_DONE" ]; then
MYSQL_ADMIN_CONF_DONE=1 MYSQL_ADMIN_CONF_DONE=1
mysql_tbconf mysql_tbconf
@ -430,27 +435,38 @@ function mysql_admin_update() {
[ -n "$fake" ] || die [ -n "$fake" ] || die
fi fi
[ -n "$done" ] && return [ -n "$done" ] && return
fi
estep "$name" estep "$name"
[ -n "$fake" ] && return [ -n "$fake" ] && return
if [ -z "$updatefile" ]; then
mysql_before_update || die mysql_before_update || die
fi
cat "$update" | mysql_admin_ve || abort_on_error cat "$update" | mysql_admin_ve || abort_on_error
if [ -z "$updatefile" ]; then
mysql_after_update || die mysql_after_update || die
fi
} }
function mysql_user_update() { function mysql_user_update() {
local name="$1" update="$2" dbname="$3" done local name="$1" update="$2" dbname="$3" updatefile="$4" done
if [ -z "$updatefile" ]; then
if ! setx done=mysql_get_done "$name" "$dbname"; then if ! setx done=mysql_get_done "$name" "$dbname"; then
[ -n "$fake" ] || die [ -n "$fake" ] || die
fi fi
[ -n "$done" ] && return [ -n "$done" ] && return
fi
estep "$name" estep "$name"
[ -n "$fake" ] && return [ -n "$fake" ] && return
if [ -z "$updatefile" ]; then
mysql_before_update "$dbname" || die mysql_before_update "$dbname" || die
fi
cat "$update" | mysql_user_ve || abort_on_error cat "$update" | mysql_user_ve || abort_on_error
if [ -z "$updatefile" ]; then
mysql_after_update "$dbname" || die mysql_after_update "$dbname" || die
fi
} }
################################################################################ ################################################################################
@ -739,32 +755,44 @@ function oracle_source_userconf() {
} }
ORACLE_ADMIN_CONF_DONE= ORACLE_ADMIN_CONF_DONE=
function oracle_admin_update() { function oracle_admin_update() {
local name="$1" update="$2" done local name="$1" update="$2" updatefile="$3" done
if [ -z "$updatefile" ]; then
if [ -z "$ORACLE_ADMIN_CONF_DONE" ]; then if [ -z "$ORACLE_ADMIN_CONF_DONE" ]; then
ORACLE_ADMIN_CONF_DONE= ORACLE_ADMIN_CONF_DONE=
oracle_tbconf oracle_tbconf
fi fi
setx done=oracle_get_done "$name" || die setx done=oracle_get_done "$name" || die
[ -n "$done" ] && return [ -n "$done" ] && return
fi
estep "$name" estep "$name"
[ -n "$fake" ] && return [ -n "$fake" ] && return
if [ -z "$updatefile" ]; then
oracle_before_update || die oracle_before_update || die
fi
cat "$update" | oracle_admin_ve || abort_on_error cat "$update" | oracle_admin_ve || abort_on_error
if [ -z "$updatefile" ]; then
oracle_after_update || die oracle_after_update || die
fi
} }
function oracle_user_update() { function oracle_user_update() {
local name="$1" update="$2" dbname="$3" done local name="$1" update="$2" dbname="$3" updatefile="$4" done
if [ -z "$updatefile" ]; then
setx done=oracle_get_done "$name" "$dbname" || die setx done=oracle_get_done "$name" "$dbname" || die
[ -n "$done" ] && return [ -n "$done" ] && return
fi
estep "$name" estep "$name"
[ -n "$fake" ] && return [ -n "$fake" ] && return
if [ -z "$updatefile" ]; then
oracle_before_update "$dbname" || die oracle_before_update "$dbname" || die
fi
cat "$update" | oracle_user_ve || abort_on_error cat "$update" | oracle_user_ve || abort_on_error
if [ -z "$updatefile" ]; then
oracle_after_update "$dbname" || die oracle_after_update "$dbname" || die
fi
} }
################################################################################ ################################################################################
@ -793,6 +821,7 @@ updatedir=
exportdir= exportdir=
dbdir= dbdir=
dbname= dbname=
updatefile=
force= force=
data_csv=auto data_csv=auto
mode="$MODE" mode="$MODE"
@ -818,10 +847,11 @@ 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'
-u,--update action=update -u,--update-all action=update
-t:,--updatedir: updatedir= -t:,--updatedir: updatedir=
-d:,--databasedir: dbdir= -d:,--databasedir: dbdir=
-b:,--database: dbname= -b:,--database: dbname=
-f:,--update-one: updatefile=
-n,--fake fake=1 -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=
@ -1028,6 +1058,8 @@ if [ -n "$dbname" -a ${#dbdirs[*]} -gt 1 ]; then
die "Avec l'option -n, une seule base de données doit être spécifiée" die "Avec l'option -n, une seule base de données doit être spécifiée"
fi fi
[ -n "$updatefile" ] && setx updatefile=abspath "$updatefile"
# répertoire temporaire pour Oracle # répertoire temporaire pour Oracle
OPDIR= OPDIR=
@ -1047,7 +1079,8 @@ if [ -n "$updatedir" ]; then
for update in "${updates[@]}"; do for update in "${updates[@]}"; do
setx name=basename "$update" setx name=basename "$update"
[ "$dbmode" == devel -o "${name%.devel.sql}" == "$name" ] || continue [ "$dbmode" == devel -o "${name%.devel.sql}" == "$name" ] || continue
mysql_admin_update "$name" "$update" [ -z "$updatefile" -o "$updatefile" == "$update" ] || continue
mysql_admin_update "$name" "$update" "$updatefile"
done done
eend; eclearp eend; eclearp
@ -1061,7 +1094,8 @@ if [ -n "$updatedir" ]; then
for update in "${updates[@]}"; do for update in "${updates[@]}"; do
setx name=basename "$update" setx name=basename "$update"
[ "$dbmode" == devel -o "${name%.devel.sql}" == "$name" ] || continue [ "$dbmode" == devel -o "${name%.devel.sql}" == "$name" ] || continue
oracle_admin_update "$name" "$update" [ -z "$updatefile" -o "$updatefile" == "$update" ] || continue
oracle_admin_update "$name" "$update" "$updatefile"
done done
eend; eclearp eend; eclearp
fi fi
@ -1139,6 +1173,7 @@ for dbdir in "${dbdirs[@]}"; do
for drop in "${drops[@]}"; do for drop in "${drops[@]}"; 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
[ -z "$updatefile" -o "$updatefile" == "$update" ] || continue
estep "$name" estep "$name"
[ -n "$fake" ] && continue [ -n "$fake" ] && continue
@ -1154,6 +1189,7 @@ for dbdir in "${dbdirs[@]}"; do
for create in "${creates[@]}"; do for create in "${creates[@]}"; 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
[ -z "$updatefile" -o "$updatefile" == "$update" ] || continue
estep "$name" estep "$name"
[ -n "$fake" ] && continue [ -n "$fake" ] && continue
@ -1169,10 +1205,11 @@ for dbdir in "${dbdirs[@]}"; do
for update in "${updates[@]}"; do for update in "${updates[@]}"; do
setx name=basename "$update" setx name=basename "$update"
[ "$dbmode" == devel -o "${name%.devel.sql}" == "$name" ] || continue [ "$dbmode" == devel -o "${name%.devel.sql}" == "$name" ] || continue
[ -z "$updatefile" -o "$updatefile" == "$update" ] || continue
if have_tag admin "$update"; then if have_tag admin "$update"; then
mysql_admin_update "$name" "$update" mysql_admin_update "$name" "$update" "$updatefile"
else else
mysql_user_update "$name" "$update" "$dbname" mysql_user_update "$name" "$update" "$dbname" "$updatefile"
fi fi
done done
eend; eclearp eend; eclearp
@ -1196,6 +1233,7 @@ for dbdir in "${dbdirs[@]}"; do
for drop in "${drops[@]}"; do for drop in "${drops[@]}"; 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
[ -z "$updatefile" -o "$updatefile" == "$update" ] || continue
estep "$name" estep "$name"
[ -n "$fake" ] && continue [ -n "$fake" ] && continue
@ -1211,6 +1249,7 @@ for dbdir in "${dbdirs[@]}"; do
for create in "${creates[@]}"; do for create in "${creates[@]}"; 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
[ -z "$updatefile" -o "$updatefile" == "$update" ] || continue
estep "$name" estep "$name"
[ -n "$fake" ] && continue [ -n "$fake" ] && continue
@ -1226,10 +1265,11 @@ for dbdir in "${dbdirs[@]}"; do
for update in "${updates[@]}"; do for update in "${updates[@]}"; do
setx name=basename "$update" setx name=basename "$update"
[ "$dbmode" == devel -o "${name%.devel.sql}" == "$name" ] || continue [ "$dbmode" == devel -o "${name%.devel.sql}" == "$name" ] || continue
[ -z "$updatefile" -o "$updatefile" == "$update" ] || continue
if have_tag admin "$update"; then if have_tag admin "$update"; then
oracle_admin_update "$name" "$update" oracle_admin_update "$name" "$update" "$updatefile"
else else
oracle_user_update "$name" "$update" "$dbname" oracle_user_update "$name" "$update" "$dbname" "$updatefile"
fi fi
done done
eend; eclearp eend; eclearp