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 >> >