Adds unit tests to demonstrate to_list() and related functions work. Improve universal constraint extraction for type trees of different heights. Improve OutputElement's ability to display empty lists, differentiate between lists of a single null value, and a null list.
When checking the meet of a concrete type and a universal type, the UniversalType instance is now returned, not the concrete one. This allows UniversalType instances to be used inside ListType, etc.
Scalar functions priority(), priority_level(), host(), and event_timestamp() now provide access to the properties of the current event, eliminating the #priority, #host, and #timestamp fields which shadowed potential user-defined attributes. ScalarFunc API changed to have access to the entire current EventWrapper in addition to its ordinary argument array. Improved string representation of timestamps in OutputElement.
New UDF converts BINARY values to STRING values. BINARY typed values now convert to STRING correctly and toString() formatting is correct throughout. Timestamp fixed to match schema for actual Flume Event timestamps. Bugfix improper instantiation of BINARY as byte (instead of ByteBuffer).
These can be selected as #attrname, #timestamp, #host, and #priority respectively. IdentifierExpr allows different access types. The default access type is "FIELD", but this now supports attributes, host/priority, etc.
assertRecordFields() now asserts that at least one record exists such that the reference field has the reference value, in addition to checking that the testField/testValue are true for that record. Fixed TestJoin case where this was testing a non-existant reference value instance.