v6.0.0
What's new in v6.0
Value sets — a second type family. The package's model was never "ranges" narrowly; it is immutable, canonical-at-construction value domains with PostgreSQL-native storage shapes. RangeSet has embodied "canonical set with a native store shape" (multirange) since v2; v6 applies the same concept one level down: canonical sets of scalar values, stored as native PostgreSQL arrays (text[], uuid[], integer[], …) — deduplicated, sorted, structurally equal, with the membership algebra PostgreSQL's own array operators speak.
- Ten closed types in the core package —
StringSet,GuidSet,Int16Set,Int32Set,Int64Set,DecimalSet,DateSet,TimeSet,DateTimeSet,DateTimeOffsetSet— plus validated-wrapper aritiesStringSet<T>,GuidSet<T>,Int32Set<T>,Int64Set<T>for generator-produced domain values (Vogen, Metalama aspects, StronglyTypedId, hand-written wrappers), constrained only on BCL interfaces so domain types never reference this package. See Value Sets. - Five NodaTime types in the satellite:
LocalDateSet,LocalDateTimeSet,InstantSet,LocalTimeSet, and the month-granularityYearMonthSet(stored as a month-aligneddate[], likeYearMonthRange'sdaterange). - Membership algebra —
Contains,Overlaps,IsSubsetOf,IsSupersetOf,IsProperSubsetOf,IsProperSupersetOf,Union,Remove,Count,IsEmpty(plus client-sideIntersect/Except/Add) — PostgreSQL array literals ({a,b}), JSON support through the existing converter factory, and collection expressions (StringSet tags = ["a", "b"];). - The EF Core packages map them by convention to native array columns — no configuration, no registration, wrapper instantiations recognized automatically — with LINQ translation to the array operator algebra (
@>,&&,<@,cardinality,array_cat,array_remove). Containment always translates as@>, so a plain GIN index serves it. See Value set columns.
v6.0 contains no breaking changes; the major marks the package growing a second type family.