sqlmig: support des fichiers spécifique au mode devel
This commit is contained in:
parent
e493b49811
commit
174c08759e
46
sqlmig
46
sqlmig
|
@ -6,6 +6,39 @@ urequire DEFAULTS install
|
|||
function display_help() {
|
||||
uecho "$scriptname: gérer les mises à jour sur une base de données
|
||||
|
||||
Les mises à jours sont dans un répertoire UPDATEDIR, qui contient un répertoire
|
||||
pour chaque base de données à gérer. Ces répertoires sont des DATABASEDIR. Les
|
||||
fichiers sql peuvent être placés dans le répertoire UPDATEDIR pour les mises à
|
||||
jour administratives, ou dans DATABASEDIR pour les mises à jour de la base de
|
||||
données.
|
||||
|
||||
Les fichiers sql peuvent contenir dans les premières lignes du fichier un tag
|
||||
@sqlmig sous forme de commentaire. On peut avoir:
|
||||
-- @sqlmig drop
|
||||
identifie une suite de requêtes à exécuter pour supprimer la base de données
|
||||
et recommencer à zéro
|
||||
-- @sqlmig create
|
||||
identifie une suite de requêtes à exécuter pour créer la base de données.
|
||||
-- @sqlmig admin
|
||||
identifie une mise à jour administrative. Les fichiers situés dans UPADTEDIR
|
||||
sont automatiquement considérés comme des mises à jour administratives même
|
||||
en l'absence de ce tag.
|
||||
|
||||
Les mises à jour administratives sont exécutées avec les paramètres du fichier
|
||||
my.cnf (resp. ora.conf) et sont typiquement utilisées pour créer les comptes
|
||||
utilisateurs pour la connexion à la base de données et leur attribuer des droits
|
||||
d'accès. Ces mises à jour sont exécutées sans sélectionner une base de données
|
||||
en particulier.
|
||||
|
||||
Les mises à jour utilisateurs sont exécutées avec les paramètres du fichier
|
||||
my.cnf (resp. ora.conf) augmenté du fichier my-DBNAME.cnf (res. ora-DBNAME.conf)
|
||||
Elles sont exécutées avec la base de données concernée sélectionnée.
|
||||
|
||||
Il y a deux modes d'exécution: prod ou devel. En mode prod, la suppression de
|
||||
base de données est interdite. De plus, tous les fichiers de mise à jour de la
|
||||
forme *.devel.sql sont ignorés. Cela permet de fignoler une mise à jour sans
|
||||
risquer de l'exécuter en production.
|
||||
|
||||
USAGE
|
||||
$scriptname [options]
|
||||
|
||||
|
@ -733,8 +766,8 @@ args=(
|
|||
-d:,--databasedir: dbdir=
|
||||
-n:,--database: dbname=
|
||||
--force,--continue-on-error force=1
|
||||
--prod-dangerous mode=prod
|
||||
--devel mode=devel
|
||||
--prod-mode-dangerous mode=prod
|
||||
--devel-mode mode=devel
|
||||
-Z,--recreate drop=1
|
||||
--drop-only '$drop=1; drop_only=1'
|
||||
--create-only create_only=1
|
||||
|
@ -942,6 +975,7 @@ if [ -n "$updatedir" ]; then
|
|||
array_lsfiles updates "$updatedir" "*.sql"
|
||||
if [ ${#updates[*]} -gt 0 ]; then
|
||||
ensure_dbtype "$updatedir" "$type"
|
||||
ensure_dbmode "$dbtype" "$mode"
|
||||
if [ "$dbtype" == mysql ]; then
|
||||
# construire les paramètres pour mysql
|
||||
mysql_set_adminargs "$updatedir"
|
||||
|
@ -951,6 +985,7 @@ if [ -n "$updatedir" ]; then
|
|||
etitled "Mises à jour admin"
|
||||
for update in "${updates[@]}"; do
|
||||
setx name=basename "$update"
|
||||
[ "$dbmode" == devel -o "${name%.devel.sql}" == "$name" ] || continue
|
||||
mysql_admin_update "$name" "$update"
|
||||
done
|
||||
eend; eclearp
|
||||
|
@ -964,6 +999,7 @@ if [ -n "$updatedir" ]; then
|
|||
etitled "Mises à jour"
|
||||
for update in "${updates[@]}"; do
|
||||
setx name=basename "$update"
|
||||
[ "$dbmode" == devel -o "${name%.devel.sql}" == "$name" ] || continue
|
||||
oracle_admin_update "$name" "$update"
|
||||
done
|
||||
eend; eclearp
|
||||
|
@ -1013,6 +1049,7 @@ for dbdir in "${dbdirs[@]}"; do
|
|||
fi
|
||||
for drop in "${drops[@]}"; do
|
||||
setx name=basename "$drop"
|
||||
[ "$dbmode" == devel -o "${name%.devel.sql}" == "$name" ] || continue
|
||||
estep "$name"
|
||||
sed "s/@@database@@/$dbname/g" "$drop" | mysql_admin_qe || abort_on_error "drop: $name"
|
||||
done
|
||||
|
@ -1025,6 +1062,7 @@ for dbdir in "${dbdirs[@]}"; do
|
|||
etitled "Création"
|
||||
for create in "${creates[@]}"; do
|
||||
setx name=basename "$create"
|
||||
[ "$dbmode" == devel -o "${name%.devel.sql}" == "$name" ] || continue
|
||||
estep "$name"
|
||||
sed "s/@@database@@/$dbname/g" "$create" | mysql_admin_qe || abort_on_error "create: $name"
|
||||
done
|
||||
|
@ -1037,6 +1075,7 @@ for dbdir in "${dbdirs[@]}"; do
|
|||
mysql_tbconf "$dbname"
|
||||
for update in "${updates[@]}"; do
|
||||
setx name=basename "$update"
|
||||
[ "$dbmode" == devel -o "${name%.devel.sql}" == "$name" ] || continue
|
||||
if have_tag admin "$update"; then
|
||||
mysql_admin_update "$name" "$update"
|
||||
else
|
||||
|
@ -1063,6 +1102,7 @@ for dbdir in "${dbdirs[@]}"; do
|
|||
fi
|
||||
for drop in "${drops[@]}"; do
|
||||
setx name=basename "$drop"
|
||||
[ "$dbmode" == devel -o "${name%.devel.sql}" == "$name" ] || continue
|
||||
estep "$name"
|
||||
sed "s/@@database@@/$dbname/g" "$drop" | oracle_admin_ve || abort_on_error "drop: $name"
|
||||
done
|
||||
|
@ -1075,6 +1115,7 @@ for dbdir in "${dbdirs[@]}"; do
|
|||
etitled "Création"
|
||||
for create in "${creates[@]}"; do
|
||||
setx name=basename "$create"
|
||||
[ "$dbmode" == devel -o "${name%.devel.sql}" == "$name" ] || continue
|
||||
estep "$name"
|
||||
sed "s/@@database@@/$dbname/g" "$create" | oracle_admin_ve || abort_on_error "create: $name"
|
||||
done
|
||||
|
@ -1087,6 +1128,7 @@ for dbdir in "${dbdirs[@]}"; do
|
|||
oracle_tbconf "$dbname"
|
||||
for update in "${updates[@]}"; do
|
||||
setx name=basename "$update"
|
||||
[ "$dbmode" == devel -o "${name%.devel.sql}" == "$name" ] || continue
|
||||
if have_tag admin "$update"; then
|
||||
oracle_admin_update "$name" "$update"
|
||||
else
|
||||
|
|
Loading…
Reference in New Issue