docs: 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}