diff --git a/sqlmig b/sqlmig index 0fd01c6..f4abe67 100755 --- a/sqlmig +++ b/sqlmig @@ -71,6 +71,11 @@ OPTIONS valeurs remplacent les valeurs par défaut chargées depuis my.cnf Les options --sid et --nls-lang ne sont valides que pour Oracle. Ces valeurs remplacent les valeurs par défaut chargées depuis ora.conf + --suffix SUFFIX + Lors de la connexion à la base de données, toujours ajouter le suffixe + spécifié au nom de la base de données. Cette valeur peut être spécifiée + dans la section [sqlmig] du fichier my.cnf ou avec la variable SUFFIX + pour ora.conf --profile PROFILE -P, --prod @@ -114,6 +119,8 @@ OPTIONS 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. + Notez que le suffixe spécifié avec l'option --suffix est toujours + rajouté au nom de la base de données. -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 @@ -147,6 +154,20 @@ OPTIONS Créer la base de données uniquement. Ne pas appliquer les mises à jour" } +function mconf_get() { + local cnf="$1" section="$2" name="$3" + awkrun <"$cnf" section="$section" name="$name" ' + BEGIN { in_section = 0 } + !in_section && $0 == "[" section "]" { in_section = 1; next } + in_section && $0 == "[" section "]" { in_section = 0; next } + in_section && $0 ~ "^" name " *=" { + gsub(/^[^=]*= */, "") + print + exit + } + ' +} + function __check_devel_dir() { # $1 = P (le préfixe) # parentdir et cwd doivent être définis. initialiser le cas échéant la @@ -383,7 +404,7 @@ function mysql_get_defaults() { function mysql_set_adminargs() { local dir="$1" defaults adminargs=() - setx defaults=mysql_get_defaults + setx defaults=mysql_get_defaults "$dir" if [ -f "$defaults" ]; then array_add adminargs --defaults-file="$defaults" if [ -n "$admindefaults" ]; then @@ -395,20 +416,41 @@ function mysql_set_adminargs() { [ ${#adminargs[*]} -gt 0 ] || array_add adminargs --default-character-set utf8 } function mysql_set_userargs() { - local dir="$1" dbname="$2" defaults + local dir="$1" dbname="$2" defaults set_suffix tmpsuffix userargs=() - setx defaults=mysql_get_defaults + setx defaults=mysql_get_defaults "$dir" + [ -z "$suffix" ] && set_suffix=1 if [ -f "$defaults" ]; then array_add userargs --defaults-file="$defaults" + if [ -n "$set_suffix" ]; then + setx tmpsuffix=mconf_get "$defaults" sqlmig suffix + [ -n "$tmpsuffix" ] && suffix="$tmpsuffix" + fi if [ -n "$userdefaults" ]; then array_add userargs --defaults-extra-file="$userdefaults" + if [ -n "$set_suffix" ]; then + setx tmpsuffix=mconf_get "$userdefaults" sqlmig suffix + [ -n "$tmpsuffix" ] && suffix="$tmpsuffix" + fi elif [ -f "$dir/my-${dbname}.cnf" ]; then array_add userargs --defaults-extra-file="$dir/my-${dbname}.cnf" + if [ -n "$set_suffix" ]; then + setx tmpsuffix=mconf_get "$dir/my-${dbname}.cnf" sqlmig suffix + [ -n "$tmpsuffix" ] && suffix="$tmpsuffix" + fi fi elif [ -n "$userdefaults" ]; then array_add userargs --defaults-file="$userdefaults" + if [ -n "$set_suffix" ]; then + setx tmpsuffix=mconf_get "$userdefaults" sqlmig suffix + [ -n "$tmpsuffix" ] && suffix="$tmpsuffix" + fi elif [ -f "$dir/my-${dbname}.cnf" ]; then array_add userargs --defaults-file="$dir/my-${dbname}.cnf" + if [ -n "$set_suffix" ]; then + setx tmpsuffix=mconf_get "$dir/my-${dbname}.cnf" sqlmig suffix + [ -n "$tmpsuffix" ] && suffix="$tmpsuffix" + fi fi [ ${#userargs[*]} -gt 0 ] || array_add userargs --default-character-set utf8 } @@ -711,7 +753,7 @@ function oracle_get_defaults() { function oracle_source_adminconf() { local dir="$1" unset ORACLE_SID NLS_LANG ADMINCONNECT USERCONNECT SQLMIGLOG - setx defaults=oracle_get_defaults + setx defaults=oracle_get_defaults "$dir" [ -f "$defaults" ] && source "$defaults" [ -n "$admindefaults" ] && { source "$admindefaults" || die @@ -729,8 +771,8 @@ function oracle_source_adminconf() { } function oracle_source_userconf() { local dir="$1" dbname="$2" - unset ORACLE_SID NLS_LANG ADMINCONNECT USERCONNECT SQLMIGLOG - setx defaults=oracle_get_defaults + unset ORACLE_SID NLS_LANG ADMINCONNECT USERCONNECT SQLMIGLOG SUFFIX + setx defaults=oracle_get_defaults "$dir" [ -f "$defaults" ] && source "$defaults" [ -f "$dir/ora-${dbname}.conf" ] && source "$dir/ora-${dbname}.conf" [ -n "$userdefaults" ] && { @@ -752,6 +794,7 @@ function oracle_source_userconf() { USERDBA=1 fi [ -n "$SQLMIGLOG" ] || SQLMIGLOG="/tmp/sqlmig-${ORACLE_SID}-${dbname}.log" + [ -z "$suffix" ] && suffix="$SUFFIX" } ORACLE_ADMIN_CONF_DONE= function oracle_admin_update() { @@ -814,6 +857,7 @@ socket= charset= oracle_sid= nls_lang= +suffix= profile= type=auto action=update @@ -840,6 +884,7 @@ args=( --character-set: charset= -s:,--oracle-sid: oracle_sid= --nls-lang: nls_lang= + --suffix: suffix= --profile: profile= -P,--prod profile=prod -T,--test profile=test @@ -997,7 +1042,7 @@ elif [ "$action" == export ]; then if [ -n "$dbdir" ]; then dbdirs=("$dbdir") elif [ -z "$updatedir" ]; then - array_lsfiles files . "*.sql" "*my.cnf" "*ora.conf" + array_lsfiles files . "*.sql" "*my.cnf" "my-*.cnf" "*ora.conf" "ora-*.conf" if [ ${#files[*]} -gt 0 ]; then enote "Autosélection répertoire courant" dbdir="$cwd" @@ -1104,9 +1149,11 @@ fi ## mises à jour utilisateur 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" @@ -1162,6 +1209,11 @@ for dbdir in "${dbdirs[@]}"; do mysql_set_userargs "$dbdir" "$dbname" mysql_set_mysqlargs + if [ -n "$suffix" ]; then + estepi "Suffixe: $dbname --> $dbname$suffix" + dbname="$dbname$suffix" + fi + # Suppression if [ -n "$drop" ]; then [ "$dbmode" == devel ] || die "La suppression de base de données n'est pas autorisée en mode production" @@ -1222,6 +1274,11 @@ for dbdir in "${dbdirs[@]}"; do oracle_source_userconf "$dbdir" "$dbname" oracle_ensure_opdir + if [ -n "$suffix" ]; then + estepi "Suffixe: $dbname --> $dbname$suffix" + dbname="$dbname$suffix" + fi + # Suppression if [ -n "$drop" ]; then [ "$dbmode" == devel ] || die "La suppression de user n'est pas autorisée en mode production"