From 1a53f0ac13de3b022976772fc33aff49f387b379 Mon Sep 17 00:00:00 2001 From: Sense545 Date: Thu, 8 Dec 2022 08:06:04 +0100 Subject: [PATCH 1/6] Added missing dipose of RowGroupMetaData --- csharp/RowGroupReader.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/csharp/RowGroupReader.cs b/csharp/RowGroupReader.cs index 9e6590cc..67671898 100644 --- a/csharp/RowGroupReader.cs +++ b/csharp/RowGroupReader.cs @@ -13,6 +13,7 @@ internal RowGroupReader(IntPtr handle, ParquetFileReader parquetFileReader) public void Dispose() { + _metaData?.Dispose(); _handle.Dispose(); } From 8398a777c8cbc841ce6630b10d98b1028da9d9ef Mon Sep 17 00:00:00 2001 From: Sense545 Date: Thu, 8 Dec 2022 08:11:23 +0100 Subject: [PATCH 2/6] Implemented IDisposable for RowGroupMetaData --- csharp/RowGroupMetaData.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/csharp/RowGroupMetaData.cs b/csharp/RowGroupMetaData.cs index 48c1936e..1469391a 100644 --- a/csharp/RowGroupMetaData.cs +++ b/csharp/RowGroupMetaData.cs @@ -3,13 +3,18 @@ namespace ParquetSharp { - public sealed class RowGroupMetaData + public sealed class RowGroupMetaData : IDisposable { internal RowGroupMetaData(IntPtr handle) { _handle = handle; } + public void Dispose() + { + _handle.Dispose(); + } + public int NumColumns => ExceptionInfo.Return(_handle, RowGroupMetaData_Num_Columns); public long NumRows => ExceptionInfo.Return(_handle, RowGroupMetaData_Num_Rows); public SchemaDescriptor Schema => _schema ??= new SchemaDescriptor(ExceptionInfo.Return(_handle, RowGroupMetaData_Schema)); From d5c576fa723b5cec044c91f5b4a4c48246351e62 Mon Sep 17 00:00:00 2001 From: Sense545 Date: Thu, 8 Dec 2022 10:14:03 +0100 Subject: [PATCH 3/6] Added Free functions --- cpp/RowGroupMetaData.cpp | 5 +++++ cpp/SchemaDescriptor.cpp | 5 +++++ csharp/RowGroupMetaData.cs | 8 ++++++-- csharp/SchemaDescriptor.cs | 14 +++++++++++--- 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/cpp/RowGroupMetaData.cpp b/cpp/RowGroupMetaData.cpp index e8a3a2b3..966caa44 100644 --- a/cpp/RowGroupMetaData.cpp +++ b/cpp/RowGroupMetaData.cpp @@ -8,6 +8,11 @@ using namespace parquet; extern "C" { + PARQUETSHARP_EXPORT void RowGroupMetaData_Free(const RowGroupMetaData* row_group_meta_data) + { + delete row_group_meta_data; + } + PARQUETSHARP_EXPORT ExceptionInfo* RowGroupMetaData_Get_Column_Chunk_Meta_Data(const RowGroupMetaData* row_group_meta_data, int i, ColumnChunkMetaData** column_chunk_meta_data) { TRYCATCH(*column_chunk_meta_data = row_group_meta_data->ColumnChunk(i).release();) diff --git a/cpp/SchemaDescriptor.cpp b/cpp/SchemaDescriptor.cpp index ab9626b7..8f06480a 100644 --- a/cpp/SchemaDescriptor.cpp +++ b/cpp/SchemaDescriptor.cpp @@ -8,6 +8,11 @@ using namespace parquet; extern "C" { + PARQUETSHARP_EXPORT ExceptionInfo* SchemaDescriptor_Free(const SchemaDescriptor* descriptor) + { + delete descriptor; + } + PARQUETSHARP_EXPORT ExceptionInfo* SchemaDescriptor_Column(const SchemaDescriptor* descriptor, int i, const ColumnDescriptor** column_descriptor) { TRYCATCH(*column_descriptor = descriptor->Column(i);) diff --git a/csharp/RowGroupMetaData.cs b/csharp/RowGroupMetaData.cs index 1469391a..0a013536 100644 --- a/csharp/RowGroupMetaData.cs +++ b/csharp/RowGroupMetaData.cs @@ -7,11 +7,12 @@ public sealed class RowGroupMetaData : IDisposable { internal RowGroupMetaData(IntPtr handle) { - _handle = handle; + _handle = new ParquetHandle(handle, RowGroupMetaData_Free); } public void Dispose() { + _schema?.Dispose(); _handle.Dispose(); } @@ -40,7 +41,10 @@ public ColumnChunkMetaData GetColumnChunkMetaData(int i) [DllImport(ParquetDll.Name)] private static extern IntPtr RowGroupMetaData_Total_Byte_Size(IntPtr rowGroupMetaData, out long totalByteSize); - private readonly IntPtr _handle; + [DllImport(ParquetDll.Name)] + private static extern IntPtr RowGroupMetaData_Free(IntPtr rowGroupMetaData); + + private readonly ParquetHandle _handle; private SchemaDescriptor? _schema; } } diff --git a/csharp/SchemaDescriptor.cs b/csharp/SchemaDescriptor.cs index aeab3ea1..760db627 100644 --- a/csharp/SchemaDescriptor.cs +++ b/csharp/SchemaDescriptor.cs @@ -4,11 +4,16 @@ namespace ParquetSharp { - public sealed class SchemaDescriptor + public sealed class SchemaDescriptor : IDisposable { internal SchemaDescriptor(IntPtr schemaDescriptorHandle) { - _handle = schemaDescriptorHandle; + _handle = new ParquetHandle(schemaDescriptorHandle, SchemaDescriptor_Free); + } + + public void Dispose() + { + _handle.Dispose(); } public GroupNode GroupNode => (GroupNode) (Node.Create(ExceptionInfo.Return(_handle, SchemaDescriptor_Group_Node)) ?? throw new InvalidOperationException()); @@ -38,6 +43,9 @@ public Node ColumnRoot(int i) return Node.Create(ExceptionInfo.Return(_handle, i, SchemaDescriptor_Get_Column_Root)) ?? throw new InvalidOperationException(); } + [DllImport(ParquetDll.Name)] + private static extern IntPtr SchemaDescriptor_Free(IntPtr descriptor); + [DllImport(ParquetDll.Name)] private static extern IntPtr SchemaDescriptor_Column(IntPtr descriptor, int i, out IntPtr columnDescriptor); @@ -62,6 +70,6 @@ public Node ColumnRoot(int i) [DllImport(ParquetDll.Name)] private static extern IntPtr SchemaDescriptor_Schema_Root(IntPtr descriptor, out IntPtr schemaRoot); - private readonly IntPtr _handle; + private readonly ParquetHandle _handle; } } From 747738ede4793f46e7ae8d6abc7b67b4080d8a36 Mon Sep 17 00:00:00 2001 From: Sense545 Date: Thu, 8 Dec 2022 10:39:51 +0100 Subject: [PATCH 4/6] Fixed SchemaDescriptor_Free --- .vscode/settings.json | 3 +++ cpp/ColumnChunkMetaData.cpp | 2 +- cpp/SchemaDescriptor.cpp | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..f5d622ff --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "cquery.cacheDirectory": "${workspaceFolder}/.vscode/cquery_cached_index/" +} \ No newline at end of file diff --git a/cpp/ColumnChunkMetaData.cpp b/cpp/ColumnChunkMetaData.cpp index 721c2e16..6a0bad8a 100644 --- a/cpp/ColumnChunkMetaData.cpp +++ b/cpp/ColumnChunkMetaData.cpp @@ -20,7 +20,7 @@ extern "C" PARQUETSHARP_EXPORT void ColumnChunkMetaData_Free(const ColumnChunkMetaData* column_chunk_meta_data) { - delete column_chunk_meta_data; + delete column_chunk_meta_data } PARQUETSHARP_EXPORT ExceptionInfo* ColumnChunkMetaData_Compression(const ColumnChunkMetaData* column_chunk_meta_data, Compression::type* compression) diff --git a/cpp/SchemaDescriptor.cpp b/cpp/SchemaDescriptor.cpp index 8f06480a..c2457dd6 100644 --- a/cpp/SchemaDescriptor.cpp +++ b/cpp/SchemaDescriptor.cpp @@ -8,7 +8,7 @@ using namespace parquet; extern "C" { - PARQUETSHARP_EXPORT ExceptionInfo* SchemaDescriptor_Free(const SchemaDescriptor* descriptor) + PARQUETSHARP_EXPORT void SchemaDescriptor_Free(const SchemaDescriptor* descriptor) { delete descriptor; } From a886442b51fd7963cb54064e8eccc59ada8e056c Mon Sep 17 00:00:00 2001 From: Sense545 Date: Thu, 8 Dec 2022 10:42:58 +0100 Subject: [PATCH 5/6] Added semicolon to ColumnChunkMetaData_Free --- cpp/ColumnChunkMetaData.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ColumnChunkMetaData.cpp b/cpp/ColumnChunkMetaData.cpp index 6a0bad8a..721c2e16 100644 --- a/cpp/ColumnChunkMetaData.cpp +++ b/cpp/ColumnChunkMetaData.cpp @@ -20,7 +20,7 @@ extern "C" PARQUETSHARP_EXPORT void ColumnChunkMetaData_Free(const ColumnChunkMetaData* column_chunk_meta_data) { - delete column_chunk_meta_data + delete column_chunk_meta_data; } PARQUETSHARP_EXPORT ExceptionInfo* ColumnChunkMetaData_Compression(const ColumnChunkMetaData* column_chunk_meta_data, Compression::type* compression) From c30ff557b65a589107d1904e7703597f2db9f607 Mon Sep 17 00:00:00 2001 From: Sense545 Date: Thu, 8 Dec 2022 12:01:10 +0100 Subject: [PATCH 6/6] Updated return types --- csharp/RowGroupMetaData.cs | 2 +- csharp/SchemaDescriptor.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/csharp/RowGroupMetaData.cs b/csharp/RowGroupMetaData.cs index 0a013536..3bb04d87 100644 --- a/csharp/RowGroupMetaData.cs +++ b/csharp/RowGroupMetaData.cs @@ -42,7 +42,7 @@ public ColumnChunkMetaData GetColumnChunkMetaData(int i) private static extern IntPtr RowGroupMetaData_Total_Byte_Size(IntPtr rowGroupMetaData, out long totalByteSize); [DllImport(ParquetDll.Name)] - private static extern IntPtr RowGroupMetaData_Free(IntPtr rowGroupMetaData); + private static extern void RowGroupMetaData_Free(IntPtr rowGroupMetaData); private readonly ParquetHandle _handle; private SchemaDescriptor? _schema; diff --git a/csharp/SchemaDescriptor.cs b/csharp/SchemaDescriptor.cs index 760db627..18b3d9d4 100644 --- a/csharp/SchemaDescriptor.cs +++ b/csharp/SchemaDescriptor.cs @@ -44,7 +44,7 @@ public Node ColumnRoot(int i) } [DllImport(ParquetDll.Name)] - private static extern IntPtr SchemaDescriptor_Free(IntPtr descriptor); + private static extern void SchemaDescriptor_Free(IntPtr descriptor); [DllImport(ParquetDll.Name)] private static extern IntPtr SchemaDescriptor_Column(IntPtr descriptor, int i, out IntPtr columnDescriptor);