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
|
--force, --continue-on-error
|
||||||
Ne pas s'arrêter en cas d'erreur de mise à jour
|
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
|
Activer le mode développement. Ce mode est automatiquement activé si
|
||||||
l'utilisateur courant n'est pas root. La suppression des bases de
|
l'utilisateur courant n'est pas root. La suppression des bases de
|
||||||
données n'est autorisée qu'en mode développement
|
données n'est autorisée qu'en mode développement
|
||||||
|
@ -763,6 +775,7 @@ exportdir=
|
||||||
dbdir=
|
dbdir=
|
||||||
dbname=
|
dbname=
|
||||||
force=
|
force=
|
||||||
|
data_csv=auto
|
||||||
mode="$MODE"
|
mode="$MODE"
|
||||||
drop=
|
drop=
|
||||||
drop_only=
|
drop_only=
|
||||||
|
@ -791,6 +804,8 @@ args=(
|
||||||
-d:,--databasedir: dbdir=
|
-d:,--databasedir: dbdir=
|
||||||
-n:,--database: dbname=
|
-n:,--database: dbname=
|
||||||
--force,--continue-on-error force=1
|
--force,--continue-on-error force=1
|
||||||
|
--no-data-csv data_csv=
|
||||||
|
--force-data-csv data_csv=force
|
||||||
--prod-mode-dangerous mode=prod
|
--prod-mode-dangerous mode=prod
|
||||||
--devel-mode mode=devel
|
--devel-mode mode=devel
|
||||||
-Z,--recreate drop=1
|
-Z,--recreate drop=1
|
||||||
|
@ -1042,6 +1057,34 @@ for dbdir in "${dbdirs[@]}"; do
|
||||||
ensure_dbtype "$dbdir" "$type"
|
ensure_dbtype "$dbdir" "$type"
|
||||||
ensure_dbmode "$dbtype" "$mode"
|
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
|
# lister les mises à jour disponibles
|
||||||
drops=()
|
drops=()
|
||||||
creates=()
|
creates=()
|
||||||
|
|
Loading…
Reference in New Issue