sqlmig: support des suffixes pour les noms de base de données

This commit is contained in:
Jephté Clain 2018-05-24 22:13:06 +04:00
parent 9600fb801a
commit 4b85c93251
1 changed files with 64 additions and 7 deletions

71
sqlmig
View File

@ -71,6 +71,11 @@ OPTIONS
valeurs remplacent les valeurs par défaut chargées depuis my.cnf 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 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 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 --profile PROFILE
-P, --prod -P, --prod
@ -114,6 +119,8 @@ 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.
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 -f, --update-one UPDATE
Forcer l'application de la mise à jour spécifiée. Ne pas mettre à jour 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 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" 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() { function __check_devel_dir() {
# $1 = P (le préfixe) # $1 = P (le préfixe)
# parentdir et cwd doivent être définis. initialiser le cas échéant la # 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() { function mysql_set_adminargs() {
local dir="$1" defaults local dir="$1" defaults
adminargs=() adminargs=()
setx defaults=mysql_get_defaults setx defaults=mysql_get_defaults "$dir"
if [ -f "$defaults" ]; then if [ -f "$defaults" ]; then
array_add adminargs --defaults-file="$defaults" array_add adminargs --defaults-file="$defaults"
if [ -n "$admindefaults" ]; then if [ -n "$admindefaults" ]; then
@ -395,20 +416,41 @@ function mysql_set_adminargs() {
[ ${#adminargs[*]} -gt 0 ] || array_add adminargs --default-character-set utf8 [ ${#adminargs[*]} -gt 0 ] || array_add adminargs --default-character-set utf8
} }
function mysql_set_userargs() { function mysql_set_userargs() {
local dir="$1" dbname="$2" defaults local dir="$1" dbname="$2" defaults set_suffix tmpsuffix
userargs=() userargs=()
setx defaults=mysql_get_defaults setx defaults=mysql_get_defaults "$dir"
[ -z "$suffix" ] && set_suffix=1
if [ -f "$defaults" ]; then if [ -f "$defaults" ]; then
array_add userargs --defaults-file="$defaults" 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 if [ -n "$userdefaults" ]; then
array_add userargs --defaults-extra-file="$userdefaults" 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 elif [ -f "$dir/my-${dbname}.cnf" ]; then
array_add userargs --defaults-extra-file="$dir/my-${dbname}.cnf" 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 fi
elif [ -n "$userdefaults" ]; then elif [ -n "$userdefaults" ]; then
array_add userargs --defaults-file="$userdefaults" 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 elif [ -f "$dir/my-${dbname}.cnf" ]; then
array_add userargs --defaults-file="$dir/my-${dbname}.cnf" 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 fi
[ ${#userargs[*]} -gt 0 ] || array_add userargs --default-character-set utf8 [ ${#userargs[*]} -gt 0 ] || array_add userargs --default-character-set utf8
} }
@ -711,7 +753,7 @@ function oracle_get_defaults() {
function oracle_source_adminconf() { function oracle_source_adminconf() {
local dir="$1" local dir="$1"
unset ORACLE_SID NLS_LANG ADMINCONNECT USERCONNECT SQLMIGLOG unset ORACLE_SID NLS_LANG ADMINCONNECT USERCONNECT SQLMIGLOG
setx defaults=oracle_get_defaults setx defaults=oracle_get_defaults "$dir"
[ -f "$defaults" ] && source "$defaults" [ -f "$defaults" ] && source "$defaults"
[ -n "$admindefaults" ] && { [ -n "$admindefaults" ] && {
source "$admindefaults" || die source "$admindefaults" || die
@ -729,8 +771,8 @@ function oracle_source_adminconf() {
} }
function oracle_source_userconf() { function oracle_source_userconf() {
local dir="$1" dbname="$2" local dir="$1" dbname="$2"
unset ORACLE_SID NLS_LANG ADMINCONNECT USERCONNECT SQLMIGLOG unset ORACLE_SID NLS_LANG ADMINCONNECT USERCONNECT SQLMIGLOG SUFFIX
setx defaults=oracle_get_defaults setx defaults=oracle_get_defaults "$dir"
[ -f "$defaults" ] && source "$defaults" [ -f "$defaults" ] && source "$defaults"
[ -f "$dir/ora-${dbname}.conf" ] && source "$dir/ora-${dbname}.conf" [ -f "$dir/ora-${dbname}.conf" ] && source "$dir/ora-${dbname}.conf"
[ -n "$userdefaults" ] && { [ -n "$userdefaults" ] && {
@ -752,6 +794,7 @@ function oracle_source_userconf() {
USERDBA=1 USERDBA=1
fi fi
[ -n "$SQLMIGLOG" ] || SQLMIGLOG="/tmp/sqlmig-${ORACLE_SID}-${dbname}.log" [ -n "$SQLMIGLOG" ] || SQLMIGLOG="/tmp/sqlmig-${ORACLE_SID}-${dbname}.log"
[ -z "$suffix" ] && suffix="$SUFFIX"
} }
ORACLE_ADMIN_CONF_DONE= ORACLE_ADMIN_CONF_DONE=
function oracle_admin_update() { function oracle_admin_update() {
@ -814,6 +857,7 @@ socket=
charset= charset=
oracle_sid= oracle_sid=
nls_lang= nls_lang=
suffix=
profile= profile=
type=auto type=auto
action=update action=update
@ -840,6 +884,7 @@ args=(
--character-set: charset= --character-set: charset=
-s:,--oracle-sid: oracle_sid= -s:,--oracle-sid: oracle_sid=
--nls-lang: nls_lang= --nls-lang: nls_lang=
--suffix: suffix=
--profile: profile= --profile: profile=
-P,--prod profile=prod -P,--prod profile=prod
-T,--test profile=test -T,--test profile=test
@ -997,7 +1042,7 @@ elif [ "$action" == export ]; then
if [ -n "$dbdir" ]; then if [ -n "$dbdir" ]; then
dbdirs=("$dbdir") dbdirs=("$dbdir")
elif [ -z "$updatedir" ]; then 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 if [ ${#files[*]} -gt 0 ]; then
enote "Autosélection répertoire courant" enote "Autosélection répertoire courant"
dbdir="$cwd" dbdir="$cwd"
@ -1104,9 +1149,11 @@ fi
## mises à jour utilisateur ## mises à jour utilisateur
force_dbname="$dbname" force_dbname="$dbname"
force_suffix="$suffix"
for dbdir in "${dbdirs[@]}"; do for dbdir in "${dbdirs[@]}"; do
dbname="$force_dbname" dbname="$force_dbname"
[ -n "$dbname" ] || setx dbname=basename "$dbdir" [ -n "$dbname" ] || setx dbname=basename "$dbdir"
suffix="$force_suffix"
etitle "$dbname" etitle "$dbname"
ensure_dbtype "$dbdir" "$type" ensure_dbtype "$dbdir" "$type"
@ -1162,6 +1209,11 @@ for dbdir in "${dbdirs[@]}"; do
mysql_set_userargs "$dbdir" "$dbname" mysql_set_userargs "$dbdir" "$dbname"
mysql_set_mysqlargs mysql_set_mysqlargs
if [ -n "$suffix" ]; then
estepi "Suffixe: $dbname --> $dbname$suffix"
dbname="$dbname$suffix"
fi
# Suppression # Suppression
if [ -n "$drop" ]; then if [ -n "$drop" ]; then
[ "$dbmode" == devel ] || die "La suppression de base de données n'est pas autorisée en mode production" [ "$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_source_userconf "$dbdir" "$dbname"
oracle_ensure_opdir oracle_ensure_opdir
if [ -n "$suffix" ]; then
estepi "Suffixe: $dbname --> $dbname$suffix"
dbname="$dbname$suffix"
fi
# Suppression # Suppression
if [ -n "$drop" ]; then if [ -n "$drop" ]; then
[ "$dbmode" == devel ] || die "La suppression de user n'est pas autorisée en mode production" [ "$dbmode" == devel ] || die "La suppression de user n'est pas autorisée en mode production"