This doesn't seem to match the observed real behavior?
On 8/14/15 1:09 PM, Taewoo Kim wrote:
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
