Skip to content

Gremlinq.Extensions 14.1.2

Gremlinq.Extensions 14.1.2 is built against ExRam.Gremlinq 14.1.2. See the ExRam.Gremlinq 14.1.2 release notes for what changed there. (#236)

Fixes

All but the last entry concern the System.Text.Json support in Gremlinq.Extensions.Support.SystemTextJson.

  • A value the requested type cannot read now makes the System.Text.Json converter decline instead of throwing, so one unreadable item no longer fails the whole result set. T, Direction, Merge and the other Gremlin.Net enumerations are now deserialized, and a gx:BigInteger no longer comes back as zero. (#193)
  • 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. (#212)
  • A null in a result array is now kept instead of being dropped. (#198)
  • A null in a g:BulkSet is now kept, together with its bulk, instead of being dropped. (#199)
  • A g:BulkSet with an odd number of entries no longer throws an IndexOutOfRangeException. The well-formed pairs are read. (#201)
  • A g:BulkSet can now be read into any generic collection, such as List<T>, ISet<T> or ImmutableList<T>. It used to throw an InvalidCastException. (#202)
  • A g:BulkSet can now be read into ArrayList, Queue, Stack, ICollection and IList. It used to throw an InvalidCastException. (#204)
  • A g:BulkSet whose type name arrives in another case, such as G:BULKSET, is now read as a bulk set. (#200)
  • A g:Map whose type name arrives in another case, such as G:MAP, is now read into a dictionary (#203) and into an object (#205).
  • An elementMap() of a vertex with a label the model does not know keeps its id and label when it is read as an object. (#206)
  • A g:Map keyed by something other than strings, such as ints, keeps its entries when it is read as an object. It now comes back as a Dictionary<object, object>. (#207)
  • A map or object with a key that appears twice is now read, the last occurrence counting, instead of failing the whole result set with an ArgumentException. (#216)
  • When a name appears twice with different case, such as age and Age, the last one now fills the member, as with Newtonsoft.Json. (#210)
  • GraphSON's own member names (key, value, id, label, properties, bulk) are now matched exactly. A map of your own with members named Key and Value is no longer mistaken for a property. (#208)
  • A g:T counts as a T only when its value is exactly id, key, label or value. (#209)
  • A JSON null requested as a string is no longer read as an empty string. A null string property now stays null. (#214)
  • A .NET enum stored as the name of one of its values, such as "Female", is now read. It used to be left unset without any error. (#215)
  • A scalar is now read from everything Newtonsoft.Json reads it from, such as a bool from 1 or an int from 3.0. Such members used to silently keep their default. (#217)
  • A value requested as a base type or an interface, such as IComparable or the non-generic IEnumerable, now comes back as it does with Newtonsoft.Json. It used to come back empty, as a raw JsonElement or as a different kind of collection. (#218)
  • Coalesce(...) with a single sub-query no longer changes what that sub-query returns, in the CosmosDb provider too. Map(...) and Project(...).By(...) also leave out steps that change nothing. (#213)

Performance

  • The System.Text.Json support now reads GraphSON arrays in linear instead of quadratic time. A 1000-entry g:BulkSet now takes 0.33 ms instead of 12.3 ms. (#221)

Full changelog: https://github.com/Gremlinq/Gremlinq.Extensions/compare/14.1.1...14.1.2