Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
PATCH: mysql completions
- X-seq: zsh-workers 10072
- From: Adam Spiers <adam@xxxxxxxxxx>
- To: zsh workers mailing list <zsh-workers@xxxxxxxxxxxxxx>
- Subject: PATCH: mysql completions
- Date: Sat, 11 Mar 2000 18:25:33 +0000
- Mail-followup-to: zsh workers mailing list <zsh-workers@xxxxxxxxxxxxxx>
- Mailing-list: contact zsh-workers-help@xxxxxxxxxxxxxx; run by ezmlm
- Reply-to: Adam Spiers <adam@xxxxxxxxxx>
This turned out to be a really good way of getting my head round
recent changes to the completion system. Comments on the style (and
correctness, especially relating to tags) welcome ...
I haven't included a patch for Completion/User/.distfiles, as I'm
quite out of sync and it might have broken.
Index: Completion/User/_mysql_utils
===================================================================
--- Completion/User/_mysql_utils Sat Mar 11 18:18:50 2000
+++ Completion/User/_mysql_utils Sat Mar 11 18:18:25 2000
@@ -0,0 +1,245 @@
+#compdef mysql mysqlshow mysqldump mysqladmin
+#
+# zsh completion functions for mysql client programs
+# Adam Spiers <adam@xxxxxxxxxx>
+#
+
+##
+## Auxiliary functions
+##
+
+_mysql_get_identity () {
+ _mysql_user=${opt_args[-u]-$opt_args[--user]}
+ _mysql_port=${opt_args[-P]-$opt_args[--port]}
+ _mysql_host=${opt_args[-h]-$opt_args[--host]}
+
+ _mysql_params=(
+ ${_mysql_user+"--user=$_mysql_user"}
+ ${_mysql_host+"--host=$_mysql_host"}
+ ${_mysql_port+"--port=$_mysql_port"}
+ )
+}
+
+_mysql_hosts () {
+ local _mysql_user _mysql_port _mysql_host _mysql_params
+ _mysql_get_identity
+
+ _wanted hosts expl 'server host' &&
+ _combination -s '[:@]' '' hosts-ports-users \
+ ${_mysql_user:+users=${_mysql_user:q}} \
+ ${_mysql_port:+ports=${_mysql_port:q}} \
+ hosts "$expl[@]"
+}
+
+_mysql_ports () {
+ local _mysql_user _mysql_port _mysql_host _mysql_params
+ _mysql_get_identity
+
+ _wanted ports expl 'server port' &&
+ _combination -s '[:@]' '' hosts-ports-users \
+ ${_mysql_user:+users=${_mysql_user:q}} \
+ ${_mysql_host:+hosts=${_mysql_host:q}} \
+ ports "$expl[@]"
+}
+
+_mysql_users () {
+ local _mysql_user _mysql_port _mysql_host _mysql_params
+ _mysql_get_identity
+
+ _wanted users expl 'server username' &&
+ _combination -s '[:@]' '' hosts-ports-users \
+ ${_mysql_host:+hosts=${_mysql_host:q}} \
+ ${_mysql_port:+ports=${_mysql_port:q}} \
+ users "$expl[@]"
+}
+
+_mysql_databases () {
+ local _mysql_user _mysql_port _mysql_host _mysql_params
+ _mysql_get_identity
+
+ local _mysql_databases
+ _mysql_databases=(
+ ${(f)~~"$( echo "show databases" |
+ mysql "$_mysql_params[@]" )"}
+ )
+ shift _mysql_databases
+
+ compadd "$expl[@]" - $_mysql_databases
+}
+
+_mysql_tables () {
+ local _mysql_user _mysql_port _mysql_host _mysql_params
+ _mysql_get_identity
+
+ local _mysql_tables
+ _mysql_tables=(
+ ${(f)~~"$( echo "show tables" |
+ mysql "$_mysql_params[@]" $1 )"}
+ )
+ # remove header
+ shift _mysql_tables
+
+ compadd "$expl[@]" - $_mysql_tables
+}
+
+_mysql_variables () {
+ _values -s , 'MySQL client variables' \
+ 'max_allowed_packet[maximum allowed packet size]:Packet size in bytes:' \
+ 'net_buffer_length[network buffer length]:Buffer length in bytes:'
+}
+
+
+##
+## The actual completion code for the commands
+##
+
+_mysql_common_opts=(
+ {-\?,--help}'[display help]'
+ {-S+,--socket=}':server socket file:_files'
+ {-h+,--host=}':server hostname:_mysql_hosts'
+ {-P+,--port=}':server port:_mysql_ports'
+ {-u+,--user=}':server username:_mysql_users'
+ {-p+,--password=}':server password: '
+ {-C,--compress}'[use compression in server/client protocol]'
+)
+
+_mysql () {
+ local curcontext="$curcontext" state line expl
+ typeset -A opt_args
+
+ _arguments -C -s \
+ "$_mysql_common_opts[@]" \
+ {-V,--version}'[display client version]' \
+ {-A,--no-auto-rehash}'[no automatic rehashing]' \
+ '(-t --table)'{-B,--batch}'[batch mode (no pretty ASCII)]' \
+ {-T,--debug-info}'[print debug info on exit]' \
+ {-e,--exec-command}':batch-execute specified command and exit: ' \
+ {-f,--force}'[continue through errors]' \
+ {-i,--ignore-space}'[ignore space after function names]' \
+ {-H,--html}'[produce HTML output]' \
+ {-n,--unbuffered}'[flush the buffer after each query]' \
+ {-O,--set-variable=}':set variable:_mysql_variables' \
+ {-o,--one-database}'[only update the default database]' \
+ {-q,--quick}'[disable caching of the result]' \
+ {-r,--raw}'[write fields without conversion]' \
+ {-s,--silent}'[silent mode]' \
+ {-L,--skip-line-numbers}"[don't write line number for errors]" \
+ {-N,--skip-column-names}"[don't write column names in results]" \
+ '(-B --batch)'{-t,--table}'[output in table format]' \
+ {-v,--verbose}'[verbose mode]' \
+ {-E,--vertical}'[print query output vertically]' \
+ {-w,--wait}'[wait and retry server connection if necessary]' \
+ ':MySQL database to use:_mysql_databases'
+}
+
+_mysqlshow () {
+ local curcontext="$curcontext" state line expl
+ typeset -A opt_args
+
+ _arguments -C -s \
+ "$_mysql_common_opts[@]" \
+ {-V,--version}'[display version]' \
+ {-\#+,--debug=}':debug file: ' \
+ ':MySQL database to show:_mysql_databases' \
+ ':table to show:{ _mysql_tables "$line[1]" }' \
+ ':field wildcard: '
+}
+
+_mysqldump () {
+ local curcontext="$curcontext" state line expl
+ typeset -A opt_args
+
+ _arguments -C -s \
+ "$_mysql_common_opts[@]" \
+ {-V,--version}'[display version]' \
+ {-a,--all}'[include all create options]' \
+ {-\#+,--debug=}':debug file: ' \
+ {-c,--complete-insert}'[use complete insert statements]' \
+ {-e,--extended-insert}'[allow new INSERT syntax]' \
+ "--add-drop-table[add a 'drop table' before each create]" \
+ "--add-locks[add locks around insert statements]" \
+ "--allow-keywords[allow creation of column names that are keywords]" \
+ "--delayed[insert rows with INSERT DELAYED]" \
+ {-F,--flush-logs}'[flush logs file in server before dump]' \
+ {-l,--lock-tables}'[lock all tables for read]' \
+ {-t,--no-create-info}"[don't write table creation info]" \
+ {-d,--no-data}"[don't write row information]" \
+ {-O,--set-variable}':set variable:_mysql_variables' \
+ '--opt[create fastest possible dump for reading]' \
+ {-q,--quick}"[don't buffer, dump directly to stdout]" \
+ {-T,--tab=}"[dump tab-separated text files for each table]:directory to store text files:_files -/" \
+ {-w+,--where=}'[dump only selected records]:WHERE clause to limit records to dump: ' \
+ '--fields-terminated-by=:(with --tab) fields in textfile terminated by ...: ' \
+ '--fields-enclosed-by=:(with --tab) fields in import file enclosed by ...: ' \
+ '--fields-optionally-enclosed-by=:(with --tab) fields in import file optionally enclosed by ...: ' \
+ '--fields-escaped-by=:(with --tab) fields in import file escaped by ...: ' \
+ '--lines-terminated-by=:(with --tab) lines in import file terminated by ...: ' \
+ ':MySQL database to dump:_mysql_databases' \
+ '*:tables to dump:{ _mysql_tables "$line[1]" }'
+}
+
+_mysqladmin () {
+ local curcontext="$curcontext" state line expl
+ typeset -A opt_args
+
+ _arguments -C -s \
+ "$_mysql_common_opts[@]" \
+ {-v,--version}'[display version]' \
+ {-\#+,--debug=}':debug file: ' \
+ {-f,--force}'[continue through errors]' \
+ {-i+,--sleep=}'[repeat commands periodically]:number of seconds between executions: ' \
+ {-s,--silent}"[silently exit if can't connect to server]" \
+ {-t+,--timeout=}'[timeout for connection]' \
+ {-w+,--wait=}'[wait and retry server connection if necessary]:number of retries: ' \
+ '*::admin command:_mysqladmin_commands'
+}
+
+_mysqladmin_commands () {
+ local cmds expl
+ cmds=(
+ create drop extended-status
+ flush-{hosts,logs,status,tables,privileges}
+ kill password ping processlist
+ reload refresh shutdown
+ status variables version
+ )
+
+ if (( CURRENT == 1 )); then
+ _tags commands && compadd "$@" $cmds
+ else
+ local curcontext="$curcontext"
+
+ case "$words[1]" in
+ (create)
+ ;&
+ (drop)
+ _wanted mysqldbs expl "MySQL databases" && _mysql_databases
+ ;;
+ (kill)
+ _message 'thread ids'
+ ;;
+ (password)
+ _message 'new password'
+ ;;
+ esac
+ fi
+}
+
+_mysql_utils () {
+ case "$words[1]" in
+ mysql)
+ _mysql "$@"
+ ;;
+ mysqlshow)
+ _mysqlshow "$@"
+ ;;
+ mysqldump)
+ _mysqldump "$@"
+ ;;
+ mysqladmin)
+ _mysqladmin "$@"
+ ;;
+ esac
+}
+
+_mysql_utils "$@"
Messages sorted by:
Reverse Date,
Date,
Thread,
Author