code: func (b *builtinQuoteSig) evalString(row chunk.Row) (string, bool, error) {
  	str, isNull, err := b.args[0].EvalString(b.ctx, row)
  	if isNull || err != nil {
  		return "", true, err
  	}
  
  	runes := []rune(str)
  	buffer := bytes.NewBufferString("")
  	buffer.WriteRune('\'')
  	for i, runeLength := 0, len(runes); i < runeLength; i++ {
  		switch runes[i] {
  		case '\\', '\'':
  			buffer.WriteRune('\\')
  			buffer.WriteRune(runes[i])
  		case 0:
  			buffer.WriteRune('\\')
  			buffer.WriteRune('0')
  		case '\032':
  			buffer.WriteRune('\\')
  			buffer.WriteRune('Z')
  		default:
  			buffer.WriteRune(runes[i])
  		}
  	}
  	buffer.WriteRune('\'')
  
  	return buffer.String(), false, nil
  }
docs: // evalString evals QUOTE(str).
  // See https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_quote