# bash completion for sysbench

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

    case $prev in
        --num-threads | --max-requests | --max-time | --thread-stack-size | \
            --help | --version | help | version)
            return
            ;;
        --init-rng | --debug | --validate)
            _comp_compgen -- -W 'on off'
            return
            ;;
        --test)
            _comp_compgen -- -W 'fileio cpu memory threads mutex oltp'
            return
            ;;
        --cpu-max-prime)
            return
            ;;
        --file-test-mode)
            _comp_compgen -- -W 'seqwr seqrewr seqrd rndrd rndwr rndrw'
            return
            ;;
        --file-io-mode)
            _comp_compgen -- -W 'sync async fastmmap slowmmap'
            return
            ;;
        --file-extra-flags)
            _comp_compgen -- -W 'sync dsync direct'
            return
            ;;
        --file-fsync-all | --file-fsync-end)
            _comp_compgen -- -W 'on off'
            return
            ;;
        --file-fsync-mode)
            _comp_compgen -- -W 'fsync fdatasync'
            return
            ;;
        --memory-scope)
            _comp_compgen -- -W 'global local'
            return
            ;;
        --memory-hugetlb)
            _comp_compgen -- -W 'on off'
            return
            ;;
        --memory-oper)
            _comp_compgen -- -W 'read write none'
            return
            ;;
        --memory-access-mode)
            _comp_compgen -- -W 'seq rnd'
            return
            ;;
        --oltp-test-mode)
            _comp_compgen -- -W 'simple complex nontrx sp'
            return
            ;;
        --oltp-read-only | --oltp-skip-trx | --oltp-quto-inc | --mysql-ssl)
            _comp_compgen -- -W 'on off'
            return
            ;;
        --oltp-nontrx-mode)
            _comp_compgen -- -W 'select update_key update_nokey insert delete'
            return
            ;;
        --oltp-dist-type)
            _comp_compgen -- -W 'uniform gaussian special'
            return
            ;;
        --db-driver)
            _comp_compgen_split -- "$("$1" --test=oltp help 2>/dev/null |
                command sed -e '/^.*database drivers:/,/^$/!d' \
                    -ne 's/^  *\([^ ]*\) .*/\1/p')"
            return
            ;;
        --db-ps-mode)
            _comp_compgen -- -W 'auto disable'
            return
            ;;
        --mysql-socket)
            _comp_compgen_filedir sock
            return
            ;;
        --mysql-table-engine)
            _comp_compgen -- -W 'myisam innodb bdb heap ndbcluster federated'
            return
            ;;
        --mysql-engine-trx)
            _comp_compgen -- -W 'yes no auto'
            return
            ;;
        --*)
            [[ $was_split ]] && return
            ;;
    esac

    # find out which test we're running
    local i test="" has_test=""
    for ((i = 1; i < ${#words[@]} - 1; i++)); do
        # TODO --test= is deprecated, bare test name preferred
        if [[ ${words[i]} == --test=* ]]; then
            test=${words[i]#*=}
            has_test=set
            break
        fi
    done

    local opts
    _comp_compgen -v opts help
    if [[ $has_test ]]; then
        opts=("${opts[@]/#--test=/}")
        _comp_compgen -aRv opts help -- --test="$test" help
        opts+=(prepare run cleanup help version)
    fi

    if [[ $cur == -* || ! $has_test ]]; then
        _comp_compgen -- -W '"${opts[@]}"'
        [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
    else
        _comp_compgen -- -W "prepare run cleanup help version"
    fi
} &&
    complete -F _comp_cmd_sysbench sysbench
