I vote for the function wrapping framework. Sent from my iPhone
> On Aug 14, 2015, at 11:09 PM, Taewoo Kim <[email protected]> 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 >> >>
