Validate grants and build the query that could set the given grants

    Note that this query contains arguments for user and host but not for
    grants or database.

def __grant_generate(grant,
                    database,
                    user,
                    host='localhost',
                    grant_option=False,
                    escape=True,
                    ssl_option=False):
    '''
    Validate grants and build the query that could set the given grants

    Note that this query contains arguments for user and host but not for
    grants or database.
    '''
    # TODO: Re-order the grant so it is according to the
    #       SHOW GRANTS for xxx@yyy query (SELECT comes first, etc)
    grant = re.sub(r'\s*,\s*', ', ', grant).upper()

    grant = __grant_normalize(grant)

    db_part = database.rpartition('.')
    dbc = db_part[0]
    table = db_part[2]

    if escape:
        if dbc != '*':
            # _ and % are authorized on GRANT queries and should get escaped
            # on the db name, but only if not requesting a table level grant
            dbc = quote_identifier(dbc, for_grants=(table == '*'))
        if table != '*':
            table = quote_identifier(table)
    # identifiers cannot be used as values, and same thing for grants
    qry = 'GRANT {0} ON {1}.{2} TO %(user)s@%(host)s'.format(grant, dbc, table)
    args = {}
    args['user'] = user
    args['host'] = host
    if ssl_option and isinstance(ssl_option, list):
        qry += __ssl_option_sanitize(ssl_option)
    if salt.utils.data.is_true(grant_option):
        qry += ' WITH GRANT OPTION'
    log.debug('Grant Query generated: %s args %s', qry, repr(args))
    return {'qry': qry, 'args': args}