Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions cpp/Enums.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -110,5 +110,12 @@ namespace
static_assert((int) ::arrow::Type::type::LIST == 25);
static_assert((int) ::arrow::Type::type::LARGE_LIST == 36);
static_assert((int) ::arrow::Type::type::LIST_VIEW == 41);

static_assert((int) ::ParquetDataPageVersion::V1 == 0);
static_assert((int) ::ParquetDataPageVersion::V2 == 1);

static_assert((int) ::parquet::SizeStatisticsLevel::None == 0);
static_assert((int) ::parquet::SizeStatisticsLevel::ColumnChunk == 1);
static_assert((int) ::parquet::SizeStatisticsLevel::PageAndColumnChunk == 2);
}
}
10 changes: 10 additions & 0 deletions cpp/WriterProperties.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -167,4 +167,14 @@ extern "C"
{
TRYCATCH(*store_decimal_as_integer = (*writer_properties)->store_decimal_as_integer();)
}

PARQUETSHARP_EXPORT ExceptionInfo* WriterProperties_Data_Page_Version(const std::shared_ptr<WriterProperties>* writer_properties, ::ParquetDataPageVersion* data_page_version)
{
TRYCATCH(*data_page_version = (*writer_properties)->data_page_version();)
}

PARQUETSHARP_EXPORT ExceptionInfo* WriterProperties_Size_Statistics_Level(const std::shared_ptr<WriterProperties>* writer_properties, ::SizeStatisticsLevel* size_statistics_level)
{
TRYCATCH(*size_statistics_level = (*writer_properties)->size_statistics_level();)
}
}
10 changes: 10 additions & 0 deletions cpp/WriterPropertiesBuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -246,4 +246,14 @@ extern "C"
{
TRYCATCH(builder->max_statistics_size(max_statistics_size);)
}

PARQUETSHARP_EXPORT ExceptionInfo* WriterPropertiesBuilder_Data_Page_Version(WriterProperties::Builder* builder, ::ParquetDataPageVersion data_page_version)
{
TRYCATCH(builder->data_page_version(data_page_version);)
}

PARQUETSHARP_EXPORT ExceptionInfo* WriterPropertiesBuilder_Set_Size_Statistics_Level(WriterProperties::Builder* builder, ::SizeStatisticsLevel size_statistics_level)
{
TRYCATCH(builder->set_size_statistics_level(size_statistics_level);)
}
}
22 changes: 22 additions & 0 deletions csharp.test/TestParquetDataPageVersion.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using NUnit.Framework;

namespace ParquetSharp.Test
{
[TestFixture]
public class TestParquetDataPageVersion
{
/// <summary>
/// We pass custom enum ParquetSharp.ParquetDataPageVersion values from the Arrow C# library into the Arrow C++ library
/// and expect that the integer representations are the same so that no conversion is required.
/// Verify this is true.
///
/// See Enums.cpp in the C++ library which uses static assertions to verify the same conditions on the C++ side.
/// </summary>
[Test]
public void VerifyParquetDataPageVersionEnumValues()
{
Assert.That((int) ParquetDataPageVersion.V1, Is.EqualTo(0));
Assert.That((int) ParquetDataPageVersion.V2, Is.EqualTo(1));
}
}
}
23 changes: 23 additions & 0 deletions csharp.test/TestSizeStatisticsLevel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using NUnit.Framework;

namespace ParquetSharp.Test
{
[TestFixture]
public class TestSizeStatisticsLevel
{
/// <summary>
/// We pass custom enum ParquetSharp.SizeStatisticsLevel values from the Arrow C# library into the Arrow C++ library
/// and expect that the integer representations are the same so that no conversion is required.
/// Verify this is true.
///
/// See Enums.cpp in the C++ library which uses static assertions to verify the same conditions on the C++ side.
/// </summary>
[Test]
public void VerifySizeStatisticsLevelEnumValues()
{
Assert.That((int) SizeStatisticsLevel.None, Is.EqualTo(0));
Assert.That((int) SizeStatisticsLevel.ColumnChunk, Is.EqualTo(1));
Assert.That((int) SizeStatisticsLevel.PageAndColumnChunk, Is.EqualTo(2));
}
}
}
7 changes: 7 additions & 0 deletions csharp.test/TestWriterProperties.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ public static void TestDefaultProperties()
Assert.That(p.MemoryPool.BackendName, Is.Not.Empty);
Assert.False(p.StoreDecimalAsInteger);
Assert.AreEqual(4096, p.MaxStatisticsSize(new ColumnPath("anypath")));
Assert.AreEqual(p.DataPageVersion, ParquetDataPageVersion.V1);
Assert.AreEqual(p.SizeStatisticsLevel, SizeStatisticsLevel.PageAndColumnChunk);
Assert.AreEqual(4096, p.MaxStatisticsSize(new ColumnPath("anypath")));
}

[Test]
Expand All @@ -50,6 +53,8 @@ public static void TestPropertiesBuilder()
.MemoryPool(MemoryPool.SystemMemoryPool())
.EnableStoreDecimalAsInteger()
.SetMaxStatisticsSize(512)
.DataPageVersion(ParquetDataPageVersion.V2)
.SetSizeStatisticsLevel(SizeStatisticsLevel.ColumnChunk)
.Build();

Assert.AreEqual("Meeeee!!!", p.CreatedBy);
Expand All @@ -67,6 +72,8 @@ public static void TestPropertiesBuilder()
Assert.AreEqual("system", p.MemoryPool.BackendName);
Assert.True(p.StoreDecimalAsInteger);
Assert.AreEqual(512, p.MaxStatisticsSize(new ColumnPath("anypath")));
Assert.AreEqual(p.DataPageVersion, ParquetDataPageVersion.V2);
Assert.AreEqual(p.SizeStatisticsLevel, SizeStatisticsLevel.ColumnChunk);
}

[Test]
Expand Down
8 changes: 8 additions & 0 deletions csharp/ParquetDataPageVersion.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace ParquetSharp
{
public enum ParquetDataPageVersion
{
V1 = 0,
V2 = 1
}
}
13 changes: 12 additions & 1 deletion csharp/PublicAPI.Unshipped.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,15 @@ ParquetSharp.ReaderProperties.SetFooterReadSize(long size) -> void
ParquetSharp.WriterProperties.StoreDecimalAsInteger.get -> bool
ParquetSharp.WriterPropertiesBuilder.EnableStoreDecimalAsInteger() -> ParquetSharp.WriterPropertiesBuilder!
ParquetSharp.WriterPropertiesBuilder.DisableStoreDecimalAsInteger() -> ParquetSharp.WriterPropertiesBuilder!
ParquetSharp.WriterPropertiesBuilder.SetMaxStatisticsSize(ulong maxStatisticsSize) -> ParquetSharp.WriterPropertiesBuilder!
ParquetSharp.WriterPropertiesBuilder.SetMaxStatisticsSize(ulong maxStatisticsSize) -> ParquetSharp.WriterPropertiesBuilder!
ParquetSharp.ParquetDataPageVersion
ParquetSharp.ParquetDataPageVersion.V1 = 0 -> ParquetSharp.ParquetDataPageVersion
ParquetSharp.ParquetDataPageVersion.V2 = 1 -> ParquetSharp.ParquetDataPageVersion
ParquetSharp.WriterProperties.DataPageVersion.get -> ParquetSharp.ParquetDataPageVersion
ParquetSharp.WriterPropertiesBuilder.DataPageVersion(ParquetSharp.ParquetDataPageVersion dataPageVersion) -> ParquetSharp.WriterPropertiesBuilder!
ParquetSharp.SizeStatisticsLevel
ParquetSharp.SizeStatisticsLevel.None = 0 -> ParquetSharp.SizeStatisticsLevel
ParquetSharp.SizeStatisticsLevel.ColumnChunk = 1 -> ParquetSharp.SizeStatisticsLevel
ParquetSharp.SizeStatisticsLevel.PageAndColumnChunk = 2 -> ParquetSharp.SizeStatisticsLevel
ParquetSharp.WriterProperties.SizeStatisticsLevel.get -> ParquetSharp.SizeStatisticsLevel
ParquetSharp.WriterPropertiesBuilder.SetSizeStatisticsLevel(ParquetSharp.SizeStatisticsLevel level) -> ParquetSharp.WriterPropertiesBuilder!
9 changes: 9 additions & 0 deletions csharp/SizeStatisticsLevel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace ParquetSharp
{
public enum SizeStatisticsLevel : byte
{
None = 0,
ColumnChunk = 1,
PageAndColumnChunk = 2
}
}
18 changes: 18 additions & 0 deletions csharp/WriterProperties.cs
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,18 @@ public SortingColumn[] SortingColumns()
/// </summary>
public bool StoreDecimalAsInteger => ExceptionInfo.Return<bool>(Handle, WriterProperties_Store_Decimal_As_Integer);

/// <summary>
/// The data page version to use when writing data pages.
/// Default is V1.
/// </summary>
public ParquetDataPageVersion DataPageVersion => ExceptionInfo.Return<ParquetDataPageVersion>(Handle, WriterProperties_Data_Page_Version);

/// <summary>
/// The level to write size statistics for all columns.
/// Default is None.
/// </summary>
public SizeStatisticsLevel SizeStatisticsLevel => ExceptionInfo.Return<SizeStatisticsLevel>(Handle, WriterProperties_Size_Statistics_Level);

internal readonly ParquetHandle Handle;

[DllImport(ParquetDll.Name)]
Expand Down Expand Up @@ -348,5 +360,11 @@ public SortingColumn[] SortingColumns()

[DllImport(ParquetDll.Name)]
private static extern IntPtr WriterProperties_Store_Decimal_As_Integer(IntPtr writerProperties, out bool storeDecimalAsInteger);

[DllImport(ParquetDll.Name)]
private static extern IntPtr WriterProperties_Data_Page_Version(IntPtr writerProperties, out ParquetDataPageVersion dataPageVersion);

[DllImport(ParquetDll.Name)]
private static extern IntPtr WriterProperties_Size_Statistics_Level(IntPtr writerProperties, out SizeStatisticsLevel sizeStatisticsLevel);
}
}
33 changes: 33 additions & 0 deletions csharp/WriterPropertiesBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -662,6 +662,32 @@ public WriterPropertiesBuilder DisableStoreDecimalAsInteger()
return this;
}

/// <summary>
/// Specify the data page version.
/// </summary>
public WriterPropertiesBuilder DataPageVersion(ParquetDataPageVersion dataPageVersion)
{
ExceptionInfo.Check(WriterPropertiesBuilder_Data_Page_Version(_handle.IntPtr, dataPageVersion));
GC.KeepAlive(_handle);
return this;
}

/// <summary>
/// Set the level to write size statistics for all columns.
///
/// Note that if page index is not enabled,
/// page level size statistics will not be written even if the level
/// is set to PageAndColumnChunk.
/// </summary>
/// <param name="level"> The level to write size statistics</param>
/// <returns>This builder instance.</returns>
public WriterPropertiesBuilder SetSizeStatisticsLevel(SizeStatisticsLevel level)
{
ExceptionInfo.Check(WriterPropertiesBuilder_Set_Size_Statistics_Level(_handle.IntPtr, level));
GC.KeepAlive(_handle);
return this;
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static void OnDefaultProperty<T>(T? defaultPropertyValue, Action<T> setProperty)
where T : struct
Expand Down Expand Up @@ -819,6 +845,13 @@ private static void OnDefaultRefProperty<T>(T? defaultPropertyValue, Action<T> s
[DllImport(ParquetDll.Name)]
private static extern IntPtr WriterPropertiesBuilder_Set_Max_Statistics_Size(IntPtr builder, ulong maxStatisticsSize);

[DllImport(ParquetDll.Name)]
private static extern IntPtr WriterPropertiesBuilder_Data_Page_Version(IntPtr builder, ParquetDataPageVersion dataPageVersion);

[DllImport(ParquetDll.Name)]
private static extern IntPtr WriterPropertiesBuilder_Set_Size_Statistics_Level(IntPtr builder, SizeStatisticsLevel level);


private readonly ParquetHandle _handle;
}
}
Loading