message: skip decompression buffer in some cases
diff: @@ -282,7 +282,11 @@ string_t UncompressedStringStorage::ReadOverflowString(ColumnSegment &segment, V
  uint32_t remaining = compressed_size;
  offset += 2 * sizeof(uint32_t);
  - // allocate a buffer to store the compressed string
  + data_ptr_t decompression_ptr;
  + // If string is in single block we decompress straight from it, else we copy first
  + if (remaining <= Storage::BLOCK_SIZE - sizeof(block_id_t) - offset) {
  + decompression_ptr = handle->node->buffer + offset;
  + } else {
  auto decompression_buffer = std::unique_ptr<data_t[]>(new data_t[compressed_size]);
  auto target_ptr = decompression_buffer.get();
  @@ -302,13 +306,15 @@ string_t UncompressedStringStorage::ReadOverflowString(ColumnSegment &segment, V
  offset = 0;
  }
  }
  + decompression_ptr = decompression_buffer.get();
  + }
  // overflow strings on disk are gzipped, decompress here
  auto decompressed_target_handle =
  buffer_manager.Allocate(MaxValue<idx_t>(Storage::BLOCK_SIZE, uncompressed_size));
  auto decompressed_target_ptr = decompressed_target_handle->node->buffer;
  MiniZStream s;
  - s.Decompress((const char *)decompression_buffer.get(), compressed_size, (char *)decompressed_target_ptr,
  + s.Decompress((const char *)decompression_ptr, compressed_size, (char *)decompressed_target_ptr,
  uncompressed_size);
  auto final_buffer = decompressed_target_handle->node->buffer;
  