code: func (b *builtinUncompressSig) evalString(row chunk.Row) (string, bool, error) {
  	sc := b.ctx.GetSessionVars().StmtCtx
  	payload, isNull, err := b.args[0].EvalString(b.ctx, row)
  	if isNull || err != nil {
  		return "", true, err
  	}
  	if len(payload) == 0 {
  		return "", false, nil
  	}
  	if len(payload) <= 4 {
  		// corrupted
  		sc.AppendWarning(errZlibZData)
  		return "", true, nil
  	}
  	length := binary.LittleEndian.Uint32([]byte(payload[0:4]))
  	bytes, err := inflate([]byte(payload[4:]))
  	if err != nil {
  		sc.AppendWarning(errZlibZData)
  		return "", true, nil
  	}
  	if length < uint32(len(bytes)) {
  		sc.AppendWarning(errZlibZBuf)
  		return "", true, nil
  	}
  	return string(bytes), false, nil
  }
docs: // evalString evals UNCOMPRESS(compressed_string).
  // See https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html#function_uncompress