ah thanks. The class is marked as public and not annotated with @Internal,
but I did just now notice that FieldValueGetter is @Internal.  Out of
curiosity then, is there a recommended way to implement a "row proxy"?
RowWithGetters has a lot of useful logic in it, maybe it should be
non-internal?

On Mon, Mar 1, 2021 at 2:54 PM Reuven Lax <re...@google.com> wrote:

> RowWithGetters is used as an internal detail in Beam, so it special cases
> internal Beam-provided logical types. If we want it to work well with user
> logical types, we might need to redesign it a bit.
>
> On Mon, Mar 1, 2021 at 10:44 AM Steve Niemitz <sniem...@apache.org> wrote:
>
>> I'm working on a little library to wrap domain objects into Rows (using
>> RowWithGetters) and am trying to implement a new LogicalType.  I'm
>> struggling to understand how it's supposed to interact with RowWithGetters
>> however.
>>
>> Let's say that my LogicalType has a java type of MyLogicalType.Value, and
>> base type of byte[].  This means my I have something like:
>>
>> class MyLogicalType extends Schema.LogicalType<MyLogicalType.Value,
>> byte[]>
>>
>> Importantly here, I need to implement a toInputType function that takes a
>> byte[] and returns MyLogicalType.Value.
>>
>> What I'm trying to figure out is, if I construct a RowWithGetters, it
>> seems like my getter for the logical type field needs to first convert from
>> my domain value to a byte[], which will next be converted from a byte[] ->
>> MyLogicalType.Value (in toInputType), and then (in the context of the
>> SchemaCoder), be one more time converted from MyLogicalType.Value -> byte[]
>> (in toBaseType).  This seems like there's an extra round trip in here that
>> there shouldn't be.  For reference, the first part takes place in
>> RowWithGetters.getValue [1]
>>
>> More confusingly, OneOfType seems to be special cased to NOT do that, and
>> instead expects the getter to directly return a OneOfType.Value.  If it
>> followed the generic case, I would expect the getter to return a Row here
>> instead.
>>
>> Any thoughts on this?
>>
>> [1]
>> https://github.com/apache/beam/blob/b853f9c7aa3662eb707290ded4c22f86befeda68/sdks/java/core/src/main/java/org/apache/beam/sdk/values/RowWithGetters.java#L140
>>
>

Reply via email to