Skip to content

10.x: docs: ordering by LowerBound() or UpperBound() puts open-ended and empty rows where PostgreSQL puts NULLs (port of #359) #364

Closed

Description

@CaffeinatedCoder

Problem

The same gap as #359, in the release/10.x docs. docs/ranges.md#sort-ranges documents PostgreSQL's NULLS LAST against memory's null-first for a nullable column, but not for an ordering by a bound. There the NULLs come from non-null ranges, so a required column has them too. README.md and docs/efcore.md#read-bounds-merge-ranges-and-aggregate show bookings.OrderBy(b => b.Period.LowerBound()) as their ordering example. The behaviour is the same on 10.1.0, since the translation is identical.

Change (10.2.0)

Done when

The docs on release/10.x say where an ordering by a bound puts open-ended and empty rows. The claim is held there and OracleCatalogueTests passes. Close by hand after the merge.

Activity

  1. added this to the 10.2.0 milestone on Oct 24, 2026
  2. added
    documentationImprovements or additions to documentation
    area/rangesRange unions, variants and the shape engines
    on Oct 24, 2026
  3. CaffeinatedCoder commented on Oct 24, 2026

    @CaffeinatedCoder
    OwnerAuthor

    The main change is PR #372 (commit 0fc386f, docs plus a test and a seed): the bullet in docs/efcore.md#read-bounds-merge-ranges-and-aggregate, the sentence in docs/ranges.md#sort-ranges, the comments at the four examples (both READMEs, efcore.md, getting-started.md), claim E72, ExecutedQueryTests.OrderingByABound_PutsTheRowsWithoutItWherePostgresPutsNulls and the seed bound-declared-null-only-for-a-null-argument.patch. The test relies on #349's fix, which 10.x has from #367, so the port cherry-picks the commit as it is. Its Docs: line goes under ### Fixed in [10.2.0].

  4. CaffeinatedCoder commented on Oct 24, 2026

    @CaffeinatedCoder
    OwnerAuthor

    Port PR: #374, stacked on #373 (both write [10.2.0] and claims.json). It is the -x cherry-pick of 0fc386f (#372), with a ### Fixed section for the Docs: line. The ordering test is green on PostgreSQL 16 and 18 and on EF Core 10.0.13, and its seed is caught on the branch.

  5. CaffeinatedCoder commented on Oct 24, 2026

    @CaffeinatedCoder
    OwnerAuthor

    Fixed on release/10.x by #374, merged as fb9aeed: docs/efcore.md says an ordering by LowerBound() or UpperBound() puts the empty rows and those without that bound where PostgreSQL puts NULLs, also on a required column, with the != null key that sorts them as memory does. [10.2.0] has the Docs: row under ### Fixed. Ships in 10.2.0 (#358). Closed by hand, since Closes acts only on main.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/range-setRangeSet and multirange algebraarea/rangesRange unions, variants and the shape enginesdocumentationImprovements or additions to documentationpackage/efcoreAffects CodoMetis.ValueRanges.EFCore.PostgreSQLpackage/efcore-nodatimeAffects CodoMetis.ValueRanges.EFCore.PostgreSQL.NodaTime

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions