Skip to content

Commit 95c8379

Browse files
Add support for setting field_id on nodes (#509)
1 parent f0ee0b9 commit 95c8379

File tree

8 files changed

+63
-20
lines changed

8 files changed

+63
-20
lines changed

cpp/GroupNode.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ extern "C"
1414
const std::shared_ptr<schema::Node>** fields,
1515
const int numFields,
1616
const std::shared_ptr<const LogicalType>* logical_type,
17+
const int field_id,
1718
std::shared_ptr<schema::Node>** groupNode)
1819
{
1920
TRYCATCH
@@ -25,7 +26,7 @@ extern "C"
2526
nodes.push_back(*fields[i]);
2627
}
2728

28-
*groupNode = new std::shared_ptr(schema::GroupNode::Make(name, repetition, nodes, logical_type == nullptr ? nullptr : *logical_type));
29+
*groupNode = new std::shared_ptr(schema::GroupNode::Make(name, repetition, nodes, logical_type == nullptr ? nullptr : *logical_type, field_id));
2930
)
3031
}
3132

cpp/PrimitiveNode.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@ extern "C"
1414
const std::shared_ptr<const LogicalType>* logical_type,
1515
const Type::type primitive_type,
1616
const int primitive_length,
17+
const int field_id,
1718
std::shared_ptr<schema::Node>** primitive_node)
1819
{
19-
TRYCATCH(*primitive_node = new std::shared_ptr<schema::Node>(schema::PrimitiveNode::Make(name, repetition, logical_type == nullptr ? nullptr : *logical_type, primitive_type, primitive_length));)
20+
TRYCATCH(*primitive_node = new std::shared_ptr<schema::Node>(schema::PrimitiveNode::Make(name, repetition, logical_type == nullptr ? nullptr : *logical_type, primitive_type, primitive_length, field_id));)
2021
}
2122

2223
PARQUETSHARP_EXPORT ExceptionInfo* PrimitiveNode_Column_Order(const std::shared_ptr<schema::PrimitiveNode>* node, ColumnOrder::type* column_order)

csharp.test/TestNode.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,22 @@ public static void TestNodeUtf8Name()
8383
Assert.AreEqual(name, primitiveNode.Name);
8484
}
8585

86+
[Test]
87+
public static void TestNodeFieldId()
88+
{
89+
using var groupNode = new GroupNode("group", Repetition.Required, new Node[0], fieldId: 42);
90+
using var logicalType = LogicalType.Int(32, true);
91+
using var primitiveNode = new PrimitiveNode("primitive", Repetition.Required, logicalType, PhysicalType.Int32, fieldId: 64);
92+
93+
using var clonedGroupNode = groupNode.DeepClone();
94+
using var clonedPrimitiveNode = primitiveNode.DeepClone();
95+
96+
Assert.AreEqual(42, groupNode.FieldId);
97+
Assert.AreEqual(42, clonedGroupNode.FieldId);
98+
Assert.AreEqual(64, primitiveNode.FieldId);
99+
Assert.AreEqual(64, clonedPrimitiveNode.FieldId);
100+
}
101+
86102
/// <summary>
87103
/// Verify that two nodes are not references to the same instance,
88104
/// and that none of their fields are.

csharp/PublicAPI/net471/PublicAPI.Shipped.txt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -678,7 +678,8 @@ ParquetSharp.Schema.GroupNode.FieldCount.get -> int
678678
ParquetSharp.Schema.GroupNode.FieldIndex(ParquetSharp.Schema.Node! node) -> int
679679
ParquetSharp.Schema.GroupNode.FieldIndex(string! name) -> int
680680
ParquetSharp.Schema.GroupNode.Fields.get -> ParquetSharp.Schema.Node![]!
681-
ParquetSharp.Schema.GroupNode.GroupNode(string! name, ParquetSharp.Repetition repetition, System.Collections.Generic.IReadOnlyList<ParquetSharp.Schema.Node!>! fields, ParquetSharp.LogicalType? logicalType = null) -> void
681+
ParquetSharp.Schema.GroupNode.GroupNode(string! name, ParquetSharp.Repetition repetition, System.Collections.Generic.IReadOnlyList<ParquetSharp.Schema.Node!>! fields, ParquetSharp.LogicalType? logicalType) -> void
682+
ParquetSharp.Schema.GroupNode.GroupNode(string! name, ParquetSharp.Repetition repetition, System.Collections.Generic.IReadOnlyList<ParquetSharp.Schema.Node!>! fields, ParquetSharp.LogicalType? logicalType = null, int fieldId = -1) -> void
682683
ParquetSharp.Schema.Node
683684
ParquetSharp.Schema.Node.ConvertedType.get -> ParquetSharp.Schema.ConvertedType
684685
ParquetSharp.Schema.Node.Dispose() -> void
@@ -697,7 +698,8 @@ ParquetSharp.Schema.NodeType.Primitive = 0 -> ParquetSharp.Schema.NodeType
697698
ParquetSharp.Schema.PrimitiveNode
698699
ParquetSharp.Schema.PrimitiveNode.ColumnOrder.get -> ParquetSharp.ColumnOrder
699700
ParquetSharp.Schema.PrimitiveNode.PhysicalType.get -> ParquetSharp.PhysicalType
700-
ParquetSharp.Schema.PrimitiveNode.PrimitiveNode(string! name, ParquetSharp.Repetition repetition, ParquetSharp.LogicalType! logicalType, ParquetSharp.PhysicalType physicalType, int primitiveLength = -1) -> void
701+
ParquetSharp.Schema.PrimitiveNode.PrimitiveNode(string! name, ParquetSharp.Repetition repetition, ParquetSharp.LogicalType! logicalType, ParquetSharp.PhysicalType physicalType, int primitiveLength) -> void
702+
ParquetSharp.Schema.PrimitiveNode.PrimitiveNode(string! name, ParquetSharp.Repetition repetition, ParquetSharp.LogicalType! logicalType, ParquetSharp.PhysicalType physicalType, int primitiveLength = -1, int fieldId = -1) -> void
701703
ParquetSharp.Schema.PrimitiveNode.TypeLength.get -> int
702704
ParquetSharp.SchemaDescriptor
703705
ParquetSharp.SchemaDescriptor.Column(int i) -> ParquetSharp.ColumnDescriptor!

csharp/PublicAPI/net6/PublicAPI.Shipped.txt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -682,7 +682,8 @@ ParquetSharp.Schema.GroupNode.FieldCount.get -> int
682682
ParquetSharp.Schema.GroupNode.FieldIndex(ParquetSharp.Schema.Node! node) -> int
683683
ParquetSharp.Schema.GroupNode.FieldIndex(string! name) -> int
684684
ParquetSharp.Schema.GroupNode.Fields.get -> ParquetSharp.Schema.Node![]!
685-
ParquetSharp.Schema.GroupNode.GroupNode(string! name, ParquetSharp.Repetition repetition, System.Collections.Generic.IReadOnlyList<ParquetSharp.Schema.Node!>! fields, ParquetSharp.LogicalType? logicalType = null) -> void
685+
ParquetSharp.Schema.GroupNode.GroupNode(string! name, ParquetSharp.Repetition repetition, System.Collections.Generic.IReadOnlyList<ParquetSharp.Schema.Node!>! fields, ParquetSharp.LogicalType? logicalType) -> void
686+
ParquetSharp.Schema.GroupNode.GroupNode(string! name, ParquetSharp.Repetition repetition, System.Collections.Generic.IReadOnlyList<ParquetSharp.Schema.Node!>! fields, ParquetSharp.LogicalType? logicalType = null, int fieldId = -1) -> void
686687
ParquetSharp.Schema.Node
687688
ParquetSharp.Schema.Node.ConvertedType.get -> ParquetSharp.Schema.ConvertedType
688689
ParquetSharp.Schema.Node.Dispose() -> void
@@ -701,7 +702,8 @@ ParquetSharp.Schema.NodeType.Primitive = 0 -> ParquetSharp.Schema.NodeType
701702
ParquetSharp.Schema.PrimitiveNode
702703
ParquetSharp.Schema.PrimitiveNode.ColumnOrder.get -> ParquetSharp.ColumnOrder
703704
ParquetSharp.Schema.PrimitiveNode.PhysicalType.get -> ParquetSharp.PhysicalType
704-
ParquetSharp.Schema.PrimitiveNode.PrimitiveNode(string! name, ParquetSharp.Repetition repetition, ParquetSharp.LogicalType! logicalType, ParquetSharp.PhysicalType physicalType, int primitiveLength = -1) -> void
705+
ParquetSharp.Schema.PrimitiveNode.PrimitiveNode(string! name, ParquetSharp.Repetition repetition, ParquetSharp.LogicalType! logicalType, ParquetSharp.PhysicalType physicalType, int primitiveLength) -> void
706+
ParquetSharp.Schema.PrimitiveNode.PrimitiveNode(string! name, ParquetSharp.Repetition repetition, ParquetSharp.LogicalType! logicalType, ParquetSharp.PhysicalType physicalType, int primitiveLength = -1, int fieldId = -1) -> void
705707
ParquetSharp.Schema.PrimitiveNode.TypeLength.get -> int
706708
ParquetSharp.SchemaDescriptor
707709
ParquetSharp.SchemaDescriptor.Column(int i) -> ParquetSharp.ColumnDescriptor!

csharp/PublicAPI/netstandard2.1/PublicAPI.Shipped.txt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -678,7 +678,8 @@ ParquetSharp.Schema.GroupNode.FieldCount.get -> int
678678
ParquetSharp.Schema.GroupNode.FieldIndex(ParquetSharp.Schema.Node! node) -> int
679679
ParquetSharp.Schema.GroupNode.FieldIndex(string! name) -> int
680680
ParquetSharp.Schema.GroupNode.Fields.get -> ParquetSharp.Schema.Node![]!
681-
ParquetSharp.Schema.GroupNode.GroupNode(string! name, ParquetSharp.Repetition repetition, System.Collections.Generic.IReadOnlyList<ParquetSharp.Schema.Node!>! fields, ParquetSharp.LogicalType? logicalType = null) -> void
681+
ParquetSharp.Schema.GroupNode.GroupNode(string! name, ParquetSharp.Repetition repetition, System.Collections.Generic.IReadOnlyList<ParquetSharp.Schema.Node!>! fields, ParquetSharp.LogicalType? logicalType) -> void
682+
ParquetSharp.Schema.GroupNode.GroupNode(string! name, ParquetSharp.Repetition repetition, System.Collections.Generic.IReadOnlyList<ParquetSharp.Schema.Node!>! fields, ParquetSharp.LogicalType? logicalType = null, int fieldId = -1) -> void
682683
ParquetSharp.Schema.Node
683684
ParquetSharp.Schema.Node.ConvertedType.get -> ParquetSharp.Schema.ConvertedType
684685
ParquetSharp.Schema.Node.Dispose() -> void
@@ -697,7 +698,8 @@ ParquetSharp.Schema.NodeType.Primitive = 0 -> ParquetSharp.Schema.NodeType
697698
ParquetSharp.Schema.PrimitiveNode
698699
ParquetSharp.Schema.PrimitiveNode.ColumnOrder.get -> ParquetSharp.ColumnOrder
699700
ParquetSharp.Schema.PrimitiveNode.PhysicalType.get -> ParquetSharp.PhysicalType
700-
ParquetSharp.Schema.PrimitiveNode.PrimitiveNode(string! name, ParquetSharp.Repetition repetition, ParquetSharp.LogicalType! logicalType, ParquetSharp.PhysicalType physicalType, int primitiveLength = -1) -> void
701+
ParquetSharp.Schema.PrimitiveNode.PrimitiveNode(string! name, ParquetSharp.Repetition repetition, ParquetSharp.LogicalType! logicalType, ParquetSharp.PhysicalType physicalType, int primitiveLength) -> void
702+
ParquetSharp.Schema.PrimitiveNode.PrimitiveNode(string! name, ParquetSharp.Repetition repetition, ParquetSharp.LogicalType! logicalType, ParquetSharp.PhysicalType physicalType, int primitiveLength = -1, int fieldId = -1) -> void
701703
ParquetSharp.Schema.PrimitiveNode.TypeLength.get -> int
702704
ParquetSharp.SchemaDescriptor
703705
ParquetSharp.SchemaDescriptor.Column(int i) -> ParquetSharp.ColumnDescriptor!

csharp/Schema/GroupNode.cs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,13 @@ namespace ParquetSharp.Schema
77
{
88
public sealed class GroupNode : Node
99
{
10-
public GroupNode(string name, Repetition repetition, IReadOnlyList<Node> fields, LogicalType? logicalType = null)
11-
: this(Make(name, repetition, fields, logicalType))
10+
public GroupNode(string name, Repetition repetition, IReadOnlyList<Node> fields, LogicalType? logicalType)
11+
: this(Make(name, repetition, fields, logicalType, -1))
12+
{
13+
}
14+
15+
public GroupNode(string name, Repetition repetition, IReadOnlyList<Node> fields, LogicalType? logicalType = null, int fieldId = -1)
16+
: this(Make(name, repetition, fields, logicalType, fieldId))
1217
{
1318
}
1419

@@ -46,7 +51,8 @@ public override Node DeepClone()
4651
Name,
4752
Repetition,
4853
clonedFields,
49-
logicalType is NoneLogicalType ? null : logicalType);
54+
logicalType is NoneLogicalType ? null : logicalType,
55+
FieldId);
5056
}
5157
finally
5258
{
@@ -57,13 +63,13 @@ public override Node DeepClone()
5763
}
5864
}
5965

60-
private static unsafe IntPtr Make(string name, Repetition repetition, IReadOnlyList<Node> fields, LogicalType? logicalType)
66+
private static unsafe IntPtr Make(string name, Repetition repetition, IReadOnlyList<Node> fields, LogicalType? logicalType, int fieldId)
6167
{
6268
var handles = fields.Select(f => f.Handle.IntPtr).ToArray();
6369

6470
fixed (IntPtr* pHandles = handles)
6571
{
66-
ExceptionInfo.Check(GroupNode_Make(name, repetition, (IntPtr) pHandles, handles.Length, logicalType?.Handle.IntPtr ?? IntPtr.Zero, out var groupNode));
72+
ExceptionInfo.Check(GroupNode_Make(name, repetition, (IntPtr) pHandles, handles.Length, logicalType?.Handle.IntPtr ?? IntPtr.Zero, fieldId, out var groupNode));
6773
GC.KeepAlive(fields);
6874
GC.KeepAlive(logicalType);
6975
return groupNode;
@@ -72,7 +78,7 @@ private static unsafe IntPtr Make(string name, Repetition repetition, IReadOnlyL
7278

7379
[DllImport(ParquetDll.Name)]
7480
private static extern IntPtr GroupNode_Make(
75-
[MarshalAs(UnmanagedType.LPUTF8Str)] string name, Repetition repetition, IntPtr fields, int numFields, IntPtr logicalType, out IntPtr groupNode);
81+
[MarshalAs(UnmanagedType.LPUTF8Str)] string name, Repetition repetition, IntPtr fields, int numFields, IntPtr logicalType, int fieldId, out IntPtr groupNode);
7682

7783
[DllImport(ParquetDll.Name)]
7884
private static extern IntPtr GroupNode_Field(IntPtr groupNode, int i, out IntPtr field);

csharp/Schema/PrimitiveNode.cs

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,19 @@ public PrimitiveNode(
1515
Repetition repetition,
1616
LogicalType logicalType,
1717
PhysicalType physicalType,
18-
int primitiveLength = -1)
19-
: this(Make(name, repetition, logicalType, physicalType, primitiveLength))
18+
int primitiveLength)
19+
: this(name, repetition, logicalType, physicalType, primitiveLength, -1)
20+
{
21+
}
22+
23+
public PrimitiveNode(
24+
string name,
25+
Repetition repetition,
26+
LogicalType logicalType,
27+
PhysicalType physicalType,
28+
int primitiveLength = -1,
29+
int fieldId = -1)
30+
: this(Make(name, repetition, logicalType, physicalType, primitiveLength, fieldId))
2031
{
2132
}
2233

@@ -37,27 +48,29 @@ public override Node DeepClone()
3748
Repetition,
3849
logicalType,
3950
PhysicalType,
40-
TypeLength);
51+
TypeLength,
52+
FieldId);
4153
}
4254

4355
private static IntPtr Make(
4456
string name,
4557
Repetition repetition,
4658
LogicalType logicalType,
4759
PhysicalType physicalType,
48-
int primitiveLength)
60+
int primitiveLength,
61+
int fieldId)
4962
{
5063
if (name == null) throw new ArgumentNullException(nameof(name));
5164
if (logicalType == null) throw new ArgumentNullException(nameof(logicalType));
5265

53-
ExceptionInfo.Check(PrimitiveNode_Make(name, repetition, logicalType.Handle.IntPtr, physicalType, primitiveLength, out var primitiveNode));
66+
ExceptionInfo.Check(PrimitiveNode_Make(name, repetition, logicalType.Handle.IntPtr, physicalType, primitiveLength, fieldId, out var primitiveNode));
5467
GC.KeepAlive(logicalType.Handle);
5568
return primitiveNode;
5669
}
5770

5871
[DllImport(ParquetDll.Name)]
5972
private static extern IntPtr PrimitiveNode_Make(
60-
[MarshalAs(UnmanagedType.LPUTF8Str)] string name, Repetition repetition, IntPtr logicalType, PhysicalType type, int primitiveLength, out IntPtr primitiveNode);
73+
[MarshalAs(UnmanagedType.LPUTF8Str)] string name, Repetition repetition, IntPtr logicalType, PhysicalType type, int primitiveLength, int fieldId, out IntPtr primitiveNode);
6174

6275
[DllImport(ParquetDll.Name)]
6376
private static extern IntPtr PrimitiveNode_Column_Order(IntPtr node, out ColumnOrder columnOrder);

0 commit comments

Comments
 (0)