Skip to content

Commit

Permalink
GH-32240: [C#] Support decompression when reading an IPC stream from …
Browse files Browse the repository at this point in the history
…ReadOnlyMemory (#34108)

This is a small follow-up to #33603 to support reading a compressed IPC stream from a `ReadOnlyMemory<byte>`, as I missed that this has a separate reader implementation.
* Closes: #32240

Authored-by: Adam Reeve <adreeve@gmail.com>
Signed-off-by: Weston Pace <weston.pace@gmail.com>
  • Loading branch information
adamreeve committed Feb 10, 2023
1 parent 05c8b22 commit 1140ad3
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ internal sealed class ArrowMemoryReaderImplementation : ArrowReaderImplementatio
private readonly ReadOnlyMemory<byte> _buffer;
private int _bufferPosition;

public ArrowMemoryReaderImplementation(ReadOnlyMemory<byte> buffer) : base()
public ArrowMemoryReaderImplementation(ReadOnlyMemory<byte> buffer, ICompressionCodecFactory compressionCodecFactory) : base(null, compressionCodecFactory)
{
_buffer = buffer;
}
Expand Down
7 changes: 6 additions & 1 deletion csharp/src/Apache.Arrow/Ipc/ArrowStreamReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,12 @@ public ArrowStreamReader(Stream stream, MemoryAllocator allocator, ICompressionC

public ArrowStreamReader(ReadOnlyMemory<byte> buffer)
{
_implementation = new ArrowMemoryReaderImplementation(buffer);
_implementation = new ArrowMemoryReaderImplementation(buffer, compressionCodecFactory: null);
}

public ArrowStreamReader(ReadOnlyMemory<byte> buffer, ICompressionCodecFactory compressionCodecFactory)
{
_implementation = new ArrowMemoryReaderImplementation(buffer, compressionCodecFactory);
}

private protected ArrowStreamReader(ArrowReaderImplementation implementation)
Expand Down
20 changes: 19 additions & 1 deletion csharp/test/Apache.Arrow.Tests/ArrowStreamReaderTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -205,8 +205,26 @@ public void CanReadCompressedIpcStream(string fileName)
var codecFactory = new Compression.CompressionCodecFactory();
using var reader = new ArrowStreamReader(stream, codecFactory);

var batch = reader.ReadNextRecordBatch();
VerifyCompressedIpcFileBatch(reader.ReadNextRecordBatch());
}

[Theory]
[InlineData("ipc_lz4_compression.arrow_stream")]
[InlineData("ipc_zstd_compression.arrow_stream")]
public void CanReadCompressedIpcStreamFromMemoryBuffer(string fileName)
{
var assembly = Assembly.GetExecutingAssembly();
using var stream = assembly.GetManifestResourceStream($"Apache.Arrow.Tests.Resources.{fileName}");
var buffer = new byte[stream.Length];
stream.ReadExactly(buffer);
var codecFactory = new Compression.CompressionCodecFactory();
using var reader = new ArrowStreamReader(buffer, codecFactory);

VerifyCompressedIpcFileBatch(reader.ReadNextRecordBatch());
}

private static void VerifyCompressedIpcFileBatch(RecordBatch batch)
{
var intArray = (Int32Array) batch.Column("integers");
var floatArray = (FloatArray) batch.Column("floats");

Expand Down

0 comments on commit 1140ad3

Please sign in to comment.