In StringConcatDescriptor that handles string-concat function, it checks
whether the input is an ordered list or an unordered list. If so, it checks
each of element is STRING or NULL type. If not, it generates an exception.
I am not sure how this exception could happen. Maybe need to dig in to
check it.
if (itemType != ATypeTag.STRING) {
if (itemType == ATypeTag.NULL) {
nullSerde.serialize(ANull.NULL, out);
return;
}
throw new
AlgebricksException(AsterixBuiltinFunctions.STRING_CONCAT.getName()
+ ": expects type STRING/NULL for the list item but got " + itemType);
}
By the way, to answer the Mike's question, I think each author needs to
check its input type and does the proper handling like this StringConcat
does. Based on my relatively short(?) experiences, most functions check
these input types internally.
Best,
Taewoo
On Fri, Aug 14, 2015 at 12:57 PM, Mike Carey <[email protected]> wrote:
> PS (to my previous note) - I suspect this function is assuming the bits
> it's passed are a string, and not checking to ensure that first. One
> question related to this would be whether the desired behavior on the
> second record would be a runtime type error or the treatment of the
> offending data as null (which then raises the issue of null semantics for
> functions) - I would be inclined (w/o too much thought yet) to say that
> this should raise a runtime type error. Another question related to this
> is whether the author of each function should have to handle wrong types
> and nulls for each parameter each time - or live in a function invocation
> wrapping framework that provides some default answers for those behaviors?
> Thoughts?
>
> On 8/14/15 8:45 AM, Wail Alkowaileet wrote:
>
>> Hello Team,
>>
>> I was testing some of Asterix built-in functions and I ran into a bug if
>> the fields are heterogeneous.
>>
>> Reproduce the Problem:
>> let $k := [{"a":1, "b":"hello"}, {"a":2, "b":{"k": [1,2,2]}}]
>> for $x in $k
>> where $x.a = 1
>> return string-concat([$x.b, " world"])
>>
>> Result:
>> summary: "edu.uci.ics.hyracks.api.exceptions.HyracksDataException:
>> java.lang.ArrayIndexOutOfBoundsException: 64
>>
>> if the 2nd "b" is string as well, the issue doesn't appear.
>>
>>
>> logs attached.
>> --
>>
>> *Regards,*
>> Wail Alkowaileet
>>
>
>