Skip to content

10.x: value set Union and Remove over a NULL operand project a value instead of NULL (port of #360) #395

Closed

Description

@CaffeinatedCoder

Problem

The same defect as #360, on release/10.x. A value set Union (array_cat) and Remove (array_remove) are declared NULL exactly when an operand is NULL, but neither function is strict. So a projection returns the other operand where a filter (… == null) selects the row: r.MaybeTags.Union(o) projects {z} for a NULL MaybeTags, and r.Tags.Remove(r.Label) projects Tags unchanged for a NULL Label. Filters agree with rule (c); only projections differ.

Measured 2026-10-24 on release/10.x (9af5842), PostgreSQL 16, on EF Core 10.0.0 and on 10.0.13 with Npgsql 10.0.3: identical on both, and identical to main.

Change

Cherry-pick the #360 fix with -x once it is on main, with a regression test of its own (the composition sweeps that cover it on main are not on this line). Remove the known-difference entry from docs/efcore.md#what-runs-where that 10.2.0 adds (#397).

Release

silent: one row under ### Changed answers in the 10.x minor it ships in. Fixed only on release/10.x, so close it by hand.

Activity

  1. added
    bugSomething isn't working
    silentAnswers wrongly without throwing — fixes go in the next major, never deferred
    area/value-setsValue set families and wrapper arities
    package/efcoreAffects CodoMetis.ValueRanges.EFCore.PostgreSQL
    severity/lowCosmetic, message or documentation-level difference
    on Oct 24, 2026
  2. added this to the 10.3.0 milestone on Oct 25, 2026
  3. CaffeinatedCoder commented on Oct 25, 2026

    @CaffeinatedCoder
    OwnerAuthor

    Scheduled for 10.3.0 (#408), on condition that the main fix lands first. Otherwise it moves to the next 10.x minor.

  4. CaffeinatedCoder commented on Oct 25, 2026

    @CaffeinatedCoder
    OwnerAuthor

    #360 is fixed on main (PR #443, merged). The port is PR #445 against release/10.x: the same translator change, with ValueSetNullOperandParityTests as this line's regression test (it fails with the fix reverted), a ### Changed answers row under [10.3.0], a new ## Changed answers in 10.3.0 migration section, and the 10.2.0 known-difference entry removed. Full 10.x integration suite passes on PostgreSQL 16 (302). Close this by hand once #445 merges.

  5. added a commit that references this issue on Oct 25, 2026
  6. CaffeinatedCoder commented on Oct 25, 2026

    @CaffeinatedCoder
    OwnerAuthor

    Fixed on release/10.x by PR #445 (merged as 930475a), shipping in 10.3.0. Closed by hand, since Closes #n 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/value-setsValue set families and wrapper aritiesbugSomething isn't workingpackage/efcoreAffects CodoMetis.ValueRanges.EFCore.PostgreSQLseverity/lowCosmetic, message or documentation-level differencesilentAnswers wrongly without throwing — fixes go in the next major, never deferred

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions