From 7bc3af2869052cdf8c1ccecf31ff34099c40e27d Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Sun, 6 May 2018 14:37:05 +0400 Subject: [PATCH] sqlmig: conversion automatique des fichiers *.csv en *.sql --- sqlmig | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/sqlmig b/sqlmig index 7e0917a..d3ba236 100755 --- a/sqlmig +++ b/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=()