Skip to content

Commit 59a4f6d

Browse files
author
Marco
committed
refactor: Update ArrowTypeList and related classes to use ArrowField for element type
1 parent 5063daa commit 59a4f6d

File tree

5 files changed

+14
-9
lines changed

5 files changed

+14
-9
lines changed

Arrow/Sources/Arrow/ArrowArray.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,7 @@ public class NestedArray: ArrowArray<[Any?]> {
374374
}
375375

376376
self.children = [try ArrowArrayHolderImpl.loadArray(
377-
listType.elementType,
377+
listType.elementField.type,
378378
with: arrowData.children[0]
379379
)]
380380

Arrow/Sources/Arrow/ArrowArrayBuilder.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ public class ListArrayBuilder: ArrowArrayBuilder<ListBufferBuilder, NestedArray>
179179

180180
public override init(_ elementType: ArrowType) throws {
181181
self.valueBuilder = try ArrowArrayBuilders.loadBuilder(arrowType: elementType)
182-
try super.init(ArrowTypeList(elementType))
182+
try super.init(ArrowTypeList(ArrowField("item", type: elementType, isNullable: true)))
183183
}
184184

185185
public override func append(_ values: [Any?]?) {
@@ -324,7 +324,7 @@ public class ArrowArrayBuilders {
324324
guard let listType = arrowType as? ArrowTypeList else {
325325
throw ArrowError.invalid("Expected ArrowTypeList for \(arrowType.id)")
326326
}
327-
return try ListArrayBuilder(listType.elementType)
327+
return try ListArrayBuilder(listType.elementField.type)
328328
default:
329329
throw ArrowError.unknownType("Builder not found for arrow type: \(arrowType.id)")
330330
}

Arrow/Sources/Arrow/ArrowReaderHelper.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,8 @@ func findArrowType( // swiftlint:disable:this cyclomatic_complexity function_bod
310310
return ArrowType(ArrowType.ArrowUnknown)
311311
}
312312
let childType = findArrowType(childField)
313-
return ArrowTypeList(childType)
313+
let childFieldName = childField.name ?? "item"
314+
return ArrowTypeList(ArrowField(childFieldName, type: childType, isNullable: childField.nullable))
314315
default:
315316
return ArrowType(ArrowType.ArrowUnknown)
316317
}

Arrow/Sources/Arrow/ArrowType.swift

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -174,12 +174,16 @@ public class ArrowTypeStruct: ArrowType {
174174
}
175175

176176
public class ArrowTypeList: ArrowType {
177-
let elementType: ArrowType
177+
public let elementField: ArrowField
178178

179-
public init(_ elementType: ArrowType) {
180-
self.elementType = elementType
179+
public init(_ elementField: ArrowField) {
180+
self.elementField = elementField
181181
super.init(ArrowType.ArrowList)
182182
}
183+
184+
public convenience init(_ elementType: ArrowType, nullable: Bool = true) {
185+
self.init(ArrowField("item", type: elementType, isNullable: nullable))
186+
}
183187
}
184188

185189
public class ArrowType {
@@ -396,7 +400,7 @@ public class ArrowType {
396400
throw ArrowError.invalid("Invalid struct type")
397401
case ArrowTypeId.list:
398402
if let listType = self as? ArrowTypeList {
399-
return "+l" + (try listType.elementType.cDataFormatId)
403+
return "+l" + (try listType.elementField.type.cDataFormatId)
400404
}
401405
throw ArrowError.invalid("Invalid list type")
402406
default:

Arrow/Tests/ArrowTests/ArrayTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,7 @@ final class ArrayTests: XCTestCase { // swiftlint:disable:this type_body_length
474474
}
475475

476476
func testListArrayNested() throws {
477-
let innerListType = ArrowTypeList(ArrowType(ArrowType.ArrowInt32))
477+
let innerListType = ArrowTypeList(ArrowField("item", type: ArrowType(ArrowType.ArrowInt32), isNullable: true))
478478
let outerListBuilder = try ListArrayBuilder(innerListType)
479479

480480
guard let innerListBuilder = outerListBuilder.valueBuilder as? ListArrayBuilder else {

0 commit comments

Comments
 (0)