+1 to make some improvements here. Using Optional doesn't make sense to me because it always involves boxing (and we already have tuple.value(colName)).
I suggest to add methods similar to: tuple.doubleValue("field", double dfltValue) which returns default value if the field is null. ср, 7 июл. 2021 г. в 08:34, Ivan Daschinsky <ivanda...@gmail.com>: > Function basically returns two values. if value is null, it returns smth > like false, NaN, otherwise ,smth like true, 4.5. Syntax is a bit weird as > for me, but it is better than nothing. > > > In golang it looks like this: > > if isValid, val:= getVal; isValid { > .... > } > > > > ср, 7 июл. 2021 г., 00:28 Valentin Kulichenko < > valentin.kuliche...@gmail.com > >: > > > So what happens if the value is NULL? Exception? > > > > -Val > > > > On Tue, Jul 6, 2021 at 1:52 PM Ivan Daschinsky <ivanda...@gmail.com> > > wrote: > > > > > > Out of curiosity, what would this code do if the value is NULL? What > is > > > the > > > type of the 'weight' variable? > > > > > > float of course. > > > https://www.c-sharpcorner.com/article/out-parameter-in-c-sharp-7/ > > > > > > > > > вт, 6 июл. 2021 г., 22:30 Valentin Kulichenko < > > > valentin.kuliche...@gmail.com > > > >: > > > > > > > Pavel, > > > > > > > > Optionals are available in Java and we can use them. This is still > > boxing > > > > though, and I don't know what the performance impact would be. In > > > addition, > > > > optional API is redundant for non-nullable fields. Perhaps, we can > > > provide > > > > both options (e.g. having intValue() and intValueOptional() methods). > > > > > > > > Out of curiosity, what would this code do if the value is NULL? What > is > > > the > > > > type of the 'weight' variable? > > > > > > > > if (tuple.TryGetFloatValue("weight", out var weight)) > > > > doSomething(weight) > > > > > > > > -Val > > > > > > > > On Tue, Jul 6, 2021 at 2:13 AM Ivan Daschinsky <ivanda...@gmail.com> > > > > wrote: > > > > > > > > > Ah, I see, you meant Optionals family. Yep, it is worth to think > > about. > > > > > > > > > > вт, 6 июл. 2021 г., 10:06 Pavel Tupitsyn <ptupit...@apache.org>: > > > > > > > > > > > Ivan, > > > > > > > > > > > > Nothing wrong except for performance concerns. > > > > > > The following code looks up the column by name twice: > > > > > > > > > > > > if (!tuple.isNull("weight")) > > > > > > doSomething(tuple.floatValue("weight")) > > > > > > > > > > > > Whereas in other languages you could do it in one shot: > > > > > > > > > > > > if (tuple.TryGetFloatValue("weight", out var weight)) > > > > > > doSomething(weight) > > > > > > > > > > > > or Option<float> weight = tuple.floatValue("weight") and so on. > > > > > > > > > > > > On Tue, Jul 6, 2021 at 9:58 AM Ivan Daschinsky < > > ivanda...@gmail.com> > > > > > > wrote: > > > > > > > > > > > > > Sorry, but what is wrong with simple method isNull() > > > > > > > > > > > > > > вт, 6 июл. 2021 г., 09:55 Pavel Tupitsyn <ptupit...@apache.org > >: > > > > > > > > > > > > > > > Val, > > > > > > > > > > > > > > > > > I don't think there is a significantly better way > > > > > > > > > of doing this in Java. > > > > > > > > > > > > > > > > Yep looks like there is no way to return two values without > > > boxing. > > > > > > > > No ref, no out, no value types. > > > > > > > > > > > > > > > > > Schema already provides this information, doesn't it? > > > > > > > > > > > > > > > > It does, though we don't have an agreement on how to expose > > this > > > on > > > > > > > public > > > > > > > > API yet, > > > > > > > > or do we? > > > > > > > > > > > > > > > > On Tue, Jul 6, 2021 at 12:44 AM Valentin Kulichenko < > > > > > > > > valentin.kuliche...@gmail.com> wrote: > > > > > > > > > > > > > > > > > Pavel, > > > > > > > > > > > > > > > > > > That's a good point, but I don't think there is a > > significantly > > > > > > better > > > > > > > > way > > > > > > > > > of doing this in Java. > > > > > > > > > > > > > > > > > > There should be a way to check if a field is nullable or > not > > > > > though. > > > > > > > > Schema > > > > > > > > > already provides this information, doesn't it? > > > > > > > > > > > > > > > > > > -Val > > > > > > > > > > > > > > > > > > On Mon, Jul 5, 2021 at 11:03 AM Pavel Tupitsyn < > > > > > ptupit...@apache.org > > > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > Igniters, > > > > > > > > > > > > > > > > > > > > Looks like Tuple API has no efficient way to tell if a > > value > > > > for > > > > > a > > > > > > > > > nullable > > > > > > > > > > column of primitive type is null. > > > > > > > > > > > > > > > > > > > > - Tuple#intValue() will return 0 when the actual value is > > > null > > > > => > > > > > > not > > > > > > > > > clear > > > > > > > > > > if 0 is 0 or null. > > > > > > > > > > - Tuple#value() works, but is more expensive due to > boxing > > > and > > > > > type > > > > > > > > > lookup. > > > > > > > > > > > > > > > > > > > > Any ideas on how to improve this? > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- Best regards, Alexei Scherbakov