# mysql(1) completion

# @since 2.12
_comp_xfunc_mysql_compgen_character_sets()
{
    local -a charsets
    _comp_expand_glob charsets '/usr/share/m{ariadb,ysql}/charsets/!(Index).xml'
    charsets+=(utf8)
    charsets=("${charsets[@]##*/}")
    charsets=("${charsets[@]%.xml}")
    _comp_compgen -U charsets -- -W '"${charsets[@]}"' -X ''
}

# @deprecated 2.12
_mysql_character_sets()
{
    _comp_compgen -ax mysql character_sets "$@"
}

_comp_cmd_mysql()
{
    local cur prev words cword was_split comp_args
    _comp_initialize -s -- "$@" || return

    # Prefer `mysqlshow` in the same dir as the command
    local pathcmd
    pathcmd=$(type -P -- "$1") && local PATH=${pathcmd%/*}:$PATH

    local noargopts='!(-*|*[uDhSPeI]*)'
    # shellcheck disable=SC2254
    case $prev in
        --user | -${noargopts}u)
            _comp_compgen -- -u
            return
            ;;
        --database | -${noargopts}D)
            _comp_compgen_split -- "$(mysqlshow 2>/dev/null |
                command sed -ne '2d' -e 's/^|.\([^|]*\)|.*/\1/p')"
            return
            ;;

        --host | -${noargopts}h)
            _comp_compgen_known_hosts
            return
            ;;
        --default-character-set)
            _comp_xfunc_mysql_compgen_character_sets
            return
            ;;

        --character-sets-dir | --ssl-capath)
            _comp_compgen_filedir -d
            return
            ;;
        --socket | -${noargopts}S)
            _comp_compgen_filedir sock
            return
            ;;
        --protocol)
            _comp_compgen -- -W 'tcp socket pipe memory'
            return
            ;;
        --defaults-file | --defaults-extra-file | --tee)
            _comp_compgen_filedir
            return
            ;;
        --ssl-ca | --ssl-cert)
            _comp_compgen_filedir '@(pem|cer|c?(e)rt)'
            return
            ;;
        --ssl-key)
            _comp_compgen_filedir '@(pem|key)'
            return
            ;;
        --port | --set-variable | --ssl-cipher | --connect_timeout | \
            --max_allowed_packet | --prompt | --net_buffer_length | --select_limit | \
            --max_join_size | --server-arg | --debug | --delimiter | --execute | --pager | \
            -${noargopts}[Pe])
            return
            ;;
        --help | --version | -${noargopts}[?IV])
            return
            ;;
    esac

    [[ $was_split ]] && return

    case $cur in
        --*)
            _comp_compgen_help
            _comp_compgen -a -- -W '--skip-comments --skip-ssl'
            [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
            return
            ;;

        # only complete long options
        -)
            compopt -o nospace
            COMPREPLY=(--)
            return
            ;;
    esac

    _comp_compgen_split -- "$(mysqlshow 2>/dev/null |
        command sed -ne '2d' -e 's/^|.\([^|]*\)|.*/\1/p')"
} &&
    complete -F _comp_cmd_mysql mysql
