[
https://issues.apache.org/jira/browse/ARROW-4545?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17661567#comment-17661567
]
Rok Mihevc commented on ARROW-4545:
-----------------------------------
This issue has been migrated to [issue
#21093|https://github.com/apache/arrow/issues/21093] on GitHub. Please see the
[migration documentation|https://github.com/apache/arrow/issues/14542] for
further details.
> [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
(v8.20.10#820010)