From f0644feebd332ff6c40127255ba67f94a593ed08 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Wed, 22 Jan 2014 15:42:11 +0400 Subject: [PATCH] changer l'ordre des arguments --- mysqlcsv | 31 ++++++++++++++++++++++--------- mysqlloadcsv | 14 ++++++++++---- 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/mysqlcsv b/mysqlcsv index 29a81b9..2fe50b0 100755 --- a/mysqlcsv +++ b/mysqlcsv @@ -5,18 +5,21 @@ function display_help() { uecho "$scriptname: Faire une requête MySQL et formater la sortie pour traitement avec awkcsv USAGE - $scriptname [db [query]] [-- mysql options] + $scriptname [query [db]] [-- mysql options] -db est le nom de la base de données query est la requête sql à exécuter. Si query n'est pas spécifiée, la(les) requête(s) sql sont prises sur l'entrée standard, ou depuis un fichier si l'option -f est spécifiée. +db est le nom de la base de données. Cette argument n'est lu que si le nom + de la base de donnée n'est ni spécifié dans le fichier de configuration, + ni spécifié avec l'option -D OPTIONS - -h host - -P port - -u user - -ppassword + -h HOST + -P PORT + -u USER + -pPASSWORD + -D DATABASE Informations de connexion à la base de données -C CONFIG Prendre les informations de connexion depuis le fichier spécifié. @@ -68,6 +71,7 @@ host= port= user= password=--NOT-SET-- +database= configs=() profile= noheaders= @@ -81,6 +85,7 @@ parse_opts "${PRETTYOPTS[@]}" \ -P:,--port: port= \ -u:,--user: user= \ -p::,--passwd:,--password: password= \ + -D:,--database: database= \ -C:,--config: configs \ --profile: profile= \ -N,--no-headers,--skip-column-names noheaders=1 \ @@ -90,9 +95,10 @@ parse_opts "${PRETTYOPTS[@]}" \ -f:,--input: input= \ @ args -- "$@" && set -- "${args[@]}" || die "$args" -database="$1"; shift -query="$1"; shift -[ "$1" == "--" ] && shift +if [ "$1" != "--" ]; then + # le premier argument est la requête + query="$1"; shift +fi if [ -n "${configs[*]}" ]; then PROFILE="$profile" @@ -103,6 +109,13 @@ if [ -n "${configs[*]}" ]; then done fi +if [ -z "$database" -a "$1" != "--" ]; then + # le deuxième argument est éventuellement le nom de la base de données, si + # cela n'a pas été spécifié dans le fichier de configuration + database="$1"; shift +fi +[ "$1" == "--" ] && shift + mysqlcmd='mysql "${mysqlargs[@]}" "$@"' mysqlargs=( -B --default-character-set=utf8 diff --git a/mysqlloadcsv b/mysqlloadcsv index d4c9ecc..66e2946 100755 --- a/mysqlloadcsv +++ b/mysqlloadcsv @@ -58,7 +58,9 @@ OPTIONS Fichier en entrée. Ne pas spécifier cette option ou utiliser '-' pour lire depuis l'entrée standard. -s NBLINES - Nombre de lignes à sauter dans le fichier en entrée" + Nombre de lignes à sauter dans le fichier en entrée + -T, --truncate + Vider la table avant d'effectuer le chargement" } source "$(dirname "$0")/ulib/ulib" && @@ -73,6 +75,7 @@ configs=() profile= input= skip_lines= +truncate= parse_opts "${PRETTYOPTS[@]}" \ --help '$exit_with display_help' \ -h:,-H:,--host: host= \ @@ -82,6 +85,7 @@ parse_opts "${PRETTYOPTS[@]}" \ -C:,--config: configs \ -f:,--input: input= \ -s:,--skip-lines: skip_lines= \ + -T,--truncate truncate=1 \ @ args -- "$@" && set -- "${args[@]}" || die "$args" dbtable="$1"; shift @@ -132,14 +136,16 @@ else skip_lines=$(($skip_lines + 1)) fi +[ -n "$truncate" ] && truncate="truncate table \`$table\`;" +loadcsv="load data local infile '$input' into table \`$table\` character set 'utf8' fields terminated by ',' optionally enclosed by '\\\"' escaped by '\\\\' lines terminated by '\\n' starting by '' ignore $skip_lines lines ($cfields);" + mysqlargs=( ${host:+-h "$host"} ${port:+-P "$port"} - ${user:+-u "$user"} + ${user:+-u "$user"} ${database:+-D "$database"} ) [ "$password" != "--NOT-SET--" ] && mysqlargs=("${mysqlargs[@]}" -p"$password") mysqlargs=("${mysqlargs[@]}" - "$database" - "load data local infile '$input' into table \`$table\` character set 'utf8' fields terminated by ',' optionally enclosed by '\\\"' escaped by '\\\\' lines terminated by '\\n' starting by '' ignore $skip_lines lines ($cfields);" + "$truncate$loadcsv" -- --local-infile=1 )