sqlmig: conversion automatique des fichiers *.csv en *.sql
This commit is contained in:
parent
4c43b01739
commit
7bc3af2869
45
sqlmig
45
sqlmig
|
@ -117,7 +117,19 @@ OPTIONS
|
|||
|
||||
--force, --continue-on-error
|
||||
Ne pas s'arrêter en cas d'erreur de mise à jour
|
||||
--devel
|
||||
--no-data-csv
|
||||
Ne pas convertir les fichiers *-data.csv en fichier .sql
|
||||
correspondant. Cette conversion n'est supportée que pour MySQL pour le
|
||||
moment, et un fichier de la forme NUMTABLE-data.csv où NUM est une suite
|
||||
de chiffres est transformé en une suite d'insertions dans la table TABLE
|
||||
après l'avoir vidée.
|
||||
La variante NUMTABLE-data_insert.csv ajoute les données dans la table
|
||||
sans la vider d'abord.
|
||||
--force-data-csv
|
||||
Forcer la conversion des fichiers *-data.csv. Par défaut, la conversion
|
||||
n'est faite que si le fichier csv est plus récent que le fichier sql
|
||||
correspondant.
|
||||
--devel-mode
|
||||
Activer le mode développement. Ce mode est automatiquement activé si
|
||||
l'utilisateur courant n'est pas root. La suppression des bases de
|
||||
données n'est autorisée qu'en mode développement
|
||||
|
@ -763,6 +775,7 @@ exportdir=
|
|||
dbdir=
|
||||
dbname=
|
||||
force=
|
||||
data_csv=auto
|
||||
mode="$MODE"
|
||||
drop=
|
||||
drop_only=
|
||||
|
@ -791,6 +804,8 @@ args=(
|
|||
-d:,--databasedir: dbdir=
|
||||
-n:,--database: dbname=
|
||||
--force,--continue-on-error force=1
|
||||
--no-data-csv data_csv=
|
||||
--force-data-csv data_csv=force
|
||||
--prod-mode-dangerous mode=prod
|
||||
--devel-mode mode=devel
|
||||
-Z,--recreate drop=1
|
||||
|
@ -1042,6 +1057,34 @@ for dbdir in "${dbdirs[@]}"; do
|
|||
ensure_dbtype "$dbdir" "$type"
|
||||
ensure_dbmode "$dbtype" "$mode"
|
||||
|
||||
# Conversion csv --> sql
|
||||
array_lsfiles csvs "$dbdir" "*.csv"
|
||||
if [ "$dbtype" == mysql -a -n "$data_csv" ]; then
|
||||
etitled "Conversion"
|
||||
for csv in "${csvs[@]}"; do
|
||||
setx csvname=basename -- "$csv"
|
||||
sql="${csv%.csv}.sql"
|
||||
if [ "$data_csv" != force ]; then
|
||||
testnewer "$csv" "$sql" || continue
|
||||
fi
|
||||
|
||||
estep "$csvname --> ${csvname%.csv}.sql"
|
||||
eval "$(awk '{
|
||||
truncate = ($0 ~ /-data_insert(.devel)?.csv$/)? "": "1"
|
||||
sub(/^.*\//, "")
|
||||
sub(/^[0-9]+/, "")
|
||||
sub(/\.csv$/, "")
|
||||
sub(/\.devel$/, "")
|
||||
sub(/-data(_[a-z]+*)?$/, "")
|
||||
print "truncate=" truncate
|
||||
gsub(/'\''/, "'\'\\\\\'\''")
|
||||
print "table='\''" $0 "'\''"
|
||||
}' <<<"$csvname")" #"
|
||||
"$scriptdir/mysqlloadcsv" >"$sql" ${truncate:+-T} -nIf "$csv" "$table" --prefix "-- -*- coding: utf-8 mode: sql -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8"
|
||||
done
|
||||
eend; eclearp
|
||||
fi
|
||||
|
||||
# lister les mises à jour disponibles
|
||||
drops=()
|
||||
creates=()
|
||||
|
|
Loading…
Reference in New Issue