ExRam.Gremlinq 14.1.2
Fixes
- A value the requested type cannot read, such as
"not a date"asked for as aDateTime, is now skipped like any other unconvertible item instead of failing the whole result set. (#2438) - A deserialization converter that throws no longer leaves a query waiting forever. The query now fails with the converter's exception, and the pool builds a fresh client for the next one. (#2439)
Direction,Merge,Tand Gremlin.Net's otherEnumWrappertypes are now deserialized, where they used to fail or come back as the bare string. (#2440)- A value of a Gremlin enumeration that Gremlin.Net has no name for, such as a newer server's new value, is now read as a value of that enumeration instead of being lost. (#2470)
- GraphSON arrays now deserialize into
ArrayList,QueueandStack, with their items converted like those of every other collection. (#2444) - A
g:Maprequested as anIImmutableDictionary<,>orImmutableDictionary<,>no longer comes back empty. Building aDictionary<,>from a map also allocates less. (#2445) - A
g:Mapkeyed by something other than strings, such as ints, keeps its entries when requested as anobject. It now comes back as aDictionary<object, object>. (#2459) - A
g:Mapwith a key that appears twice is now read, the last occurrence counting, instead of failing the whole result set with anArgumentException. (#2480) - Traversers are now expanded into every collection type, such as
ImmutableList<T>,ISet<T>orQueue<T>, where a bulked result used to throw. (#2447) - A
g:BulkSetread into anything other than an array, such as aList<int>, now expands its bulks instead of returning the counts mixed in with the values. (#2453) - A
nullin a result array is now kept instead of being dropped, so the script and bytecode paths finally return the same results. (#2448) - A
nullin ag:BulkSetis now kept, together with its bulk, instead of being dropped. (#2449) - A value/bulk pair in a
g:BulkSetwhose bulk cannot be read is now skipped, instead of the value being emitted once. (#2451) - A
g:BulkSetwith an odd number of entries no longer throws anArgumentOutOfRangeException. The well-formed pairs are read and the dangling element is skipped. (#2452) - A traverser is now only recognised when its envelope is spelled
@typeand@value, as every other typed value already was. Server output is unaffected. (#2460) - GraphSON's own member names (
key,value,id,label,properties,bulk) are now matched exactly. A map of your own with members namedKeyandValueis no longer mistaken for a property. (#2466) - A
g:Twhose value is not exactlyid,key,labelorvalueno longer makes deserialization throw. (#2467) Coalesce(...)with a single sub-query no longer changes what that sub-query returns.Coalesce(__ => __.Out<WorksFor>().Limit(1))used to return one vertex in total instead of up to one per incoming element; it is now emitted as aflatMap(...). (#2474)- Named step labels no longer change the names of generated step labels, so the text of a query no longer depends on how many named labels come before. (#2497)
Performance
Map(...)andProject(...).By(...)no longer emit a trailinglimit(1), since both only take the first result anyway. (#2473)Project(...).By(...)no longer emits amap()that wraps the wholeby()traversal. (#2475)- Slicing a
Traversalno longer recounts the write steps of the slice, so cutting a read-only traversal no longer costs as much as it is long. (#2472)
Full changelog: https://github.com/Gremlinq/ExRam.Gremlinq/compare/14.1.1...14.1.2