changer l'ordre des arguments

This commit is contained in:
Jephté Clain 2014-01-22 15:42:11 +04:00
parent 39679c1323
commit f0644feebd
2 changed files with 32 additions and 13 deletions

View File

@ -5,18 +5,21 @@ function display_help() {
uecho "$scriptname: Faire une requête MySQL et formater la sortie pour traitement avec awkcsv uecho "$scriptname: Faire une requête MySQL et formater la sortie pour traitement avec awkcsv
USAGE 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) 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 requête(s) sql sont prises sur l'entrée standard, ou depuis un fichier
si l'option -f est spécifiée. 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 OPTIONS
-h host -h HOST
-P port -P PORT
-u user -u USER
-ppassword -pPASSWORD
-D DATABASE
Informations de connexion à la base de données Informations de connexion à la base de données
-C CONFIG -C CONFIG
Prendre les informations de connexion depuis le fichier spécifié. Prendre les informations de connexion depuis le fichier spécifié.
@ -68,6 +71,7 @@ host=
port= port=
user= user=
password=--NOT-SET-- password=--NOT-SET--
database=
configs=() configs=()
profile= profile=
noheaders= noheaders=
@ -81,6 +85,7 @@ parse_opts "${PRETTYOPTS[@]}" \
-P:,--port: port= \ -P:,--port: port= \
-u:,--user: user= \ -u:,--user: user= \
-p::,--passwd:,--password: password= \ -p::,--passwd:,--password: password= \
-D:,--database: database= \
-C:,--config: configs \ -C:,--config: configs \
--profile: profile= \ --profile: profile= \
-N,--no-headers,--skip-column-names noheaders=1 \ -N,--no-headers,--skip-column-names noheaders=1 \
@ -90,9 +95,10 @@ parse_opts "${PRETTYOPTS[@]}" \
-f:,--input: input= \ -f:,--input: input= \
@ args -- "$@" && set -- "${args[@]}" || die "$args" @ args -- "$@" && set -- "${args[@]}" || die "$args"
database="$1"; shift if [ "$1" != "--" ]; then
query="$1"; shift # le premier argument est la requête
[ "$1" == "--" ] && shift query="$1"; shift
fi
if [ -n "${configs[*]}" ]; then if [ -n "${configs[*]}" ]; then
PROFILE="$profile" PROFILE="$profile"
@ -103,6 +109,13 @@ if [ -n "${configs[*]}" ]; then
done done
fi 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[@]}" "$@"' mysqlcmd='mysql "${mysqlargs[@]}" "$@"'
mysqlargs=( mysqlargs=(
-B --default-character-set=utf8 -B --default-character-set=utf8

View File

@ -58,7 +58,9 @@ OPTIONS
Fichier en entrée. Ne pas spécifier cette option ou utiliser '-' pour Fichier en entrée. Ne pas spécifier cette option ou utiliser '-' pour
lire depuis l'entrée standard. lire depuis l'entrée standard.
-s NBLINES -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" && source "$(dirname "$0")/ulib/ulib" &&
@ -73,6 +75,7 @@ configs=()
profile= profile=
input= input=
skip_lines= skip_lines=
truncate=
parse_opts "${PRETTYOPTS[@]}" \ parse_opts "${PRETTYOPTS[@]}" \
--help '$exit_with display_help' \ --help '$exit_with display_help' \
-h:,-H:,--host: host= \ -h:,-H:,--host: host= \
@ -82,6 +85,7 @@ parse_opts "${PRETTYOPTS[@]}" \
-C:,--config: configs \ -C:,--config: configs \
-f:,--input: input= \ -f:,--input: input= \
-s:,--skip-lines: skip_lines= \ -s:,--skip-lines: skip_lines= \
-T,--truncate truncate=1 \
@ args -- "$@" && set -- "${args[@]}" || die "$args" @ args -- "$@" && set -- "${args[@]}" || die "$args"
dbtable="$1"; shift dbtable="$1"; shift
@ -132,14 +136,16 @@ else
skip_lines=$(($skip_lines + 1)) skip_lines=$(($skip_lines + 1))
fi 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=( mysqlargs=(
${host:+-h "$host"} ${port:+-P "$port"} ${host:+-h "$host"} ${port:+-P "$port"}
${user:+-u "$user"} ${user:+-u "$user"} ${database:+-D "$database"}
) )
[ "$password" != "--NOT-SET--" ] && mysqlargs=("${mysqlargs[@]}" -p"$password") [ "$password" != "--NOT-SET--" ] && mysqlargs=("${mysqlargs[@]}" -p"$password")
mysqlargs=("${mysqlargs[@]}" mysqlargs=("${mysqlargs[@]}"
"$database" "$truncate$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);"
-- --
--local-infile=1 --local-infile=1
) )