mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-11-04 07:21:06 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			249 lines
		
	
	
	
		
			9.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			249 lines
		
	
	
	
		
			9.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
#compdef mysql mysqlshow mysqldump mysqlimport mysqladmin
 | 
						|
 | 
						|
_mysql_get_identity() {
 | 
						|
  local _mysql_pass _mysql_sock
 | 
						|
 | 
						|
  _mysql_user=${(v)opt_args[(i)-u|--user]}
 | 
						|
  _mysql_port=${(v)opt_args[(i)-P|--port]}
 | 
						|
  _mysql_host=${(v)opt_args[(i)-h|--host]}
 | 
						|
  _mysql_pass=${(v)opt_args[(i)-p|--password]}
 | 
						|
  _mysql_sock=${(v)opt_args[(i)-S|--socket]}
 | 
						|
 | 
						|
  _mysql_params=(
 | 
						|
    ${_mysql_user:+"--user=$_mysql_user"}
 | 
						|
    ${_mysql_host:+"--host=$_mysql_host"}
 | 
						|
    ${_mysql_port:+"--port=$_mysql_port"}
 | 
						|
    ${_mysql_pass:+"--password=$_mysql_pass"}
 | 
						|
    ${_mysql_sock:+"--socket=$_mysql_sock"}
 | 
						|
  )
 | 
						|
}
 | 
						|
 | 
						|
_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 -
 | 
						|
}
 | 
						|
 | 
						|
_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 -
 | 
						|
}
 | 
						|
 | 
						|
_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 -
 | 
						|
}
 | 
						|
 | 
						|
_mysql_databases() {
 | 
						|
  local _mysql_user _mysql_port _mysql_host _mysql_params
 | 
						|
  _mysql_get_identity
 | 
						|
 | 
						|
  compadd "$@" - ${${(f)~~"$(_call_program databases \
 | 
						|
      mysql "$_mysql_params[@]" <<<'show databases' 2>/dev/null)"}[2,-1]}
 | 
						|
}
 | 
						|
 | 
						|
_mysql_tables() {
 | 
						|
  local _mysql_user _mysql_port _mysql_host _mysql_params
 | 
						|
  _mysql_get_identity
 | 
						|
 | 
						|
  compadd "$@" - ${${(f)~~"$(_call_program tables \
 | 
						|
      mysql "$_mysql_params[@]" $1 <<< 'show tables' 2>/dev/null)"}[2,-1]}
 | 
						|
}
 | 
						|
 | 
						|
_mysql() {
 | 
						|
  _arguments -s \
 | 
						|
    "$_mysql_common_opts[@]" "$_mysql_variables_opts[@]" \
 | 
						|
    '(--disable-auto-rehash)--auto-rehash[enable automatic rehashing]' \
 | 
						|
    '(-t --table)'{-B,--batch}'[batch mode (no pretty ASCII)]' \
 | 
						|
    '--character-sets-dir=[specify directory containing character sets]:directory:_directories' \
 | 
						|
    '--default-character-set=[specify character set]:character set' \
 | 
						|
    {-T,--debug-info}'[print debug info on exit]' \
 | 
						|
    '(:)'{-D+,--database=}'[specify database to use]' \
 | 
						|
    {-e+,--exec=}':[execute specified command]:mysql command' \
 | 
						|
    {-f,--force}'[continue through errors]' \
 | 
						|
    '(--disable-named-commands)'{-G,--named-commands}'[enable named commands]' \
 | 
						|
    {-i,--ignore-spaces}'[ignore space after function names]' \
 | 
						|
    --local-infile \
 | 
						|
    {-b,--no-beep}'[turn off beep on error]' \
 | 
						|
    {-H,--html}'[produce HTML output]' \
 | 
						|
    {-x,--xml}'[produce XML output]' \
 | 
						|
    '(--skip-line-numbers)--line-numbers[write line numbers for errors]' \
 | 
						|
    "(--line-numbers)--skip-line-numbers[don't write line numbers for errors]" \
 | 
						|
    {-n,--unbuffered}'[flush the buffer after each query]' \
 | 
						|
    '--column-names[write column names in results]' \
 | 
						|
    "--skip-column-names[don't write column names in results]" \
 | 
						|
    {-o,--one-database}'[only update the default database]' \
 | 
						|
    '--pager=[specify pager to use for displaying results]::pager' \
 | 
						|
    '--prompt=[set the mysql prompt to specified value]:prompt' \
 | 
						|
    {-q,--quick}'[disable caching of the result]' \
 | 
						|
    {-r,--raw}'[write fields without conversion]' \
 | 
						|
    {-s,--silent}'[silent mode]' \
 | 
						|
    '(-B --batch)'{-t,--table}'[output in table format]' \
 | 
						|
    '(-B --batch)--tee=[append all output to file]:file:_files' \
 | 
						|
    {-U,--safe-updates}'[only allow UPDATE and DELETE that uses keys]' \
 | 
						|
    {-E,--vertical}'[print query output vertically]' \
 | 
						|
    {-w,--wait}'[wait and retry server connection if necessary]' \
 | 
						|
    '(--pager)--disable-pager[print directly to stdout]' \
 | 
						|
    '(--auto-rehash)--disable-auto-rehash[disable automatic hashing]' \
 | 
						|
    '(-G --named-commands)--disable-named-commands' \
 | 
						|
    ':MySQL database:_mysql_databases'
 | 
						|
}
 | 
						|
 | 
						|
_mysqlshow() {
 | 
						|
  _arguments -s \
 | 
						|
    "$_mysql_common_opts[@]" \
 | 
						|
    ':MySQL database to show:_mysql_databases' \
 | 
						|
    ':table to show:{ _mysql_tables "$line[1]" }' \
 | 
						|
    ':field wildcard'
 | 
						|
}
 | 
						|
 | 
						|
_mysqldump() {
 | 
						|
  _arguments -s \
 | 
						|
    "$_mysql_common_opts[@]" "$_mysql_variables_opts[@]" \
 | 
						|
    {-a,--all}'[include all create options]' \
 | 
						|
    {-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]" \
 | 
						|
    '--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]" }'
 | 
						|
}
 | 
						|
 | 
						|
_mysqlimport() {
 | 
						|
  _arguments -s \
 | 
						|
    "$_mysql_common_opts[@]" "$_mysql_variables_opts[@]" \
 | 
						|
    '(-c --columns)'{-c,--columns=}'[use only specified columns to import the data to]:column list' \
 | 
						|
    '(-d --delete)'{-d,--delete}'[first delete all rows from table]' \
 | 
						|
    '--fields-terminated-by=:fields in textfile terminated by ...:' \
 | 
						|
    '--fields-enclosed-by=:fields in import file enclosed by ...:' \
 | 
						|
    '--fields-optionally-enclosed-by=:fields in import file optionally enclosed by ...:' \
 | 
						|
    '--fields-escaped-by=:fields in import file escaped by ...:' \
 | 
						|
    '(-f --force)'{-f,--force}'[continue through errors]' \
 | 
						|
    '(-r --replace -i --ignore)'{-i,--ignore}'[if duplicate key found, keep old row]' \
 | 
						|
    '--ignore-lines=[ignore specified number of lines from input file]:number of lines' \
 | 
						|
    '--lines-terminated-by=[specify line terminator in input file]:terminator' \
 | 
						|
    '(-L --local)'{-L,--local}'[read all files through the client]' \
 | 
						|
    '(-l --lock-tables)'{-l,--lock-tables}'[lock all tables for write]' \
 | 
						|
    '--low-priority[use LOW_PRIORITY when updating the table]' \
 | 
						|
    '(-i --ignore -r --replace)'{-r,--replace}'[if duplicate key found, replace old row]' \
 | 
						|
    ':MySQL database:_mysql_databases'
 | 
						|
}
 | 
						|
_mysqladmin() {
 | 
						|
  local curcontext="$curcontext" state line expl ret=1
 | 
						|
  typeset -A opt_args
 | 
						|
 | 
						|
  _arguments -C -s \
 | 
						|
    "$_mysql_common_opts[@]" \
 | 
						|
    '(-f --force)'{-f,--force}'[continue through errors]' \
 | 
						|
    '(-i --sleep)'{-i+,--sleep=}'[repeat commands periodically]:number of seconds between executions' \
 | 
						|
    '(-s --silent)'{-s,--silent}"[silently exit if can't connect to server]" \
 | 
						|
    '(-t --timeout)'{-t+,--timeout=}'[specify timeout for connection]:time (seconds)' \
 | 
						|
    '(-w --wait)'{-w+,--wait=}'[wait and retry server connection if necessary]:number of retries' \
 | 
						|
    '*::mysqladmin command:->mysqladmin-commands' && ret=0
 | 
						|
 | 
						|
  if [[ -n "$state" ]]; then
 | 
						|
    if (( CURRENT == 1 )); then
 | 
						|
      _wanted commands expl 'mysqladmin command' compadd - \
 | 
						|
	  create drop extended-status \
 | 
						|
	  flush-{hosts,logs,status,tables,threads,privileges} \
 | 
						|
	  kill password ping processlist \
 | 
						|
	  reload refresh shutdown \
 | 
						|
	  status start-slave stop-slave variables version && ret=0
 | 
						|
    else
 | 
						|
      case "${words[1]:t}" in
 | 
						|
	create|drop)
 | 
						|
	  _wanted databases expl "MySQL database" _mysql_databases && ret=0
 | 
						|
	;;
 | 
						|
	kill)
 | 
						|
	  _message -e ids 'thread ids'
 | 
						|
	;;
 | 
						|
	password)
 | 
						|
	  _message -e passwords 'new password'
 | 
						|
	;;
 | 
						|
      esac
 | 
						|
    fi
 | 
						|
  fi
 | 
						|
 | 
						|
  return ret
 | 
						|
}
 | 
						|
 | 
						|
_mysql_utils() {
 | 
						|
  local _mysql_common_opts _mysql_variables_opts
 | 
						|
 | 
						|
  _mysql_common_opts=(
 | 
						|
    '(- *)'{-\?,--help}'[display help]'
 | 
						|
    '(- *)'{-V,--version}'[display version information]' \
 | 
						|
    {-\#+,--debug=}'[specify debug log file]:log file:_files'
 | 
						|
    '--print-defaults[print the program argument list and exit]'
 | 
						|
    "--no-defaults[don't read default options from any options file]"
 | 
						|
    '--defaults-file=[read defaults from the given file]:file:_files'
 | 
						|
    '--defaults-extra-file=[read specified file after the global files]:defaults file:_files'
 | 
						|
    '(-S --socket)'{-S+,--socket=}'[specify socket file to use for connection]:server socket file:_files'
 | 
						|
    '(-h --host)'{-h+,--host=}'[specify server hostname]:hostname:_mysql_hosts'
 | 
						|
    '(-P,--port)'{-P+,--port=}'[specify port number for connection]:server port:_mysql_ports'
 | 
						|
    '(-u --user)'{-u+,--user=}'[specify username for login]:server username:_mysql_users'
 | 
						|
    '(-p --password)'{-p-,--password=}'[specify password to use for connection]:server password'
 | 
						|
    '(-C --compress)'{-C,--compress}'[use compression in server/client protocol]'
 | 
						|
    \*{-v,--verbose}'[more verbose output]'
 | 
						|
  )
 | 
						|
 | 
						|
  _mysql_variables_opts=(
 | 
						|
    '--max_allowed_packet[maximum allowed packet size]:packet size in bytes'
 | 
						|
    '--net_buffer_length[network buffer length]:buffer length in bytes'
 | 
						|
    '--connect_timeout:timeout'
 | 
						|
    '--select_limit:limit'
 | 
						|
    '--max_join_size:size'
 | 
						|
  )
 | 
						|
 | 
						|
  case "$service" in
 | 
						|
    mysql)
 | 
						|
      _mysql "$@"
 | 
						|
    ;;
 | 
						|
    mysqlshow)
 | 
						|
      _mysqlshow "$@"
 | 
						|
    ;;
 | 
						|
    mysqldump)
 | 
						|
      _mysqldump "$@"
 | 
						|
    ;;
 | 
						|
    mysqlimport)
 | 
						|
      _mysqlimport "$@"
 | 
						|
    ;;
 | 
						|
    mysqladmin)
 | 
						|
      _mysqladmin "$@"
 | 
						|
    ;;
 | 
						|
  esac
 | 
						|
}
 | 
						|
 | 
						|
_mysql_utils "$@"
 |