Skip to content

Latest commit

 

History

History
110 lines (81 loc) · 18.7 KB

File metadata and controls

110 lines (81 loc) · 18.7 KB

P5: Acceptance-sized database and ORM tasks

English | 简体中文 | Back to roadmap

This list decomposes the existing P5 scope without expanding compatibility promises. Every leaf is ⏳ Planned; implementation directories, profiles, manifests, runners and reports below are planned deliverables, not existing execution evidence. A parent completes only when all its leaves pass. Aggregate node P5-GATE requires P5-01 through P5-06 and all four gate leaves. P5-07 retains its original post-P5 evaluation scope and is outside the P5 exit-blocking set; it promises no diesel support. This removes the gate dependency cycle without reducing database delivery scope.

The first leaf of each parent inherits its hard prerequisites from the main roadmap; later leaves inherit them transitively through the listed edges. Parent IDs such as P2-06 mean all their leaves; nodes such as P3-GATE mean the whole phase gate. File/directory ownership is limited to the stated unit; shared interface or manifest changes must be coordinated serially, even when other directories differ.

An evidence key suite-v1#group denotes the planned tests/roadmap/suite-v1.json and its named group. Each manifest must enumerate immutable case IDs, input hashes, expected outcomes, positive/negative/boundary/budget classification and an exact denominator. tools/RustSharp.Conformance is to gain --manifest <path> --group <group>; this future entry point is not a currently executable command. The deliverable column bounds the accompanying test directories. Local reports are planned at artifacts/p5/local/<suite>/<group>.json; native CI uploads equivalent reports with stable run and artifact links. Ignored artifacts need not be committed. Decision leaves freeze versions and numeric budgets first. Extensions add a new manifest version; they never delete, relax or replace existing cases or adjust denominators at closure.

Every report records compiler SHA, tool/provider/server versions, profile, lock hash, platform/RID, command, denominator, failure reasons, timeout, maximum attempts/backoff, PID/parent PID/start time and cleanup outcome. Runners support cancellation, numeric resource caps and owned-resource-only cleanup. Database unavailability is blocked evidence, never a skip or pass. Functional leaves require corresponding positive, negative, boundary and budget evidence. Local and CI passes are recorded separately, and every declared runtime cell actually executes.

P5-01: Provider boundary

ID Status Deliverable / ownership Depends on Done when Evidence
P5-01.01 ⏳ Planned Freeze provider/backend/server/API and resource profile; own docs/profiles/database-provider-v1.json. P3-GATE, P2-06 Exactly SQLite, PostgreSQL, MySQL and SQL Server have pinned .NET providers, native assets, server versions, supported types and numeric connection/row/byte/deadline limits; exclusions cannot remove the parent contract. p5-provider-v1#profile
P5-01.02 ⏳ Planned Connection and command ownership; own src/RustSharp.Runtime/Database/Connection.cs and Command.cs. P5-01.01 Open/close/reopen and parameter binding work; use-after-dispose, double ownership and missing parameters fail predictably; disposing an idle or failed command releases its connection exactly once. p5-provider-v1#connection-command
P5-01.03 ⏳ Planned Typed values and errors; own src/RustSharp.Runtime/Database/Values.cs and Errors.cs. P5-01.02 Round trips preserve null, numeric extrema, decimal precision, text encoding, timestamps and binary data declared by the profile; invalid conversion, overflow and provider errors retain stable categories and source causes. p5-provider-v1#values-errors
P5-01.04 ⏳ Planned Cancellation and disposal; own src/RustSharp.Runtime/Database/Cancellation.cs. P5-01.02 Pre-cancel, in-flight cancel, timeout and dispose/cancel races terminate within frozen deadlines; repeated cancellation is harmless and returns no live owned connection, reader or child process. p5-provider-v1#cancel-dispose
P5-01.05 ⏳ Planned Transaction state machine; own src/RustSharp.Runtime/Database/Transaction.cs. P5-01.03, P5-01.04 Commit/rollback/dispose and supported isolation levels have explicit effects; double completion, failed commit and cancellation roll back or return a documented terminal error; locks are released within the budget. p5-provider-v1#transaction
P5-01.06 ⏳ Planned Provider adapter reachability; own tests/database/provider-contract/ and its AOT roots. P5-01.03, P5-01.04, P5-01.05 Every frozen adapter runs connection/value/error/cancel/transaction groups on CoreCLR and Native AOT; no runtime model generation, reflection fallback or trimming/AOT warning is reachable. p5-provider-v1#aot-contract

P5-02: sqlx: SQLite, PostgreSQL and MySQL

ID Status Deliverable / ownership Depends on Done when Evidence
P5-02.01 ⏳ Planned Freeze exact sqlx API/features and backend matrix; own docs/profiles/sqlx-v1.json. P5-01, P3-04 Inventory identifies every selected public member and feature combination for all three engines, references frozen provider versions and assigns fixed positive, negative, boundary and budget case IDs. p5-sqlx-v1#profile
P5-02.02 ⏳ Planned SQLite query/type adapter; own compat/sqlx/sqlite/. P5-02.01 Parameterized CRUD and all mapped values round-trip; null, empty result, uniqueness and busy/locked errors match the contract; file and in-memory databases respect byte/row limits and disposal. p5-sqlx-v1#sqlite
P5-02.03 ⏳ Planned PostgreSQL query/type adapter; own compat/sqlx/postgres/. P5-02.01 Parameterized CRUD, server errors and profile types pass against the pinned server; Unicode/null/numeric bounds preserve values; wrong type, oversized row and disconnected server fail within bounds. p5-sqlx-v1#postgres
P5-02.04 ⏳ Planned MySQL query/type adapter; own compat/sqlx/mysql/. P5-02.01 Parameterized CRUD and signed/unsigned, decimal, temporal and binary mappings pass for frozen SQL mode/charset; coercion, truncation and connection loss cannot silently change accepted results. p5-sqlx-v1#mysql
P5-02.05 ⏳ Planned Pool and streaming integration; own compat/sqlx/pool/ and compat/sqlx/stream/. P5-02.02, P5-02.03, P5-02.04 Each engine exercises pool saturation, checkout timeout, backpressure, early stream Drop and cancellation; max connections/rows/buffer bytes stay bounded and a released connection is reusable. p5-sqlx-v1#pool-stream
P5-02.06 ⏳ Planned Transaction and rollback integration; own compat/sqlx/transaction/. P5-02.05 Commit, rollback, isolation and declared savepoints preserve database state for all three engines; statement error, disconnect and cancellation prove rollback/no partial commit or a stable indeterminate-outcome error. p5-sqlx-v1#transaction
P5-02.07 ⏳ Planned Migrations and executable API coverage; own compat/sqlx/migrate/ and tests/database/sqlx/. P5-02.06 Ordered migrations, re-run, checksum mismatch and mid-migration failure are deterministic on each engine; complete manifest passes CoreCLR/AOT with no missing API case, skipped server or owned-resource leak. p5-sqlx-v1#migration-coverage

P5-03: Offline checked SQL

ID Status Deliverable / ownership Depends on Done when Evidence
P5-03.01 ⏳ Planned Freeze schema snapshot protocol; own docs/profiles/sqlx-schema-v1.json. P5-02, P3-02 Protocol pins dialect/provider/schema hash/query hashes/parameter and result types, canonical ordering and numeric schema/query budgets; version mismatch and unsupported metadata have named diagnostics. p5-sqlx-checked-v1#snapshot-format
P5-03.02 ⏳ Planned Bounded snapshot acquisition; own tools/RustSharp.Conformance/Database/SchemaSnapshot.cs. P5-03.01 Capture for each of the three sqlx engines produces byte-identical canonical snapshots from unchanged schema; authentication failure, cancellation and metadata/byte limits clean up connections and omit secrets. p5-sqlx-checked-v1#snapshot-capture
P5-03.03 ⏳ Planned Offline query/type verification; own compat/sqlx/macros/checked-query/. P5-03.02 With networking disabled, valid queries compile using only locked snapshots; invalid SQL, absent columns, parameter arity/types and nullable-result mismatches fail at stable source spans. p5-sqlx-checked-v1#offline-check
P5-03.04 ⏳ Planned Staleness and adversarial limits; own tests/database/sqlx-checked/fail/ and budget/. P5-03.03 Missing/tampered/stale snapshots never trigger online fallback; limit-minus-one, limit and limit-plus-one schema/query inputs have deterministic diagnostics, bounded work and no unowned file overwrite. p5-sqlx-checked-v1#stale-budget
P5-03.05 ⏳ Planned Macro provenance and runtime agreement; own tests/database/sqlx-checked/run/. P5-03.03, P5-03.04 Expanded query bindings retain original source mapping and match actual rows from the frozen schema on CoreCLR/AOT; changed runtime schema returns the declared error rather than corrupt typed values. p5-sqlx-checked-v1#runtime-parity

P5-04: tiberius and SQL Server

ID Status Deliverable / ownership Depends on Done when Evidence
P5-04.01 ⏳ Planned Freeze tiberius API/features/server profile; own docs/profiles/tiberius-v1.json. P5-01, P3-04 Exact upstream API identity, .NET provider, SQL Server version, authentication/TLS modes, type inventory and numeric pool/stream/time budgets are fixed; unsupported modes fail explicitly. p5-tiberius-v1#profile
P5-04.02 ⏳ Planned SQL Server command/type adapter; own compat/tiberius/query/ and types/. P5-04.01 Parameterized CRUD and all declared types including null, precision, Unicode and binary boundaries round-trip; bad parameter types, duplicate keys and server errors preserve stable categories. p5-tiberius-v1#query-types
P5-04.03 ⏳ Planned SQL Server pool and streaming; own compat/tiberius/pool/ and stream/. P5-04.02 Pool saturation, reader backpressure, empty/multiple declared result sets and early Drop have deterministic ownership; row/byte limits and checkout timeouts release reusable connections. p5-tiberius-v1#pool-stream
P5-04.04 ⏳ Planned SQL Server transaction/cancellation; own compat/tiberius/transaction/. P5-04.03 Commit, rollback, declared isolation/savepoints and cancel/disconnect races prove database effects; failed/cancelled commands cannot return poisoned connections to the pool as healthy. p5-tiberius-v1#transaction-cancel
P5-04.05 ⏳ Planned SQL Server migration contract; own tests/database/tiberius/migrations/. P5-04.04 Versioned migration fixtures cover first apply, repeat, checksum drift and partial failure; rollback/recovery policy leaves the recorded schema state and no unreleased locks. p5-tiberius-v1#migrations
P5-04.06 ⏳ Planned SQL Server AOT/API coverage; own tests/database/tiberius/aot/. P5-04.02, P5-04.03, P5-04.04, P5-04.05 All manifest groups execute with the pinned live SQL Server on Windows/Linux x64 CoreCLR/AOT; authentication/TLS negative cases are real and no server unavailability is counted as a pass. p5-tiberius-v1#aot-coverage

P5-05: sea-orm

ID Status Deliverable / ownership Depends on Done when Evidence
P5-05.01 ⏳ Planned Freeze sea-orm entity/API/backend profile; own docs/profiles/sea-orm-v1.json. P5-02, P5-04, P3-02 Exact member/feature inventory fixes entities, relation cardinalities, migration and transaction behavior for all four engines, plus explicit unsupported combinations and numeric graph/query budgets. p5-sea-orm-v1#profile
P5-05.02 ⏳ Planned Static entity and generated metadata model; own compat/sea-orm/entity/ and codegen/. P5-05.01 Equivalent static/generated entities produce deterministic field/key/null mappings without runtime generation; duplicate keys, unsupported fields and generator limits yield stable source diagnostics. p5-sea-orm-v1#entities
P5-05.03 ⏳ Planned Entity CRUD and query mapping; own compat/sea-orm/query/. P5-05.02 Parameterized create/read/update/delete and selected filters/pagination work across four engines; empty results, conflicting writes, nulls and page bounds have explicit outcomes. p5-sea-orm-v1#crud
P5-05.04 ⏳ Planned Relations and bounded loading; own compat/sea-orm/relation/. P5-05.03 Declared one-to-one/one-to-many/many-to-many traversal preserves keys and nullability; missing/duplicate related keys, cycles and graph/query limits fail or truncate only as the frozen contract permits. p5-sea-orm-v1#relations
P5-05.05 ⏳ Planned Entity transactions and migrations; own compat/sea-orm/transaction/ and migration/. P5-05.03 Multi-entity atomic operations and ordered schema migrations prove commit/rollback/cancel effects on each backend; migration drift, dependency cycles and mid-step failure follow documented recovery. p5-sea-orm-v1#transaction-migration
P5-05.06 ⏳ Planned ORM AOT and inventory reconciliation; own tests/database/sea-orm/. P5-05.04, P5-05.05 Every selected API/feature/backend cell has an executable case; generated/static entity parity, cleanup and graph budgets pass CoreCLR/AOT without reflection fallback or missing inventory entries. p5-sea-orm-v1#aot-inventory

P5-06: Database applications and published matrix

ID Status Deliverable / ownership Depends on Done when Evidence
P5-06.01 ⏳ Planned Build four-engine application fixtures; own samples/database-api/. P5-02, P5-03, P5-04, P5-05 One declared sample scenario per engine demonstrates CRUD, pooling, transaction, cancellation and migration; expected effects and isolated service/database ownership are specified before execution. p5-database-apps-v1#fixtures
P5-06.02 ⏳ Planned Native Windows x64 database runner; own .github/workflows/p5-windows.yml. P5-06.01 All four apps publish and run on native win-x64 under CoreCLR/AOT against pinned services; failed auth, timeout and shutdown prove cleanup, with zero skipped engine/runtime cells. p5-database-apps-v1#win-x64
P5-06.03 ⏳ Planned Native Linux x64 database runner; own .github/workflows/p5-linux.yml. P5-06.01 All four apps publish and run on native linux-x64 under CoreCLR/AOT; identical scenario IDs/expected effects match Windows, including cancellation and native dependency resolution. p5-database-apps-v1#linux-x64
P5-06.04 ⏳ Planned Publish compatibility and exclusions matrix; own docs/database-compatibility.md and docs/database-compatibility_zh.md. P5-06.02, P5-06.03 Bilingual matrix reconciles every engine/provider/server/API/feature/version/RID cell with immutable report links; missing evidence remains open, and upstream source compatibility is never inferred. p5-database-apps-v1#matrix
P5-06.05 ⏳ Planned Reproduce service setup and failure cleanup; own eng/database/ and tests/database/cleanup/. P5-06.04 A clean runner replays locked setup and reports; startup failure, cancellation and exhausted retries clean only owned services/databases/processes, redact secrets and preserve diagnostic artifacts. p5-database-apps-v1#reproduce-cleanup

P5-07: Post-exit diesel evaluation

ID Status Deliverable / ownership Depends on Done when Evidence
P5-07.01 ⏳ Planned Freeze bounded evaluation questions; own probes/diesel/profile-v1.json. P5-GATE After P5 exits, pin the candidate upstream version, selected APIs/backends, probe count and time/work limits; write feasibility questions without adding a supported profile. p5-diesel-evaluation-v1#scope
P5-07.02 ⏳ Planned Probe type system and macros; own probes/diesel/language/. P5-07.01 Finite positive/negative probes identify required trait/generic/macro features and reproducible diagnostics; unsupported cases remain explicit findings rather than skipped successes. p5-diesel-evaluation-v1#language
P5-07.03 ⏳ Planned Probe backend/native/AOT feasibility; own probes/diesel/backend/. P5-07.01 The fixed backend probe set records native dependencies, ownership and AOT reachability, including bounded failure reasons; no probe result becomes an implementation or compatibility claim. p5-diesel-evaluation-v1#backend
P5-07.04 ⏳ Planned Record a feasibility decision; own docs/adr/diesel-profile.md. P5-07.02, P5-07.03 Decision reconciles every probe and states defer/reject or a separately scoped future implementation, required language/macro/backend/AOT work and costs; P5 exit evidence remains unchanged. p5-diesel-evaluation-v1#decision

P5-GATE: Finite exit gate

ID Status Deliverable / ownership Depends on Done when Evidence
P5-GATE.01 ⏳ Planned Freeze complete exit inventory; own tests/roadmap/p5-exit-v1.json. P3-GATE, P2-06, P5-01, P5-02, P5-03, P5-04, P5-05 Inventory enumerates all required API/feature/backend cases and the four-engine × two-RID × two-runtime application matrix (16 cells); every cell has immutable inputs and a case denominator. p5-exit-v1#inventory
P5-GATE.02 ⏳ Planned Collect independent local and native CI evidence; own eng/database/Collect-P5Evidence.ps1. P5-GATE.01, P5-06 All frozen manifests pass with zero failures/skips, Release zero warnings/errors, valid IL and AOT output; reports identify the same final SHA and preserve engine/runtime parity and cleanup evidence. p5-exit-v1#evidence
P5-GATE.03 ⏳ Planned Reject incomplete aggregate evidence; own tools/RustSharp.Conformance/Database/P5ExitGate.cs. P5-GATE.02 Missing/duplicate cells, changed denominators, wrong versions/SHA/RID, fake native execution, unavailable services and absent cleanup all fail; aggregation cannot silently accept a smaller matrix. p5-exit-v1#aggregator-negative
P5-GATE.04 ⏳ Planned Publish gate provenance and update status; own the P5 sections of paired roadmap/front-page documents. P5-GATE.03 Immutable CI run/artifact links and reproducible commands accompany the fixed denominator; both languages change status together only after P5-01 through P5-06 and all gate leaves pass. p5-exit-v1#publication