Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/dotnet.yml
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ jobs:
# The pair must restore together: Npgsql EF names its minimum EF Core (10.0.1 to 10.0.3
# need 10.0.4 or newer).
- ef: newest-patch
ef-core: 10.0.13
ef-core: 10.0.14
npgsql-ef: 10.0.3
env:
EF_FLOAT: ${{ matrix.ef-core && format('-p:EfFloat={0} -p:NpgsqlEfFloat={1}', matrix.ef-core, matrix.npgsql-ef) || '' }}
Expand Down
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ so moving a project cannot silently retarget a test.
- `test/CodoMetis.ValueRanges.EFCore.PostgreSQL.NodaTime.Tests/` — NodaTime EF translation tests (no database)
- `test/CodoMetis.ValueRanges.EFCore.PostgreSQL.IntegrationTests/` — Live PostgreSQL via Testcontainers (needs Docker; Inconclusive without, but hard failure under CI=true). The shared container runs `VALUERANGES_POSTGRES_IMAGE`, default `postgres:16-alpine` (the 10.x floor); CI runs both integration projects on 16 and 18, and a server below 16 fails every test (`PostgresServer.cs`). Covers BCL and NodaTime types. Authority on PostgreSQL semantics — run when changing translations or range algebra. `CapturedCollectionProbeTests` sends every discovered range and set type as a captured collection (`Contains`, `Any`, `Count`); it links `RangeProbes` and `SetProbes` from the conventions project rather than copying them. `ComplexIndexesCrossTests` holds this package's columns under `EFCore.ComplexIndexes.PostgreSQL`'s temporal and exclusion constraints and GiST indexes on PostgreSQL 16 and 18 (containers of its own) through a test-only reference; neither shipping package references the other
- `test/CodoMetis.ValueRanges.EFCore.PostgreSQL.InfinityDisabled.IntegrationTests/` — The same live layer for configuration that is per process: its runtimeconfig sets `Npgsql.DisableDateTimeInfinityConversions`, which Npgsql and the plugin each read once, so it cannot be flipped inside the other project's run. Holds the temporal store rule at the extremes with the conversion off. Own container; CI's integration job runs every `test/*IntegrationTests/`
- `test/Directory.Build.targets` — Floats the EF test projects (every project whose name contains `EFCore`) to a newer EF Core and Npgsql EF patch for one run, `-p:EfFloat=10.0.13 -p:NpgsqlEfFloat=10.0.3`, while `src/` keeps compiling against the floor it ships: a consumer's situation, which floor-only CI missed for #302. Without the properties it does nothing. CI's newest-patch integration legs pass them, and the newest published versions live in one place, the `integration-legs` matrix in `dotnet.yml` (#297)
- `test/Directory.Build.targets` — Floats the EF test projects (every project whose name contains `EFCore`) to a newer EF Core and Npgsql EF patch for one run, `-p:EfFloat=10.0.14 -p:NpgsqlEfFloat=10.0.3`, while `src/` keeps compiling against the floor it ships: a consumer's situation, which floor-only CI missed for #302. Without the properties it does nothing. CI's newest-patch integration legs pass them, and the newest published versions live in one place, the `integration-legs` matrix in `dotnet.yml` (#297)
- `test/CodoMetis.ValueRanges.AspNetCore.Tests/` — Host-level behaviour with no ValueRanges registration: configuration binding (`TypeConverter`), MVC and minimal-API binding and JSON bodies via `TestServer`, and the documented OpenAPI schema transformer (`ValueRangesSchemaTransformer.cs`), which `docs/serialization.md` must carry verbatim — edit the test copy, then the doc. `HostCultureProbeTests` binds every discovered type (core and NodaTime) through both hosts under four request cultures; it links `RangeProbes`, `SetProbes`, `WrapperElements` and `Reflect` from the conventions project rather than copying them
- `test/CodoMetis.ValueRanges.Conventions.Tests/` — Repo-level conventions: changelog consistency and form, packaging metadata (each package's nuspec, generated by NuGet's own pack task, carries its version's changelog section as release notes), release wiring, the SECURITY.md supported-versions table, value set contract compliance, EF mapping parity, translator dispatch (`TranslatorDispatchSweepTests`: every public query member over every type, each operand mapped as its declared type), the default JSON contract. Everything is discovered (projects by globbing `src/`, types by reflection), so adding a package or a type needs no edit here
- `test/oracles/` — The bug-finding system (`docs/oracles.md`): `claims.json` quotes every promise the consumer-facing docs make and names the test that holds it (empty `heldBy` is the worklist); `oracles.json` registers the sweep classes; `seeds/*.patch` plant one defect each in `src/` that the named oracles were shown to catch; `surface-waivers.json` names the public members no claim covers, with the reason; `candidates.json` holds disagreements found but not fixed, keyed to issues; `postgres-surface.json` holds every PostgreSQL range, multirange and array operator and function (one entry per row of `postgres-surface.catalog.txt`, the raw `pg_operator`/`pg_proc` listing) with the member that mirrors it, the translation a test asserts, or a waiver or issue; `translation-support.json` is the other direction: every public query member (`QueryMembers`, discovered from the public API, one key per overload) classified as running as SQL, in memory only (with the reason) or planned (with the issue), which `TranslationSupportInventoryTests` holds complete and `TranslationSupportProbeTests` (integration) holds true against EF Core over every closed type; `CloneSweep.cs` is the clone-divergence sweep over the hand-copied type families (sets, arities, ranges, EF registrations), and `clone-waivers.json` explains every divergence it finds between siblings that is right as it is. `Oracle*Tests` and `CloneDivergenceTests` in the conventions project hold all of it consistent in CI without building; `dotnet run tools/oracles.cs seeds` re-proves locally that every seed is caught, `… status` prints the worklist, `… pg-surface` regenerates the listing from a container, `… clones` prints the sibling divergences with their waiver status
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ stays on the floor (`test/Directory.Build.targets`). Both are required. To run t
the two versions, which CI keeps in the `integration-legs` matrix of `.github/workflows/dotnet.yml`:

```bash
dotnet test test/CodoMetis.ValueRanges.EFCore.PostgreSQL.Tests -p:EfFloat=10.0.13 -p:NpgsqlEfFloat=10.0.3
dotnet test test/CodoMetis.ValueRanges.EFCore.PostgreSQL.Tests -p:EfFloat=10.0.14 -p:NpgsqlEfFloat=10.0.3
```

A floor-only CI missed #302 that way: an empty captured list failed on the server on every EF Core
Expand Down
2 changes: 1 addition & 1 deletion docs/efcore.md
Original file line number Diff line number Diff line change
Expand Up @@ -369,7 +369,7 @@ Good to know:
what `HasTemporalConstraint` accepts.

Everything in this section was run against PostgreSQL 18 with `EFCore.ComplexIndexes.PostgreSQL`
5.4.0, over a `DateRange`, a `RangeSet<DateRange, DateOnly>` and a `TimeRange` column for the
5.6.0, over a `DateRange`, a `RangeSet<DateRange, DateOnly>` and a `TimeRange` column for the
temporal key, and a `DateRange` column for the foreign key.

## Store a value set in an array column
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="10.0.12" />
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="10.0.12" />
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="10.0.14" />
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="10.0.14" />
<PackageReference Include="MSTest" Version="4.5.1" />
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="5.9.0" />
<!-- Configuration binding is an entry point with no host: CultureEntryPointProbeTests binds every type. -->
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.12" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.12" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.14" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.14" />
<PackageReference Include="MSTest" Version="4.5.1" />
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
under EFCore.ComplexIndexes.PostgreSQL's temporal and exclusion constraints and GiST indexes.
Neither shipping package references the other.
-->
<PackageReference Include="EFCore.ComplexIndexes.PostgreSQL" Version="5.4.0" />
<PackageReference Include="EFCore.ComplexIndexes.PostgreSQL" Version="5.6.0" />
<!--
The design-time services and C# compiled-model generator `dotnet ef dbcontext optimize` runs, at
the EF Core version the provider resolves, and the Roslyn they bring, which compiles the generated
Expand Down Expand Up @@ -71,7 +71,7 @@
-->
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="10.0.12" />
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="10.0.14" />
<Compile Include="..\..\samples\Bookings\**\*.cs" Exclude="..\..\samples\Bookings\Program.cs;..\..\samples\Bookings\obj\**;..\..\samples\Bookings\bin\**"
Link="Walkthrough\%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion test/consumer-smoke-test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -847,7 +847,7 @@ walkthrough_consumer
# packages restore and compose in one consumer, from the feeds a consumer uses. GenerateCreateScript
# runs the other package's differ (registered by UseNpgsqlComplexIndexes()), which renders the same
# statements a migration would, and needs no database.
complex_indexes_version=5.4.0
complex_indexes_version=5.6.0

cat > "$work/complexindexes.cs" <<'CSHARP'
using CodoMetis.ValueRanges;
Expand Down
2 changes: 1 addition & 1 deletion test/oracles/claims.json
Original file line number Diff line number Diff line change
Expand Up @@ -736,7 +736,7 @@
"id": "E40-complexindexes-accepts-mapped-range-columns",
"source": "docs/efcore.md#reject-overlapping-rows-with-an-exclusion-constraint",
"quote": "It accepts a range column mapped by this package exactly as it accepts an `NpgsqlRange<T>`. That works because the constraint is declared over the *column*, and these types map as ordinary scalars:",
"claim": "EFCore.ComplexIndexes.PostgreSQL 5.4 accepts a DateRange, a RangeSet<DateRange, DateOnly> and a TimeRange (custom timerange) property as the overlap column of HasExclusionConstraint (builder and shorthand overloads) and as the period of HasTemporalConstraint: with UseNpgsqlComplexIndexes() the create script and EnsureCreated render EXCLUDE USING gist (\"RoomId\" WITH =, \"<column>\" WITH &&) on PostgreSQL 16 and 18 and UNIQUE (\"RoomId\", \"<column>\" WITHOUT OVERLAPS) on PostgreSQL 18, which pg_get_constraintdef reads back.",
"claim": "EFCore.ComplexIndexes.PostgreSQL 5.6 accepts a DateRange, a RangeSet<DateRange, DateOnly> and a TimeRange (custom timerange) property as the overlap column of HasExclusionConstraint (builder and shorthand overloads) and as the period of HasTemporalConstraint: with UseNpgsqlComplexIndexes() the create script and EnsureCreated render EXCLUDE USING gist (\"RoomId\" WITH =, \"<column>\" WITH &&) on PostgreSQL 16 and 18 and UNIQUE (\"RoomId\", \"<column>\" WITHOUT OVERLAPS) on PostgreSQL 18, which pg_get_constraintdef reads back.",
"oracle": "claim",
"surfaces": [
"NpgsqlValueRangesDbContextOptionsBuilderExtensions.UseValueRanges",
Expand Down
Loading