Repository navigation
v10.0.0
Nothing was removed or renamed. Some calls answer differently, and text PostgreSQL refuses is refused here too: Migration from v9.x.
Breaking
- Ranges:
IsUnboundedStart()andIsUnboundedEnd()returntruefor the infinite range(,), as PostgreSQL andRangeSetdo, where they returnedfalsein memory. MatchIUnboundedStartRange<T>orIUnboundedEndRange<T>for the half-unbounded shape alone (Migration). - Ranges:
RangeSet.Overlapson a continuous domain returnstruewhen the operand ends where a later element starts and shares values with an earlier one, as&&does.{[1,4),[5,8)}.Overlaps([3,5))returnedfalse(Migration). - Ranges: a record derived from a range type throws
InvalidOperationExceptionwhen it is constructed, where it compiled andContainsandOverlapsansweredfalsefor it (Pattern matching). - Value sets: every core wrapper set checks that an element's text form reads back as the same element, and throws if it doesn't, where the element was stored as a different value (Value sets).
- Literals: integer or decimal text with a NUL throws
FormatException, in a range, a set and JSON, where a trailing NUL was ignored and31\0read as 31 (Migration). - Literals:
StringSetandStringSet<T>refuse an element holding a NUL:FromandAddthrowArgumentExceptionand parsing fails, where the set was built and failed when saved (Value sets). - Literals:
GuidSetandGuidSet<T>read PostgreSQL'suuid_ingrammar.{6f96-19ff-8b86-d011-b42d-00c0-4fc9-64ff}parses, where it threw;{(6f9619ff-…)}and whitespace inside a quoted element throwFormatException, where they parsed (Value sets). - Literals: a
DateTimeOffsetoffset other thanZ,±HH,±HH:mmor±HH:mm:ssthrowsFormatException, where+0530and+5:30were read (Migration). - Literals: decimal text with more precision than
decimalholds, such as a 29th significant digit or1e-30, throwsFormatException, where it was rounded (Literals). - Literals: a range or multirange literal whose lower bound is above its upper bound, such as
[5,1), throwsFormatException, where it read asempty.CreateFinitestill returnsEmpty(Literals). - JSON: the integer, decimal and Guid wrapper sets read only the JSON their plain sets read: a quoted number needs
AllowReadingFromString, and a Guid is hyphenated (Value sets). - ASP.NET Core: a minimal-API parameter typed as one shape, such as
DateRange.Finite, answers 400 for a literal of another shape, where it boundnulland ran the handler (Binding). - EF Core: the packages support PostgreSQL 16 and later. 9.x said 14 or later, but nothing older than 16 was tested (Migration).
- EF Core:
AnyandCountover a captured list of ranges return the in-memory answer, where a list with overlapping, adjacent or empty ranges answered differently.EF.Parameter(list)there throws (Migration).
Added
Float64Range,Float64SetandFloat64Set<T>over finitedoublevalues.NaNand the infinities throw, and the text is what PostgreSQL'sfloat8outprints (Why doubles are finite only).Float32Range,Float32SetandFloat32Set<T>over finitefloatvalues, with the textfloat4outprints. There is noHalffamily, as PostgreSQL has no two-byte float (Why doubles are finite only).IComparableon every range type and onRangeSet, in PostgreSQL's range and multirange order: empty first, then by lower bound, then by upper bound (Sort ranges).ParseandTryParseon every shape (Int32Range.Finite.TryParse, …), which accept only a literal of that shape (Binding).- A range with a
RangeSetoperand forContains,Overlaps,IsAdjacentToand the other range operators, andRangeSet.IsContainedBy(Compare a range with a set). RangeAggandRangeIntersectAggover a sequence ofRangeSet, as PostgreSQL'srange_aggandrange_intersect_aggover multiranges (Aggregates).Gapbetween two ranges, andGaps()andGaps(window)on aRangeSet, in memory and in EF Core queries (Ranges).ShiftandExpandon every range type, which move a range by a step or grow it on both sides, in memory only (Ranges).Spliton every range type, by a step or at calendar period boundaries, andValues(step)on the discrete types, in memory only (Ranges).DateRange.Month,Quarter,YearandIsoWeek, the same onLocalDateRange, andQuarterandYearonYearMonthRange. Weeks are ISO 8601 only, whatever the culture (Ranges).- EF Core:
Float64RangeandFloat32Rangemap to customfloat8rangeandfloat4rangetypes throughHasPostgresRangeandEnableUnmappedTypes(), and their sets todouble precision[]andreal[](Custom range types). - EF Core:
CompareToagainst 0 on a range or multirange runs as<,<=,>,>=or=(EF Core). - EF Core: a range with a multirange operand runs as the operator with the range on the left, and
RangeSet.IsContainedByas<@(EF Core). - EF Core:
RangeAggandRangeIntersectAggover a multirange column inside aGroupByprojection (EF Core). - Docs: PostgreSQL 18 temporal keys over a range column (
WITHOUT OVERLAPS,PERIOD), declared throughEFCore.ComplexIndexes.PostgreSQL(Temporal keys).
Fixed
- Literals: integer text reads PostgreSQL 16's
0x,0oand0bprefixes and underscores between digits, where[0x1F,)and{1_000}threwFormatException(Literals). - Literals: value sets read a dimension decoration such as
[0:1]={1,2}, and{{}}as{}as PostgreSQL 17 does, where both threwFormatException(Value sets). - Literals:
DateTimeandDateTimeOffsettext reads an offset up to ±15:59:59, as PostgreSQL does, where+15:00threwFormatException(Literals). - EF Core:
AnyorCountwith a predicate over an empty captured list of value sets, or of ranges beside aContains, returnsfalseor0, where it threwInvalidOperationException(EF Core). - NodaTime:
LocalDateTimeRangeandLocalDateTimeSetreadZor an offset and keep the wall clock, where they threw.InstantRangeandInstantSetrefuse an offset beyond ±15:59:59 (Literals). - Docs: an exclusive
infinitydate bound excludes the date extreme, so[2026-01-01,infinity)is[2026-01-01,9999-12-30](Domain width). - Docs: a
YearMonthRangecolumn holding an exclusiveinfinity)or(-infinitythrows when it loads. Ask other tools to write an absent or inclusive bound (EF Core). - Docs: a temporal literal with more than six fraction digits can be 1 µs from what PostgreSQL reads and the EF Core package stores (Literals).
- Docs: a database query over a
NaNor infinite float another tool stored answers in PostgreSQL's order, and a CHECK constraint keeps such values out (EF Core).
Published to nuget.org through Trusted Publishing by this run. The CycloneDX SBOM for each package is attached below.