From 4f5eeb886e42440ce260346c264950f8ec067076 Mon Sep 17 00:00:00 2001 From: Mohammad Hosseini Date: Fri, 4 Sep 2026 20:31:17 +0330 Subject: [PATCH] feat(pagination): ship EntityFrameworkCore 1.1.0 any-width Npgsql seek and NULLS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add Postgres row-comparison seek for uniform non-nullable multi-column keys (2–8 via ValueTuple, 9+ nested TRest; mixed/string stay OR), ORDER BY NULLS FIRST/LAST via tagged Add/UseBuildingBlocksPagination, and optional HasKeysetIndex(sortKey, NullOrder). Extend EF/Dapper/IR tests and align package docs/ADR. --- .github/workflows/pagination.yml | 18 +- CHANGELOG.md | 20 + CONTRIBUTING.md | 1 + README.md | 10 +- docs/adr/0003-pagination-keyset.md | 5 +- .../building-blocks/PAGINATION_TEST_MATRIX.md | 14 +- docs/building-blocks/pagination.md | 16 +- docs/lab/README.md | 2 +- docs/linkedin-posts.md | 2 +- .../BuildingBlocks.Idempotency.csproj | 2 + .../Idempotency/PACKAGE_README.md | 4 + .../Idempotency/idempotency-icon.png | Bin 0 -> 405576 bytes .../Pagination.Dapper/AGENTS.md | 2 +- .../DapperCursorExtensions.cs | 6 +- .../Pagination.Dapper/README.md | 2 +- .../Pagination.Dapper/SeekSql.cs | 21 +- .../Pagination.EntityFrameworkCore/AGENTS.md | 11 +- ...ocks.Pagination.EntityFrameworkCore.csproj | 5 +- .../EntityFrameworkCursorExtensions.cs | 62 +++- .../Extensions/KeysetIndexExtensions.cs | 31 ++ .../PaginationServiceCollectionExtensions.cs | 55 +++ .../Infrastructure/Internal/CursorProvider.cs | 25 ++ .../Internal/NpgsqlIndexNullSort.cs | 88 +++++ .../Internal/PaginationNullsInterceptor.cs | 160 ++++++++ .../PACKAGE_README.md | 21 +- .../PublicAPI.Unshipped.txt | 7 + .../Query/Internal/CursorSeek.cs | 10 +- .../Query/Internal/CursorSeekTuple.cs | 168 +++++++++ src/BuildingBlocks/Pagination/AGENTS.md | 2 + .../Pagination/Internal/SeekOps.cs | 19 + .../Pagination/PaginationEnums.cs | 14 +- .../Pagination/PaginationOptions.cs | 6 +- .../Products/Queries/GetProductsQuery.cs | 6 +- .../ProductEntityTypeConfiguration.cs | 4 + .../Extensions/BuilderExtensions.cs | 3 + ...0904180000_ProductsNameThenPriceIndexes.cs | 40 ++ .../CatalogDbContextModelSnapshot.cs | 7 + .../Pagination/ProductSortKeys.cs | 16 +- .../DapperPagingTests.cs | 86 +++++ ...agination.EntityFrameworkCore.Tests.csproj | 6 + .../EfPagingTests.cs | 4 +- .../HasKeysetIndexNullSortEfTests.cs | 71 ++++ .../MultiColumnEfTests.cs | 125 +++++++ .../MutationNullCancelEfTests.cs | 96 ++++- .../PostgresTupleEfTests.cs | 350 ++++++++++++++++++ .../TypesAndSeekEfTests.cs | 4 +- .../Pagination.TestSupport/CatalogItem.cs | 4 + .../Pagination.TestSupport/CatalogSeed.cs | 28 ++ .../Pagination.Tests/CodecAndRegistryTests.cs | 77 ++++ .../Api/FeatureFusionApiTests.cs | 45 +++ web/README.md | 15 + 51 files changed, 1713 insertions(+), 83 deletions(-) create mode 100644 src/BuildingBlocks/Idempotency/idempotency-icon.png create mode 100644 src/BuildingBlocks/Pagination.EntityFrameworkCore/Extensions/PaginationServiceCollectionExtensions.cs create mode 100644 src/BuildingBlocks/Pagination.EntityFrameworkCore/Infrastructure/Internal/CursorProvider.cs create mode 100644 src/BuildingBlocks/Pagination.EntityFrameworkCore/Infrastructure/Internal/NpgsqlIndexNullSort.cs create mode 100644 src/BuildingBlocks/Pagination.EntityFrameworkCore/Infrastructure/Internal/PaginationNullsInterceptor.cs create mode 100644 src/BuildingBlocks/Pagination.EntityFrameworkCore/Query/Internal/CursorSeekTuple.cs create mode 100644 src/Lab/FeatureFusion/Infrastructure/Migrations/20260904180000_ProductsNameThenPriceIndexes.cs create mode 100644 tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/HasKeysetIndexNullSortEfTests.cs create mode 100644 tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/MultiColumnEfTests.cs create mode 100644 tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/PostgresTupleEfTests.cs create mode 100644 web/README.md diff --git a/.github/workflows/pagination.yml b/.github/workflows/pagination.yml index de47a27..8660144 100644 --- a/.github/workflows/pagination.yml +++ b/.github/workflows/pagination.yml @@ -46,8 +46,24 @@ jobs: - name: Test IR run: dotnet test tests/BuildingBlocks/Pagination.Tests/BuildingBlocks.Pagination.Tests.csproj -c Release --verbosity minimal + - name: Verify Docker + run: docker info + - name: Test EF Core package - run: dotnet test tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/BuildingBlocks.Pagination.EntityFrameworkCore.Tests.csproj -c Release --verbosity minimal + env: + PAGINATION_POSTGRES_REQUIRED: "true" + run: | + set -euo pipefail + log="${RUNNER_TEMP}/pagination-ef-test.log" + dotnet test tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/BuildingBlocks.Pagination.EntityFrameworkCore.Tests.csproj -c Release --verbosity minimal | tee "$log" + if grep -E 'Skipped:[[:space:]]+[1-9]' "$log"; then + echo "::error::PostgreSQL EF tuple tests were skipped. CI must execute them against Testcontainers Postgres." + exit 1 + fi + if ! grep -E 'Passed![[:space:]]+-[[:space:]]+Failed:[[:space:]]+0,[[:space:]]+Passed:[[:space:]]+[1-9]' "$log"; then + echo "::error::Pagination EF CI required a passing run with no failures." + exit 1 + fi - name: Test Dapper project (not packed) run: dotnet test tests/BuildingBlocks/Pagination.Dapper.Tests/BuildingBlocks.Pagination.Dapper.Tests.csproj -c Release --verbosity minimal diff --git a/CHANGELOG.md b/CHANGELOG.md index a482f20..1362956 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,26 @@ All notable changes to **BuildingBlocks** packages in this repository are docume The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## BuildingBlocks.Pagination.EntityFrameworkCore [1.1.0] - 2026-09-04 + +### Added + +- **Npgsql row-comparison seek** when the `SortKey` is tuple-eligible (uniform ASC/DESC) and every slot is a non-nullable value type: emits `(a, b, …) > (@0, @1, …)` via soft-resolved `EF.Functions.GreaterThan/LessThan` for **any column count** (9+ uses nested `ValueTuple` `TRest`). Mixed directions, strings, Sqlite, and SQL Server keep the expanded OR form. +- **`AddBuildingBlocksPagination` / `UseBuildingBlocksPagination`** — registers a command interceptor that appends `NULLS FIRST/LAST` to tagged pagination `ORDER BY` on Npgsql and Sqlite (null placement is encoded in the query tag; inverted on backward walks). +- **`HasKeysetIndex(sortKey, NullOrder)`** — optional Npgsql `HasNullSortOrder` on the composite index (soft API). The one-argument overload does not write null-sort metadata. +- Dapper: `ORDER BY … NULLS FIRST/LAST` on PostgreSQL and Sqlite from `PaginationOptions.Nulls` (also inverted on backward walks). SQL Server still omits `NULLS`. + +### Changed + +- `NullOrder` now documents seek **and** ORDER BY null placement where supported (was seek-predicate only). +- EF seek null comparisons for reference slots align with true NULLS FIRST/LAST semantics (fix for end-to-end null ordering). + +### Notes + +- Nullable value-type sort slots (`int?`, `DateTime?`) remain unsupported. +- No hard PackageReference on Npgsql in the nupkg; row comparison requires the host already using Npgsql.EntityFrameworkCore.PostgreSQL. +- Lab: `NameThenPrice` product sort (3-column keyset) + `AddBuildingBlocksPagination` / `UseBuildingBlocksPagination` on FeatureFusion. + ## BuildingBlocks.Idempotency [1.0.0] - 2026-09-04 ### Added diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 48c7866..3ab853b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -36,6 +36,7 @@ Release tags (must match the project ``): `mediator-v*`, `mcp-v*`, `ide - **One** packable project: `Pagination.EntityFrameworkCore`. Core IR and Dapper are `IsPackable=false`. - Keep EF layout: `Extensions/` (public API), `Query/Internal/`, `Infrastructure/Internal/`. +- Npgsql NULLS: `AddBuildingBlocksPagination` + `UseBuildingBlocksPagination` (tagged command interceptor `BuildingBlocks.Pagination:First|Last`, not `AsyncLocal`). Do not CASE-wrap `OrderBy`. `HasKeysetIndex(sortKey, NullOrder)` is optional Npgsql index metadata; the one-argument overload does not write it. - Core stays dependency-free of ORMs. Map host enums to prebuilt `SortKey`s; do not parse property-name strings. - Add/adjust tests for supported and unsupported rows ([PAGINATION_TEST_MATRIX.md](docs/building-blocks/PAGINATION_TEST_MATRIX.md)). - Public API changes: update `PublicAPI.Shipped.txt` / XML docs. diff --git a/README.md b/README.md index a592f10..6e5ff78 100644 --- a/README.md +++ b/README.md @@ -393,6 +393,8 @@ app.MapPost("/orders", CreateAsync).WithIdempotency(useLock: true); Typed **keyset (cursor)** pagination for EF Core. **One package** — `SortKey` / cursors ship inside it. Hosts map a sort enum to a **prebuilt** key — the library never reflects `"Price"` into a property. Unique last column required. Set `SigningKey` on public HTTP APIs. Dapper is an in-repo lab project, not a nupkg. There is no `IEnumerable` adapter. +**What's new in 1.1.0:** Npgsql row-comparison seek for uniform non-nullable composite keys of any width; `ORDER BY NULLS FIRST/LAST` on Npgsql/Sqlite via `AddBuildingBlocksPagination` + `UseBuildingBlocksPagination`; `HasKeysetIndex(sortKey, NullOrder)`. + ```bash dotnet add package BuildingBlocks.Pagination.EntityFrameworkCore ``` @@ -409,7 +411,7 @@ var page = await db.Products .ToCursorPageAsync(new CursorRequest(cursor, 20), key); ``` -Optional `PaginationOptions.Hint` defaults to `None`. `ReadUncommitted` is SQL Server session isolation (not `WITH (NOLOCK)`): EF starts one transaction around COUNT+PAGE when there is no ambient transaction, then restores `READ COMMITTED` on the still-open connection; ambient is ignored; PostgreSQL and Sqlite ignore it. Host `AsNoTracking` / Dapper `WITH (NOLOCK)` still work. Host `OrderBy` is replaced by the `SortKey`. Composite indexes should match each key, e.g. `(Price, Id)` and `(CreatedAt, Id)`. Nullable `T?` sort columns are unsupported. Guid CLR order is not SQL Server `uniqueidentifier` order. `NullOrder` is seek-predicate only (no SQL `NULLS FIRST/LAST`). Updates to a sort column can make a row vanish or reappear (inherent keyset). +Optional `PaginationOptions.Hint` defaults to `None`. `ReadUncommitted` is SQL Server session isolation (not `WITH (NOLOCK)`): EF starts one transaction around COUNT+PAGE when there is no ambient transaction, then restores `READ COMMITTED` on the still-open connection; ambient is ignored; PostgreSQL and Sqlite ignore it. Host `AsNoTracking` / Dapper `WITH (NOLOCK)` still work. Host `OrderBy` is replaced by the `SortKey`. Composite indexes should match each key, e.g. `(Price, Id)` and `(CreatedAt, Id)`. Nullable `T?` sort columns are unsupported. Guid CLR order is not SQL Server `uniqueidentifier` order. `NullOrder` drives seek and, on PostgreSQL/Sqlite, `ORDER BY NULLS FIRST/LAST` (EF: register `AddBuildingBlocksPagination` + `UseBuildingBlocksPagination`). Updates to a sort column can make a row vanish or reappear (inherent keyset). Indexed keyset on **file SQLite** SQL with index `(Price, Id)`, page 20. `--probe` is Stopwatch (1 warmup + 5 repeats), not BenchmarkDotNet, not Dry, not EF InMemory. Times below are **this machine’s** catalog; do not treat them as PostgreSQL or SQL Server timings. **KB** is mean managed allocations per page (`GC.GetAllocatedBytesForCurrentThread`), not process working set. First page is cheap for all three; allocations stay in the same band (~75–86 KB) because each call opens a context and materializes 20 rows. @@ -810,7 +812,7 @@ src/ # C# only FeatureFusion.AppHost/ # Aspire AppHost (+ SigNoz stack) FeatureFusion.ServiceDefaults/ EventBus/ # Reusable RabbitMQ event bus (namespaces stay EventBusRabbitMQ) -web/ # reserved — Next.js project root (not created yet; not in the .sln) +web/ # reserved Next.js showcase (README only; not in the .sln) tests/ BuildingBlocks/ Mediator.Tests/ @@ -1002,7 +1004,7 @@ BuildingBlocks.Mediator: [NuGet v1.0.1](https://lnkd.in/p/eU5TsuR4) · [manual p This remains a **public .NET lab**. Near-term direction: - More **BuildingBlocks.\*** packages extracted from the showcase -- Frontend showcase (`web/`, Next.js project root) +- Frontend showcase (`web/`, Next.js project root — folder exists with a README; app not scaffolded yet) - Keep the LinkedIn catalog in sync when new posts ship (`mcp-message-tools` planned) - Pub/sub stays a **sibling** story (not Mediator notifications) @@ -1021,7 +1023,7 @@ dotnet test FeatureFusion.sln -c Release | `BuildingBlocks.Mcp.Tests` | Catalog, invoker, endpoint methods, MapTool scoped SP, idempotency, filters | | `BuildingBlocks.Mcp.Analyzers.Tests` | BBMCP001–005 | | `BuildingBlocks.Pagination.Tests` | Codec, registry, identifiers (net8 / net9 / net10) | -| `BuildingBlocks.Pagination.EntityFrameworkCore.Tests` | Sqlite keyset + shadow + projection | +| `BuildingBlocks.Pagination.EntityFrameworkCore.Tests` | Sqlite keyset + shadow + projection; Postgres Testcontainers when Docker is available | | `BuildingBlocks.Pagination.Dapper.Tests` | Sqlite execute + dialect SQL asserts | | `BuildingBlocks.Telemetry.Tests` | `AddTelemetry` / `IntegrateMediator` / `IntegrateMcp` | | `BuildingBlocks.Aspire.Hosting.SigNoz.Tests` | AppHost integration | diff --git a/docs/adr/0003-pagination-keyset.md b/docs/adr/0003-pagination-keyset.md index 613da8f..b3d65f1 100644 --- a/docs/adr/0003-pagination-keyset.md +++ b/docs/adr/0003-pagination-keyset.md @@ -10,11 +10,12 @@ 1. **One NuGet** for v1: `BuildingBlocks.Pagination.EntityFrameworkCore`. The **intermediate representation** (IR: `SortKey`, cursors, seek slots) is a non-packable sibling project whose DLL is **bundled** in that nupkg. Consumers do not install a second Pagination package. 2. **Dapper** stays an **in-repo project**, not a package, until we choose to ship it. A LinqToDB adapter is **not** in this repository; a future adapter could reuse the same IR. Same rule as keeping MCP off Mediator: adapters do not leak into the shipped EF package as extra nupkgs. 3. Shared **seek IR** in the core project: ordered slots `{ Direction, ClrType, Value, SqlIdentifier?, Expression }`. The EF package executes; core does not reference EF. -4. EF project layout follows **EF Core package structure**: `Extensions/` (public `ToCursorPageAsync`), `Query/Internal/` (OrderBy + seek trees), `Infrastructure/Internal/` (DbContext / shadow). Mapped members use expressions; shadow uses typed `ByShadow` → `EF.Property`. +4. EF project layout follows **EF Core package structure**: `Extensions/` (public `ToCursorPageAsync` / `HasKeysetIndex`), `Query/Internal/` (OrderBy + seek trees), `Infrastructure/Internal/` (DbContext / shadow / NULLS interceptor / soft Npgsql `HasNullSortOrder`). Mapped members use expressions; shadow uses typed `ByShadow` → `EF.Property`. 5. Cursors are opaque and versioned. No `pageIndex`. HMAC is optional in the API and **required for untrusted HTTP** (`SigningKey`). Slot decode failures are `InvalidCursor`. Unregistered `SortKeyRegistry.Get` is `InvalidOperationException`, not a bad cursor. 6. FeatureFusion is the showcase (Minimal API `GET /api/v2/products-page`, MVC `POST /api/v2/Product/products`, Dapper `products-dapper`, MCP `products.list` — one `GetProductsQuery`). No extra sample apps. Benchmarks: `benchmarks/BuildingBlocks/Pagination.EntityFrameworkCore.Benchmarks` (file SQLite: FeatureFusion vs OFFSET vs MR.EntityFrameworkCore.KeysetPagination; cursor codec separate). Publish Default-job or `--probe` only — never Dry. 7. **Query hints are optional and allowlisted.** `PaginationOptions.Hint` defaults to `QueryHint.None` (zero extra SQL). `QueryHint.ReadUncommitted` is SQL Server session isolation (`READ UNCOMMITTED`), not table-hint `WITH (NOLOCK)`. EF begins one transaction around COUNT (if requested) and PAGE when there is no ambient transaction, then restores `READ COMMITTED` on the still-open connection; an ambient transaction is ignored (no nest). Dapper prefixes `SET TRANSACTION ISOLATION LEVEL` and restores `READ COMMITTED`. PostgreSQL/Sqlite ignore it. No raw SQL strings (injection). Host `AsNoTracking` / `TagWith` / Dapper `WITH (NOLOCK)` remain valid when `Hint` is omitted. Kitchen-sink lock/index hints stay host-owned. -8. **No `IEnumerable` adapter.** Host `OrderBy` is replaced by `CursorOrder`, not merged. Nullable value-type sort slots are rejected (`NullableSortUnsupported`) because `NullOrder` does not emit `NULLS FIRST/LAST`. +8. **No `IEnumerable` adapter.** Host `OrderBy` is replaced by `CursorOrder`, not merged. Nullable value-type sort slots are rejected (`NullableSortUnsupported`). On PostgreSQL/Sqlite, `NullOrder` drives seek and `ORDER BY … NULLS FIRST/LAST` when the host registers `AddBuildingBlocksPagination` + `UseBuildingBlocksPagination`. EF does **not** use `AsyncLocal`: `ToCursorPageAsync` tags the query `BuildingBlocks.Pagination:First|Last` (inverted on backward walks) and a `DbCommandInterceptor` rewrites only those tagged commands. Dapper emits NULLS without that registration. SQL Server does not emit `NULLS`. +9. **Npgsql row comparison** for uniform non-nullable multi-column keys of any width (soft dependency on the host’s Npgsql package; 9+ columns nest `ValueTuple` `TRest`). Mixed ASC/DESC and string slots keep the expanded OR seek. `HasKeysetIndex(sortKey, NullOrder)` optionally calls Npgsql `HasNullSortOrder`; the one-argument overload does not write that metadata. ## Consequences diff --git a/docs/building-blocks/PAGINATION_TEST_MATRIX.md b/docs/building-blocks/PAGINATION_TEST_MATRIX.md index 79bdd92..3884118 100644 --- a/docs/building-blocks/PAGINATION_TEST_MATRIX.md +++ b/docs/building-blocks/PAGINATION_TEST_MATRIX.md @@ -1,4 +1,4 @@ -# BuildingBlocks.Pagination v1 — test matrix +# BuildingBlocks.Pagination v1.1 — test matrix xUnit on **net8.0 / net9.0 / net10.0**. No coverlet gate. Fast CI: `.github/workflows/pagination.yml` (IR, EF Sqlite, Dapper SQL-gen). SQL Server QueryHint execute: `.github/workflows/pagination-queryhint-sqlserver.yml`. Release pack: `.github/workflows/pagination-release.yml` (tag `pagination-v*` must match the EF ``). **One nupkg:** `BuildingBlocks.Pagination.EntityFrameworkCore`. Dapper tests still run; that project is not packed. @@ -12,9 +12,9 @@ Each supported row has a matching test name prefix. |---------------|-----------| | `Enum_` | `ItemSortField` × `SortDirection` first page (ASC/DESC); exhaustive `SortKeyRegistry` (`Enum.GetValues`); next page no overlap; previous cursor restores first page; Price cursor + Name key → `CursorSortMismatch`; unknown enum is a registry miss (not string reflection) | | `Expression_` / `String_Seek_` / `Guid_Seek_` / `Shadow_` / `No_Public_OrderBy` | Mapped `By(p => p.Price)` query has **no** `EF.Property`; string/Guid seek has **no** `CompareTo` / `string.Compare` and uses `>`; shadow `ByShadow` **does** use `EF.Property`; unknown shadow fails before execute; nested `Vendor.Name` (EF); no `OrderBy(string)` API | -| `HasKeysetIndex_` | Composite index property order + DESC flags match `SortKey`; nested path → `UnsupportedKeysetIndex` | +| `HasKeysetIndex_` | Composite index property order + DESC flags match `SortKey`; nested path → `UnsupportedKeysetIndex`; `HasKeysetIndex(sortKey, NullOrder)` emits non-default `NULLS FIRST/LAST` in Npgsql `CREATE INDEX`; one-arg overload does not | | `Forward_` / `Previous_` / `Duplicate_` / `Empty_` / `Single_Page` / `Backward_` / `Replay_` | Empty table; single page `HasNext` false; `limit+1` HasNext; forward no overlap (**same ids as seed/EF**); backward restores first page; **empty cursor + `PageDirection.Backward` = last page**; **same next cursor replayed is stable**; composite Price+Id with duplicate prices; whitespace cursor = first page | -| `Postgres_` / `Mixed_Direction_` / `SqlServer_` / `Sqlite_` | Dapper: Postgres tuple SQL `(price, id) >` when directions match; mixed ASC/DESC is OR not tuple; SqlServer `FETCH NEXT`; Sqlite `LIMIT`. EF: OR-chain seek (provider-agnostic) + Sqlite `LIMIT` in `ToQueryString` | +| `Postgres_` / `Mixed_Direction_` / `SqlServer_` / `Sqlite_` / `Three_Column_` / `Four_Column_` / `Nine_Column_` | Dapper: Postgres tuple SQL when directions match (incl. 3–4 and 9 columns); mixed ASC/DESC is OR; `NULLS FIRST/LAST` on PG/Sqlite ORDER BY; SqlServer `FETCH NEXT` and no NULLS. EF Sqlite: OR-chain + multi-column execute (incl. 9-column). EF Npgsql (Testcontainers, required in `pagination.yml` CI): tuple seek for uniform non-null keys of any width; string/mixed stay OR; NULLS LAST via interceptor | | `Missing_Sql_` / `Shadow_Throws` / `Host_Where_` / `InvalidHostSql_` | Dapper missing `sql:` throws; Dapper rejects `ByShadow`; host WHERE params + `@ks0` no collision; host SQL with `ORDER BY` / `OFFSET` / `FETCH` / `LIMIT` → `InvalidHostSql`; `WITH (NOLOCK)` in host SQL is preserved inside the subquery | | `IncludeTotalCount_` / `Limit_` / `Invalid_` / `Hmac_` / `Codec_` | Count on/off; limit 0 / over max; invalid/truncated/tampered cursor; HMAC reject unsigned when key set; concurrent encode/decode; `PaginationOptions.Default` is not a shared mutable singleton; default `Hint` is `None` | | `Clr_` | `int`, `long`, `short`, `byte`, `float`, `double`, `bool`, `Guid`, `string`, `decimal` (EF InMemory + Dapper Sqlite), `DateTime` UTC, `DateTimeOffset`, `DateOnly`, `TimeOnly`, `TimeSpan`, entity enum. **`T?` sort slots → `NullableSortUnsupported`** | @@ -23,10 +23,10 @@ Each supported row has a matching test name prefix. | `Cancellation` | `CancellationToken` on EF `ToListAsync` and Dapper `CommandDefinition` | | `Hmac_Signed_` / `Insert_And_Delete_` / `Mixed_Direction_` / `Registry_` | HMAC signed first/next/prev execute; insert+delete between pages keep unique keys stable; mixed ASC/DESC EF seek SQL is an OR-chain; unregistered `SortKeyRegistry.Get` is `InvalidOperationException` (not `InvalidCursor`); `FromCursorValue` bad JSON → `InvalidCursor` | | `SortColumn_` | EF Sqlite execute: raising a later `Price`/`CreatedAt` before the cursor vanishes from page 2; lowering a far-ahead row can appear later. Inherent keyset; no uniqueness beyond the unique slot | -| `Nullable_String_` | EF Sqlite execute: `string?` null / `""` / names; `NullOrder.Last` and `First`; forward and backward. Seek-only (no `NULLS FIRST/LAST`); first-page `ORDER BY` follows Sqlite (NULL first) even when `Nulls = Last` | +| `Nullable_String_` / `AddBuildingBlocksPagination_` | EF Sqlite with `UseBuildingBlocksPagination`: `NullOrder.Last`/`First` change first-page order; without interceptor, Sqlite NULL-first remains. Seek aligns with NULLS semantics | | `Cancellation_After_` | EF interceptor cancels after `ReaderExecuting` (command started). Existing `Cancellation()` is pre-cancelled | | `QueryHint_` | Default `None` emits no SET/NOLOCK; Dapper `ReadUncommitted` prefixes `SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;` on SqlServer only (Postgres/Sqlite SQL unchanged), including COUNT-shaped SQL via `QueryHintSql.Apply`; restore `READ COMMITTED` is a separate execute (not in `BuildSql`); host `WITH (NOLOCK)` still inside the subquery; EF/Dapper Sqlite execute with `ReadUncommitted` is a no-op; **SQL Server execute** (Aspire, separate project): dirty read, COUNT+PAGE same isolation, commit, exception rollback, cancellation cleanup, ambient txn ignored; **same open connection** isolation is 1 during RU paging and 2 after success/exception/cancellation (pooling on); Dapper execute restore on open SqlConnection; CI (`GITHUB_ACTIONS` / `PAGINATION_SQLSERVER_REQUIRED`) never skips; IntegrationTests Postgres execute is a no-op | -| Lab HTTP | `FeatureFusionApiTests` — `GET /api/v2/products-page` first/next/prev; empty cursor + `pageDirection=Backward` last page; GET matches POST; every `ProductSortField` × direction; JSON `"SortBy":"Price"`; invalid cursor 400; first-page `TotalCount > limit`; EF list uses `AsNoTracking` + `TagWith("products.list")` + SQL `Select` to `ProductDto`; MVC `POST /api/v2/Product/products` and GET Minimal API return the same ids; Dapper first page matches EF; Swagger v2 documents GET | +| Lab HTTP | `FeatureFusionApiTests` — `GET /api/v2/products-page` first/next/prev; empty cursor + `pageDirection=Backward` last page; GET matches POST; every `ProductSortField` × direction (incl. `NameThenPrice`); Price next-page seek SQL is Npgsql row comparison; JSON `"SortBy":"Price"`; invalid cursor 400; first-page `TotalCount > limit`; EF list uses `AsNoTracking` + `TagWith("products.list")` + SQL `Select` to `ProductDto`; MVC `POST /api/v2/Product/products` and GET Minimal API return the same ids; Dapper first page matches EF; Swagger v2 documents GET | ## Explicitly unsupported @@ -43,9 +43,9 @@ Each supported row has a matching test name prefix. | OData / filter DSL / Mongo | Out of v1 | | Mediator / MCP package refs | Pagination does not reference them | | Lab `Result` inside the library | Host maps `CursorPage` → `PagedResult` | -| Testcontainers Postgres in CI | Assert Postgres **tuple SQL text**; **execute** against Sqlite | +| Testcontainers Postgres execute | Required in Pagination CI (`PAGINATION_POSTGRES_REQUIRED` + Docker). Locally skipped when Docker is not on PATH | | Sort whole value objects / `byte[]` / Ulid structs | `UnsupportedSortType`; sort the mapped scalar | ## Edge -Null/empty/whitespace cursor = first page. Empty cursor + `PageDirection.Backward` = last page. Empty `SigningKey` + signing requested → `SigningKeyRequired`. Invalid SQL identifier (`Name; DROP TABLE`) → `InvalidIdentifier`. Slot JSON that cannot decode → `InvalidCursor`. Unregistered registry enum → `InvalidOperationException`. `NullOrder` is seek-side for reference types only and does **not** emit `NULLS FIRST/LAST`. Nullable value-type sort slots are rejected (`NullableSortUnsupported`). DateTime cursor values are UTC. Guid CLR order ≠ SQL Server `uniqueidentifier`. Host `OrderBy` is replaced. No `IEnumerable` API. +Null/empty/whitespace cursor = first page. Empty cursor + `PageDirection.Backward` = last page. Empty `SigningKey` + signing requested → `SigningKeyRequired`. Invalid SQL identifier (`Name; DROP TABLE`) → `InvalidIdentifier`. Slot JSON that cannot decode → `InvalidCursor`. Unregistered registry enum → `InvalidOperationException`. `NullOrder` drives seek and (on PG/Sqlite with EF interceptor or Dapper) `ORDER BY NULLS …`. Nullable value-type sort slots are rejected (`NullableSortUnsupported`). DateTime cursor values are UTC. Guid CLR order ≠ SQL Server `uniqueidentifier`. Host `OrderBy` is replaced. No `IEnumerable` API. diff --git a/docs/building-blocks/pagination.md b/docs/building-blocks/pagination.md index 253cf35..a10a805 100644 --- a/docs/building-blocks/pagination.md +++ b/docs/building-blocks/pagination.md @@ -1,6 +1,6 @@ # BuildingBlocks.Pagination -Typed keyset (cursor) pagination. **One NuGet:** `BuildingBlocks.Pagination.EntityFrameworkCore` (IR + EF Core adapter). Dapper is an in-repo project, not a package. +Typed keyset (cursor) pagination. **One NuGet:** `BuildingBlocks.Pagination.EntityFrameworkCore` **1.1.0** (IR + EF Core adapter). Dapper is an in-repo project, not a package. See ADR [0003](../adr/0003-pagination-keyset.md), the [test matrix](PAGINATION_TEST_MATRIX.md), and [`PACKAGE_README.md`](../../src/BuildingBlocks/Pagination.EntityFrameworkCore/PACKAGE_README.md). @@ -24,22 +24,28 @@ var key = SortKey.For() Map a host enum with `SortKeyRegistry` — do not parse `"Price"` into a property. An unregistered enum throws `InvalidOperationException` (not `InvalidCursor`). -**Sort the stored scalar.** Enums encode as their numeric underlying value. Value objects: `p => p.Money.Amount`, not `p => p.Money`. Nullable value types (`int?`, `DateTime?`, nullable enums) are rejected (`NullableSortUnsupported`); coalesce in the model. `NullOrder` does not emit `NULLS FIRST/LAST`. +**Sort the stored scalar.** Enums encode as their numeric underlying value. Value objects: `p => p.Money.Amount`, not `p => p.Money`. Nullable value types (`int?`, `DateTime?`, nullable enums) are rejected (`NullableSortUnsupported`); coalesce in the model. On PostgreSQL/Sqlite, `NullOrder` drives seek and `ORDER BY … NULLS FIRST/LAST` when the host calls `AddBuildingBlocksPagination` + `UseBuildingBlocksPagination` (Dapper always emits NULLS on those dialects). SQL Server does not emit `NULLS`. ## EF Core ```csharp +builder.Services.AddBuildingBlocksPagination(); +// when configuring DbContext: +options.UseBuildingBlocksPagination(); + var page = await db.Products .AsNoTracking() .TagWith("products.list") .ToCursorPageAsync(new CursorRequest(cursor, 20), key); ``` -Source layout matches EF Core packages: `Extensions/` (public API), `Query/Internal/` (OrderBy + seek), `Infrastructure/Internal/` (DbContext / shadow). +Source layout matches EF Core packages: `Extensions/` (public API), `Query/Internal/` (OrderBy + seek), `Infrastructure/Internal/` (DbContext / NULLS interceptor / soft Npgsql `HasNullSortOrder`). `ToCursorPageAsync` tags queries `BuildingBlocks.Pagination:First|Last` so the NULLS interceptor can rewrite `ORDER BY` without `AsyncLocal`. Host `OrderBy` is **replaced** by the sort key, not merged. There is no `IEnumerable` overload. -Optional `PaginationOptions.Hint` defaults to `None` (no extra SQL or transaction). `QueryHint.ReadUncommitted` is SQL Server **session isolation** (`READ UNCOMMITTED`), not table-hint `WITH (NOLOCK)`. EF begins one `ReadUncommitted` transaction around COUNT (if requested) and PAGE when there is no ambient transaction, then restores `READ COMMITTED` on the still-open connection; an ambient transaction is ignored (no nest). PostgreSQL and Sqlite no-op. Dapper uses a `SET TRANSACTION ISOLATION LEVEL` prefix, then restores `READ COMMITTED` on the open connection. Host `AsNoTracking` / `TagWith` / Dapper `WITH (NOLOCK)` still work when `Hint` is omitted. Prefer the `Select` overload so DTOs are projected in SQL. `HasKeysetIndex(sortKey)` creates the matching composite index (add a DESC variant when the first column is descending). +On **Npgsql**, uniform non-nullable multi-column keys of **any width** use SQL row comparison (`(a, b, …) >`); mixed ASC/DESC and `string` slots stay on the OR form. Prefer matching composite indexes via `HasKeysetIndex` (add a DESC variant and optional `NullOrder` when the NULLS placement is not the column's ASC/DESC default). + +Optional `PaginationOptions.Hint` defaults to `None` (no extra SQL or transaction). `QueryHint.ReadUncommitted` is SQL Server **session isolation** (`READ UNCOMMITTED`), not table-hint `WITH (NOLOCK)`. EF begins one `ReadUncommitted` transaction around COUNT (if requested) and PAGE when there is no ambient transaction, then restores `READ COMMITTED` on the still-open connection; an ambient transaction is ignored (no nest). PostgreSQL and Sqlite no-op. Dapper uses a `SET TRANSACTION ISOLATION LEVEL` prefix, then restores `READ COMMITTED` on the open connection. Host `AsNoTracking` / `TagWith` / Dapper `WITH (NOLOCK)` still work when `Hint` is omitted. Prefer the `Select` overload so DTOs are projected in SQL. `HasKeysetIndex(sortKey)` creates the matching composite index (add a DESC variant when the first column is descending). `HasKeysetIndex(sortKey, NullOrder)` optionally calls Npgsql `HasNullSortOrder`; the one-argument form does not. Set `SigningKey` on public HTTP APIs so clients cannot forge `Walk` or key values. @@ -70,7 +76,7 @@ GET /api/v2/products-page?limit=20&sortBy=Price&sortDirection=Ascending&cursor=< GET /api/v2/products-page?limit=20&sortBy=Price&sortDirection=Ascending&cursor= ``` -Empty cursor + `pageDirection=Backward` starts at the last page (`GET /api/v2/products-page?limit=20&pageDirection=Backward`). `sortBy`: `Id` · `Name` · `Price` · `CreatedAt` (each composite key ends with unique `Id`). `sortDirection`: `Ascending` · `Descending`. +Empty cursor + `pageDirection=Backward` starts at the last page (`GET /api/v2/products-page?limit=20&pageDirection=Backward`). `sortBy`: `Id` · `Name` · `Price` · `CreatedAt` · `NameThenPrice` (each composite key ends with unique `Id`). `sortDirection`: `Ascending` · `Descending`. ![First page, next cursor, previous cursor, last page via pageDirection=Backward.](../medium/images/04b-cursor-flow.png) diff --git a/docs/lab/README.md b/docs/lab/README.md index 609f985..272a112 100644 --- a/docs/lab/README.md +++ b/docs/lab/README.md @@ -74,7 +74,7 @@ Do **not** extract: Scenario DSL, one-off test gates, fixed-permit rate limiters ## Package / versioning (current) -- Each packable project owns `` in its `.csproj` (e.g. `BuildingBlocks.Mcp` `1.0.0`). +- Each packable project owns `` in its `.csproj` (e.g. `BuildingBlocks.Pagination.EntityFrameworkCore` `1.1.0`, `BuildingBlocks.Mcp` `1.0.0`). - Release tags are package-prefixed (`mcp-v*`, `mediator-v*`, `telemetry-v*`, …) and must match ``. - Per-package GitHub Actions: `*-yml` CI + `*-release.yml` pack / Trusted Publishing to nuget.org (`idempotency.yml` / `idempotency-release.yml` for this package). - IntegrationTests / Exp 1–18 are **not** in CI (local Aspire/Docker). diff --git a/docs/linkedin-posts.md b/docs/linkedin-posts.md index c3525f2..63e72f9 100644 --- a/docs/linkedin-posts.md +++ b/docs/linkedin-posts.md @@ -12,7 +12,7 @@ Umbrella narrative (lab → packages): [Medium](https://medium.com/@m2hweb86/fea | `building-blocks-overview` | BuildingBlocks + NuGet packages (Mediator 1.1.0, keyset, MCP, Telemetry, SigNoz) | published | https://lnkd.in/p/e4-FrM44 | `src/BuildingBlocks/*` | `medium-engineering-lab`, `mediator-building-blocks`, `cursor-pagination`, `mcp-message-tools` | Umbrella post: extract only when the contract earned a boundary. Not a SigNoz SDK. Dapper pagination stays in-repo. | | `mediator` | Manual Mediator + pipeline behaviors | published | https://www.linkedin.com/feed/update/urn:li:activity:7311311587372367873/ | was `Infrastructure/CQRS`; now `src/BuildingBlocks/Mediator` | `mediator-building-blocks` | Custom CQRS Mediator with cached wrappers, void via `ICommand : ICommand`, OTel-friendly behaviors. Follow-up NuGet post → `mediator-building-blocks`. | | `mediator-building-blocks` | BuildingBlocks.Mediator NuGet (v1.0.1 launch; current 1.1.0) | published | https://lnkd.in/p/eU5TsuR4 | `src/BuildingBlocks/Mediator` + `docs/building-blocks/mediator.md` | `mediator`, `building-blocks-overview` | Packaged CQRS Send + ordered pipeline (void via `ICommand : ICommand`). Publish/notifications out of v1. 1.1.0 adds typed command/query behaviors + Send metrics. Prior deep-dive → `mediator`. | -| `cursor-pagination` | Reusable generic bidirectional keyset (cursor) pagination | published | https://www.linkedin.com/feed/update/urn:li:activity:7325068550614708225/ | `src/BuildingBlocks/Pagination.EntityFrameworkCore` + lab `ProductService` | `building-blocks-overview` | Typed `SortKey`, opaque cursors, one EF Core nupkg. Optional `QueryHint` (default none). Lab: MVC `POST /api/v2/Product/products`, Minimal API `GET /api/v2/products-page` (POST kept), Dapper `products-dapper`, MCP `products.list` — one `GetProductsQuery`. | +| `cursor-pagination` | Reusable generic bidirectional keyset (cursor) pagination | published | https://www.linkedin.com/feed/update/urn:li:activity:7325068550614708225/ | `src/BuildingBlocks/Pagination.EntityFrameworkCore` + lab `ProductService` | `building-blocks-overview` | Typed `SortKey`, opaque cursors, one EF Core nupkg (**1.1.0**: Npgsql row comparison, NULLS interceptor). Optional `QueryHint` (default none). Lab: MVC `POST /api/v2/Product/products`, Minimal API `GET /api/v2/products-page` (POST kept), Dapper `products-dapper`, MCP `products.list` — one `GetProductsQuery`. | | `mcp-message-tools` | Message types as MCP tools | published | https://lnkd.in/p/e4-FrM44 | `src/BuildingBlocks/Mcp` + `docs/building-blocks/mcp.md` | `building-blocks-overview` | Deny-by-default `[McpTool]` / `WithMcp` / `MapTool` on the official SDK. Same logic as HTTP. Interim permalink is the umbrella post until a dedicated MCP post ships. Not OpenAPI, not a SOLID linter. | | `idempotency-cqrs` | Idempotency with CQRS commands | published | https://www.linkedin.com/feed/update/urn:li:activity:7303686809891356676/ | (pattern lab) | `idempotentfusion` | **Lab only, not NuGet.** Command-level idempotency via reusable `IdentifiedCommand` + ULID `Idempotency-Key`, intercepting before handlers. Complementary to Mediator — not core v1. | | `idempotentfusion` | IdempotentFusion (REST API) | published | https://www.linkedin.com/feed/update/urn:li:activity:7309149985307029504/ | `src/BuildingBlocks/Idempotency` + Lab `OrderController` | `idempotency-cqrs` | HTTP Idempotency-Key via `BuildingBlocks.Idempotency` (Redis cache host-owned, optional SET NX lock). Lab sets `UserIdFallback = "123"`. | diff --git a/src/BuildingBlocks/Idempotency/BuildingBlocks.Idempotency.csproj b/src/BuildingBlocks/Idempotency/BuildingBlocks.Idempotency.csproj index 6454cb4..c7b1a3b 100644 --- a/src/BuildingBlocks/Idempotency/BuildingBlocks.Idempotency.csproj +++ b/src/BuildingBlocks/Idempotency/BuildingBlocks.Idempotency.csproj @@ -23,6 +23,7 @@ https://github.com/Maxofpower/FeatureFusion git PACKAGE_README.md + idempotency-icon.png 1.0.0: IdempotencyGate; MVC + Minimal API; 2xx envelope replay; ProblemDetails errors; ProcessingTtl / EntryTtl + per-endpoint overrides; optional Redis lock; opt-in method+path+body fingerprint; fluent UseRedisLock/UseTelemetry. Host owns IDistributedCache. https://github.com/Maxofpower/FeatureFusion/blob/main/CHANGELOG.md true true @@ -34,6 +35,7 @@ + diff --git a/src/BuildingBlocks/Idempotency/PACKAGE_README.md b/src/BuildingBlocks/Idempotency/PACKAGE_README.md index 4726a06..b10130e 100644 --- a/src/BuildingBlocks/Idempotency/PACKAGE_README.md +++ b/src/BuildingBlocks/Idempotency/PACKAGE_README.md @@ -2,6 +2,10 @@ ASP.NET Core **Idempotency-Key** for MVC and Minimal API. Host-owned `IDistributedCache`, optional Redis lock, opt-in request fingerprint, RFC 9457 ProblemDetails on conflicts, optional ActivitySource. +[![NuGet](https://img.shields.io/nuget/v/BuildingBlocks.Idempotency.svg)](https://www.nuget.org/packages/BuildingBlocks.Idempotency) +[![.NET](https://img.shields.io/badge/.NET-8%20%7C%209%20%7C%2010-512BD4)](https://dotnet.microsoft.com/) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) + Requires **.NET 8**, **.NET 9**, or **.NET 10**. ## Install diff --git a/src/BuildingBlocks/Idempotency/idempotency-icon.png b/src/BuildingBlocks/Idempotency/idempotency-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ed7e8b099bce477574a9f02686ce994e4c0ecd84 GIT binary patch literal 405576 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πp5@_wI$UVGQT6C@wlM5?0JKD? z!x8lWugFQ#B1>$%3FJ}k4Y0n0&WD36SlLk&ORH>IgE){Glas9J>gYaZ=FLX!!7t5h z^*@VJxdc^NwX2QYvDX-dx>aEwXJH#1FvGWeXX_P~XEwjY5v!36Gbhi#tOiFd#Y8DO zOq=iE9Xa+&;z0=}Krq<}3dMn(v&*LapTnEf*=psI(q&S3EPGYu-8_ zPO!s({o7KE(CXTWCp7U1vjI3|_L^&F&jS~^%!#0QsBCbUCg9DfEwSx6(~Udq^Q9-eFUp-KYE?Cp_`4l&U)(4X zq%OTGjbzoDpyKGZ)X~T)KU@><%nZC?_wQc{fS|%**xkmQ6fasTX&q7=KBqowwAL#t zJ+K*y>4}yeQg@#*MHSEDiKIIQwnZa{DjlgeG1;<3rPg~+zL(xKm*AA{4D+^XM+4YNl#>z8)-hR}=69<2YF z6lb~*&BGZIzgbF5DEdF89Y0r>R^T_^PL{sWx>;KtEUp);X}_JnBgN|b0*ca&+k;mu zmn+Qf(FwePIdNnAZ1q08-r48xm!?g){iq9T1x8Ev6^8-mf;xNMjA5e%VLO;?K3X^n}3OW z@Zo*M!$)}+ahf-K1%vs<7MKEnZ*`PiNo_w^3rlB_A)bEgYrw5v4ZoBODb44wD^0JX z&?yVWTTTsH-d&=vI4sgloLM=at*a6=5TWb^m-+sDY~f~n3O(eb2p1H=ongM3G6({; zimR(=D;tuVzbc{=3$wZycf&^{val#4GiEp#zT9%KaTTDK*KXK=b!4})d>?_j$@&Te zDaFj~*@tFo$)>bVO!fop@Mj$RYV_9oGNV3#z^BwH*-&u$N9!8teokA>5_0gAZ7-47 zmya4hW5@DRqjTsxycY&Y*Z}e2PDK#gvo#+IOLD^-vC6YV||8ojg3j71lM%3NUlT zX|e~cQiL@8K7B|M3bz3&>=W1!}zG#ZaW2Hxxe-~1CbxAz?!_z$HGc6!uvqvlcv z(Kj3A-e(e>otKID>6-3Kl8`W3y?a^K(vUE?XS=j_(RF21#$r3w*P?pq5H68_9u{#T z7K;&XNCSn}*|Azhyvd85_XE}(Dm3=dls{F^w8h$s6*CC+T* zKjXaq+py$qRr*Dg-7D)%P#9m|EkXy~s1V0wiY}pJVNJJ{TzX$W_vE>hXA|qv8UaLq zJtc@soVie~24LOQCk6p7a*ZAtfX6J9i|__-!;}}vzhEM<`h+5VndP0QTTN_;O#(#L z`N#;+Yut#rW%UD*#S!eq;>TSn>zsH|4d*kv|D`3UhaA$=Yh_jPx#vOFH+!Xo>_Ayh zBZ$G;D4DQ1D(`-N^$vv{-4@daArY~UCM6>iHjRuqlYbscQAXaF9E-g^EPfggmrh1j zpZac%FM`fIour;_G;DSs@|kEOX0=56;rDm@t`*VGkAKN*jp+$lcvG8fz#O`5TaYmF zm^t>^NtwUn>|S&3O!~RVicoTSezvT({R`q$;m}uroQBM5ch=Ul?20zkK}wnlhRO~{ zLI6*j`4MoCdT>dvHNcwe8Ov{PYlj0u{-!HdW|E zHX7~sp_c$Er-x3j;}fCvVe!O`y6Zi}pq0&uRZs04k=y=d%buvzQf5bJxt)jqgD~hm z{!7G!#t=>aes5OH)`R(Jhx%iAx%P!44^RN2QS#RK7J@+McI1bYBQKtw4V>M#-n?N< ziB+*SXbD5h5@CUug6&7jR-bZl$vhQLv#fOPT}-guRt^#K0;ib!tmFRDAZPwvPiS(f z-Y1=>M6}Fg^?p;ikfyNsPYFgEz!W{^c{u?bNzJ>JDDpRJ+!-RuAZBxd<}{WnqDgOT z5NQS_sG835azpKgcjpYm=P-ZfmGrRsb2abHQY6Ao#2+U&iBAyg8Jm~M;+J`?O7(;o zJ3@&sa@Ta-ZKHKP&c>(dRM?_r%aOSpvAprhOuo2@zc%wUwoa`YUZ`>x2PxxDWI$7n zZ%plH9V;Y4UMclQ*qUrSOZi&6GlKgaxBQ-9d5v{yYA`*{d7TKCpF0klF7-8cK4}kJ z^;J4DWvLpPR^97ow%|~5d;Isr0dKsQZgLxg3GFM+ewHBJAfwljed7r<2jOO9BZcF-v6$e6w+KXgG%Ak#+>AkM>f(4 zo4PQgmisyLnDxU!&v=n`S%er$Lsy$CMhE$}XTNMjzBz=5VpqzFyzfB^e@6&n>Ni z$!&ekd{f*1W-2iHu5FAF^Q%g7n7c*voC7)8+R-_oCv;?7k!19Yf3=}395XD;*W6#3XUgFal$T3@+T57gi0N#IIhp4fzaH3S#D%eVJsv*L5GuFH9l` zjOGlnWYtA(;ilybQX6yP3$Wj?k)XIZ3>(u*hQEdSRl+{|!AxX#Sk3;ZEM+*;!+{vqtpH>rlt&Bg@QqalhM$=kFbGBTC(nIJo((-etmW za}{n~jkv30=KK1V{<{I3(4z~FZRWEi!<$W%=1FJr`So_Jn zbHti>Y)e%JX+6uV_|qB=72yx)8JMSV?iq$p!z%6Vp3^R^286OBSI}z#16wnj>?m5* z4(px!Vzy?>qe*8PbpYHcxBO5g0g*0AQ@@~RHL<+b6X$i;O}oT$i_Q`iRNQRudIUOiu)n>3~_Y-T$4%coulptU|s0!ZA`@_UrFwCe*?H_pxO&Lcwvxu|R zBi*!FCP=r}DIF!$lvZS8PqY^ z+0^C>wv)UM2$^-MeA~kDhV}SsQlgMPhf)pE35#W4gO)7(sU&VRj@n>*VW+Dnh5Id`g%`MbSeFN-=vMZ0dywa9ORA zJoFEu54>%edkpF$%aJF$?RXFl`&kT744r>JH{ZCaDj>?ZFpkQWV;31HV~8F>AbaUb&-37XKIdsvz+Fe#XcX=srs zX;PYl&3?s{`jI(XHg9t zVRmD7pYWsaNY0yMD!}pvjf7u`>NKiy2%-_S(h9C2t>o%f-vWermh3Exg z=#)6W@K^Fz$=1Iozo64G^FwOvJ*3H+G7G;HjqzCkKcw{`lAksH!aX6pFX8l%;pUEs zEes#(d|?hAAV+MjRt;FBbv;&6lJn{!M*42G^!Mrw#Yku;#a35WFMOVyqU@5$Pa37+4|75>R% zjr^7fC3)C294SNm#U{bJi!5?pt_b3o-*%Q}(CWAL&dQ$LZ{_m#44Y0y$!E zW&E{Y=I zBV&i2ukY0)Y>mYwz38(effr6a<+b}v0dWDKl3S|*U1a~Eb;DGw$H-4j zrO503SNuD%ApzT&!R2{r^ zGN9hJa+GXZig8ePb*>r84o?bMxf9yL7@?k*97@I+l<>}ub@0j|XH#&^ukWn;_S23M zj60OqWLG)h$Yz6aIC9lYaLJA>PyK5+_P9_xF3>Bnen-X=yb>O{i<7tPi zg)DyeAWasd_%F>U4E?LNs{m2!k*xqR`QI^zoUS&ZSuAr}k9~mcsNqUmnRwrukAst& z8j!pGs4_suu1hwyei~$(&nDLo-FRO2+6l*`9@&zqXjHXf{aI0bJwD%0hz@d;?hfnf z;zq7|u)7L9&u7MLpNTC-$YMk!Ayp9WZggboO|9H=A7Gi>Ccox%a621Iovx3%J+^sb zLA}t+saJyE0kK&yoh;W@0r1t331mJNs%JYZ#VWok(lj&&w1-gr`JZUb4X#@Sm}-NU zfZ#GfP$p09a=Rbqd`A{-h|FfCiSE1!nz z9hN*?YfMXk$&jcf6!c@tY^XDg{@lpDxa|qG4!+~lyO%(uPpO(O-B;tq?+i!pMK`%e zC0ffYf9M%6H~P7iuV@tYfEw|>^!rM2dAY#YX1|$gbnDAaSb6?WCtO(1b+@hxsIyLu zQFA+mXU!ixnAyCCq@{yhmN7cbVDP5h@?Ep^VmFtf_vex(q@r&fUkdrWuNd^YqP?b9yLbRgblJUjNv$(!1I& z++UPxctUUF;Np~Xs|@m^bDvTV%K2$@|A@9x>$ z0bm0Uu9p!rfnEUy#PaR$y*xbD({KO!=PsKtW*c~eccwa}dP}YFK}^rkKpuv^;Yh56 z0a94R6R{K1EHky~^RYw5;dG*kg540Zy^wc$u#xVG_`uzLiB^g*we^4$9E_a4S^wi> z)n3zUoSS|mv$M*}DM#Ha4P|I@$(#b0wjOWco7(qJaO%@v**1XZcHU&GQ;<&8wT$|7 zqtL{6WSYc{Abip&>9eJv+XhtO@WKS8uaQhWi2S|BZQjq;J;+ezQT4>*pJUmRkW&eh z1{;-Tt(zAf8s7e4uShlwWZ9<{_MpX1xouxurl1DlF!&83934Y;&smTFm~gVnI7uAF z?r&73*L4}Mkqp%L1#S1CH!g*68&rp>oE7i;|ZJ#VVT$PMEma6(WtL+RnJB^KI`i?`qYSJq%Lu_0ujwKKlIb{|Pf~Dx-#X#m$-R3|=1C192BN#h zL@eZVK~b9z1==poc`t_aDMoezCCTz3STTkIcMXV?4lq%^cL%uP2s_f7*J)+uF!ARq zo<8VbLswBH>N!%X&xCI4mN5plXWZ6}-_AIF0Jr$o&#HmD9$M&Yr)gUohU4TnI=p84 zuCTStOJH5(I?nXDGU|We$|~H5Vb>)OebcA$6eIt@myifnASOhsf&#ks1}=i7TK7$NvQQ`AtmRUMHgL>@NAMwJ?*3$G-&m`SoF zIr>suT}t5w=^+obb+&QGynElpIj2;Ob*+DWe_s4j+hj^^=^3@MdbR$@YK%B_L^)I@D?E^t5U88|NLi9 zq;XECd{kB7o`*1#T?f(wjzE&vs^hw1b3O&MO9n7@2&M-v=2zwwy|R--1dn9!vC=d{ zG;ie&Q_od{R4y-$AVDma;{^ULEE}*ufFJV&U5{$gc5eRmH^@u7tz(K+PwyBTQk$>a zTOYk>a~l-t<_4qH7-}SkHmViWR=+ep@6J5?9a=~7iUmk}k-%J)6<>-PEIwl5j7X`z zrYp_-0_WipX7gDc^HFb|;V2ywqm7x8RcHXmF?rE9VJQMR_W)wL_ghjR+K`({ zP?^Q8H8HsLZrC0M_iz}g>?)Xee_1`YlzVot@Nc<_gmKw5kC?I!vHtQ5!n)9cK+()xE`^^1a&~$J@G4;xmk+PdqCnv*mqYDnet*_|(|vC|tm{@}d2Z zN>2Kbuv@z?x9iiN|5SZI*wJR33h+$A>T2!X$Xo5qicnw6qt8SmlKvzDq7vxaXsV_i#`D)b#yj zrs)f~O)F>GA~Cqq7kDXZVe-_R@jm2Kr}0r!rbfj-h0m5oB$*k&@OD>IN#`{$thquY zL7B}{Ep5|%o0;r=BeyBpHEsC!>?vHunm52PkG45;azle-ELYpwcNS>+2+p>du=9Sk z0stY~+mN8yUu_xiVl`!%a*C+dH0$d<(@ zfeTcs46>nqUUO4Jt&#s4$J2`(qK!TZ5Bw%-j+>YSONVKm(_j~MHjc0jdG@$4uSeq% zW2n+3eyEQE=XSrHF+<4e5lk~HsyAcrRMuMpBhplSWP?u?`U`@Y-56$LuQN$Jb_O zae~oJwy@IP6g&PU0YIO{SY~Yf(t$V(dTtFK9bcqI&hh1Fw=IV*{jWiRj5DOr<)G9n z(bXF(aX_?I%~=(KfbIn);#5*!G>$)p(j6lGQh?m59Op%XxAKe;Wwqk!wq`NPjq*g1 zi*q<#h_i*yKQY<*pL!SUa5}=JI8N?H^>BGtE$7>ry9U~GTBAjFz<`~tbq``hZ)|Q+ z=DfjRyM&Ko^x}!-K$oz_GSdw9dwEcyTS%#NZlLvFmL1@v_)1n#%UCs!5AVJzmSgRA zj#wT&w8mJou_dfrIm`^*HKJGvcyx4%IXSe@d^USB#ySGICF3LulKu8OC09T;s{=Y~ zvX&k6BR@#8vDZ2Ak4+=>vdTKq%cQWe_l(Fszo=IUyS*2761Ig$8>XUHurSl zp1xDHIv_)0duhW}?sZ0REM0vx3F z(Jsl6Ux3jT0_SaU(z69q2Z7n_`xZd_Yvxr)oG=rV1xX$L{YDYjnq=Gws3(pg%L6FC%J-( zN0>CPk$-gz0@nM)b_Qgu71W`3Ud>$aqjzKFN@M!B3B*QXtxY*2{rubU_IIAwa>Y6p zvpz@GscpW#qid?{U+$l+hY3Z*Ky&nc=bi0G?@6BeZkVIA5IF7)4E-ZcJQwFxEsC$C zwhxnrRA=yGwf|1^=i^C@1nIhOD7B-*?%shThCP71)`L*fFqzg#M7fN{t&Vb_u1cms z4Ow4!guWx+Ao-qIuf9;SFiE2gcqPT^xsmmN)T9zdOZ|qtUm_p$r~%bk6uw~!@c9bushO=sYQKD)^t2A?l{)6I2-4K1& z9#5kh&9ce%v&{OcY6ikR&%AVR&3OmsVuJ_CPmUJS{?$=(C#(iWw`!nv8%$Ac>zvUO zF|$~K<&@5OWv0ST?*T3Yc@5fdQie8V1V!`F7Pis?FpsU?L5#c;9)UX@aNZr*q-{&w zkrT!&6{ys|6FGH7R$;^6PS!T4%vQhW>j&CMZXaP4M|6Yt5n)6xbu+#FmLdhU6!+=f zkDV4|gQW~zFQf`v7p2iIO<3rJRcP63&KIMXkc9uo(U}G$nf-5nntqctr8HS-Zsb^* znVOm6f-vQjIi^-lX>O!eRxYTBD_~`*<(ih73)WatxuCgkkSm%YmJ6<+qM+i2$iDdS zf8N|IFYoVt?sLB9T-WvaW4$U+u1IV0ZeLqK)sfM^iy~TY4uU z+=i!-=KuUiobn6*z;@ePUNhUh<5>|-r$^PZDU#cw*dU;pV6bFiFd~7ds0i<3ooFHi zaHG%d&w^z;9c-t~1FQSC)lk%xqKaJhP`(v0;t()!mOzH?BQlUwV>4Lp7?;4jHC^DxKre}H@tL%Kgmu>uYHNJ2 ziw_GrA`l+w@^dpWqAJ5NhuBX&t)L65T50;_B>OHlUn>ScIK+!v;EZ)1O{H#jw8pkQ z9h-YZUi~5}B$xv%(kk((ciOge8@d{nzyj41iv{j5Aa%Zq1{Xme&8i1#Z|^#m<{3;b zvRx{m(Ib97ae2^M|KKzVb5wL-+#HTw|*>_JwTUU zaB@h7TU5;CLA&4y(kk;*%YM{`rvs_LN~tdYHN=h4WF)Zn2K7sjNF$b>b-b^0f{r+RX7;EZA9>tX0I5TqLkodFepEzv2c+s%?h^q%_j2lPb`wZilK_+)05#R=B^*ycC3=_bG2)j6u=PDf z`7kwRIfHxJYUDj=_)fuGy`9cL-FQ*I4B++P%GwMI0Tt%D`qqP<-PO;XWRSl@`cGiS z$2*VWY%Q0A+I}FvHcUPFZoT4>koRW&Zlj`o3PPWA9_=#aeZtQ`$9p9oTMjiHUU|*T z&|q87qw`7Dwf12CZ_WRsk2XVD`VSzrDcinhe9Dh#*-_VsHyjzJ{T|bjr?Pc^Z6p~pID`!^s^42Reh@j-AJsN$^~}Wf1q?BX6K~$xkx%Eph1*^Q zV~;H5bMp%P3Z;W)%B*tU9_m^__(_#6md6b;0hihT>L(_s7W^cAb3lGarR@VP_(p)ImiRXl}8ces_!{q5jTtVgG1PYQCpW z6eO$T$I)wDv=Ff?9a(|Cbfv@jRv4<$TV~4Wv06>$oYR2MT?VPoy+)6ZAq2tExpu|H zqi@4JuWY(a4I{db7W0zkP|uX73SDA^|M~JY4Okqe~CV$ochCb-2PbD`+t8m=jdMbHUJPzXoMFw>{T5LE6 zeHi5aV;*eT_xUk3-S#=kD|eXzamI8M@2c2x;(%f{Y-Yz&Mh)jTU%7GjfV&#JItddS zCu)=kN{#&9&KO%DKPx6gzSeN8DB$pW&T&p&D!uWEk;7*LQOlZL{LTwD)n5ObSb`py z);MeldB3*_ZY`|C`A%M`yFXa8$zURNX-d_~su7R?dN1eZg@GG5!J`9;yv^oM+uxJKBjki$Mv zh0mnvb#H2+UMbst7N=!5=8!ZzTeG#nlZ9b;hmr1US{`ws8wB6h3BzOsokK}iICCW) zXqLmMX1SKfj7O8oeC>*IlLb}wO(a+R0l4sl5B{~u+IiN`R^ffn+LwZ86YNvd?v__Z zuq6u>{PW22B7f8weQzB16DJ?CIY?=A_vAhUtiH_9%KcABnvrZAoV~&d*xO{D>{OpM zsI-$FbE*{aa6qu{TTAhZ11L1Mxa=Tb5F*~=4Q9U6K%6f0Nb8Oz|^9LZQqC_)5! zG>0_siBl~-=7TxuFRkz~`Mq=K;47N6Go+Ko!Yj_h z9?`?SvG)Z!$I&V6;H`&^%PH(k%@_-t2qd|U5kAJ&FseWE+;IulP$s3_?Qn{k z7d|?T^Xw=L>$x%aZtbA|B8qDs!u2moQ$^yg2|Jmr|A79qrxl6W?!V@)=_YbRI2T;V zgD7m3166A3g1kv2p{5t*u1V^h(V*0&R^X>?+<8f19K6V0vifU?R8xM`hhk6(e0sOR z-2vn?Y1=M79U^L`ZA?(t?2R+ltB+6+`Ix`~z#nF?a&Pvb@F2_4?Kg_}z%s2ejPm%+ zO4s91_G{K`A;iNa=v?dg36|YJ7Ea@CE?krZs%*Zev!>rBJ|G3@^we7+x%qLV<5R%Z zd|^U5{}rX%dn9)%a-BY=r>moL`bf*dZAhg;hXeN{RO!Z8*R)Nxa@bqu;R`u?L$sc$@~Ge$mL^T5=p&z75`MxVnGU(+TTP8x%07fQ&3{Iew~fLMZ0;~&-N@MVPfLGU%)6J$ zkh~JmQ2*I3tVntV@46$QL{?VO&xaRf{b7_NT(ZUdmh1EE|E1ESG@uevP0hU@H?_Q3#y!XG{fslK?Kb16l0=;to^X+xu+`|EObUz1t911CT z-Fnd18D4J`MH_3~v6^osGDI5PT%4X~Sic9{h8(Wv4IY4OaR1m78!LR+N9{5@YAuA1&frhzupoRSY29c9Hn%27SvH0tirHWSozuB*iXI zxZB$B3J?MuR^h!CFYXq<49qs6m|tVn--(hj@VDDkfdxKfZ;)rrWZ5z83-eAF_K8kD zXdicHmN^w!fYF)&1S1rT9MJTO$QM*+hcI;-v;T!9xdWXo`Gd%%(hsoaAA2Q(ZdCYG zk~zy#L@jJeh%&IyA?+OsjRaU?+is_?82KN>NuEiv!?a*b>GzR(-*V=cq&SP&8!e>C z(G#Jy?rWNU$7e$)AK)#@X=*EloNMaK*HNBO(yO=nL-bL`e`9PzdX>r=h^>r{O5MB8 zx?tuuM5S>s*kvDVs^;Bag5$$i*A8Z~?M1p+L#v7WeTwe?aoL{OQNP=(G28WEX{&e4 z8T^F7+s%{8PT{n6Z-sR4w2P9q3tSC zE<)T_aDlpXwc`rI_ja_sTyez)z3chL{px86+%dTskVZCVo8Q-@;-;Q!tH=Ga)DAhN z(-=WDW@}z^5cQzk->11z0nh4`)io}Gk-}UreE+NDA1T!<2 zNe*fLBtU)eCr$&9C)HN>t}T2Ui4K6-X|Jxh8vj(99y)n0Ts^_+rXmwv_8yVC{yh5} z)O!+?^hsVoBuxn)dH3YOUoqrbaNwj zb(E@`+haV~5wM`fY^-@f@W2hv4U?(;oiP<_F2+50S$FIAc(KS9lWh@_5%sgB^3F)- zR6ddSX=Dj8lQOwwaOqnaAIA=+fJd^ohQnz8Lt}+kfzQB~LMMYWtkMa6C(RoO7<8Nv7fZa6Dndw5b;iVAEu-ab+TTJb@pU{4exmfts2tuqb;D*2M^e! zE;ev(0g^dz$6Y@~)47Gu;|GAtpVj3LA>9kM`x{2pA%{_A`%#EGiRUU!_~}XyA|E0y!2Z(u{!U-5ob`{5eP=UK64P4O z&>-y86m@|w01D%sW#qta1||%{(!MURtp0w)s$S#4UfCZx5+|#F%QO2OU|O@}YSa_@ z)(z*aKk%&h9Tw>w8pW47!uDrxF!BYbS6zR-#52STk3X%jXOx86RtVN8N`Hro-}+FO zX!uqcJYdvP)Z1gJ5ZtofL~4*At=WGrBF53){{Um%0cYEZ5BFGwtuC?gwPsj6JgZsl z0(RcX&$+uDkq9{+Vwc{U)W;x3o?`|BO;Xo8znOG#rbL6Rz%i*i*8t0XKwcnTnwySr zL7!7-pQz#Ii%$*M`5bH@c3P*8S+EFAsSQsp=jSsCyyG){jxCH8=-GB8Lkg5eKzu#ITm^O2g%CKcnI@C^P!XVvUyKke9hm*1_McT;l}h# z#4;z-zO%D5FxZ*?b|LoTODXxV*vG4ZnlqHWk#=X_T71~cZEr2$i@GK9O_U4TGjjc6 zhf_KGjUnxQzy1QSk#yhPE6&L5X7p{w6k{N8_`ze(!bo_ZQrz)y6Ypk{BCRop#P12T z3uK2iAibOJ%k&}h;XhNNd~9%%!q|6Bo9MX{CZS&pmHadYcA4&hR*H7?m~zEciFZBS zX_IS$SE@W^8>u6rd!{K1MS7byS0dc_<*ZKw`fds58R6kJSI5Z9yF#Idp3eU6i!4Od znV^I3_`~j&N!$Z88x=>a5RvnLrYr!PEnR7dR-iN5Hn}>T^`d{KdVF?FMjwceR_uqU z77Rqr%lYyVtuNhXw628`(QiO%aNvWuf34T;vai~C?wlW;`wAUTLF}e-zfLj<>+lWJ zZ6l`cz-Y}Q95#}q9sg^%MlJ5>q*pWY>h}b*t_kT%rmc3~QdNG3RlZ}f`6sL5QI{my z9_Vi=$Y$Ma`jDk)#CL_eKS|3KP7My8+64<2dBhOA);ABv`_vdKTt6}Dnzc72S@SQl=dA+IX(7%Km+h9lXOgRPDrQb z*NmX6I#sPRJkmt5Fqg5kq3}~JR6ooO9BB`@W0RKcB=>PyF5`FU?cz0f%}^sU9{~O8 za>)>r=L!B}6S7)iee?utEl?B^y>JnoIUyLR3;&qcOP5*YR{Gi|(ghBXhS5hniEquU zkG`6J40yfM73I)x=QXCP&@98l{)9I}bv7LW3M3)hx)+W(Z~h^9US|IKxprfO_cKi_ z#1p)4;)Q3dwbsKle(3%yrvp!fXcOu-UMVCZHB8M6L2vLJbv8NwbL9Lvgg}El;B?W3 zn?E*~(#RpT=DDqwVTHGAEhjW*&p^u?nB2eql9DMgx?evDorjj=$kw2$M@OA zWl`Fluk9OoZ0oefXpH_h zeVVkibr!yDL@(}cD+Z?qSX0tkQ$el5T}+5UNNeJ{eOKUBl0_VNGR7R1%mV@a$YkK2xs z%k@ojzSGxLT*1&SpQ*ireiwlmQG-QW`S5_p{V$e8wap!EKmDFszkvV$yT1@XawvrM z?2NBT@UKzpChYob?gu?tp+a}mRYYzY_{p89XU)<#2zJJ68Lr@oPbNRm!7-shkb(HG zF+Mo0Z;{F8HN)~HN9_-!{pdG=pv7C`0}`+#zxqX=oE^I-CjYcEu@pugIhsP`9FIu| z*3TExw5#D=h*VH+g}rp?i9mOrA%D@(H&?RWbInbS-ke9}ev&O6{oQ&G zAT_&otnZ$BnzDbhkumKrsnh#e6;$oZme^+?TuvQ37bpr@RAlcZ)#W#5;z;`k*ul`* zFrEJXUsoH4_jX<37lhN@CS%9iIti~~%bGD{A2uEtC!AqG20oOHr*t1L-a6mgRLLd? zdZE=bMgO6?N(frZZOKpVfNk5qwZ-{(Ig-L|{9s>q_SArH1~oqmjvgW82?p8a6D=<-VkSWY1wS<58|r;m4Vf|#P0CZ6o9~YAJvV(bdByh zO0w}{x3TJ(n(_~?!SHX)9*IU#owmnQVf`R zW%em?3@<_MBon;IEaOBMCMqMSHZ=RracKlVwSg12YT-rqyA0857?RF|dXjlU&`}3_ znUSxa&kQYDsZw9|(pA07$GHHr8?gBN{1C{v{~c#n@fYH)uFs4?*LcK7GEN5~jA@;V z?M;CHS&Lwpgt50r0Q-n6KOJ~m zJ88;XJuq4D&UXKP=>sA zeXI&om(do`$Tzzv&H*uB+vhdJ4KkvG$fol{jYx6C-`Gi!~6 z>D(@-HB&&Gg2sb+ogjSJwvX_%BrKr}{q^`^?tv9fGF7QSci0fH0f%)|VR}t1-cRSY z8*g9y(&n7LzZ3n_%FA+b^2jVW@Vz=BUG_5;`S^D>fYKe6{kj&F6VKZV2!5?3O2k@p zz9RahA;Q119#|$q7$b3$;a|{dz~#ft+J^3t0pHxcC`2ELXHl3fuC;h=5}0L4X@m&t zq~DpX6)NN9IatoBTT`Oh&$u~==l9z-eZNL=ygD=2y+~ngqf-)=G<8WnEDGH=AxN)h zI~)IkETG9QoDFXO73P_IQ16gl%>5^S1lJq%M}7OzY5zC4Dw!i+^ z%wD_xDy_3xzT>@0(gGWBBUrXm?UkpGfg)J}dCq6?xSV;+t8=qco%`iw~N!(OAQB>Ob%BJ}B(4qIUwoz{kf$RdtF#^#5 z)Q64ZjJI7Aou0ivcEMz53mt{O_%#kg`|6c4xei!i?;BM9wt0+ZOHX4xpmFP3 z+Y8gpu+#Q0X1z=SjO%#1-^-H9HW)ZC8*57Yoo~zCddYOXP}~z}t&iK-G5>1kTG`xQ zWO}>c(aBy&*+VZ63b=xt(z`9mJvFN?9%QOdNFci70(2I}WtFgU2lFDATNtD#1 z!^arKhN&Oi;(qCyId|!ZGF&;Ie>-mSYd?os%@%Lez1I*AX5O7T1Ho>+hL6o_^*OJs zAs2E{v_155*jRR3?29P7AaYQqo5DDF&g1lMD^2E!WMP->Xe!;N`iup~BDQe538pgM4Mq(T39vP*qrtf1ZE&nU&29NZ6V4ng8 zmalze^uAdZe^<&pJc*2&)y!qpOal(su-K^LNLCkMubT5~Z1|fa^(P(Ekl$xu2pV?Hcj^ z|Gf8TtPPQ`N_y^gvKwE=4Lm!q5^O6=^g+-p4XBZqEm`l9oQj1{=&nxBZdJ2AnidbV zeGcqzXQ$Nd+78y)gsv&`PJtg?NgeS47LF!uze*T2_0`@!S3gCzr>>CC(gf!%Hwy6R zuMYv36kNsR7n@?XAwg6htFwnYEWL66G?RLYK~&O-#~&;l1cG(SAJ#4Lkbg(d~rVIJ2>0p?ZN;TXx3*xTtkH!|{}o_$aNE zF%hl(xa8RUW`xC=`pqEDsg zrHOtyTiA2-jm@>~YX)=>2&QVG>@;%W{nSKgtG`OD8f_(&a}L*Bas|tMz~5RCF7Ld}6bTY!KCIQR$9R zy$*A1`oqy%QTpMex!eOu>L^R_wAogGlcs%DKYov7MxYfAY@OVVnx0~qHJk&xi9x->vg@b`@W>bMxoB!JkOu%ZOTljCYDc7$)Vb{$&Sx*BWgmM@!?5qZCv z=6QDhnaJoT{t!R@{#kfHhShpu+iuXYSolopZ@Nqh9++W+RB1hb+ap| z**V(rlQsW={Mt*H%+URRyCc3dq5Yi4kTtm(8n+>vnq+>$J%$G+_{U31q5$0IZzs;# z8Kmz3{;6vC05tmB3j7qvmsNOo9aMzUL8fG6HCDQ}OpAVMT%GWRn+NlD!Tj>cjrRlR z0J^0>Zoz-t0k_*pAEd2-nd6GsFQ2@$tcUrn*v>;A+g{eTW`TJ&!#C71Z{MvuTv&Zz zRGVKJD46;7n4cD~r|CriuPW^k$LGX!R}D-z@=GoaX>^5Tjracy{R3nJ8(E7qAt8(U zC5Dm~LUCiSSyK=3#a)2j>f7unacI0boy=rPq*QDrs zjoo3TdISDv)t1Nh@=uB4)5$FMf89Z2J9D=P^~Y%xQ$byr%IK!;%+`0jnyMCdYFPwKz-HNeWw8*(qzm(dn9)@3Kz<7$ziz4FS# zg+rrh^6!}4WjcHH5$|8P!pL@Fdj~3=Mm&%-zKzo{;=3v@>>#Srl`cYxdB0pJ1c;q) zk@J+FrfZRVH1~1quXgRKKH4B3&9{k*By5srh9r#0-dQ7d|v8}$lW#|38 zZnV%YL%wRR8)erTZ$8iyUaIzbsH_5ii)(e^9I&77m>3&q+U0Ll6gwV)Y~m|s_R%;W zGc~F!YwCPX-5ED1u#w5ufic3_=4bCMhyA=OpFSb!EvN(`Fk#!7HxZP(A+1*mbP~iYbB&;sWdqi zbU%lk5NcVOOO(2vgjl@5zX8nkl110=g*4pC_*2QB{%tNRxIE=O=X4OmvI|va_QrZX z-f9KoK=X}uQDi`Fwl_s|DM*t~FTQbi_`%`u;dK?+8t+eCsn!U zg#7-{pZ}#F9Ab}p{oLwts2tMNU<~VlnTFHP6}#7}svcR{<@?$o-Q^7bQ0mobIdcPxm>mKTC-h0gF;jU@;- zAINhXG@={}K20AbW`Cs4>L^Z+fmS%;W& zG5r&)$??)`NA(HOB7inD5d`%9&YX*cNh$(78a96U@|^Pl?Op$Suqe}T(UKm{!;H0# z?1}3fJIX{{M2=2T9ooE_{V6(|;WHSXt-6sRH4PY-Q|V_^b7M=! z46xGEE^A8P5*1O2%Mi1HEzF&(vxO0|7o z^?{11$B_RRqzh|!{|_&Q;rFAcMj!C+=^-xxnN{8G3F`e z9Ejz?kFHD|C}GcWJUkVxV&rQ9bnf< z-BMJweewIoM{o%RVbdl5n0_`Uc=hyH^}xArI-@3gVl0R4u`R|lftwS6JC*59IT_JlmPCzriimQ+iwBSl-Tn? zNA=(Stq|wi{o=o=&H3k-t|wj0RZ%Go5L<}H7>0-IQ^9peCx4;V)Z$I zIImn8AZ^~GJ_J!8)DMf>H}EOYs_B39{3Q2*uq{Um{`_OZ=fbk6@&{qDPN)h{|AHIc z$9)Y$j#+h@>NnTfgpj-0O>t=ifq6jDz_r%7Tf7i}^QaP&+%BOc`B9q^T9?e3PQ>u? z{EC5`62$I;(erID(K6K*-ajb!jBL3>uMzf6OA>RKHP)BI)S7<>r>tg)emer(mvm+N zYhW9lbX#YlohQ#eRX1!T5HTwhXzC%$7wwjB1R^Vca` z_oe~%YZpcdet}S-wCoE3BT(BS>!2^u&vZiyhG3Fp&UAd3(310Gt#MfonKc>1vfY|J zryid?u)b{l_U)ZX3&ma>7dLM87R7 z4=TMf^crt7{BE*TdU{(=C6b2noN8VM7s3zFjxI4;>s~eMXS|ZJUVI|e5vr*Q+FHRODq^~A=G~-`=!t@BYwtaDnnO%c1ixXWQ-xuk zgTz_4@%%@1E?{E8%&#;~mh%%2or@a4Aq9!>%;105Rt87YM#h;j>5;@lhA<`O0$NBZ6r0nYyiI*RsIH7>k1o zI{h*al}*@n%g!$<6}bYt`mJ}ltv&_9>$Lf6VhbVrV4Kqt@hDUgC;C2saR?cNU@tXuy1IAee|{z=d5N<*0at)`R!HTOu`PT>3AK$ zcJf@t-bprgCbJ(_DrLT_d8+L~PrRWAuw0%zkvn!9oM9IRmQn9;-_+X$r9I!Px%$BF zRWZXh_pXZ;&hARy`Pjd(HX>aEeWJb{iTwiHvANbZoVBJO*e?!ldx;~2x8O7en}9*DF^ zI_78tr+Hzc2fx$-F-h%yn=T+Nm4|8a3YY`9j1MLS zMYuGR@;4C&yQ3cD0Yb0dn=)t#CPm1DZ7mzD3yg-Z09jncVQTJNAWVJ&r z`Y2Y_^S{;$T`*tpqG-DxQpX0*gjFdR+D81dBF};WKxIUDe8ky!l~Vr0U@;h$vO!h&wb%#Fp9Q#4h zyr!)OlT6u@bI_?qm7#N?+omL0(|Eay!=1p+mGUq@@50HoghYjf$A;(+ZZNv^@tG~7 zp-z+JJJ77I0OUar=nLYP3{5t`8z-)nA0%Z#N9m!zC6QSt=B-5E>pYrWRrJG7%jyvq zEw&5&WV%rtV<0QcTXibnMnPJS5v1)~y|mQ5a+ChhF}C-fQh=h{gE6>m^QbMm-=PVQ3;Ofjo$=*~<_d7=f*Eww=v z{HeKWl#aMnIglORxOh`mK=#w6n!y&!!m6OM$xcB+b$zs<3bze#w^jF+7d54!d#kM) zbzSAzHRJR>2-y0oxG+Bj)Fbb(Qd5{VO__5!XOkJOGf)BlVxZ3j&@|TIR13B(Dtwj}b)YxXijbqMKFWb5CcVB)=;oWJgZxM}#fw=kWq+ z)MWEoN91{%njF<&q1(tK@aiL_~2fcE2%zj^ZY8-W#OpS z<~vKb5mlil_JPS8VJ@{91jY)QMeGT`bI=|$k-ecfdBc7NUvu<5jwHaysHQJZD+luolz>Xg(scRA`}+i zVN_cMIuSH#k3X>eJ(g8O#rfcMJr~B)Ji*&vQsy`zFA(Vm=K{bCLz%hf7s)Xxif8iV zX+lPZ9xOBXe<9uommu4HQ`~LM0g<27v`bW_^vn^gSgi?5^-c&Kicxf4$t)lyO$WZ- z$-Xi^a2S|Fs>*cBd*%7lX1hmKNPjL#GkqxaYxT`c-GR!iJ@f7tL41DkQ>YJe`<2V& zFP-&WUm+=lsTW(QZSu4Zcvyeca>zQ5&Knw06;AKzkcPG?Djmg=uehp0#%e*Z8@2Mak z*;}s!4sLq_p@|oDfx`Mev?BIa7X}VoOPaiNn#`(`x>Y`JSfTChkLmeho_ET-1pA+- zRpF(rYK^JN{6&^zEu`Nay7F3tcaTYW3%KKK@erjMWwp>x%`GON(4XPcUFbHxY1!1~ zrbhja!oS&_KDoAC_X#~OrDLulb8p8X$amvOrluv1Y~`gE+8Tm33u;a}SC~DA1g&)1 zmOaaf51UF}>j$`wPKrl8OfRIrsF`*JG&M*8b;HQyvgUM|m2j%Q<*n7@I$*Hs@g_q*vsm@hQUDTSd+ zw~uk({!~K{f_;mI=qb1K(Da4%gjgT=wsz*hM+rOhFFkWqvE*E{H(p*OE`&RU92q*^ zT*>^W0adJ$HMf@TWFbxXTYl8=>fp5hGCsve&>rx;!Okgq>X;KvtKN77z=MjCXk@fy z#O#UE&~q)z`!EN^mmo89q0;=gc#|8JsT+D*^%m}UgJu=06X-bgN8Zu`cNOIf-b3qf z1LkZeoC^pfV;$_bI}&~LD_lxW<^bU7?PI&7J$|7U~GM-dx zR={~;BI&KEOq9&o0b~-$bT`Fvb6NZ!4R}8pQBEmxv#OiAZem*O-m<=aGh&L_sr8i+ z4IB<`eFt^0i020;vtrbZXf5j0`D8A7vp%=Ihue)jC@w{we7sgthy_#^yl))Pj?PNI z4gfCil_u3Q12Y*Vk-j}_g{<{K(100^?ezOs$8~CCO|)L)13suFtJ9-B@f%?S zt5xq^dM_%HRjs6#8tg__U7o1M{cfuN06Rztgl^fb$83CZhDP*9jjcH>jb!(ccDnCp z;@scm$;H!nlR*ZS>WAJD(Yaxzy(Y|G% z!QjruXJyekEi=0KZda`-;JmWP8p0!XQMEW(LJU%6ZSVNRj>>$n$>=9UrE# z_-zdJEkp?7oZve@Twca-b_9h9lkU{)G2FN688n15FEafpSJrB6(6%q0yVb%lh4|Hv zh2Wsf34lTR%81*@zMy_>>+L?U=}-GfU0h3-CrR+37Idl@#B*MmT{&7QI)hEwicaQg z9lp;ti2+~AdH|Cz)KucNdPQF~WB+YyDYCFZ-{)S7?Qhy(zc#(@bG-Kxf0v)LPx}6T z!QNmU#L#(^?3D9Ik=pB&dW!u(2Jy)U(+G^~@SZyb7fE60ZTt@5G3_Yalv8z$%8Y;(7bgKq$=X=C3 z^q5X@!&EJE5#7C@W!i@6`FHAhHM@TO>mjAU&}?zj!woN-QTc3u?6Q>*en7=6oWedH zGIaiAy!fR_+Vdv;0!nLS8?V>&8;<`J^=o?JmVQoNevN&kH@BWevHfSxokCXP6xroD zRt87PUipDhsGqt2K(|F~x(tNji)Xh*0-x=T?KuiTo=X?I!M01brxZoDkvBtS;sFpw z!fTNJ021Y0K=~}&MLMha%8s9J@F7ZH(_>}9+bla8n)Hg71wS5f=xXRy8lnj zEO_RAQ#r~UI&#st0=)_!o2FQ~H!OtzcYj>Vdsg#4FgO<{fQ zR|N48YN8>#n4N&5w$<-YA&_T#?c??!!if6~m;Wf)Jl4P%^kQ)XX|L8)FYetTWA+yu z6CR6c7))C0g%K%xHhH5JLH=$v7s0+ektHV>m3)(cwwmM3@s^ur|I0OT{NQLq5+VL-{3C(DoPrMwgZ-#`0z+bW^7IBOgd0 zh?3&B6pRZohg}daZ1ADW^@v>Y2ww3fh~Fp{6;bIDx`+xR$}^-iwm`l@IYla7g4+|M z|87s*lpH$4-`70Kz0JCx2eKrNqFS+hemy)?Cvk|Y2 zSX0NH_X!UY*I~9evah@}%r_?yK4uORYZCi2cX|$}XdpeFH6elt=cOwtb4@=os>zkJ z)dxx!jsg{gV(T`#?RMMliyV)lL-#2xi&gPZ>-_Z2%bV{^!awIJ6_83?vS0U?Mj31N z<;p)4wAGn|Lw!oM%$9ocM|LIyvIeU|`S^1ey-t2JEu@Et>|H}}@J=h1;!(C}F$r2) zi4{ZVDTO8t-o+7GI{mMr)?)ot>J+r8-P}8{nCA*CglZslM{h#a zLd}Lxf^R>|Tiz~kz6*`kGV>AbS}&Ze@_0VPLv>yvD8ohf*SvJxP)iBB=;~AYvl@q~ zTL$1T-HeVM^sN=OxZ5K05avK(j>HIR_`lNju-%A!HXbGu6F2_vx0p>O$P4f=iCEx6}oSIJT1=`>WBgrg?xRpVdsoA_4;b5~!L`DU3&>?hH0 z5YrI{SeFSulQ74MjR4{YA&RsU@qzGQVR+o)hq*EACk^TOvqcX!IbKu6G1_x+U9Gr0fo6&nXfkPo_q*x9lc(Ti*H^G`(8y)CD zg4k)dVg(KfQ&W?B^a@CyqjTT&jj93dl9ci%hZ#3ax{>*w+VgWtxkI+*-G2X%rSpzw z^Znv}RaN_?($X3=qOHo4*g=R9 zDO0GW>o^Zd` znH~%iZ1Wt7)Ta^pj$O+{qC_~1px2}6Pu-@)Gtf7rv3r@TAt_SPT_ayp`zx;WFT-gW zkClOAxDe}J-d&B4XyWaiG|Yv!4ecS#={(q%9y7>yx!FhBK?8yR#w1EPDlV5DF?D&L z1#5|gEZaBnhL7ak^Cic68Z@HuLtOb)WxuL+Ge+uJLC z;%^^m4Hb#GBYyF>t%=D(W&w{ZX*-2@BVlcDw{|k`;DsaS<6IQ22(?QW z1c%UfPn=F>@Sb!)*a-=8w5$YaIo4tt^$P-e!d$J;UD7rJ#x!gYosNEoWYDRLgj~9CV;hXf0F( zk}-&()3f?1H%J8QCZ7DbhdEDsKe^9&em9z)l;u?`{cbA>=>`Zs}2~tn5@^y21agi93z&(_h z{Ge8Sngc~Lx7!Q_NK(&91g*_c;u7C4TtNwPlB+Xb14QvVx=44xn{V#JV=-zHTjHC= z6HkFa?cH-T>6HgXHSa<`O%=&|3?IGpZ|PKEoD|rp?cL19Yq=BPOE*(!0ir_p((V^1 z-j5QDZSQUj`&gu+B%a!m;IO|Y&UWjGDc8C8*mHqQhFNs?D^yn@+67>%GpbWwO ziF!|N1>X{+9vZqGe2=<=X1c=;x;wJ_X3Mf1%$8UUY+{=D8m0x(a+ruPl;NnqUnq|Uj3Yi&f8B<2!O(!`BqZt9k%am#4~p4K z&hdBkVcy_7OZEk4I7b7f|GY`ypcIhyIxM&4ON0>OW`kd0=-(5-5wc9`>8kjGk#xVY zzZvJ7LgeMiW%uTWbHSnK*KoUQkMWIN>bQJlcJl?I8D!=`c*~}W7j-XhSlRU5a9nVA z>6C{38nimI(DKh8kNRk3W8c0(l=kjV?~sK1Eka36zaYvs_^*WWBzJ_U@tb1U;b_Q^ zWlFM6$8`hX!6)hI+hdGX%9RoW_|+-E`2A9fQXKHJO62dk=)L-Io zM5ZL7w{uq(?yaaDEb<$vs~mK(*LNzZ;ne2rCBUUN$hIoLzFkTC5=$Favg=E&{YGG_ z?g%?{C68u`j`ZlIrO81A5#H`0=Ki-#glqP$Wz1TDnmiu~ufl^b9^(^ll~A{)iFbwf zeH%*+yUqds2l7jyY{ZD>Hs;k$CW`=?r!l>=!P>2nNgsH45u^jp2y4V2nfRt z41?nDf-{MO2*x6*l(0vrzJ}LWab-FUzPLqYbygFn*$c43P-iF;C3p!TEV}yG#$GKn z){dD7gpfN1DRF)Oix7uO-3TxG3Q6hY_5c2Y4m^=ZgfUL`LQK>VN8rFf47;7wA+$Sh z3tA2nKGaxp$4C)flhoS)v9jIQYL{!i3qA1I$kjP&BYp%=Kq!6CXMjN8z^#dxk4~}@ z7+JJ%BMF5=g8G)u-<`{a4Wrh^^|-p!wl2VjX(<1S(yst2HM8ow(Qrl}!pJgNCJaIT zabfp6UY;#vo|df~$_078#PtB!`8ztPVc2W;{JwD3f4`{GD|C69*7&qTh~oEcU(kqp(E$4Krf#J-GOqNzJMH0(yeE_UZNUR!K8nZ1k;~tP z>cKxeEBqG2Xha%c;iLfwb`VD0N1RNCEi2&=8ql?3W1El5% z)_N3aL+>wIHha1M!iWlZyZ|X3kvj%-QaETkcuS6nLBr8u6FpOIP~@e_uFuE#amJ`hVxI zGl*gTJTqM?yG-eO>>>>5=44*i0nd(fr->UOt$(4l6bsD#TFA<5xEap7ebsN*~% z{A^M%YgZ0|-VnNzf7K)J67R74mwuwr)+VH0w68SNUtY=&N#O2Bi%LOJDi0y zha%uG%a(2h=DvW(CeMWtnZ*J9kXalYGJz1IgXsg+OuxdzDMu%B1EjIxmQd)|lSh+< zfBLmH(fnIFqeUiLt2xfV5A^)%71*D84EbN~p@v9E(~JSOT4R^u4$dlFefM!gEnRT` zbxz_i?U!Y(?-RTA_AKrg)M3cYm7C2+cQPuO-6Hw-g^rc-I-$%KiUP?us=#kLP%-#X zUhtvVyXTFGwu`C@*J7w_NmLcB5HK8pW%N#&V+s|FMau5J0#?=z^X+Kn?)Q`Rr1Rt} zcB(Ebr3f~(u&8?@-$YtN-+uh%tQH}zK zQMcV>ys#q*N(1RUA-652-VVb0WZm-Hm%5LH2oLJ&V*-tP|7Rm?|HX};B~PPfh9p8)1$WXd>y4V$_P@%;EGEni@dz>pO-(lKX5o_? zP{7<|0ygXb6GWeZ)G}Q`2OP=_{@~#MJ;9(y#o)X!QP9dP)}-)&45V445H8A!Jet(( zBq?3T?}Bk1F)J~MUD#^yx%%UD1T_(Yx(XJ~I%%Io!w&ve3{pt05PB)q;4q2(6PTn0 zBmNH`9n)G)BEw*~<1sia7)r|$dH84a_V+iw_ob?7)~!AXc43!TC$O3KhYI($#V*Njy@rv@;Umh$qi zV-Y>i2`==Tuh)~5DmWft#ZCumcPfuO_9J~zBojtP8G|2JsUNS#3?Gw4D zzP+OA1quC+DLwS)d7`zdVqd%!(qYZ^sM;rTSdZsw$%k_nD8KVR-5Xb^KV>r1Qz1OG zS3I~I!%?5{Vpk=1!M;{`4}FVnqgmatyBA*Xt^Taz4p~!ABIqM(?m(QHp6Z*>d!^ht zC8pvQho7+Vl>C<7eii;5$^9?}x)f-X{;#l13ghG3=-1YAFcp&x*nb`{ZmjYNUU`qS zxaQN7jUKPq6#`aVde=Kz3MfB802v{Olbx{5Bg6@j?_`e2Y21!EUbQf2I2mS&KZrQq zBb6f7ZS0T5?A2l^z+}9H2%cr-E+z!()I;ka;;%iHWBe-qU(WZ1gxZ2o7w{Gk>Yxsi z){L&jAskA<&){LLAVyay!6*$l9QK3U2st9)XCWv5BZaS-xJdY91lR;ygHz&tW0=$* zJb_3a)Q1c%1b=I@dXW*lfHU1q91e`qrv5|K=V%6Y|1{`0FSs+-{+)|&IX9?EI7;>{ zyqz}rR>%%1wu%E5d~UWe{27g?N67#a99zDi7{C1OA$dNx)NRL)s)iUpYUi5HdVf&Y zXg=ab&0*_%HIiN;R6zYXwywayH-fmxmyDqxiOCArJ)2~o`W+f-_|m&^*OW10zUP+4 z;#^gKjlI-rM zSP;m?0Ff(JFZvnmOJF3-7NxYFFO#f>%sKo4hYw{7r1nBQ?OhFqme0UM!g~@)lv+V4 zt2ZJZFJa~Bm}R#qQIf`~j_roByaKfnnVn&kuu-4o->xM2gRM_7LFGvo4Vp7$Hw@f* zerc~8uB1vs@4bU-wkUiZJcL%o4hM+bq+t&u%mCN+O=`;6 zGa*^v2m!#I76MJMg~CL?V<*eZpid2>j=6?zH88So7Ej{;Y?4LRzd}X!8kOiJ-j?2( zdUgvkGdxp*JH>6Li6_@GT$7hNVz4t_~uI z56kxDv(}Kuxs9v0PO?LXW162^7Gwu~gKbQK$+}QG16Fm~^sa}b*Yf<4cf|O|; z(yVM^hiy+SExw}bFmT1v8+G#TPa>-w_CMOl-Hm00buYmgHY&V&n!Fsk)1J+pc>y4p zy_=JO;7`Q*ZvF>rGRq_W+HDFD3^7crRfpc4rFayYw%DeN$c`o=yHf9^dlSSzhxsZfJAvq;}Hoa>yRsl1rNV3#5t5k{Om;UMS;DX z-9lSmgkAQDi)_XsQ|Il1L=O1QqOElL>7sDexn#@F1Rhp;yvYgW1cwQx$AJ&%%!Fu5k&0g(p85e9eEuUQmD(yBc6ymv zF)ukVzM_L$E0k$*{You|GEGP-n$eB-q%jMHu=TKGPb3V)m=)az0jpp0%}8)e8f5MH z&ks2+dmJvm{x=+S$}p!Pti9n^RX^5!ZqA}ymE6Qdt-l3pKsgwo^->z`GAftieu0(+ z#_af`m4OHFW!MEM-n~O17xh+l9=3^Do*}BNY)u(?4sHy!**<`LWb(kZJ!jvQXFEoq zY{+QV-x>D%<9>#IO-Fy1V2AfC8WvH3w~bT#H%!M;-p!@)ava(4BuMRCQ#$;y$DW&< z3XT5`55M^Plh9{atS1+0tfeg1v-h+md*N40m;D=LVm6v0YGu0AQ7bORH%`)@lkoQP zuFbwR)nnlq8dLY$=;O8KV7EHOR%lW1PWC^{K3O^QE}yLh*XIwa^zjI~uK(X_M>BR7 zmR=Z-+8w{CK%}0h(1gSZZscjadwn(hWn72fg28|FI**vV+fc{^;2X@(MObEqdw;Pa z-`iog8FzxjZx;rB6mZFrC)|xbXsh*k2B2zuZ9csa8332ihM5_IyMcL#lYfgXhmlMI z2R=49Vb)mm@Bd@-6BtV{m9lV>Q4LO<*=iW-X#H`{>y*oxiDF@<)QLBurt0%?dDZ8G zO?!WYABvm(;;D!~G~}Ism0zYR2U9*P$LC8XyT@Hs`sBr6HT?zPgN@K=kW1ZV*SJd$A~GcZzK7>maL$@nISk-X z9KUR~6owt^_Shskwg)ztkOTlvKs8*g=zIJcgjk5YB zKot2-0K7*Bn|_t6?iHZa?su~F9hoWT3;eT#-A$1fP^W;YmdB^s65S;Nijlw4yNk24 z%2KxRuQDV-lL}egiqw~@=DuV6&n}j~;)5Q38M$gTDHpPOVagJcRBP0la#d-bO@|)M z8urL7W8+CqK>cSrr5;wLcJOsLt|iOWwfzR@)DJxxPCGh;*Rb{4SYCB_#V1IA zdB-B~Z4O{N39dtjYHQRwYjbn5J@^G@E_+FQfgC!k zvwQNR$}FzHzv9Pe&P0wf;GoJ*&gG15mBfDysX{7N_7IfG^QBoZVMW!Yr>(=2d~8>br~@9Bzooha~*Or{I$c}O9U*|GB+c@9qmAe zj@?Gbiq4dYONZwBy%b_ogk;Y7YGuI>eAnfJOgW^La8=El_!?BygMYivNk8ctG9zy& zSWu+9u$H?U>cLdm;l}C5+Sz^RSc%7(-_)G1u3O_DtL7+9EW!5BaT2J-7~2a?_NTqT zoui5`a~5w*bFp9QT9r{E%8n@@MbgCWP=R-R>v6g30?gm>Ru=j6YpORw!*^)&6k{>c z?rQ=7FY_YK((cNraN62gl%QXy5(9)m)@+s2n>g7}eVrdGK+{-a5N7 zJVEe4r-LwrRjy_7S;*9T(mBOF)it|l)BLb^5mv)%(n(SdS}uaX*c0~c?A)nR25 zeJk?QV#%B)YwY+CU^gB$iMZFRlK|g)S@A;2led=uz8ZGi z#Jarg(_%$;QGNAFjM!e;-!dNm&%#UMen3;_|30(a9d<}72XKa#m(j2+-|D6$wyLz> zM{1k9E#VilbqPJYCCN?i;R}~hZ+Y#QIUTn}Mu+j{>8*<~H2r|b6IortE@|U&f`Jnm zSOd38cl4KDku3oO*YpJU8Y7leazqx_u-2p?&ic{ZE8c^;A^GX5J;YJKZ^N4#__@7E zVbo*a1pnz6Mcl;p#eIA5@}#r8 zige4&?bQeqx^eyftVosC&Vy+k_TkxICQqR(r-}XfpZg0#Sw_#xH6HXa7xw_Wl-gz% zucYa*+d1&fVj0V=+ZIrkmwXCL*GR*%4`noZ)|-k@svzY#o6S-rPQWI2i$eER?+a}Z zmn&=9*%*FIO{`af<6ju(d!e-Hn-#=>SOH%xS#1!-DTo_mU3G?s;w;o_dH=`MGn++K z>9tSCZ!4j{?36!2)TP;4u3AV8u!EBJGL`jT{^XkR+APF9gs}r#clmRM7bE?Z#a+7b z49%R)Dv$n98?{x3qvv}?X~KnFjx~Ts=>%4N#0M%jMg!BFq^!XnxG5nRuWhM+wIe)Z zx;y8)>5;ikvhT81oNqraoMNH8NK42RdUk`VPEbhXYUID*{{$w`uVG_MoR2I#TvA5mSAq1Mb!;OQ#D9+!N`#Vlz<#WIg%YPqu2f!NNICoZ$z zFXU6bx9cWpPa49bDN_>5ev+G!eA~fEazNp`9TFmB4Xm=U71TGdih7)C!d%}Y`>U(N z>Si??$V3{p1w`H4V^kepE;%|xGp2p`ofK9oi&n+`B%f_MSZ*h7d`a$ltcoAuldGG% zBWcTD3%|+i5vd3Lxc!Hap?$BTyPWZ_Fh)Zs7R^sDQ@-+s!+@5BfCn9viO4^<-xx_`FIyQDyQJ<}>}McRzty>>4m3?yv!9^`?%^ebk00rlkAZ5`aSMpx z&nMQ|_tS^BrZQ@Z250y}e+YJmKEnM}c}}`tc5m`Ed(Z%{=o_VYLH-94!h#gHLTJHB zI9pG`outjlE)>c2!Wu@6@`YH*mnVa$yFhk2sN(e}jPQx-D+{(8lzf$X=ykS}_o{Np zb&eE|WO=dpp~_Q)Dqz5kR9>b zhVVK?v(iAWV8QODq3kmu%Q3POj{dN>LgxxoyZZuYcJZ~Z-#vXJyXFe(v*3>a{CC8M zLlW80o!HNqonxbuV+3dmBSEB`le7Q;vHOf@V&uQ<3Hw9rg$7CKRVY)NT zaWT*+R*8w=#du&Y!15hAGV=_p)Kov8~BM$5X*2no_{bPj8LIGfS=ivzJYW5 ziQs*8S(8J5TW-HVykHd{`cyt2GcG~V*p9gC@2$QekKj1%?dIl0NChkHK44+3lcz>a z0rwq4S6}~!%6>yRz#exRw7UMMfeDH$<-y0frK%5S>q@AyUM?TW=apy9VA-j}bU(OX zdD2;k6{G9@J+GOpFeTFc?5l0?g)^ReS|Ir*7FB20${Eq(3eM!EQmDT4PeIVLp99)q zfnJNHJV8yYRIhjSx@U#cURZ;Ae)fuTMgcYL?GAZB!6Gs|tFN%-ptaj8vW5dfCd#Ki z0+Vev9z*0Y|0W*1Y;G2(oYwPd*AKU(Wf;W9S8O~iKg41PzlUP`QJJVLe=!k?Pj+4g z%@6$fE^3GIIrz8q(Vn^XV3j+1m#N{t^%M4kmw3a<`)_^8%zmcV{2g%bFdyH0zN9N( zP(ja;IsN6QMrfxD*38`xI;8hh*s~-=Aj$FDj}j7o5~DJt9`dS<{K`=m@6|kdYuEI} z1bdtA09ERDlChM=?4v+dRt$GiOlV_$BXSNgA3w5#`t1Y?W#JxrAt`flh3%Y&zGsHD z6glE=)g9%I_wqufDV=OR#Hf%>*=H?$J>3M4a0z_nva>vi0;BK7X`-AS(;9r(qjf^`V zpRAow?Cq0yWjOFI;VmR6EAM5dNj`jO!}F?0)wkMPXP~4{+<2GLKr07+p%aH!&%J1nnXK)sK(NTu=Tb4==vCW zCEnf5VlVOy%3H*bU(8@Ws zvu$-1R?Dt?!^qgP(_(80G0LrDY(`HVulo<-{_+s2Zik)*%udfc(l5Q z++Rhm!EbAk51*hS##Z-Of>rC`EN#;lbL!uc9T&yDVQtn>rx>tQe=Hww|4oy+t^YVu zR;@naIz&zy5z?`=AGdN?RNONX+y$$vL{W#3^4e+)y*+;QCzyPcZU-GjCkkH5A(&dgzX*2w$*k!ffP&N7guPY+lAyq>ctq!#J1DefIf^e>?KuTKU8WMEx0mJ zC>sEiQ*XDuy4tP1$+{)r@L;C3n6N!PU8F@E5uFujO;9RRdkt}a&6RiZ0{dw1F^f!F zgxdW|Ld(J?{)li@4I#(()qv@ZQZ#v zu(iQ6!P(!rx6YdJ`zDsYe7Vc!a!h1}yKa(l5{%ZdGLP1kZ1C@nwg4hF3~|Ws%X2P? zm)~`pz`vN*4t{wWp#2hjhq3E<^1R;HAS7!0(=0xj4y#X9->F%^N9Yv3WqFC&W`^-? z$tTcjqEZjHK12+5|0W9pI4WV&Rm@~vY&q%Jz#E~^~k6vs6DZ>3r>!d9B&Sp?*0tvQ8w&_Fo9p` zpt?;d6_>Yk_S}ptoBV3^rDxtt06EMM%u7dd=;s5CvMIAM{_<_rA1ggH0k*l7@GqMN zfkRHZX1q$l-;$?oTTeh}`*C{V~8N3C*a5UY*1s<`nrLAK!He!U~X(Lob4mVM|;h8o$AYGKi0SQhGDXoxNi>z*EsIL?58(4YzqZCXG8NHe>l8@77=V3koa8@T%C^B-LX0tY^;%Sz!if z4aaFHy4(9US3{Niow`lt6tZeWvp2LEPdhQDjaHE(N2BBVasG2a5MRngr&t}_GvknI zoormbzxFe%ZJ5;+^o`v7vTdK@y5B5iA{m*U7|qX~IQGOUr#B>O$*rnudA2V9-<}G4 z+5gPUG^)ene;iY?N=~!SmKDQZAw%ONDY!_l;-u`G6&-on^bJLWt9yY?hC=(<6i2r& z`%xq3l@D&$+>ajW=bEt>qUiT3-}?Y;xr|sI{E8KWIr>ziBu=WYS@&4l&=*thO`JT` zZt4gX%PA?cJnFU+7*y#|7EwQ^x*#cn>xU>kY7YNi{he~vvKCU5jo(lnT-FV2T_cR) z_D}g|Q8caIN)G$gGwIt$ZHvxrf`soa>s~b+HtFSRycWuZ9F|5*L|Dpr9wjAbWT>ru z@>!|jS>1E@XBi!mTpZ8}nYl6)e!y5@T$UVb(_8P)N~~E_#z2gxhNGt5M-7Ej=%RH3 z&FT*QeAl2Xf7RUMca%1i`fES*5J4$+qz_R{Ftg}ZzaLcCH_M1g&cGaPyDFX~fl_{1 z1r72peMB#;oH`6!Zks_-!Mw!x4R00 z(+0Xjj5EUyS2elWuLicYZ2HiZdB>e9fubVFkuH#VQNIph0QrgXf`n@tYq zXDpw3SL9TfW$gP3c77vNN_TPF$L0nK@!%&JDYc8iy4w2UF*1Y*cW|EVKv98+=lfmL zmAm7yZvK{+jgDABG(p=c!6`JZEJlTPPBFDA_A7kEMQuc)_FEy86r)nkas%rPPSulX zvlRh++usg%%Y6cF%Ob`6;BcS$ZYI-HpWJ>8RJm5rlqG|C=N%b3?b#FZDO<&EYqQWY>!GZ&6DVW^g8KEU+r!=cI03W*a#e$PMg+4oP1B`z@hUKQ!c#47Npm1GW z(ax+$G0anpk#notniZB&uYM~Qb*!G=SvdPpi}zAV_VW8%=!-fT7gV&}+0`a~8HczM z?{PVbVt*s$-vcY1RLK_L)P^%*i==|t8Mq>0+wKA3lMVZ9FO2&jQ!!`5&yt!{*7iNU z6hrA)1~P8*b)k9fzla|R3M3Fa0ehD9%%BM7vBj0$Z8{RtY zCfmak=2!@;WX)f61r4x*$9jL?m7+9N=^m@_5Gt1FyGaWPk(y%u(Hw(>rQ&Z;>aeL~F`_b8wo6FLDN=r*GOYSsNJ2GP=t;ZLyJ-D_p-;le#+0 zSaa%I%WJT&-`N^Sc7I!>>#{(*UqHNEa&n8~;;IAjW3A1xlt^CKpUBKkiIw1E0+nM< zTVGA)jef%eRE)W#23KXmZbiM>4(e8XVvnn$Mflz>J7JAt&#sdE{|0-^}(0`%FXc;k4FvzG^wZ`lzO-c)ni?bpwjEcm-$t5hTP?XVIANBM~IK=v64D;WO}EQMjHdUwo28I@YQmvnLN#L(F+ zJm(I19`@rn>*ThnMKyQxmcB$_+L{W=mjc&l%3*GAw3V4*XQKg#YsLhRqt zx0E~I$SFuaXnaJQ&W!o$DEnuamNi(V3wQqvN|M-w*xlo??ufQ4x8tUBZKw@SBty78 zGXX0`YiGv7bN`)|C;p-5394c6}P>}dMut0(3mf< zlfWk)MBWbmD5Y@90ffBrGU4A8*z~dtx{qikfHreS2kP*5qPq`=t^&lSmi!9s^SYN{ zOAp<-u1l4YO*hUU37`}jlG`Hmph}|V+_VMX4T=6wbcz1E9w8;6XrP)A3~vhw zx6ZZhFj}imK=8e-_xnJ;Bng}KcF*w?_yCPM5!JABmA)N)Ew49}pYi+C6ajgbb4YL1 z1z^?Vd#NV$herAIeUl@vsH+={&5F;$wUSS#8inoJo|0v{R<DlK%dO>Wp4kVW(U!$`{@~ zMo$Qg1axPv^bpwd7Rzk*WfM+%w*P*AI=AM{@jzQ`sV?>Y5|Ojcy1DNGT{cZ$dcP9RDSxi& z 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

fzp#s_*_9H$M&kc;l2r$R$rZ$h8r( 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...)`. Project-reference `BuildingBlocks.Pagination`. **No** `IQueryable`. -Host SQL: `SELECT … FROM … WHERE …` with no `ORDER BY`/`OFFSET`/`FETCH`/`LIMIT` (`InvalidHostSql`). Hints such as `WITH (NOLOCK)` belong in host SQL. `PaginationOptions.Hint` default `None`; `ReadUncommitted` prefixes `SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;` on SQL Server only (`QueryHintSql`) — session isolation, not a table hint — then restores `READ COMMITTED` on the still-open connection; EF uses a transaction around COUNT+PAGE, not this SET prefix. Every slot needs `sql:`. Library wraps as `SELECT * FROM ({sql}) AS _bbp` and appends seek + `ORDER BY` + limit. Params: host + `@ks0`… + `@take`. Nullable value-type slots are rejected (`NullableSortUnsupported`); `NullOrder` is unused in Dapper SQL. +Host SQL: `SELECT … FROM … WHERE …` with no `ORDER BY`/`OFFSET`/`FETCH`/`LIMIT` (`InvalidHostSql`). Hints such as `WITH (NOLOCK)` belong in host SQL. `PaginationOptions.Hint` default `None`; `ReadUncommitted` prefixes `SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;` on SQL Server only (`QueryHintSql`) — session isolation, not a table hint — then restores `READ COMMITTED` on the still-open connection; EF uses a transaction around COUNT+PAGE, not this SET prefix. Every slot needs `sql:`. Library wraps as `SELECT * FROM ({sql}) AS _bbp` and appends seek + `ORDER BY` + limit. Params: host + `@ks0`… + `@take`. Nullable value-type slots are rejected (`NullableSortUnsupported`). `NullOrder` emits `NULLS FIRST/LAST` on PostgreSQL and Sqlite ORDER BY (inverted on backward walks); unused on SQL Server. Postgres row comparison (`(a, b, …) >`) when all directions match — any column count. Mixed ASC/DESC stays OR. `SqlDialect.PostgreSql` (tuple when directions match), `SqlServer` (`FETCH NEXT`), `Sqlite` (`LIMIT`). `ByShadow` is rejected. diff --git a/src/BuildingBlocks/Pagination.Dapper/DapperCursorExtensions.cs b/src/BuildingBlocks/Pagination.Dapper/DapperCursorExtensions.cs index 5f72916..a84819d 100644 --- a/src/BuildingBlocks/Pagination.Dapper/DapperCursorExtensions.cs +++ b/src/BuildingBlocks/Pagination.Dapper/DapperCursorExtensions.cs @@ -53,7 +53,8 @@ public static async ValueTask> QueryCursorPageAsync( .ConfigureAwait(false); } - var command = SeekSql.Build(sql, sortKey, values, walkBackward, request.Limit + 1, dialect, param); + var command = SeekSql.Build( + sql, sortKey, values, walkBackward, request.Limit + 1, dialect, param, options.Nulls); var pageSql = QueryHintSql.Apply(options.Hint, dialect, command.Sql); var fetched = (await connection.QueryAsync( new CommandDefinition(pageSql, command.Parameters, cancellationToken: cancellationToken)) @@ -130,7 +131,8 @@ public static string BuildSql( HostSql.EnsureFilterOnly(sql); sortKey.EnsureNoShadow(); sortKey.EnsureSqlIdentifiers(); - var built = SeekSql.Build(sql, sortKey, values, walkBackward, take, dialect, param: null).Sql; + var built = SeekSql.Build( + sql, sortKey, values, walkBackward, take, dialect, param: null, options?.Nulls ?? NullOrder.Last).Sql; return QueryHintSql.Apply(options?.Hint ?? QueryHint.None, dialect, built); } } diff --git a/src/BuildingBlocks/Pagination.Dapper/README.md b/src/BuildingBlocks/Pagination.Dapper/README.md index 1b261b3..bcfd160 100644 --- a/src/BuildingBlocks/Pagination.Dapper/README.md +++ b/src/BuildingBlocks/Pagination.Dapper/README.md @@ -2,7 +2,7 @@ In-repo **project only** — not a NuGet package. FeatureFusion showcases it at `POST /api/v2/Product/products-dapper`. -Uses the Pagination IR project (`IsPackable=false`). Hosts that want NuGet pagination should use **BuildingBlocks.Pagination.EntityFrameworkCore**. +Uses the Pagination IR project (`IsPackable=false`). Hosts that want NuGet pagination should use **BuildingBlocks.Pagination.EntityFrameworkCore** (1.1.0: Npgsql row comparison of any width, `NULLS FIRST/LAST` on PG/Sqlite). ## Usage (lab / local project reference) diff --git a/src/BuildingBlocks/Pagination.Dapper/SeekSql.cs b/src/BuildingBlocks/Pagination.Dapper/SeekSql.cs index 4e2ff5f..5a08139 100644 --- a/src/BuildingBlocks/Pagination.Dapper/SeekSql.cs +++ b/src/BuildingBlocks/Pagination.Dapper/SeekSql.cs @@ -15,7 +15,8 @@ public static SeekCommand Build( bool walkBackward, int take, SqlDialect dialect, - object? param) + object? param, + NullOrder nulls = NullOrder.Last) { var parameters = new DynamicParameters(param); parameters.Add("take", take); @@ -30,7 +31,7 @@ public static SeekCommand Build( } sb.Append(" ORDER BY "); - AppendOrder(sb, sortKey, walkBackward, dialect); + AppendOrder(sb, sortKey, walkBackward, dialect, nulls); AppendLimit(sb, dialect); return new SeekCommand(sb.ToString(), parameters); @@ -85,8 +86,18 @@ private static void AppendSeek( sb.Append(')'); } - private static void AppendOrder(StringBuilder sb, SortKey sortKey, bool walkBackward, SqlDialect dialect) + private static void AppendOrder( + StringBuilder sb, + SortKey sortKey, + bool walkBackward, + SqlDialect dialect, + NullOrder nulls) { + var emitNulls = dialect is SqlDialect.PostgreSql or SqlDialect.Sqlite; + var effective = walkBackward + ? (nulls == NullOrder.Last ? NullOrder.First : NullOrder.Last) + : nulls; + var nullsSql = effective == NullOrder.First ? " NULLS FIRST" : " NULLS LAST"; for (var i = 0; i < sortKey.Slots.Count; i++) { if (i > 0) @@ -97,6 +108,10 @@ private static void AppendOrder(StringBuilder sb, SortKey sortKey, bool wa var dir = SeekOps.OrderDirection(sortKey.Slots[i], walkBackward); sb.Append(Quote(sortKey.Slots[i].SqlIdentifier!, dialect)) .Append(dir == SortDirection.Ascending ? " ASC" : " DESC"); + if (emitNulls) + { + sb.Append(nullsSql); + } } } diff --git a/src/BuildingBlocks/Pagination.EntityFrameworkCore/AGENTS.md b/src/BuildingBlocks/Pagination.EntityFrameworkCore/AGENTS.md index 7ef675d..18d3d33 100644 --- a/src/BuildingBlocks/Pagination.EntityFrameworkCore/AGENTS.md +++ b/src/BuildingBlocks/Pagination.EntityFrameworkCore/AGENTS.md @@ -6,14 +6,21 @@ Layout matches EF Core packages (`src/EFCore/Extensions`, `Query/Internal`, `Inf ```text Extensions/EntityFrameworkCursorExtensions.cs # ToCursorPageAsync / ToCursorPageMappedAsync -Query/Internal/ # CursorOrder, CursorSeek, CursorSlot +Extensions/PaginationServiceCollectionExtensions.cs # AddBuildingBlocksPagination / UseBuildingBlocksPagination +Extensions/KeysetIndexExtensions.cs # HasKeysetIndex (+ optional NullOrder) +Query/Internal/ # CursorOrder, CursorSeek, CursorSeekTuple, CursorSlot Infrastructure/Internal/CursorDbContext.cs # ICurrentDbContext + shadow Infrastructure/Internal/QueryHintExecutor.cs # SQL Server ReadUncommitted txn wrap; else no-op +Infrastructure/Internal/PaginationNullsInterceptor.cs # ORDER BY NULLS FIRST/LAST (tagged commands) +Infrastructure/Internal/CursorProvider.cs # soft Npgsql/Sqlite/SqlServer detection +Infrastructure/Internal/NpgsqlIndexNullSort.cs # soft HasNullSortOrder (HasKeysetIndex NullOrder) ``` Mapped properties: expressions. Shadow: `ByShadow("Name")` → `EF.Property`. No `OrderBy(string)`. -`ToCursorPageAsync` + `Expression>` projects **after** seek (prefer this). In-memory map: `ToCursorPageMappedAsync`. `HasKeysetIndex` builds the matching composite index from the same `SortKey`. +`ToCursorPageAsync` + `Expression>` projects **after** seek (prefer this). In-memory map: `ToCursorPageMappedAsync`. `HasKeysetIndex` builds the matching composite index from the same `SortKey` (optional `NullOrder` for Npgsql null-sort metadata). + +Npgsql hosts: register `AddBuildingBlocksPagination` + `UseBuildingBlocksPagination` for `ORDER BY NULLS …` (LINQ cannot emit NULLS; a tagged interceptor `BuildingBlocks.Pagination:First|Last` is index-honest — not `AsyncLocal`, do not CASE-wrap OrderBy). Uniform non-nullable multi-column keys use row-comparison seek when Npgsql is loaded (any width: 2–8 via `ValueTuple.Create`, 9+ nested `TRest`; mixed ASC/DESC and `string` stay OR). `Take(limit+1)`; reverse in memory when walking backward. `IncludeTotalCount` runs `CountAsync` **before** seek. Host applies `AsNoTracking`/`TagWith` before the extension. Host `OrderBy` is **replaced** by `CursorOrder.Apply`, not merged. `PaginationOptions.Hint` default `None`; `ReadUncommitted` is session isolation (not `WITH (NOLOCK)`): EF begins one SQL Server transaction around count+fetch when there is no ambient transaction; after commit/rollback the still-open connection is restored to `READ COMMITTED`; ambient is ignored; PostgreSQL/Sqlite no-op. There is no `IEnumerable` adapter. Nullable `T?` sort slots are rejected (`NullableSortUnsupported`). Guid CLR order ≠ SQL Server `uniqueidentifier` order. Bool/enum seek converts to the underlying numeric type. Guid seek uses `>` / `<`; string seek uses `string.Compare` (EF translates to SQL `>`). OrderBy lambdas are cached per fingerprint. diff --git a/src/BuildingBlocks/Pagination.EntityFrameworkCore/BuildingBlocks.Pagination.EntityFrameworkCore.csproj b/src/BuildingBlocks/Pagination.EntityFrameworkCore/BuildingBlocks.Pagination.EntityFrameworkCore.csproj index 0b82748..2ce477a 100644 --- a/src/BuildingBlocks/Pagination.EntityFrameworkCore/BuildingBlocks.Pagination.EntityFrameworkCore.csproj +++ b/src/BuildingBlocks/Pagination.EntityFrameworkCore/BuildingBlocks.Pagination.EntityFrameworkCore.csproj @@ -11,7 +11,7 @@ true BuildingBlocks.Pagination.EntityFrameworkCore BuildingBlocks.Pagination.EntityFrameworkCore - 1.0.0 + 1.1.0 Mohammad Hasan Hosseini Mohammad Hasan Hosseini Copyright (c) 2026 Mohammad Hasan Hosseini @@ -23,7 +23,7 @@ git PACKAGE_README.md pagination-icon.png - 1.0.0: ToCursorPageAsync for IQueryable; SortKey/cursors ship in this package. https://github.com/Maxofpower/FeatureFusion/blob/main/CHANGELOG.md + 1.1.0: Npgsql row-comparison seek for multi-column keys; ORDER BY NULLS FIRST/LAST (AddBuildingBlocksPagination); HasKeysetIndex NullOrder overload. https://github.com/Maxofpower/FeatureFusion/blob/main/CHANGELOG.md true true true @@ -65,6 +65,7 @@ + diff --git a/src/BuildingBlocks/Pagination.EntityFrameworkCore/Extensions/EntityFrameworkCursorExtensions.cs b/src/BuildingBlocks/Pagination.EntityFrameworkCore/Extensions/EntityFrameworkCursorExtensions.cs index 0520d86..45c7470 100644 --- a/src/BuildingBlocks/Pagination.EntityFrameworkCore/Extensions/EntityFrameworkCursorExtensions.cs +++ b/src/BuildingBlocks/Pagination.EntityFrameworkCore/Extensions/EntityFrameworkCursorExtensions.cs @@ -105,12 +105,7 @@ private static async Task> ExecuteAsync( total = await query.CountAsync(cancellationToken).ConfigureAwait(false); } - var ordered = CursorOrder.Apply(query, sortKey, walkBackward); - if (values is not null) - { - ordered = ordered.Where(CursorSeek.Build(sortKey, values, walkBackward, options.Nulls)); - } - + var ordered = PreparePageQuery(query, sortKey, values, walkBackward, options.Nulls); var fetched = await ordered.Take(request.Limit + 1).ToListAsync(cancellationToken).ConfigureAwait(false); var ctx = CursorDbContext.TryGet(query); var keys = new List(fetched.Count); @@ -139,12 +134,7 @@ private static async Task> ExecuteProjectedAsync total = await query.CountAsync(cancellationToken).ConfigureAwait(false); } - var ordered = CursorOrder.Apply(query, sortKey, walkBackward); - if (values is not null) - { - ordered = ordered.Where(CursorSeek.Build(sortKey, values, walkBackward, options.Nulls)); - } - + var ordered = PreparePageQuery(query, sortKey, values, walkBackward, options.Nulls); var dtos = await ordered.Take(request.Limit + 1).Select(selector).ToListAsync(cancellationToken).ConfigureAwait(false); var projectedKey = new SortKey(sortKey.Slots); var keys = new List(dtos.Count); @@ -156,9 +146,49 @@ private static async Task> ExecuteProjectedAsync return PageAssembler.Assemble(dtos, keys, projectedKey, request.Limit, walkBackward, fromCursor, options, total); } - internal static string DebugQueryString(IQueryable query, SortKey sortKey, bool walkBackward, int? take = null) + private static IQueryable PreparePageQuery( + IQueryable query, + SortKey sortKey, + object?[]? values, + bool walkBackward, + NullOrder nulls) + { + var ordered = CursorOrder.Apply(query, sortKey, walkBackward) + .TagWith(PaginationNullsInterceptor.TagFor(nulls, walkBackward)); + if (values is not null) + { + ordered = ordered.Where(BuildSeek(query, sortKey, values, walkBackward, nulls)); + } + + return ordered; + } + + private static Expression> BuildSeek( + IQueryable query, + SortKey sortKey, + object?[] values, + bool walkBackward, + NullOrder nulls) + { + var ctx = CursorDbContext.TryGet(query); + if (CursorProvider.IsNpgsql(ctx) + && CursorSeekTuple.TryBuild(sortKey, values, walkBackward, out var tuple)) + { + return tuple; + } + + return CursorSeek.Build(sortKey, values, walkBackward, nulls); + } + + internal static string DebugQueryString( + IQueryable query, + SortKey sortKey, + bool walkBackward, + int? take = null, + NullOrder nulls = NullOrder.Last) { - IQueryable ordered = CursorOrder.Apply(query, sortKey, walkBackward); + IQueryable ordered = CursorOrder.Apply(query, sortKey, walkBackward) + .TagWith(PaginationNullsInterceptor.TagFor(nulls, walkBackward)); if (take is int n) { ordered = ordered.Take(n); @@ -176,7 +206,5 @@ internal static string DebugSeekQueryString( object?[] values, bool walkBackward, NullOrder nulls = NullOrder.Last) - => CursorOrder.Apply(query, sortKey, walkBackward) - .Where(CursorSeek.Build(sortKey, values, walkBackward, nulls)) - .ToQueryString(); + => PreparePageQuery(query, sortKey, values, walkBackward, nulls).ToQueryString(); } diff --git a/src/BuildingBlocks/Pagination.EntityFrameworkCore/Extensions/KeysetIndexExtensions.cs b/src/BuildingBlocks/Pagination.EntityFrameworkCore/Extensions/KeysetIndexExtensions.cs index be37673..44c426c 100644 --- a/src/BuildingBlocks/Pagination.EntityFrameworkCore/Extensions/KeysetIndexExtensions.cs +++ b/src/BuildingBlocks/Pagination.EntityFrameworkCore/Extensions/KeysetIndexExtensions.cs @@ -1,4 +1,5 @@ using BuildingBlocks.Pagination; +using BuildingBlocks.Pagination.EntityFrameworkCore.Infrastructure.Internal; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; @@ -26,6 +27,31 @@ public static IndexBuilder HasKeysetIndex( this EntityTypeBuilder builder, SortKey sortKey) where TEntity : class + => CreateKeysetIndex(builder, sortKey, nulls: null); + + ///

+ /// Same as , + /// and when the Npgsql provider is present, calls HasNullSortOrder so index NULLS + /// placement matches . Pass this overload only when you want that + /// metadata; the one-argument form does not change existing index null-sort annotations. + /// Npgsql omits NULLS from DDL when they match the column's ASC/DESC default. + /// + /// Entity type. + /// Entity builder. + /// Prebuilt sort key. + /// Null placement to store on the Npgsql index metadata. + public static IndexBuilder HasKeysetIndex( + this EntityTypeBuilder builder, + SortKey sortKey, + NullOrder nulls) + where TEntity : class + => CreateKeysetIndex(builder, sortKey, nulls); + + private static IndexBuilder CreateKeysetIndex( + EntityTypeBuilder builder, + SortKey sortKey, + NullOrder? nulls) + where TEntity : class { ArgumentNullException.ThrowIfNull(builder); ArgumentNullException.ThrowIfNull(sortKey); @@ -48,6 +74,11 @@ public static IndexBuilder HasKeysetIndex( index.IsDescending(descending); } + if (nulls is { } order) + { + NpgsqlIndexNullSort.TryApply(index, sortKey.Slots.Count, order); + } + return index; } diff --git a/src/BuildingBlocks/Pagination.EntityFrameworkCore/Extensions/PaginationServiceCollectionExtensions.cs b/src/BuildingBlocks/Pagination.EntityFrameworkCore/Extensions/PaginationServiceCollectionExtensions.cs new file mode 100644 index 0000000..58f4e98 --- /dev/null +++ b/src/BuildingBlocks/Pagination.EntityFrameworkCore/Extensions/PaginationServiceCollectionExtensions.cs @@ -0,0 +1,55 @@ +using BuildingBlocks.Pagination; +using BuildingBlocks.Pagination.EntityFrameworkCore.Infrastructure.Internal; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; + +namespace BuildingBlocks.Pagination.EntityFrameworkCore; + +/// +/// DI and registration for pagination infrastructure +/// (ORDER BY NULLS FIRST/LAST command interceptor). +/// +/// +/// LINQ has no NULLS FIRST/LAST. The interceptor is the index-honest path on Npgsql +/// and Sqlite. Pair with +/// on every context. +/// +public static class PaginationServiceCollectionExtensions +{ + /// + /// Registers the shared NULLS FIRST/LAST interceptor singleton. Hosts must also call + /// on the context options + /// so EF attaches it. Without that, remains seek-predicate only for EF. + /// + /// Service collection. + /// The same collection. + public static IServiceCollection AddBuildingBlocksPagination(this IServiceCollection services) + { + ArgumentNullException.ThrowIfNull(services); + services.TryAddSingleton(PaginationNullsInterceptor.Instance); + return services; + } + + /// + /// Adds the pagination NULLS FIRST/LAST interceptor to this context options builder. + /// Pair with . + /// + /// EF options. + /// The same builder. + public static DbContextOptionsBuilder UseBuildingBlocksPagination(this DbContextOptionsBuilder optionsBuilder) + { + ArgumentNullException.ThrowIfNull(optionsBuilder); + optionsBuilder.AddInterceptors(PaginationNullsInterceptor.Instance); + return optionsBuilder; + } + + /// + public static DbContextOptionsBuilder UseBuildingBlocksPagination( + this DbContextOptionsBuilder optionsBuilder) + where TContext : DbContext + { + ((DbContextOptionsBuilder)optionsBuilder).UseBuildingBlocksPagination(); + return optionsBuilder; + } +} diff --git a/src/BuildingBlocks/Pagination.EntityFrameworkCore/Infrastructure/Internal/CursorProvider.cs b/src/BuildingBlocks/Pagination.EntityFrameworkCore/Infrastructure/Internal/CursorProvider.cs new file mode 100644 index 0000000..9f43dcc --- /dev/null +++ b/src/BuildingBlocks/Pagination.EntityFrameworkCore/Infrastructure/Internal/CursorProvider.cs @@ -0,0 +1,25 @@ +using Microsoft.EntityFrameworkCore; + +namespace BuildingBlocks.Pagination.EntityFrameworkCore.Infrastructure.Internal; + +/// Soft provider-name checks (no PackageReference on Npgsql/Sqlite/SqlServer). +internal static class CursorProvider +{ + internal const string Npgsql = "Npgsql.EntityFrameworkCore.PostgreSQL"; + internal const string Sqlite = "Microsoft.EntityFrameworkCore.Sqlite"; + internal const string SqlServer = "Microsoft.EntityFrameworkCore.SqlServer"; + + public static bool IsNpgsql(DbContext? ctx) + => ctx is not null + && string.Equals(ctx.Database.ProviderName, Npgsql, StringComparison.Ordinal); + + public static bool IsSqlite(DbContext? ctx) + => ctx is not null + && string.Equals(ctx.Database.ProviderName, Sqlite, StringComparison.Ordinal); + + public static bool SupportsOrderByNulls(DbContext? ctx) + => IsNpgsql(ctx) || IsSqlite(ctx); + + public static bool IsNpgsqlProviderName(string? providerName) + => string.Equals(providerName, Npgsql, StringComparison.Ordinal); +} diff --git a/src/BuildingBlocks/Pagination.EntityFrameworkCore/Infrastructure/Internal/NpgsqlIndexNullSort.cs b/src/BuildingBlocks/Pagination.EntityFrameworkCore/Infrastructure/Internal/NpgsqlIndexNullSort.cs new file mode 100644 index 0000000..0770d88 --- /dev/null +++ b/src/BuildingBlocks/Pagination.EntityFrameworkCore/Infrastructure/Internal/NpgsqlIndexNullSort.cs @@ -0,0 +1,88 @@ +using System.Reflection; +using BuildingBlocks.Pagination; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace BuildingBlocks.Pagination.EntityFrameworkCore.Infrastructure.Internal; + +/// +/// Soft-calls Npgsql HasNullSortOrder when that assembly is already loaded. +/// Same resolution style as row-comparison seek (no PackageReference). +/// +internal static class NpgsqlIndexNullSort +{ + private static readonly object Gate = new(); + private static MethodInfo? _hasNullSortOrder; + private static Type? _nullSortOrderEnum; + + internal static void TryApply(IndexBuilder index, int columnCount, NullOrder nulls) + { + EnsureResolved(); + if (_hasNullSortOrder is null || _nullSortOrderEnum is null) + { + return; + } + + var enumName = nulls == NullOrder.First ? "NullsFirst" : "NullsLast"; + if (Enum.GetNames(_nullSortOrderEnum).All(n => n != enumName)) + { + return; + } + + var value = Enum.Parse(_nullSortOrderEnum, enumName); + var values = Array.CreateInstance(_nullSortOrderEnum, columnCount); + for (var i = 0; i < columnCount; i++) + { + values.SetValue(value, i); + } + + _hasNullSortOrder.Invoke(null, [index, values]); + } + + private static void EnsureResolved() + { + if (_hasNullSortOrder is not null && _nullSortOrderEnum is not null) + { + return; + } + + lock (Gate) + { + if (_hasNullSortOrder is not null && _nullSortOrderEnum is not null) + { + return; + } + + var extensions = Type.GetType( + "Microsoft.EntityFrameworkCore.NpgsqlIndexBuilderExtensions, " + CursorProvider.Npgsql, + throwOnError: false); + _nullSortOrderEnum = Type.GetType( + "Npgsql.EntityFrameworkCore.PostgreSQL.Metadata.NullSortOrder, " + CursorProvider.Npgsql, + throwOnError: false); + if (extensions is not null) + { + _hasNullSortOrder = FindHasNullSortOrder(extensions); + } + } + } + + private static MethodInfo? FindHasNullSortOrder(Type extensions) + { + foreach (var method in extensions.GetMethods(BindingFlags.Public | BindingFlags.Static)) + { + if (method.Name != "HasNullSortOrder" || method.IsGenericMethod) + { + continue; + } + + var parameters = method.GetParameters(); + if (parameters.Length == 2 + && parameters[0].ParameterType == typeof(IndexBuilder) + && parameters[1].ParameterType.IsArray) + { + return method; + } + } + + return null; + } +} diff --git a/src/BuildingBlocks/Pagination.EntityFrameworkCore/Infrastructure/Internal/PaginationNullsInterceptor.cs b/src/BuildingBlocks/Pagination.EntityFrameworkCore/Infrastructure/Internal/PaginationNullsInterceptor.cs new file mode 100644 index 0000000..582d8ee --- /dev/null +++ b/src/BuildingBlocks/Pagination.EntityFrameworkCore/Infrastructure/Internal/PaginationNullsInterceptor.cs @@ -0,0 +1,160 @@ +using BuildingBlocks.Pagination; +using Microsoft.EntityFrameworkCore.Diagnostics; +using System.Data.Common; +using System.Text; +using System.Text.RegularExpressions; + +namespace BuildingBlocks.Pagination.EntityFrameworkCore.Infrastructure.Internal; + +/// +/// Rewrites ORDER BY on tagged pagination commands to append NULLS FIRST/LAST +/// for Npgsql and Sqlite. Null placement is encoded in the query tag +/// (BuildingBlocks.Pagination:First|Last). +/// +/// +/// Stock LINQ cannot emit SQL NULLS FIRST/LAST. Emitting CASE / IS NULL +/// in OrderBy would change null placement but typically prevents a matching btree +/// from being used. This interceptor only touches commands tagged by +/// ToCursorPageAsync, so host SQL is unchanged. ToQueryString does not run +/// interceptors — assert executed command text (or Dapper SQL) for NULLS, not the +/// LINQ string. SQL Server has no portable index-friendly NULLS syntax; we do not rewrite it. +/// +internal sealed class PaginationNullsInterceptor : DbCommandInterceptor +{ + internal const string QueryTag = "BuildingBlocks.Pagination"; + + internal static PaginationNullsInterceptor Instance { get; } = new(); + + private static readonly Regex OrderByClause = new( + @"\bORDER\s+BY\s+(?.+?)(?=\s+(?:LIMIT|OFFSET|FETCH|FOR)\b|\s*$)", + RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Singleline | RegexOptions.Compiled); + + private static readonly Regex TagNulls = new( + @"BuildingBlocks\.Pagination:(?First|Last)", + RegexOptions.CultureInvariant | RegexOptions.Compiled); + + public override InterceptionResult ReaderExecuting( + DbCommand command, + CommandEventData eventData, + InterceptionResult result) + { + Rewrite(command, eventData); + return base.ReaderExecuting(command, eventData, result); + } + + public override ValueTask> ReaderExecutingAsync( + DbCommand command, + CommandEventData eventData, + InterceptionResult result, + CancellationToken cancellationToken = default) + { + Rewrite(command, eventData); + return base.ReaderExecutingAsync(command, eventData, result, cancellationToken); + } + + public override InterceptionResult ScalarExecuting( + DbCommand command, + CommandEventData eventData, + InterceptionResult result) + { + Rewrite(command, eventData); + return base.ScalarExecuting(command, eventData, result); + } + + public override ValueTask> ScalarExecutingAsync( + DbCommand command, + CommandEventData eventData, + InterceptionResult result, + CancellationToken cancellationToken = default) + { + Rewrite(command, eventData); + return base.ScalarExecutingAsync(command, eventData, result, cancellationToken); + } + + internal static string TagFor(NullOrder nulls, bool walkBackward = false) + { + var effective = walkBackward + ? (nulls == NullOrder.Last ? NullOrder.First : NullOrder.Last) + : nulls; + return QueryTag + ":" + (effective == NullOrder.First ? "First" : "Last"); + } + + private static void Rewrite(DbCommand command, CommandEventData eventData) + { + var sql = command.CommandText; + var match = TagNulls.Match(sql); + if (!match.Success) + { + return; + } + + var provider = eventData.Context?.Database.ProviderName; + if (!CursorProvider.IsNpgsqlProviderName(provider) + && !string.Equals(provider, CursorProvider.Sqlite, StringComparison.Ordinal)) + { + return; + } + + var suffix = match.Groups["nulls"].Value.Equals("First", StringComparison.Ordinal) + ? " NULLS FIRST" + : " NULLS LAST"; + command.CommandText = OrderByClause.Replace( + sql, + m => "ORDER BY " + RewriteOrderByBody(m.Groups["body"].Value, suffix), + count: 1); + } + + internal static string RewriteOrderByBody(string body, string nullsSuffix) + { + var parts = SplitOrderTerms(body); + var sb = new StringBuilder(body.Length + parts.Count * nullsSuffix.Length); + for (var i = 0; i < parts.Count; i++) + { + if (i > 0) + { + sb.Append(", "); + } + + var term = parts[i].Trim(); + if (term.Length == 0) + { + continue; + } + + sb.Append(term); + if (!term.Contains("NULLS", StringComparison.OrdinalIgnoreCase)) + { + sb.Append(nullsSuffix); + } + } + + return sb.ToString(); + } + + private static List SplitOrderTerms(string body) + { + var parts = new List(); + var depth = 0; + var start = 0; + for (var i = 0; i < body.Length; i++) + { + var c = body[i]; + if (c is '(') + { + depth++; + } + else if (c is ')') + { + depth = Math.Max(0, depth - 1); + } + else if (c is ',' && depth == 0) + { + parts.Add(body[start..i]); + start = i + 1; + } + } + + parts.Add(body[start..]); + return parts; + } +} diff --git a/src/BuildingBlocks/Pagination.EntityFrameworkCore/PACKAGE_README.md b/src/BuildingBlocks/Pagination.EntityFrameworkCore/PACKAGE_README.md index 2e28151..99148b0 100644 --- a/src/BuildingBlocks/Pagination.EntityFrameworkCore/PACKAGE_README.md +++ b/src/BuildingBlocks/Pagination.EntityFrameworkCore/PACKAGE_README.md @@ -12,13 +12,20 @@ Typed **keyset (cursor)** pagination for EF Core: `SortKey`, opaque versioned cu Dapper is an **in-repo project** (not a NuGet package). A LinqToDB adapter is not shipped. +## What's new in 1.1.0 + +- **Npgsql row comparison** for uniform non-nullable multi-column keys of **any width** (`(a, b, …) >`). 2–8 slots use `ValueTuple.Create`; 9+ nest `TRest`. Mixed ASC/DESC and `string` slots stay on the expanded OR seek. Sqlite and SQL Server always use OR. +- **`ORDER BY NULLS FIRST/LAST`** on Npgsql/Sqlite when the host registers `AddBuildingBlocksPagination` + `UseBuildingBlocksPagination`. Stock LINQ cannot emit NULLS; a tagged command interceptor is the index-honest path (do not `CASE`/`IS NULL` in `OrderBy`). Dapper emits NULLS on those dialects without extra registration. SQL Server does not emit `NULLS`. +- **`HasKeysetIndex(sortKey, NullOrder)`** — optional Npgsql `HasNullSortOrder` on the composite index (soft API). The one-argument `HasKeysetIndex(sortKey)` does not write null-sort metadata. Npgsql omits `NULLS` from `CREATE INDEX` when it matches the column's ASC/DESC default. + ## What you get - **Keyset (cursor) pagination** — seek SQL instead of `OFFSET` / `SKIP` - **Forward and backward** — `HasNext` / `HasPrevious`; empty cursor + `PageDirection.Backward` is the last page - **Typed composite `SortKey`** — expressions ending in a unique column; enum registry, no `"Price"` reflection - **EF Core** in this nupkg (`ToCursorPageAsync`); **Dapper** in-repo only (`QueryCursorPageAsync`, not packed) -- **`NullOrder` for strings** — seek-side null placement; does not emit SQL `NULLS FIRST/LAST`. Nullable value types (`int?`, `DateTime?`, …) are rejected +- **`NullOrder` for strings** — seek + `ORDER BY … NULLS FIRST/LAST` on Npgsql/Sqlite when the host registers `AddBuildingBlocksPagination` + `UseBuildingBlocksPagination`. Does not emit NULLS on SQL Server. Nullable value types (`int?`, `DateTime?`, …) are rejected +- **Npgsql row comparison** — uniform non-null keys of any width use `(a,b,…) > …` when Npgsql is loaded; otherwise OR-chain - **Optional total count** — `IncludeTotalCount` runs COUNT with the page (same QueryHint scope on SQL Server) - **Cancellation** — `CancellationToken` on EF and Dapper page APIs - **`QueryHint`** — allowlist `{ None, ReadUncommitted }`. `ReadUncommitted` is SQL Server session isolation only (not `WITH (NOLOCK)`); PG/Sqlite no-op @@ -51,10 +58,16 @@ Map `CursorPage` to your HTTP DTO (`HasNext` → `HasMore`, `Next` → `NextC ```csharp builder.HasKeysetIndex(priceKey).HasDatabaseName("IX_products_price_id"); builder.HasKeysetIndex(priceDescKey).HasDatabaseName("IX_products_price_id_desc"); +// Optional: match ORDER BY NULLS FIRST on an ASC string key (non-default for ASC). +builder.HasKeysetIndex(nameKey, NullOrder.First); ``` `(Price DESC, Id ASC)` is not a reverse scan of `(Price ASC, Id ASC)` — add both when you expose both directions. Nested paths (`Vendor.Name`) are not mapped; index those columns yourself. +**Npgsql multi-column seek:** when every sort slot is a non-nullable value type and directions are uniform, EF emits a Postgres row comparison `(a, b, …) > (@0, @1, …)` for **n columns** (same idea as the in-repo Dapper adapter). Mixed ASC/DESC, `string` keys, Sqlite, and SQL Server use the expanded OR form. + +**NULLS FIRST/LAST:** call `services.AddBuildingBlocksPagination()` and `options.UseBuildingBlocksPagination()` so EF appends `NULLS FIRST/LAST` on Npgsql/Sqlite at **execute** time (a `DbCommandInterceptor` on queries tagged `BuildingBlocks.Pagination:First|Last`). LINQ has no NULLS API; wrapping `OrderBy` in `CASE` would typically prevent a matching btree from being used. `ToQueryString()` does not run interceptors — assert executed SQL. Without registration, `NullOrder` is seek-predicate only for EF. Dapper always emits NULLS on PG/Sqlite from `PaginationOptions.Nulls`. SQL Server does not emit `NULLS`. + Empty cursor + `PageDirection.Backward` is the last page. ![First page, next cursor, previous cursor, last page via pageDirection=Backward.](https://raw.githubusercontent.com/Maxofpower/FeatureFusion/main/docs/medium/images/04b-cursor-flow.png) @@ -65,7 +78,7 @@ There is **no** `IEnumerable` / in-memory adapter. Relational providers execute - **HMAC on public HTTP.** Unsigned cursors are forgeable (`Walk` and key values). Set `PaginationOptions.SigningKey` for untrusted clients. Omit the key only for trusted internal callers. - **Host `OrderBy` is replaced**, not merged. Put filters/`AsNoTracking`/`TagWith` on the query; the sort comes from `SortKey`. -- **Nullable value types are unsupported.** `int?` / `DateTime?` / `bool?` / nullable enums throw `NullableSortUnsupported` at `SortKey` construction. Coalesce in the model. `NullOrder` does **not** emit SQL `NULLS FIRST/LAST` (provider `ORDER BY` nulls stay as-is). `string` remains allowed. +- **Nullable value types are unsupported.** `int?` / `DateTime?` / `bool?` / nullable enums throw `NullableSortUnsupported` at `SortKey` construction. Coalesce in the model. On PostgreSQL and Sqlite, `NullOrder` drives seek **and** `ORDER BY … NULLS FIRST/LAST` when the host registers `AddBuildingBlocksPagination` + `UseBuildingBlocksPagination` (Dapper emits NULLS without that). SQL Server does not emit `NULLS`. `string` remains allowed. - **Guid vs SQL Server.** CLR `Guid` ordinal comparison matches SQLite/PostgreSQL. SQL Server `uniqueidentifier` order is different for some sets — do not assume CLR `>` equals SQL Server order. - **`QueryHint.ReadUncommitted`:** SQL Server **session isolation** (`READ UNCOMMITTED`), not table-hint `WITH (NOLOCK)`. EF begins one transaction around COUNT (if requested) and PAGE when there is no ambient transaction, then restores `READ COMMITTED` on the still-open connection. An ambient transaction is **ignored** (no nest). Dapper prefixes `SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;` on both COUNT and page SQL, then restores `READ COMMITTED` on the open connection. PostgreSQL and Sqlite no-op. Host `WITH (NOLOCK)` in Dapper SQL is still allowed when `Hint` is `None`. - **Updates to a sort column** can make a row reappear or vanish (inherent keyset). Inserts after the cursor show up on later pages; that is expected. @@ -179,9 +192,9 @@ Methodology, competitor notes, and limitations: [benchmarks README](https://gith ## Layout (EF Core style) ```text -Extensions/ public ToCursorPageAsync (like EntityFrameworkQueryableExtensions) +Extensions/ public ToCursorPageAsync / HasKeysetIndex (like EntityFrameworkQueryableExtensions) Query/Internal/ OrderBy / seek expression trees -Infrastructure/Internal/ DbContext + shadow property access +Infrastructure/Internal/ DbContext, QueryHint, NULLS interceptor, soft Npgsql HasNullSortOrder ``` The IR (`SortKey`, `CursorCodec`, `CursorPage`) is a non-packable sibling project, bundled into this nupkg as `BuildingBlocks.Pagination.dll`. diff --git a/src/BuildingBlocks/Pagination.EntityFrameworkCore/PublicAPI.Unshipped.txt b/src/BuildingBlocks/Pagination.EntityFrameworkCore/PublicAPI.Unshipped.txt index bda435f..f89320b 100644 --- a/src/BuildingBlocks/Pagination.EntityFrameworkCore/PublicAPI.Unshipped.txt +++ b/src/BuildingBlocks/Pagination.EntityFrameworkCore/PublicAPI.Unshipped.txt @@ -4,5 +4,12 @@ namespace BuildingBlocks.Pagination.EntityFrameworkCore public static partial class KeysetIndexExtensions { public static Microsoft.EntityFrameworkCore.Metadata.Builders.IndexBuilder HasKeysetIndex(this Microsoft.EntityFrameworkCore.Metadata.Builders.EntityTypeBuilder builder, BuildingBlocks.Pagination.SortKey sortKey) where TEntity : class { throw null!; } + public static Microsoft.EntityFrameworkCore.Metadata.Builders.IndexBuilder HasKeysetIndex(this Microsoft.EntityFrameworkCore.Metadata.Builders.EntityTypeBuilder builder, BuildingBlocks.Pagination.SortKey sortKey, BuildingBlocks.Pagination.NullOrder nulls) where TEntity : class { throw null!; } + } + public static partial class PaginationServiceCollectionExtensions + { + public static Microsoft.Extensions.DependencyInjection.IServiceCollection AddBuildingBlocksPagination(this Microsoft.Extensions.DependencyInjection.IServiceCollection services) { throw null!; } + public static Microsoft.EntityFrameworkCore.DbContextOptionsBuilder UseBuildingBlocksPagination(this Microsoft.EntityFrameworkCore.DbContextOptionsBuilder optionsBuilder) { throw null!; } + public static Microsoft.EntityFrameworkCore.DbContextOptionsBuilder UseBuildingBlocksPagination(this Microsoft.EntityFrameworkCore.DbContextOptionsBuilder optionsBuilder) where TContext : Microsoft.EntityFrameworkCore.DbContext { throw null!; } } } diff --git a/src/BuildingBlocks/Pagination.EntityFrameworkCore/Query/Internal/CursorSeek.cs b/src/BuildingBlocks/Pagination.EntityFrameworkCore/Query/Internal/CursorSeek.cs index 77f5dfa..1630a45 100644 --- a/src/BuildingBlocks/Pagination.EntityFrameworkCore/Query/Internal/CursorSeek.cs +++ b/src/BuildingBlocks/Pagination.EntityFrameworkCore/Query/Internal/CursorSeek.cs @@ -72,15 +72,17 @@ private static Expression Compare( Expression nullCmp; if (nulls == NullOrder.Last) { + // Null is largest: row > cursor includes null rows when cursor is non-null. nullCmp = greater - ? Expression.AndAlso(Expression.Not(leftNull), rightNull) - : Expression.AndAlso(leftNull, Expression.Not(rightNull)); + ? Expression.AndAlso(leftNull, Expression.Not(rightNull)) + : Expression.AndAlso(Expression.Not(leftNull), rightNull); } else { + // Null is smallest: row > cursor includes non-null rows when cursor is null. nullCmp = greater - ? Expression.AndAlso(leftNull, Expression.Not(rightNull)) - : Expression.AndAlso(Expression.Not(leftNull), rightNull); + ? Expression.AndAlso(Expression.Not(leftNull), rightNull) + : Expression.AndAlso(leftNull, Expression.Not(rightNull)); } return Expression.OrElse(nonNullCmp, nullCmp); diff --git a/src/BuildingBlocks/Pagination.EntityFrameworkCore/Query/Internal/CursorSeekTuple.cs b/src/BuildingBlocks/Pagination.EntityFrameworkCore/Query/Internal/CursorSeekTuple.cs new file mode 100644 index 0000000..a908ef0 --- /dev/null +++ b/src/BuildingBlocks/Pagination.EntityFrameworkCore/Query/Internal/CursorSeekTuple.cs @@ -0,0 +1,168 @@ +using System.Linq.Expressions; +using System.Reflection; +using System.Runtime.CompilerServices; +using BuildingBlocks.Pagination; +using Microsoft.EntityFrameworkCore; + +namespace BuildingBlocks.Pagination.EntityFrameworkCore.Query.Internal; + +/// +/// Builds Npgsql EF.Functions.GreaterThan/LessThan(ValueTuple, ValueTuple) seek predicates +/// when the provider can translate them to SQL row comparison. +/// +internal static class CursorSeekTuple +{ + private static readonly object Gate = new(); + private static MethodInfo? _greaterThan; + private static MethodInfo? _lessThan; + private static bool _resolved; + + public static bool TryBuild( + SortKey sortKey, + object?[] values, + bool walkBackward, + out Expression> predicate) + { + predicate = null!; + if (!CanUse(sortKey, walkBackward)) + { + return false; + } + + EnsureResolved(); + var method = SeekOps.UseGreater(sortKey.Slots[0], walkBackward) ? _greaterThan : _lessThan; + if (method is null) + { + return false; + } + + var parameter = Expression.Parameter(typeof(T), "x"); + var leftArgs = new Expression[sortKey.Slots.Count]; + var rightArgs = new Expression[sortKey.Slots.Count]; + for (var i = 0; i < sortKey.Slots.Count; i++) + { + var slot = sortKey.Slots[i]; + var body = CursorSlot.Body(parameter, slot); + if (body.Type != slot.DeclaredType) + { + body = Expression.Convert(body, slot.DeclaredType); + } + + leftArgs[i] = body; + rightArgs[i] = Constant(values[i], slot.DeclaredType); + } + + var leftTuple = Expression.Convert(CreateValueTuple(leftArgs), typeof(ITuple)); + var rightTuple = Expression.Convert(CreateValueTuple(rightArgs), typeof(ITuple)); + var call = Expression.Call( + method, + Expression.Property(null, typeof(EF), nameof(EF.Functions)), + leftTuple, + rightTuple); + + predicate = Expression.Lambda>(call, parameter); + return true; + } + + /// + /// Row comparison needs at least two slots. There is no upper bound: 2–8 use + /// ; 9+ nest the remainder as TRest (same shape as C# tuples). + /// One-column keys stay on the simple comparison in . + /// + public static bool CanUse(SortKey sortKey, bool walkBackward) + => sortKey.Slots.Count >= 2 + && SeekOps.TupleEligible(sortKey, walkBackward) + && SeekOps.TupleSlotsNonNull(sortKey); + + private static void EnsureResolved() + { + if (_resolved) + { + return; + } + + lock (Gate) + { + if (_resolved) + { + return; + } + + var type = Type.GetType( + "Microsoft.EntityFrameworkCore.NpgsqlDbFunctionsExtensions, Npgsql.EntityFrameworkCore.PostgreSQL", + throwOnError: false); + if (type is not null) + { + _greaterThan = FindCompare(type, "GreaterThan"); + _lessThan = FindCompare(type, "LessThan"); + } + + _resolved = true; + } + } + + private static MethodInfo? FindCompare(Type extensions, string name) + { + foreach (var method in extensions.GetMethods(BindingFlags.Public | BindingFlags.Static)) + { + if (method.Name != name) + { + continue; + } + + var parameters = method.GetParameters(); + if (parameters.Length != 3 + || parameters[0].ParameterType != typeof(DbFunctions) + || !typeof(ITuple).IsAssignableFrom(parameters[1].ParameterType) + || !typeof(ITuple).IsAssignableFrom(parameters[2].ParameterType)) + { + continue; + } + + return method; + } + + return null; + } + + private static Expression CreateValueTuple(Expression[] args) + { + if (args.Length is < 1) + { + throw new ArgumentOutOfRangeException(nameof(args)); + } + + if (args.Length <= 8) + { + var types = args.Select(a => a.Type).ToArray(); + var create = typeof(ValueTuple).GetMethods(BindingFlags.Public | BindingFlags.Static) + .Where(m => m.Name == nameof(ValueTuple.Create) && m.IsGenericMethodDefinition) + .First(m => m.GetParameters().Length == args.Length) + .MakeGenericMethod(types); + return Expression.Call(create, args); + } + + // 9+: ValueTuple. Do not use Create(8) — it wraps the 8th argument in ValueTuple. + var rest = CreateValueTuple(args[7..]); + var typeArgs = args.Take(7).Select(a => a.Type).Append(rest.Type).ToArray(); + var tupleType = typeof(ValueTuple<,,,,,,,>).MakeGenericType(typeArgs); + var ctor = tupleType.GetConstructors().Single(c => c.GetParameters().Length == 8); + var ctorArgs = new Expression[8]; + Array.Copy(args, ctorArgs, 7); + ctorArgs[7] = rest; + return Expression.New(ctor, ctorArgs); + } + + private static Expression Constant(object? value, Type declared) + { + if (value is null) + { + return Expression.Constant(null, declared); + } + + var converted = declared.IsInstanceOfType(value) + ? value + : Convert.ChangeType(value, Nullable.GetUnderlyingType(declared) ?? declared); + return Expression.Constant(converted, declared); + } +} diff --git a/src/BuildingBlocks/Pagination/AGENTS.md b/src/BuildingBlocks/Pagination/AGENTS.md index 95d75d0..1508601 100644 --- a/src/BuildingBlocks/Pagination/AGENTS.md +++ b/src/BuildingBlocks/Pagination/AGENTS.md @@ -12,4 +12,6 @@ Consumers install `BuildingBlocks.Pagination.EntityFrameworkCore`. Dapper is a s - Hosts map `PaginationException.Code` to HTTP 400. - No `pageIndex`, no `Skip`/`OFFSET` API. - Sort a mapped scalar. Do not `By` a value object, `byte[]`, or navigation. +- Composite keys are n-column: codec and seek have no slot cap. EF Npgsql row comparison requires uniform directions and non-nullable value-type slots; otherwise OR-chain. +- `NullOrder` is seek + ORDER BY NULLS on PG/Sqlite (EF needs `AddBuildingBlocksPagination` + `UseBuildingBlocksPagination`). - Do not put `NOLOCK` / isolation on `PaginationOptions`. diff --git a/src/BuildingBlocks/Pagination/Internal/SeekOps.cs b/src/BuildingBlocks/Pagination/Internal/SeekOps.cs index d8d9228..4b1fdad 100644 --- a/src/BuildingBlocks/Pagination/Internal/SeekOps.cs +++ b/src/BuildingBlocks/Pagination/Internal/SeekOps.cs @@ -28,4 +28,23 @@ public static bool TupleEligible(SortKey key, bool walkBackward) return true; } + + /// + /// True when every slot is a non-nullable value type (no string / reference nullables). + /// Used by EF Npgsql row comparison for any slot count. Postgres tuple comparison with SQL NULL + /// is not equivalent to seek logic. + /// + public static bool TupleSlotsNonNull(SortKey key) + { + for (var i = 0; i < key.Slots.Count; i++) + { + var type = key.Slots[i].DeclaredType; + if (!type.IsValueType || Nullable.GetUnderlyingType(type) is not null) + { + return false; + } + } + + return true; + } } diff --git a/src/BuildingBlocks/Pagination/PaginationEnums.cs b/src/BuildingBlocks/Pagination/PaginationEnums.cs index ca82b13..81f9464 100644 --- a/src/BuildingBlocks/Pagination/PaginationEnums.cs +++ b/src/BuildingBlocks/Pagination/PaginationEnums.cs @@ -21,16 +21,20 @@ public enum PageDirection } /// -/// Seek-predicate null placement for string (and other reference) slots. -/// Does not emit SQL NULLS FIRST/LAST. Nullable value types -/// (int?, DateTime?, …) are rejected at construction. +/// Null placement for string (and other reference) sort slots. +/// Drives the seek predicate and, where supported, SQL ORDER BY … NULLS FIRST/LAST +/// (Dapper: PostgreSQL and Sqlite; EF: same providers when the host registers +/// AddBuildingBlocksPagination + UseBuildingBlocksPagination). +/// SQL Server does not emit NULLS (no portable index-friendly syntax). +/// Nullable value types (int?, DateTime?, …) are rejected at +/// construction. /// public enum NullOrder { - /// Nulls after non-nulls when seeking greater-than (default). + /// Nulls after non-nulls (default). Last = 0, - /// Nulls before non-nulls when seeking greater-than. + /// Nulls before non-nulls. First = 1 } diff --git a/src/BuildingBlocks/Pagination/PaginationOptions.cs b/src/BuildingBlocks/Pagination/PaginationOptions.cs index 2169026..41ea5dd 100644 --- a/src/BuildingBlocks/Pagination/PaginationOptions.cs +++ b/src/BuildingBlocks/Pagination/PaginationOptions.cs @@ -17,8 +17,10 @@ public sealed class PaginationOptions public byte[]? SigningKey { get; set; } /// - /// Seek-side null placement for reference types (default last). Does not change - /// ORDER BY nulls. Nullable value-type slots are rejected. + /// Null placement for reference-type sort slots (default last). Applies to the seek + /// predicate and to ORDER BY … NULLS FIRST/LAST on PostgreSQL and Sqlite + /// (EF requires AddBuildingBlocksPagination + UseBuildingBlocksPagination). + /// Nullable value-type slots are rejected. /// public NullOrder Nulls { get; set; } = NullOrder.Last; diff --git a/src/Lab/FeatureFusion/Features/Products/Queries/GetProductsQuery.cs b/src/Lab/FeatureFusion/Features/Products/Queries/GetProductsQuery.cs index fa5de4e..7abea41 100644 --- a/src/Lab/FeatureFusion/Features/Products/Queries/GetProductsQuery.cs +++ b/src/Lab/FeatureFusion/Features/Products/Queries/GetProductsQuery.cs @@ -18,7 +18,7 @@ public sealed record GetProductsQuery : IQuery>> [SwaggerParameter(Required = false, Description = "Opaque cursor from a previous response (NextCursor or PreviousCursor). Pass it back unchanged. Empty = first page, or last page when pageDirection is Backward.")] public string Cursor { get; init; } = string.Empty; - [SwaggerParameter(Description = "Sort field: Id, Name, Price, or CreatedAt. Composite keys always include unique Id as the tie-breaker.")] + [SwaggerParameter(Description = "Sort field: Id, Name, Price, CreatedAt, or NameThenPrice. Composite keys always include unique Id as the tie-breaker.")] public ProductSortField SortBy { get; init; } = ProductSortField.Id; [SwaggerParameter(Description = "Sort direction: Ascending or Descending.")] @@ -34,7 +34,9 @@ public enum ProductSortField Id, Name, Price, - CreatedAt + CreatedAt, + /// Composite: Name, then Price, then unique Id (3-column keyset showcase). + NameThenPrice } [JsonConverter(typeof(JsonStringEnumConverter))] diff --git a/src/Lab/FeatureFusion/Infrastructure/EntitiyConfiguration/ProductEntityTypeConfiguration.cs b/src/Lab/FeatureFusion/Infrastructure/EntitiyConfiguration/ProductEntityTypeConfiguration.cs index 7b0a16c..711ab72 100644 --- a/src/Lab/FeatureFusion/Infrastructure/EntitiyConfiguration/ProductEntityTypeConfiguration.cs +++ b/src/Lab/FeatureFusion/Infrastructure/EntitiyConfiguration/ProductEntityTypeConfiguration.cs @@ -49,5 +49,9 @@ public void Configure(EntityTypeBuilder builder) .HasDatabaseName("IX_products_name_id"); builder.HasKeysetIndex(ProductSortKeys.NameDesc) .HasDatabaseName("IX_products_name_id_desc"); + builder.HasKeysetIndex(ProductSortKeys.NameThenPriceAsc) + .HasDatabaseName("IX_products_name_price_id"); + builder.HasKeysetIndex(ProductSortKeys.NameThenPriceDesc) + .HasDatabaseName("IX_products_name_price_id_desc"); } } diff --git a/src/Lab/FeatureFusion/Infrastructure/Extensions/BuilderExtensions.cs b/src/Lab/FeatureFusion/Infrastructure/Extensions/BuilderExtensions.cs index 6bbe542..f1686ca 100644 --- a/src/Lab/FeatureFusion/Infrastructure/Extensions/BuilderExtensions.cs +++ b/src/Lab/FeatureFusion/Infrastructure/Extensions/BuilderExtensions.cs @@ -2,6 +2,7 @@ using Asp.Versioning.ApiExplorer; using Asp.Versioning.Conventions; using BuildingBlocks.Idempotency.DependencyInjection; +using BuildingBlocks.Pagination.EntityFrameworkCore; using FeatureFusion.Features.Order.IntegrationEvents; using FeatureFusion.Features.Order.IntegrationEvents.EventHandling; using FeatureFusion.Features.Order.IntegrationEvents.Events; @@ -292,6 +293,7 @@ public static void AddApplicationServices(this IHostApplicationBuilder builder) builder.AddNpgsqlDbContext("catalogdb", configureDbContextOptions: dbContextOptionsBuilder => { + dbContextOptionsBuilder.UseBuildingBlocksPagination(); dbContextOptionsBuilder.UseNpgsql( npgsqlOptions => { @@ -303,6 +305,7 @@ public static void AddApplicationServices(this IHostApplicationBuilder builder) }); // Migrations must register before OutboxWorker / AppInitializer so // MigrationHostedService.StartAsync completes before they begin work. + builder.Services.AddBuildingBlocksPagination(); builder.Services.AddMigration(); // Resolve catalogdb from config at runtime (Aspire/WAF injects ConnectionStrings__catalogdb). diff --git a/src/Lab/FeatureFusion/Infrastructure/Migrations/20260904180000_ProductsNameThenPriceIndexes.cs b/src/Lab/FeatureFusion/Infrastructure/Migrations/20260904180000_ProductsNameThenPriceIndexes.cs new file mode 100644 index 0000000..00c8c28 --- /dev/null +++ b/src/Lab/FeatureFusion/Infrastructure/Migrations/20260904180000_ProductsNameThenPriceIndexes.cs @@ -0,0 +1,40 @@ +using FeatureFusion.Infrastructure.Context; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace FeatureFusion.Infrastructure.Migrations +{ + [DbContext(typeof(CatalogDbContext))] + [Migration("20260904180000_ProductsNameThenPriceIndexes")] + public partial class ProductsNameThenPriceIndexes : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateIndex( + name: "IX_products_name_price_id", + table: "products", + columns: new[] { "Name", "Price", "Id" }); + + migrationBuilder.CreateIndex( + name: "IX_products_name_price_id_desc", + table: "products", + columns: new[] { "Name", "Price", "Id" }, + descending: new[] { true, true, true }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_products_name_price_id", + table: "products"); + + migrationBuilder.DropIndex( + name: "IX_products_name_price_id_desc", + table: "products"); + } + } +} diff --git a/src/Lab/FeatureFusion/Infrastructure/Migrations/CatalogDbContextModelSnapshot.cs b/src/Lab/FeatureFusion/Infrastructure/Migrations/CatalogDbContextModelSnapshot.cs index 9e147e1..0c3a08d 100644 --- a/src/Lab/FeatureFusion/Infrastructure/Migrations/CatalogDbContextModelSnapshot.cs +++ b/src/Lab/FeatureFusion/Infrastructure/Migrations/CatalogDbContextModelSnapshot.cs @@ -261,6 +261,13 @@ protected override void BuildModel(ModelBuilder modelBuilder) .IsDescending(true, false) .HasDatabaseName("IX_products_price_id_desc"); + b.HasIndex(new[] { "Name", "Price", "Id" }, "IX_Product_Name_Price_Id_AAA") + .HasDatabaseName("IX_products_name_price_id"); + + b.HasIndex(new[] { "Name", "Price", "Id" }, "IX_Product_Name_Price_Id_DDD") + .IsDescending(true, true, true) + .HasDatabaseName("IX_products_name_price_id_desc"); + b.ToTable("products", (string)null); }); diff --git a/src/Lab/FeatureFusion/Infrastructure/Pagination/ProductSortKeys.cs b/src/Lab/FeatureFusion/Infrastructure/Pagination/ProductSortKeys.cs index d1acaeb..cd4dbd5 100644 --- a/src/Lab/FeatureFusion/Infrastructure/Pagination/ProductSortKeys.cs +++ b/src/Lab/FeatureFusion/Infrastructure/Pagination/ProductSortKeys.cs @@ -35,11 +35,24 @@ public static class ProductSortKeys public static readonly SortKey CreatedAtDesc = SortKey.For().ByDescending(p => p.CreatedAt, sql: "CreatedAt").ThenByUnique(p => p.Id, sql: "Id"); + public static readonly SortKey NameThenPriceAsc = + SortKey.For() + .By(p => p.Name, sql: "Name") + .ThenBy(p => p.Price, sql: "Price") + .ThenByUnique(p => p.Id, sql: "Id"); + + public static readonly SortKey NameThenPriceDesc = + SortKey.For() + .ByDescending(p => p.Name, sql: "Name") + .ThenByDescending(p => p.Price, sql: "Price") + .ThenByUniqueDescending(p => p.Id, sql: "Id"); + public static readonly SortKeyRegistry Ascending = new SortKeyRegistry() .Add(ProductSortField.Id, IdAsc) .Add(ProductSortField.Name, NameAsc) .Add(ProductSortField.Price, PriceAsc) - .Add(ProductSortField.CreatedAt, CreatedAtAsc); + .Add(ProductSortField.CreatedAt, CreatedAtAsc) + .Add(ProductSortField.NameThenPrice, NameThenPriceAsc); public static SortKey Resolve(ProductSortField field, SortDirection direction) { @@ -50,6 +63,7 @@ public static SortKey Resolve(ProductSortField field, SortDirection dir (ProductSortField.Name, SortDirection.Descending) => NameDesc, (ProductSortField.Price, SortDirection.Descending) => PriceDesc, (ProductSortField.CreatedAt, SortDirection.Descending) => CreatedAtDesc, + (ProductSortField.NameThenPrice, SortDirection.Descending) => NameThenPriceDesc, _ => Ascending.Get(field) }; } diff --git a/tests/BuildingBlocks/Pagination.Dapper.Tests/DapperPagingTests.cs b/tests/BuildingBlocks/Pagination.Dapper.Tests/DapperPagingTests.cs index 7fd0423..d5b4231 100644 --- a/tests/BuildingBlocks/Pagination.Dapper.Tests/DapperPagingTests.cs +++ b/tests/BuildingBlocks/Pagination.Dapper.Tests/DapperPagingTests.cs @@ -173,6 +173,92 @@ public void Postgres_Tuple_Sql_When_Directions_Match() Assert.Contains("LIMIT @take", sql, StringComparison.Ordinal); } + [Fact] + public void Postgres_Tuple_Three_Column_Sql() + { + var sql = DapperCursorExtensions.BuildSql( + CatalogSeed.ByPriceCreatedAt, + FilterSql, + SqlDialect.PostgreSql, + [10d, CatalogSeed.T0.AddDays(1), 1], + walkBackward: false, + take: 6); + Assert.Contains("(\"Price\", \"CreatedAt\", \"Id\") > (@ks0, @ks1, @ks2)", sql, StringComparison.Ordinal); + Assert.DoesNotContain(" OR ", sql, StringComparison.Ordinal); + } + + [Fact] + public void Postgres_Tuple_Four_Column_Sql() + { + var sql = DapperCursorExtensions.BuildSql( + CatalogSeed.ByNamePriceCreatedAt, + FilterSql, + SqlDialect.PostgreSql, + ["Item-A", 10d, CatalogSeed.T0.AddDays(1), 1], + walkBackward: false, + take: 6); + // Name is a string slot — Dapper still emits tuple when directions match (host SQL assumes non-null). + Assert.Contains("(\"Name\", \"Price\", \"CreatedAt\", \"Id\") > (@ks0, @ks1, @ks2, @ks3)", sql, StringComparison.Ordinal); + } + + [Fact] + public void Postgres_Tuple_Nine_Column_Sql() + { + var first = CatalogSeed.Items[0]; + var sql = DapperCursorExtensions.BuildSql( + CatalogSeed.ByNineValueTypes, + FilterSql, + SqlDialect.PostgreSql, + [first.Price, first.CreatedAt, first.LongId, first.Kind, first.ExternalId, first.VendorId, first.Flag, first.Rank, first.Id], + walkBackward: false, + take: 6); + Assert.Contains("(\"Price\", \"CreatedAt\", \"LongId\", \"Kind\", \"ExternalId\", \"VendorId\", \"Flag\", \"Rank\", \"Id\") >", sql, StringComparison.Ordinal); + Assert.DoesNotContain(" OR ", sql, StringComparison.Ordinal); + } + + [Fact] + public void Postgres_OrderBy_Nulls_Last_In_Sql() + { + var sql = DapperCursorExtensions.BuildSql( + CatalogSeed.ByName, + FilterSql, + SqlDialect.PostgreSql, + values: null, + walkBackward: false, + take: 6, + new PaginationOptions { Nulls = NullOrder.Last }); + Assert.Contains("\"Name\" ASC NULLS LAST", sql, StringComparison.Ordinal); + Assert.Contains("\"Id\" ASC NULLS LAST", sql, StringComparison.Ordinal); + } + + [Fact] + public void Sqlite_OrderBy_Nulls_First_In_Sql() + { + var sql = DapperCursorExtensions.BuildSql( + CatalogSeed.ByName, + FilterSql, + SqlDialect.Sqlite, + values: null, + walkBackward: false, + take: 6, + new PaginationOptions { Nulls = NullOrder.First }); + Assert.Contains("\"Name\" ASC NULLS FIRST", sql, StringComparison.Ordinal); + } + + [Fact] + public void SqlServer_OrderBy_Has_No_Nulls_Keyword() + { + var sql = DapperCursorExtensions.BuildSql( + CatalogSeed.ByName, + FilterSql, + SqlDialect.SqlServer, + values: null, + walkBackward: false, + take: 6, + new PaginationOptions { Nulls = NullOrder.Last }); + Assert.DoesNotContain("NULLS", sql, StringComparison.OrdinalIgnoreCase); + } + [Fact] public void Mixed_Direction_Is_Or_Not_Tuple() { diff --git a/tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/BuildingBlocks.Pagination.EntityFrameworkCore.Tests.csproj b/tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/BuildingBlocks.Pagination.EntityFrameworkCore.Tests.csproj index 6c14de9..781fbb8 100644 --- a/tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/BuildingBlocks.Pagination.EntityFrameworkCore.Tests.csproj +++ b/tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/BuildingBlocks.Pagination.EntityFrameworkCore.Tests.csproj @@ -11,20 +11,26 @@ + + + + + + diff --git a/tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/EfPagingTests.cs b/tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/EfPagingTests.cs index e5d61b7..fef16a6 100644 --- a/tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/EfPagingTests.cs +++ b/tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/EfPagingTests.cs @@ -65,7 +65,9 @@ public async Task InitializeAsync() ExternalId = item.ExternalId, LongId = item.LongId, OptionalAt = item.OptionalAt, - VendorId = item.VendorId + VendorId = item.VendorId, + Flag = item.Flag, + Rank = item.Rank }); } diff --git a/tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/HasKeysetIndexNullSortEfTests.cs b/tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/HasKeysetIndexNullSortEfTests.cs new file mode 100644 index 0000000..a3cd8ce --- /dev/null +++ b/tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/HasKeysetIndexNullSortEfTests.cs @@ -0,0 +1,71 @@ +using BuildingBlocks.Pagination; +using BuildingBlocks.Pagination.EntityFrameworkCore; +using BuildingBlocks.Pagination.TestSupport; +using Microsoft.EntityFrameworkCore; +using Xunit; + +namespace BuildingBlocks.Pagination.EntityFrameworkCore.Tests; + +/// +/// Model-only (no container). Asserts migration SQL, which is what HasNullSortOrder is for. +/// Separate context types so EF does not reuse a compiled model across the with/without cases. +/// +public sealed class HasKeysetIndexNullSortEfTests +{ + [Fact] + public void HasKeysetIndex_NullOrder_Emits_Npgsql_Nulls_In_Create_Script() + { + using var withNulls = new WithNullSortContext(); + using var withoutNulls = new WithoutNullSortContext(); + + var withScript = withNulls.Database.GenerateCreateScript(); + var withoutScript = withoutNulls.Database.GenerateCreateScript(); + + Assert.Contains(NullSortIndexModel.IndexName, withScript, StringComparison.Ordinal); + Assert.Contains("NULLS FIRST", withScript, StringComparison.OrdinalIgnoreCase); + Assert.DoesNotContain("NULLS FIRST", withoutScript, StringComparison.OrdinalIgnoreCase); + } +} + +file static class NullSortIndexModel +{ + public const string IndexName = "IX_catalog_price_id"; + + public static DbContextOptions Options() + where TContext : DbContext + => new DbContextOptionsBuilder() + .UseNpgsql("Host=127.0.0.1;Database=pagination_nullsort_smoke") + .Options; + + public static void Catalog(ModelBuilder modelBuilder) + { + modelBuilder.Entity().HasKey(i => i.Id); + modelBuilder.Entity().Property(i => i.Id).ValueGeneratedNever(); + } +} + +file sealed class WithNullSortContext : DbContext +{ + public WithNullSortContext() : base(NullSortIndexModel.Options()) { } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + NullSortIndexModel.Catalog(modelBuilder); + modelBuilder.Entity() + .HasKeysetIndex(CatalogSeed.ByPrice, NullOrder.First) + .HasDatabaseName(NullSortIndexModel.IndexName); + } +} + +file sealed class WithoutNullSortContext : DbContext +{ + public WithoutNullSortContext() : base(NullSortIndexModel.Options()) { } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + NullSortIndexModel.Catalog(modelBuilder); + modelBuilder.Entity() + .HasKeysetIndex(CatalogSeed.ByPrice) + .HasDatabaseName(NullSortIndexModel.IndexName); + } +} diff --git a/tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/MultiColumnEfTests.cs b/tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/MultiColumnEfTests.cs new file mode 100644 index 0000000..3c028bb --- /dev/null +++ b/tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/MultiColumnEfTests.cs @@ -0,0 +1,125 @@ +using BuildingBlocks.Pagination; +using BuildingBlocks.Pagination.EntityFrameworkCore; +using BuildingBlocks.Pagination.EntityFrameworkCore.Query.Internal; +using BuildingBlocks.Pagination.TestSupport; +using Microsoft.EntityFrameworkCore; +using Xunit; + +namespace BuildingBlocks.Pagination.EntityFrameworkCore.Tests; + +[Collection("sqlite")] +public sealed class MultiColumnEfTests(SqliteFixture fixture) +{ + [Fact] + public async Task Three_Column_Forward_Next_Previous() + { + await using var db = fixture.CreateContext(); + var key = CatalogSeed.ByPriceCreatedAt; + var expected = CatalogSeed.Items + .OrderBy(i => i.Price) + .ThenBy(i => i.CreatedAt) + .ThenBy(i => i.Id) + .Select(i => i.Id) + .ToList(); + + var first = await db.Items.ToCursorPageAsync(new CursorRequest(null, 4), key); + Assert.Equal(expected.Take(4), first.Items.Select(i => i.Id)); + Assert.True(first.HasNext); + + var second = await db.Items.ToCursorPageAsync(new CursorRequest(first.Next, 4), key); + Assert.Equal(expected.Skip(4).Take(4), second.Items.Select(i => i.Id)); + Assert.Empty(first.Items.Select(i => i.Id).Intersect(second.Items.Select(i => i.Id))); + + var restored = await db.Items.ToCursorPageAsync(new CursorRequest(second.Previous, 4), key); + Assert.Equal(first.Items.Select(i => i.Id), restored.Items.Select(i => i.Id)); + } + + [Fact] + public async Task Four_Column_Forward_Next_No_Overlap() + { + await using var db = fixture.CreateContext(); + var key = CatalogSeed.ByNamePriceCreatedAt; + var expected = CatalogSeed.Items + .OrderBy(i => i.Name, StringComparer.Ordinal) + .ThenBy(i => i.Price) + .ThenBy(i => i.CreatedAt) + .ThenBy(i => i.Id) + .Select(i => i.Id) + .ToList(); + + var first = await db.Items.ToCursorPageAsync(new CursorRequest(null, 5), key); + Assert.Equal(expected.Take(5), first.Items.Select(i => i.Id)); + var second = await db.Items.ToCursorPageAsync(new CursorRequest(first.Next, 5), key); + Assert.Equal(expected.Skip(5).Take(5), second.Items.Select(i => i.Id)); + Assert.Empty(first.Items.Select(i => i.Id).Intersect(second.Items.Select(i => i.Id))); + } + + [Fact] + public async Task Three_Column_Seek_Query_Is_Or_Chain_On_Sqlite() + { + await using var db = fixture.CreateContext(); + var key = CatalogSeed.ByPriceCreatedAt; + var first = CatalogSeed.Items.OrderBy(i => i.Price).ThenBy(i => i.CreatedAt).ThenBy(i => i.Id).First(); + var sql = EntityFrameworkCursorExtensions.DebugSeekQueryString( + db.Items.AsQueryable(), + key, + [first.Price, first.CreatedAt, first.Id], + walkBackward: false); + Assert.Contains(" OR ", sql, StringComparison.Ordinal); + Assert.Contains("BuildingBlocks.Pagination:", sql, StringComparison.Ordinal); + } + + [Fact] + public void Mixed_Direction_Three_Column_Not_Tuple_Eligible() + { + var key = SortKey.For() + .ByDescending(x => x.Price) + .ThenBy(x => x.CreatedAt) + .ThenByUnique(x => x.Id); + Assert.False(SeekOps.TupleEligible(key, walkBackward: false)); + Assert.True(SeekOps.TupleSlotsNonNull(key)); + } + + [Fact] + public void TupleSlotsNonNull_Rejects_String() + { + Assert.False(SeekOps.TupleSlotsNonNull(CatalogSeed.ByName)); + Assert.True(SeekOps.TupleSlotsNonNull(CatalogSeed.ByPrice)); + Assert.True(SeekOps.TupleSlotsNonNull(CatalogSeed.ByPriceCreatedAt)); + Assert.True(SeekOps.TupleSlotsNonNull(CatalogSeed.ByNineValueTypes)); + } + + [Fact] + public async Task Nine_Column_Forward_Next_No_Overlap() + { + await using var db = fixture.CreateContext(); + var key = CatalogSeed.ByNineValueTypes; + var expected = CatalogSeed.Items + .OrderBy(i => i.Price) + .ThenBy(i => i.CreatedAt) + .ThenBy(i => i.LongId) + .ThenBy(i => i.Kind) + .ThenBy(i => i.ExternalId) + .ThenBy(i => i.VendorId) + .ThenBy(i => i.Flag) + .ThenBy(i => i.Rank) + .ThenBy(i => i.Id) + .Select(i => i.Id) + .ToList(); + + var first = await db.Items.ToCursorPageAsync(new CursorRequest(null, 4), key); + Assert.Equal(expected.Take(4), first.Items.Select(i => i.Id)); + var second = await db.Items.ToCursorPageAsync(new CursorRequest(first.Next, 4), key); + Assert.Equal(expected.Skip(4).Take(4), second.Items.Select(i => i.Id)); + Assert.Empty(first.Items.Select(i => i.Id).Intersect(second.Items.Select(i => i.Id))); + } + + [Fact] + public void Nine_Column_Value_Types_Are_Tuple_Eligible() + { + Assert.True(SeekOps.TupleEligible(CatalogSeed.ByNineValueTypes, walkBackward: false)); + Assert.True(SeekOps.TupleSlotsNonNull(CatalogSeed.ByNineValueTypes)); + Assert.True(CursorSeekTuple.CanUse(CatalogSeed.ByNineValueTypes, walkBackward: false)); + Assert.Equal(9, CatalogSeed.ByNineValueTypes.Slots.Count); + } +} diff --git a/tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/MutationNullCancelEfTests.cs b/tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/MutationNullCancelEfTests.cs index f461489..42abf10 100644 --- a/tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/MutationNullCancelEfTests.cs +++ b/tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/MutationNullCancelEfTests.cs @@ -66,34 +66,38 @@ public async Task SortColumn_DateTime_Raise_Vanishes_From_Next_Page() [Fact] public async Task Nullable_String_Forward_And_Backward_Last_And_First() { - await using var db = await SeedLabelsAsync(); + await using var db = await SeedLabelsAsync(useNullsInterceptor: true); var key = SortKey.For().By(x => x.Label).ThenByUnique(x => x.Id); - // Sqlite ASC places NULL first. NullOrder is seek-predicate only (no NULLS FIRST/LAST). + // With UseBuildingBlocksPagination, Sqlite ORDER BY honors Nulls. var lastFwd = await db.Labels.ToCursorPageAsync( new CursorRequest(null, 10), key, new PaginationOptions { Nulls = NullOrder.Last }); var firstFwd = await db.Labels.ToCursorPageAsync( new CursorRequest(null, 10), key, new PaginationOptions { Nulls = NullOrder.First }); - Assert.Equal(new[] { 2, 3, 1, 4 }, lastFwd.Items.Select(r => r.Id)); - Assert.Equal(lastFwd.Items.Select(r => r.Id), firstFwd.Items.Select(r => r.Id)); - Assert.Null(lastFwd.Items[0].Label); - Assert.Equal("", lastFwd.Items[1].Label); + Assert.Equal(new[] { 3, 1, 4, 2 }, lastFwd.Items.Select(r => r.Id)); + Assert.Equal(new[] { 2, 3, 1, 4 }, firstFwd.Items.Select(r => r.Id)); + Assert.Equal("", lastFwd.Items[0].Label); + Assert.Null(lastFwd.Items[^1].Label); + Assert.Null(firstFwd.Items[0].Label); var lastBack = await db.Labels.ToCursorPageAsync( new CursorRequest(null, 10, PageDirection.Backward), key, new PaginationOptions { Nulls = NullOrder.Last }); Assert.Equal(lastFwd.Items.Select(r => r.Id), lastBack.Items.Select(r => r.Id)); - var afterNull = await db.Labels.ToCursorPageAsync( + var afterEmpty = await db.Labels.ToCursorPageAsync( new CursorRequest(null, 1), key, new PaginationOptions { Nulls = NullOrder.Last }); - Assert.Equal(2, afterNull.Items[0].Id); + Assert.Equal(3, afterEmpty.Items[0].Id); var lastSeek = await db.Labels.ToCursorPageAsync( - new CursorRequest(afterNull.Next, 10), key, new PaginationOptions { Nulls = NullOrder.Last }); - Assert.Equal(new[] { 3, 1, 4 }, lastSeek.Items.Select(r => r.Id)); + new CursorRequest(afterEmpty.Next, 10), key, new PaginationOptions { Nulls = NullOrder.Last }); + Assert.Equal(new[] { 1, 4, 2 }, lastSeek.Items.Select(r => r.Id)); + var afterNull = await db.Labels.ToCursorPageAsync( + new CursorRequest(null, 1), key, new PaginationOptions { Nulls = NullOrder.First }); + Assert.Equal(2, afterNull.Items[0].Id); var firstSeek = await db.Labels.ToCursorPageAsync( new CursorRequest(afterNull.Next, 10), key, new PaginationOptions { Nulls = NullOrder.First }); - Assert.Empty(firstSeek.Items); + Assert.Equal(new[] { 3, 1, 4 }, firstSeek.Items.Select(r => r.Id)); var paged = await db.Labels.ToCursorPageAsync( new CursorRequest(null, 2), key, new PaginationOptions { Nulls = NullOrder.Last }); @@ -102,6 +106,34 @@ public async Task Nullable_String_Forward_And_Backward_Last_And_First() Assert.Empty(paged.Items.Select(r => r.Id).Intersect(next.Items.Select(r => r.Id))); } + [Fact] + public async Task Nullable_String_OrderBy_Emits_Nulls_Last_In_Sql() + { + await using var db = await SeedLabelsAsync(useNullsInterceptor: true); + var key = SortKey.For().By(x => x.Label).ThenByUnique(x => x.Id); + var sql = EntityFrameworkCursorExtensions.DebugQueryString( + db.Labels.AsQueryable(), key, walkBackward: false, take: 10, NullOrder.Last); + // Tag encodes NullOrder for the interceptor (BuildingBlocks.Pagination:Last). + Assert.Contains("BuildingBlocks.Pagination:Last", sql, StringComparison.Ordinal); + + var capture = new CaptureSqlInterceptor(); + await using var wired = await SeedLabelsAsync(useNullsInterceptor: true, extra: capture); + await wired.Labels.ToCursorPageAsync( + new CursorRequest(null, 10), key, new PaginationOptions { Nulls = NullOrder.Last }); + Assert.Contains(capture.Commands, c => c.Contains("NULLS LAST", StringComparison.OrdinalIgnoreCase)); + } + + [Fact] + public async Task Nullable_String_Without_Interceptor_Keeps_Provider_Order() + { + await using var db = await SeedLabelsAsync(useNullsInterceptor: false); + var key = SortKey.For().By(x => x.Label).ThenByUnique(x => x.Id); + var page = await db.Labels.ToCursorPageAsync( + new CursorRequest(null, 10), key, new PaginationOptions { Nulls = NullOrder.Last }); + // Sqlite default ASC: NULL first even when Nulls = Last (seek-only without interceptor). + Assert.Equal(new[] { 2, 3, 1, 4 }, page.Items.Select(r => r.Id)); + } + [Fact] public async Task Cancellation_After_Command_Starts() { @@ -162,12 +194,24 @@ private static async Task SeedPriceAsync() return db; } - private static async Task SeedLabelsAsync() + private static async Task SeedLabelsAsync( + bool useNullsInterceptor, + DbCommandInterceptor? extra = null) { var connection = new SqliteConnection("Data Source=:memory:"); await connection.OpenAsync(); - var options = new DbContextOptionsBuilder().UseSqlite(connection).Options; - var db = new LabelContext(options); + var builder = new DbContextOptionsBuilder().UseSqlite(connection); + if (useNullsInterceptor) + { + builder.UseBuildingBlocksPagination(); + } + + if (extra is not null) + { + builder.AddInterceptors(extra); + } + + var db = new LabelContext(builder.Options); await db.Database.EnsureCreatedAsync(); db.Labels.AddRange( new LabelRow { Id = 1, Label = "alpha" }, @@ -198,6 +242,30 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) } } +file sealed class CaptureSqlInterceptor : DbCommandInterceptor +{ + public List Commands { get; } = []; + + public override InterceptionResult ReaderExecuting( + DbCommand command, + CommandEventData eventData, + InterceptionResult result) + { + Commands.Add(command.CommandText); + return base.ReaderExecuting(command, eventData, result); + } + + public override ValueTask> ReaderExecutingAsync( + DbCommand command, + CommandEventData eventData, + InterceptionResult result, + CancellationToken cancellationToken = default) + { + Commands.Add(command.CommandText); + return base.ReaderExecutingAsync(command, eventData, result, cancellationToken); + } +} + file sealed class CancelOnReaderInterceptor : DbCommandInterceptor { private readonly CancellationTokenSource _cts; diff --git a/tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/PostgresTupleEfTests.cs b/tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/PostgresTupleEfTests.cs new file mode 100644 index 0000000..e5cb906 --- /dev/null +++ b/tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/PostgresTupleEfTests.cs @@ -0,0 +1,350 @@ +using System.Diagnostics; +using BuildingBlocks.Pagination; +using BuildingBlocks.Pagination.EntityFrameworkCore; +using BuildingBlocks.Pagination.TestSupport; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; +using System.Data.Common; +using Testcontainers.PostgreSql; +using Xunit; + +namespace BuildingBlocks.Pagination.EntityFrameworkCore.Tests; + +public sealed class PostgresFixture : IAsyncLifetime +{ + private PostgreSqlContainer? _container; + + public bool Ready { get; private set; } + + public string ConnectionString => _container?.GetConnectionString() + ?? throw new InvalidOperationException("PostgreSQL Testcontainer is not started."); + + /// GitHub Actions or an explicit required flag. Skips become failures. + public static bool IsRequiredEnvironment => + string.Equals(Environment.GetEnvironmentVariable("GITHUB_ACTIONS"), "true", StringComparison.OrdinalIgnoreCase) + || string.Equals(Environment.GetEnvironmentVariable("PAGINATION_POSTGRES_REQUIRED"), "true", StringComparison.OrdinalIgnoreCase) + || Environment.GetEnvironmentVariable("PAGINATION_POSTGRES_REQUIRED") == "1"; + + public static bool CanRun => DockerAvailable(); + + public async Task InitializeAsync() + { + if (IsRequiredEnvironment && !DockerAvailable()) + { + throw new InvalidOperationException( + "PostgreSQL CI requires Docker so Testcontainers can start postgres:16-alpine. Skipped tests are a CI failure."); + } + + if (!CanRun) + { + Ready = false; + return; + } + + try + { + _container = new PostgreSqlBuilder() + .WithImage("postgres:16-alpine") + .Build(); + await _container.StartAsync(); + await using var db = CreateContextCore(); + await db.Database.EnsureCreatedAsync(); + db.Vendors.AddRange( + new Vendor { Id = 1, Name = "Vendor-X" }, + new Vendor { Id = 2, Name = "Vendor-Y" }, + new Vendor { Id = 3, Name = "Vendor-Z" }); + foreach (var item in CatalogSeed.Items) + { + db.Items.Add(new CatalogItem + { + Id = item.Id, + Name = item.Name, + Price = item.Price, + CreatedAt = item.CreatedAt, + Kind = item.Kind, + ExternalId = item.ExternalId, + LongId = item.LongId, + OptionalAt = item.OptionalAt, + VendorId = item.VendorId, + Flag = item.Flag, + Rank = item.Rank + }); + } + + await db.SaveChangesAsync(); + Ready = true; + } + catch (Exception) when (!IsRequiredEnvironment) + { + Ready = false; + } + } + + public async Task DisposeAsync() + { + if (Ready && _container is not null) + { + await _container.DisposeAsync(); + } + } + + public CatalogContext CreateContext(DbCommandInterceptor? extra = null) + { + if (!Ready) + { + throw new InvalidOperationException( + "PostgreSQL Testcontainer is not ready. Use [PostgresFact] so tests skip when Docker is unavailable."); + } + + return CreateContextCore(extra); + } + + private CatalogContext CreateContextCore(DbCommandInterceptor? extra = null) + { + var builder = new DbContextOptionsBuilder() + .UseNpgsql(ConnectionString) + .UseBuildingBlocksPagination(); + if (extra is not null) + { + builder.AddInterceptors(extra); + } + + return new CatalogContext(builder.Options); + } + + private static bool DockerAvailable() + { + try + { + EnsureDockerOnPath(); + var psi = new ProcessStartInfo + { + FileName = "docker", + Arguments = "info", + RedirectStandardOutput = true, + RedirectStandardError = true, + UseShellExecute = false, + CreateNoWindow = true + }; + using var process = Process.Start(psi); + if (process is null) + { + return false; + } + + if (!process.WaitForExit(8000)) + { + try { process.Kill(entireProcessTree: true); } catch { /* ignore */ } + return false; + } + + return process.ExitCode == 0; + } + catch + { + return false; + } + } + + private static void EnsureDockerOnPath() + { + const string dockerBin = @"C:\Program Files\Docker\Docker\resources\bin"; + if (OperatingSystem.IsWindows() && Directory.Exists(dockerBin)) + { + var path = Environment.GetEnvironmentVariable("PATH") ?? string.Empty; + if (!path.Contains(dockerBin, StringComparison.OrdinalIgnoreCase)) + { + Environment.SetEnvironmentVariable("PATH", dockerBin + Path.PathSeparator + path); + } + } + } +} + +[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)] +public sealed class PostgresFactAttribute : FactAttribute +{ + public PostgresFactAttribute() + { + if (PostgresFixture.IsRequiredEnvironment) + { + return; + } + + if (!PostgresFixture.CanRun) + { + Skip = "PostgreSQL EF tests require Docker (Testcontainers)."; + } + } +} + +[CollectionDefinition("postgres")] +public sealed class PostgresCollection : ICollectionFixture; + +public sealed class PostgresCiGuardTests +{ + [Fact] + public void Ci_Requires_Postgres_Tuple_Tests_To_Execute() + { + if (!PostgresFixture.IsRequiredEnvironment) + { + return; + } + + Assert.True( + PostgresFixture.CanRun, + "PostgreSQL EF CI requires Docker so Testcontainers can start postgres:16-alpine. Skipped tests are a CI failure."); + } +} + +[Collection("postgres")] +public sealed class PostgresTupleEfTests(PostgresFixture fixture) +{ + [PostgresFact] + public void Postgres_Tuple_Seek_Query_Uses_Row_Comparison() + { + using var db = fixture.CreateContext(); + var first = CatalogSeed.Items.OrderBy(i => i.Price).ThenBy(i => i.Id).First(); + var sql = EntityFrameworkCursorExtensions.DebugSeekQueryString( + db.Items.AsQueryable(), + CatalogSeed.ByPrice, + [first.Price, first.Id], + walkBackward: false); + Assert.DoesNotContain(" OR ", sql, StringComparison.Ordinal); + Assert.Contains(">", sql, StringComparison.Ordinal); + Assert.True( + sql.Contains("Price", StringComparison.OrdinalIgnoreCase) + && sql.Contains("Id", StringComparison.OrdinalIgnoreCase)); + Assert.True( + sql.Contains(">", StringComparison.Ordinal) || sql.Contains("GreaterThan", StringComparison.Ordinal)); + } + + [PostgresFact] + public void Postgres_Tuple_Four_Column_Seek_Uses_Row_Comparison() + { + using var db = fixture.CreateContext(); + var key = SortKey.For() + .By(x => x.Price) + .ThenBy(x => x.CreatedAt) + .ThenBy(x => x.LongId) + .ThenByUnique(x => x.Id); + var first = CatalogSeed.Items.OrderBy(i => i.Price).ThenBy(i => i.CreatedAt).ThenBy(i => i.LongId).ThenBy(i => i.Id).First(); + var sql = EntityFrameworkCursorExtensions.DebugSeekQueryString( + db.Items.AsQueryable(), + key, + [first.Price, first.CreatedAt, first.LongId, first.Id], + walkBackward: false); + Assert.DoesNotContain(" OR ", sql, StringComparison.Ordinal); + Assert.True( + sql.Contains(">", StringComparison.Ordinal) || sql.Contains("GreaterThan", StringComparison.Ordinal), + "Expected Postgres row comparison (SQL > or LINQ GreaterThan). SQL: " + sql); + } + + [PostgresFact] + public void Postgres_Tuple_Three_Column_Seek_Uses_Row_Comparison() + { + using var db = fixture.CreateContext(); + var first = CatalogSeed.Items.OrderBy(i => i.Price).ThenBy(i => i.CreatedAt).ThenBy(i => i.Id).First(); + var sql = EntityFrameworkCursorExtensions.DebugSeekQueryString( + db.Items.AsQueryable(), + CatalogSeed.ByPriceCreatedAt, + [first.Price, first.CreatedAt, first.Id], + walkBackward: false); + Assert.DoesNotContain(" OR ", sql, StringComparison.Ordinal); + Assert.True( + sql.Contains(">", StringComparison.Ordinal) || sql.Contains("GreaterThan", StringComparison.Ordinal), + "Expected Postgres row comparison for Price+CreatedAt+Id. SQL: " + sql); + Assert.True( + sql.Contains("Price", StringComparison.OrdinalIgnoreCase) + && sql.Contains("CreatedAt", StringComparison.OrdinalIgnoreCase) + && sql.Contains("Id", StringComparison.OrdinalIgnoreCase)); + } + + [PostgresFact] + public void Postgres_Tuple_Nine_Column_Seek_Uses_Row_Comparison() + { + using var db = fixture.CreateContext(); + var first = CatalogSeed.Items + .OrderBy(i => i.Price).ThenBy(i => i.CreatedAt).ThenBy(i => i.LongId).ThenBy(i => i.Kind) + .ThenBy(i => i.ExternalId).ThenBy(i => i.VendorId).ThenBy(i => i.Flag).ThenBy(i => i.Rank).ThenBy(i => i.Id) + .First(); + var sql = EntityFrameworkCursorExtensions.DebugSeekQueryString( + db.Items.AsQueryable(), + CatalogSeed.ByNineValueTypes, + [first.Price, first.CreatedAt, first.LongId, first.Kind, first.ExternalId, first.VendorId, first.Flag, first.Rank, first.Id], + walkBackward: false); + Assert.DoesNotContain(" OR ", sql, StringComparison.Ordinal); + } + + [PostgresFact] + public void Postgres_Tuple_Skipped_When_Mixed_Direction() + { + using var db = fixture.CreateContext(); + var key = SortKey.For().ByDescending(x => x.Price).ThenByUnique(x => x.Id); + var first = CatalogSeed.Items.OrderByDescending(i => i.Price).ThenBy(i => i.Id).First(); + var sql = EntityFrameworkCursorExtensions.DebugSeekQueryString( + db.Items.AsQueryable(), + key, + [first.Price, first.Id], + walkBackward: false); + Assert.Contains(" OR ", sql, StringComparison.Ordinal); + } + + [PostgresFact] + public void Postgres_Tuple_Skipped_When_String_Slot() + { + using var db = fixture.CreateContext(); + var first = CatalogSeed.Items.OrderBy(i => i.Name, StringComparer.Ordinal).ThenBy(i => i.Id).First(); + var sql = EntityFrameworkCursorExtensions.DebugSeekQueryString( + db.Items.AsQueryable(), + CatalogSeed.ByName, + [first.Name, first.Id], + walkBackward: false); + Assert.Contains(" OR ", sql, StringComparison.Ordinal); + } + + [PostgresFact] + public async Task Postgres_Two_Column_Execute_Next_Page() + { + await using var db = fixture.CreateContext(); + var expected = CatalogSeed.Items.OrderBy(i => i.Price).ThenBy(i => i.Id).Select(i => i.Id).ToList(); + var first = await db.Items.ToCursorPageAsync(new CursorRequest(null, 4), CatalogSeed.ByPrice); + Assert.Equal(expected.Take(4), first.Items.Select(i => i.Id)); + var second = await db.Items.ToCursorPageAsync(new CursorRequest(first.Next, 4), CatalogSeed.ByPrice); + Assert.Equal(expected.Skip(4).Take(4), second.Items.Select(i => i.Id)); + } + + [PostgresFact] + public async Task Postgres_OrderBy_Nulls_Last_When_Interceptor_Registered() + { + var capture = new CaptureCommands(); + await using var db = fixture.CreateContext(capture); + var key = SortKey.For().By(x => x.Name).ThenByUnique(x => x.Id); + await db.Items.ToCursorPageAsync( + new CursorRequest(null, 5), key, new PaginationOptions { Nulls = NullOrder.Last }); + Assert.Contains(capture.Commands, c => c.Contains("NULLS LAST", StringComparison.OrdinalIgnoreCase)); + } + + private sealed class CaptureCommands : DbCommandInterceptor + { + public List Commands { get; } = []; + + public override InterceptionResult ReaderExecuting( + DbCommand command, + CommandEventData eventData, + InterceptionResult result) + { + Commands.Add(command.CommandText); + return base.ReaderExecuting(command, eventData, result); + } + + public override ValueTask> ReaderExecutingAsync( + DbCommand command, + CommandEventData eventData, + InterceptionResult result, + CancellationToken cancellationToken = default) + { + Commands.Add(command.CommandText); + return base.ReaderExecutingAsync(command, eventData, result, cancellationToken); + } + } +} diff --git a/tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/TypesAndSeekEfTests.cs b/tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/TypesAndSeekEfTests.cs index cec3703..2d0a491 100644 --- a/tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/TypesAndSeekEfTests.cs +++ b/tests/BuildingBlocks/Pagination.EntityFrameworkCore.Tests/TypesAndSeekEfTests.cs @@ -177,7 +177,9 @@ private static CatalogContext fixtureContext() ExternalId = item.ExternalId, LongId = item.LongId, OptionalAt = item.OptionalAt, - VendorId = item.VendorId + VendorId = item.VendorId, + Flag = item.Flag, + Rank = item.Rank }); } diff --git a/tests/BuildingBlocks/Pagination.TestSupport/CatalogItem.cs b/tests/BuildingBlocks/Pagination.TestSupport/CatalogItem.cs index d885e76..2f87eef 100644 --- a/tests/BuildingBlocks/Pagination.TestSupport/CatalogItem.cs +++ b/tests/BuildingBlocks/Pagination.TestSupport/CatalogItem.cs @@ -33,6 +33,10 @@ public sealed class CatalogItem public long LongId { get; set; } public DateTime? OptionalAt { get; set; } public int VendorId { get; set; } + /// Extra value-type slot for 8–9 column keyset tests. + public byte Flag { get; set; } + /// Extra value-type slot for 8–9 column keyset tests. + public short Rank { get; set; } public Vendor? Vendor { get; set; } } diff --git a/tests/BuildingBlocks/Pagination.TestSupport/CatalogSeed.cs b/tests/BuildingBlocks/Pagination.TestSupport/CatalogSeed.cs index b922012..7d0edd2 100644 --- a/tests/BuildingBlocks/Pagination.TestSupport/CatalogSeed.cs +++ b/tests/BuildingBlocks/Pagination.TestSupport/CatalogSeed.cs @@ -24,6 +24,32 @@ public static class CatalogSeed public static SortKey ByCreatedDescId { get; } = SortKey.For().ByDescending(x => x.CreatedAt, sql: "CreatedAt").ThenByUnique(x => x.Id, sql: "Id"); + public static SortKey ByPriceCreatedAt { get; } = + SortKey.For() + .By(x => x.Price, sql: "Price") + .ThenBy(x => x.CreatedAt, sql: "CreatedAt") + .ThenByUnique(x => x.Id, sql: "Id"); + + public static SortKey ByNamePriceCreatedAt { get; } = + SortKey.For() + .By(x => x.Name, sql: "Name") + .ThenBy(x => x.Price, sql: "Price") + .ThenBy(x => x.CreatedAt, sql: "CreatedAt") + .ThenByUnique(x => x.Id, sql: "Id"); + + /// Nine non-nullable value-type slots (Postgres row comparison + codec). + public static SortKey ByNineValueTypes { get; } = + SortKey.For() + .By(x => x.Price, sql: "Price") + .ThenBy(x => x.CreatedAt, sql: "CreatedAt") + .ThenBy(x => x.LongId, sql: "LongId") + .ThenBy(x => x.Kind, sql: "Kind") + .ThenBy(x => x.ExternalId, sql: "ExternalId") + .ThenBy(x => x.VendorId, sql: "VendorId") + .ThenBy(x => x.Flag, sql: "Flag") + .ThenBy(x => x.Rank, sql: "Rank") + .ThenByUnique(x => x.Id, sql: "Id"); + public static SortKeyRegistry Registry { get; } = new SortKeyRegistry() .Add(ItemSortField.Id, ById) .Add(ItemSortField.Name, ByName) @@ -71,6 +97,8 @@ private static List Create() LongId = 1000 + i, OptionalAt = i % 5 == 0 ? null : T0.AddHours(i), VendorId = (i % 3) + 1, + Flag = (byte)(i % 3), + Rank = (short)(i * 10), Vendor = new Vendor { Id = (i % 3) + 1, Name = "Vendor-" + (char)('X' + (i % 3)) } }); } diff --git a/tests/BuildingBlocks/Pagination.Tests/CodecAndRegistryTests.cs b/tests/BuildingBlocks/Pagination.Tests/CodecAndRegistryTests.cs index 89d2d24..0353221 100644 --- a/tests/BuildingBlocks/Pagination.Tests/CodecAndRegistryTests.cs +++ b/tests/BuildingBlocks/Pagination.Tests/CodecAndRegistryTests.cs @@ -1,3 +1,4 @@ +using BuildingBlocks.Pagination; using BuildingBlocks.Pagination.TestSupport; using Xunit; @@ -84,6 +85,82 @@ public void Codec_FromCursorValue_Bad_Json_Is_InvalidCursor() Assert.Equal(PaginationErrorCode.InvalidCursor, ex.Code); Assert.NotNull(ex.InnerException); } + [Fact] + public void Codec_Roundtrip_Three_And_Four_Column_Keys() + { + var options = PaginationOptions.Default; + var three = CursorCodec.Encode( + CatalogSeed.ByPriceCreatedAt, + [15d, CatalogSeed.T0.AddDays(2), 2], + PageDirection.Forward, + options); + var threeDecoded = CursorCodec.Decode(three, CatalogSeed.ByPriceCreatedAt, options); + Assert.Equal(3, threeDecoded.Values.Length); + Assert.Equal(15d, threeDecoded.Values[0]); + Assert.Equal(2, Convert.ToInt32(threeDecoded.Values[2])); + + var four = CursorCodec.Encode( + CatalogSeed.ByNamePriceCreatedAt, + ["Item-A", 10d, CatalogSeed.T0.AddDays(1), 1], + PageDirection.Backward, + options); + var fourDecoded = CursorCodec.Decode(four, CatalogSeed.ByNamePriceCreatedAt, options); + Assert.Equal(PageDirection.Backward, fourDecoded.Walk); + Assert.Equal(4, fourDecoded.Values.Length); + Assert.Equal("Item-A", fourDecoded.Values[0]); + } + + [Fact] + public void Codec_Roundtrip_Nine_Column_Key() + { + var first = CatalogSeed.Items[0]; + var encoded = CursorCodec.Encode( + CatalogSeed.ByNineValueTypes, + [first.Price, first.CreatedAt, first.LongId, first.Kind, first.ExternalId, first.VendorId, first.Flag, first.Rank, first.Id], + PageDirection.Forward, + PaginationOptions.Default); + var decoded = CursorCodec.Decode(encoded, CatalogSeed.ByNineValueTypes, PaginationOptions.Default); + Assert.Equal(9, decoded.Values.Length); + Assert.Equal(first.Id, Convert.ToInt32(decoded.Values[8])); + Assert.Equal(first.Flag, Convert.ToByte(decoded.Values[6])); + } +} + +public sealed class SeekOpsTests +{ + [Fact] + public void TupleEligible_True_For_Uniform_Directions() + { + Assert.True(SeekOps.TupleEligible(CatalogSeed.ByPrice, walkBackward: false)); + Assert.True(SeekOps.TupleEligible(CatalogSeed.ByPriceCreatedAt, walkBackward: false)); + Assert.True(SeekOps.TupleEligible( + SortKey.For().ByDescending(x => x.Price).ThenByUniqueDescending(x => x.Id), + walkBackward: false)); + } + + [Fact] + public void TupleEligible_False_For_Mixed_Directions() + { + // Price DESC + Id ASC (lab PriceDesc pattern) is mixed — not a single row comparison. + Assert.False(SeekOps.TupleEligible(CatalogSeed.ByPriceDesc, walkBackward: false)); + var mixed = SortKey.For() + .ByDescending(x => x.Price) + .ThenBy(x => x.CreatedAt) + .ThenByUnique(x => x.Id); + Assert.False(SeekOps.TupleEligible(mixed, walkBackward: false)); + } + + [Fact] + public void TupleSlotsNonNull_Matrix() + { + Assert.True(SeekOps.TupleSlotsNonNull(CatalogSeed.ByPrice)); + Assert.True(SeekOps.TupleSlotsNonNull(CatalogSeed.ByPriceCreatedAt)); + Assert.False(SeekOps.TupleSlotsNonNull(CatalogSeed.ByName)); + Assert.False(SeekOps.TupleSlotsNonNull(CatalogSeed.ByNamePriceCreatedAt)); + Assert.True(SeekOps.TupleSlotsNonNull(CatalogSeed.ByNineValueTypes)); + Assert.Equal(9, CatalogSeed.ByNineValueTypes.Slots.Count); + Assert.True(SeekOps.TupleEligible(CatalogSeed.ByNineValueTypes, walkBackward: false)); + } } public sealed class SortKeyAndRegistryTests diff --git a/tests/Lab/IntegrationTests/Api/FeatureFusionApiTests.cs b/tests/Lab/IntegrationTests/Api/FeatureFusionApiTests.cs index 42012f8..78525eb 100644 --- a/tests/Lab/IntegrationTests/Api/FeatureFusionApiTests.cs +++ b/tests/Lab/IntegrationTests/Api/FeatureFusionApiTests.cs @@ -3,9 +3,13 @@ using System.Net.Http.Json; using System.Text; using System.Text.Json; +using BuildingBlocks.Pagination.EntityFrameworkCore; +using FeatureFusion.Infrastructure.Context; +using FeatureFusion.Infrastructure.Pagination; using FluentAssertions; using IntegrationTests.Aspire; using Microsoft.AspNetCore.Mvc.Testing; +using Microsoft.Extensions.DependencyInjection; namespace IntegrationTests.Api; @@ -21,9 +25,11 @@ public sealed class FeatureFusionApiTests }; private readonly HttpClient _client; + private readonly AspireFixture _fixture; public FeatureFusionApiTests(AspireFixture fixture) { + _fixture = fixture; _client = fixture.CreateClient(new WebApplicationFactoryClientOptions { AllowAutoRedirect = false @@ -136,6 +142,8 @@ public async Task Product_Products_Previous_Cursor_Returns_Earlier_Page() [InlineData("Price", "Descending")] [InlineData("CreatedAt", "Ascending")] [InlineData("CreatedAt", "Descending")] + [InlineData("NameThenPrice", "Ascending")] + [InlineData("NameThenPrice", "Descending")] public async Task Product_Products_First_Page_Each_Sort_Field(string sortBy, string sortDirection) { var page = await GetProductsAsync(limit: 5, sortBy: sortBy, sortDirection: sortDirection); @@ -158,6 +166,43 @@ public async Task Product_Products_Dapper_First_Page_Matches_Ef_Ids() dapper.TotalCount.Should().BeGreaterThan(5); } + [Fact] + public async Task Product_Products_NameThenPrice_Next_Page_No_Overlap() + { + var first = await GetProductsAsync(limit: 5, sortBy: "NameThenPrice", sortDirection: "Ascending"); + first.NextCursor.Should().NotBeNullOrWhiteSpace(); + + var second = await GetProductsAsync( + limit: 5, + cursor: first.NextCursor, + sortBy: "NameThenPrice", + sortDirection: "Ascending"); + + second.Items.Should().HaveCount(5); + second.Items.Select(i => i.Id).Should().NotIntersectWith(first.Items.Select(i => i.Id)); + second.HasPrevious.Should().BeTrue(); + } + + [Fact] + public async Task Product_Products_Price_Next_Page_Ef_Seek_Uses_Row_Comparison() + { + var first = await GetProductsAsync(limit: 5, sortBy: "Price", sortDirection: "Ascending"); + first.NextCursor.Should().NotBeNullOrWhiteSpace(); + + using var scope = _fixture.Services.CreateScope(); + var db = scope.ServiceProvider.GetRequiredService(); + var boundary = first.Items[^1]; + var sql = EntityFrameworkCursorExtensions.DebugSeekQueryString( + db.Product.AsQueryable(), + ProductSortKeys.PriceAsc, + [boundary.Price, boundary.Id], + walkBackward: false); + + sql.Should().NotContain(" OR ", because: "Npgsql should emit a row comparison for Price+Id ASC"); + sql.Should().ContainEquivalentOf("Price"); + sql.Should().ContainEquivalentOf("Id"); + } + [Fact] public async Task Product_Products_MinimalApi_Get_First_Page_Matches_Controller() { diff --git a/web/README.md b/web/README.md new file mode 100644 index 0000000..e20331c --- /dev/null +++ b/web/README.md @@ -0,0 +1,15 @@ +# web/ + +Reserved **Next.js** project root for a FeatureFusion frontend showcase. This folder is **not** in `FeatureFusion.sln` (the solution stays .NET-only). + +The lab API, Aspire AppHost, and BuildingBlocks packages live under `src/`. This directory is the place to add a TypeScript UI later that calls the same HTTP surfaces (for example `GET /api/v2/products-page` keyset pagination). + +## Status + +Not scaffolded yet. Do not assume `package.json` or `npm` scripts exist. + +When an app is added here: + +1. Keep it out of the .NET solution unless there is a deliberate reason to bind them. +2. Point the UI at the Aspire-assigned FeatureFusion HTTP endpoint (dynamic ports locally). +3. Do not duplicate BuildingBlocks contracts in the client — consume the public HTTP/MCP APIs.