This is an automated email from the ASF dual-hosted git repository.

raulcd pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-swift.git

commit 15983da35cb8037e7a15e00bc79eea436822ab95
Author: abandy <[email protected]>
AuthorDate: Wed Jun 5 22:58:04 2024 -0400

    GH-41999: [Swift] Add methods for adding array and vargs to arrow array 
(#42000)
    
    ### Rationale for this change
    
    Would be nice to have methods for adding an array of values or variable 
args to when constructing an arrow array.
    
    ### Are these changes tested?
    
    Yes, tests are included
    * GitHub Issue: #41999
    
    Authored-by: Alva Bandy <[email protected]>
    Signed-off-by: Sutou Kouhei <[email protected]>
---
 Arrow/Sources/Arrow/ArrowArrayBuilder.swift | 12 +++++++++
 Arrow/Tests/ArrowTests/ArrayTests.swift     | 40 +++++++++++++++++++++++++++--
 2 files changed, 50 insertions(+), 2 deletions(-)

diff --git a/Arrow/Sources/Arrow/ArrowArrayBuilder.swift 
b/Arrow/Sources/Arrow/ArrowArrayBuilder.swift
index 4865b8a..40f9628 100644
--- a/Arrow/Sources/Arrow/ArrowArrayBuilder.swift
+++ b/Arrow/Sources/Arrow/ArrowArrayBuilder.swift
@@ -35,6 +35,18 @@ public class ArrowArrayBuilder<T: ArrowBufferBuilder, U: 
ArrowArray<T.ItemType>>
         self.bufferBuilder = try T()
     }
 
+    public func append(_ vals: T.ItemType?...) {
+        for val in vals {
+            self.bufferBuilder.append(val)
+        }
+    }
+
+    public func append(_ vals: [T.ItemType?]) {
+        for val in vals {
+            self.bufferBuilder.append(val)
+        }
+    }
+
     public func append(_ val: T.ItemType?) {
         self.bufferBuilder.append(val)
     }
diff --git a/Arrow/Tests/ArrowTests/ArrayTests.swift 
b/Arrow/Tests/ArrowTests/ArrayTests.swift
index 10ffc4f..ed0cb11 100644
--- a/Arrow/Tests/ArrowTests/ArrayTests.swift
+++ b/Arrow/Tests/ArrowTests/ArrayTests.swift
@@ -18,7 +18,7 @@
 import XCTest
 @testable import Arrow
 
-final class ArrayTests: XCTestCase {
+final class ArrayTests: XCTestCase { // swiftlint:disable:this type_body_length
     func testPrimitiveArray() throws {
         // This is an example of a functional test case.
         // Use XCTAssert and related functions to verify your tests produce 
the correct
@@ -271,4 +271,40 @@ final class ArrayTests: XCTestCase {
         XCTAssertEqual(stringHolder.nullCount, 10)
         XCTAssertEqual(stringHolder.length, 100)
     }
- }
+
+    func testAddVArgs() throws {
+        let arrayBuilder: NumberArrayBuilder<UInt8> = try 
ArrowArrayBuilders.loadNumberArrayBuilder()
+        arrayBuilder.append(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
+        XCTAssertEqual(arrayBuilder.length, 10)
+        XCTAssertEqual(try arrayBuilder.finish()[2], 2)
+        let doubleBuilder: NumberArrayBuilder<Double> = try 
ArrowArrayBuilders.loadNumberArrayBuilder()
+        doubleBuilder.append(0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8)
+        XCTAssertEqual(doubleBuilder.length, 9)
+        XCTAssertEqual(try doubleBuilder.finish()[4], 4.4)
+        let stringBuilder = try ArrowArrayBuilders.loadStringArrayBuilder()
+        stringBuilder.append("0", "1", "2", "3", "4", "5", "6")
+        XCTAssertEqual(stringBuilder.length, 7)
+        XCTAssertEqual(try stringBuilder.finish()[4], "4")
+        let boolBuilder = try ArrowArrayBuilders.loadBoolArrayBuilder()
+        boolBuilder.append(true, false, true, false)
+        XCTAssertEqual(try boolBuilder.finish()[2], true)
+    }
+
+    func testAddArray() throws {
+        let arrayBuilder: NumberArrayBuilder<UInt8> = try 
ArrowArrayBuilders.loadNumberArrayBuilder()
+        arrayBuilder.append([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
+        XCTAssertEqual(arrayBuilder.length, 10)
+        XCTAssertEqual(try arrayBuilder.finish()[2], 2)
+        let doubleBuilder: NumberArrayBuilder<Double> = try 
ArrowArrayBuilders.loadNumberArrayBuilder()
+        doubleBuilder.append([0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8])
+        XCTAssertEqual(doubleBuilder.length, 9)
+        XCTAssertEqual(try doubleBuilder.finish()[4], 4.4)
+        let stringBuilder = try ArrowArrayBuilders.loadStringArrayBuilder()
+        stringBuilder.append(["0", "1", "2", "3", "4", "5", "6"])
+        XCTAssertEqual(stringBuilder.length, 7)
+        XCTAssertEqual(try stringBuilder.finish()[4], "4")
+        let boolBuilder = try ArrowArrayBuilders.loadBoolArrayBuilder()
+        boolBuilder.append([true, false, true, false])
+        XCTAssertEqual(try boolBuilder.finish()[2], true)
+    }
+}

Reply via email to