[ 
https://issues.apache.org/jira/browse/ARROW-4545?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Wes McKinney updated ARROW-4545:
--------------------------------
    Fix Version/s:     (was: 0.14.0)

> [C#] Extend Append/AppendRange in BinaryArray to support building rows
> ----------------------------------------------------------------------
>
>                 Key: ARROW-4545
>                 URL: https://issues.apache.org/jira/browse/ARROW-4545
>             Project: Apache Arrow
>          Issue Type: Improvement
>          Components: C#
>            Reporter: Chris Hutchinson
>            Priority: Major
>
> This is a proposal to extend BinaryArray to provide the ability to call 
> Append/AppendRange to grow list elements when building arrays, and to expose 
> values in ArrowBuffer.Builder<T> through a property to facilitate algorithms 
> that require introspecting the buffer data (sorting, filtering) when building 
> an array.
> *Example:*
> {code:java}
> var builder = new BinaryArray.Builder()
>      .Append(10, false)     
>      .Append(20, false)
>      .Mark();
> builder.Append(builder.Values[0], true);
> var array = builder.Build();
> // General idea:
> //
> // 1. Append byte (10) to current element (0)
> // 2. Append byte (20) to current element (0)
> // 3. Mark end of the row 
> // 4. Append byte (10) to current element (1)
> // Constructs a binary array with 2 elements:
> //
> // [0] 10, 20
> // [1] 10{code}
>  
> This proposed change would add the concept of "current element" to the 
> builder, which in the specification are separated by recording the value 
> offset. Append(true) appends one or more bytes to the current element and 
> then marks the element as completed. Append(false) appends one or more bytes 
> to the current element; Mark is required to signal to the builder that the 
> current element is complete.
> h2. *Alternative Concept*
> An alternative concept could be to add a new overload for Append that accepts 
> another builder type with the purpose of building individual list elements. 
> This would keep symmetry with the primitive array types in that the growth 
> functions always append a single element to the array (where an element is an 
> entire list, for list arrays). Essentially the additional builder type's 
> purpose is to build a list of a specific primitive. 
> *Example:*
> {code:java}
> var builder = new BinaryArray.Builder()
>     .Append(e => e.Append(10).Append(20))
>     .Append(e => e.Append(30))
>     .Build();
> // Constructs a binary array with 2 elements:
> //
> // [0] 10, 20
> // [1] 30{code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to