Yeah, another base class doesn't seem great. One option would be to use a union type like variant, but that seems also not particularly great?
On Thu, Nov 17, 2022 at 1:15 AM Antoine Pitrou <anto...@python.org> wrote: > > Uh, you're right. We may want another base class, not sure how it > should be named though (also, we may want to be careful with multiple > inheritance?). > > Regards > > Antoine. > > > Le 17/11/2022 à 06:15, Micah Kornfield a écrit : > >> > >> std::string_view FlatArray::GetValueBytes(int64_t index) > > > > > > I think this would be problematic for Boolean? > > > > On Tue, Nov 15, 2022 at 11:01 AM John Muehlhausen <j...@jgm.org> wrote: > > > >> If that covers primitive and binary(string) types, that would work for > me. > >> > >> On Tue, Nov 15, 2022 at 13:50 Antoine Pitrou <anto...@python.org> > wrote: > >> > >>> > >>> Then perhaps we can define a method: > >>> > >>> std::string_view FlatArray::GetValueBytes(int64_t index) > >>> > >>> ? > >>> > >>> > >>> Le 15/11/2022 à 19:39, John Muehlhausen a écrit : > >>>> I had a use-case where untyped access to bytes would have been > >>> sufficient, > >>>> vs branching depending on array type. This is what brought the idea > to > >>>> mind. > >>>> > >>>> On Tue, Nov 15, 2022 at 02:34 Jin Shang <shangjin1...@gmail.com> > >> wrote: > >>>> > >>>>> Hi John, > >>>>> > >>>>> In addition to Micah’s reply, does the member method Value(int64_t > >>>>> i)[1][2][3] satisfy your need? It is defined for all array types with > >> a > >>>>> primitive value representation, i.e. all primitive arrays and binary > >>> arrays. > >>>>> > >>>>> [1] > >>>>> > >>> > >> > https://github.com/js8544/arrow/blob/master/cpp/src/arrow/array/array_primitive.h#L50 > >>>>> < > >>>>> > >>> > >> > https://github.com/js8544/arrow/blob/master/cpp/src/arrow/array/array_primitive.h#L50 > >>>>>> > >>>>> [2] > >>>>> > >>> > >> > https://github.com/js8544/arrow/blob/master/cpp/src/arrow/array/array_primitive.h#L109 > >>>>> < > >>>>> > >>> > >> > https://github.com/js8544/arrow/blob/master/cpp/src/arrow/array/array_primitive.h#L109 > >>>>>> > >>>>> [3] > >>>>> > >>> > >> > https://github.com/js8544/arrow/blob/master/cpp/src/arrow/array/array_binary.h#L87 > >>>>> < > >>>>> > >>> > >> > https://github.com/js8544/arrow/blob/master/cpp/src/arrow/array/array_binary.h#L87 > >>>>>> > >>>>> > >>>>> > >>>>>> 2022年11月15日 13:06,Micah Kornfield <emkornfi...@gmail.com> 写道: > >>>>>> > >>>>>> Hi John, > >>>>>> > >>>>>> There are a couple of edge cases that need to be discussed to move > >> the > >>>>>> function to the base array class (which IIUC is this proposal): > >>>>>> 1. boolean > >>>>>> 2. struct > >>>>>> 3. lists/LargeList > >>>>>> 4. DictionaryArray > >>>>>> > >>>>>> FlatArray [1] seems like a better place for this method if there is > >>>>>> consensus on adding it. > >>>>>> > >>>>>> Cheers, > >>>>>> Micah > >>>>>> > >>>>>> [1] > >>>>>> > >>>>> > >>> > >> > https://github.com/apache/arrow/blob/master/cpp/src/arrow/array/array_base.h#L219 > >>>>>> > >>>>>> On Mon, Nov 14, 2022 at 11:46 AM John Muehlhausen <j...@jgm.org> > >> wrote: > >>>>>> > >>>>>>> There exists: > >>>>>>> const uint8_t* BaseBinaryArray::GetValue(int64_t i, offset_type* > >>>>>>> out_length) const > >>>>>>> > >>>>>>> What about adding: > >>>>>>> const uint8_t* Array::GetValue(int64_t i, offset_type* out_length) > >>> const > >>>>>>> > >>>>>>> This would allow GetValue to get the untyped bytes/length of any > >>> value? > >>>>>>> E.g. out_length would be set to sizeof(T) for arrays of primitive > >> type > >>>>> T? > >>>>>>> > >>>>>>> For FixedSizeBinaryArray the existing GetValue would still be a > >> valid > >>>>>>> overload. > >>>>>>> > >>>>>>> -John > >>>>>>> > >>>>> > >>>>> > >>>> > >>> > >> > > >