Skip to content

Parity: refresh for the type-handler decision, and put the delta up front - #210

Merged
mgravell merged 1 commit into
mainfrom
parity-refresh
Aug 26, 2026
Merged

Parity: refresh for the type-handler decision, and put the delta up front#210
mgravell merged 1 commit into
mainfrom
parity-refresh

Conversation

@mgravell

Copy link
Copy Markdown
Member

parity.md had gone stale: it still described type handlers as an open unification question ("how does a Dapper handler registration become an AOT one?"), and still said DAP050 was the next free diagnostic id. #208 answered the first; DAP050–055 are now taken.

The type-handler row splits in two, because the answer differs by half — declaring a handler is supported, and a vanilla SqlMapper.ITypeHandler can be named as-is because generated code adapts it; registering one at runtime is now an explicit 🚫 with the reasoning recorded inline (hot-path cost for everyone, unverifiable at build, TypeHandlerCache<T> is unresolvable by ILC — issue #165).

XML types, UDTs and bare DataTable members move from ❌ to ⚠️: all three are expressible today by declaring a handler. The open question is now only whether we ship built-in declarations for the types vanilla registers by default — a much smaller question than the one those rows described.

A delta summary goes at the top, so the file answers "what is actually left" without reading five tables: 677/793 on the corpus, 533/725 intercepted, and the remaining work ordered by weight — multi-map and GridReader first, then corpus adoption of [TypeHandler], literals, the coercion tail, ExecuteReader, announced types, and the singles. It also records which items are corpus adoption rather than product work, and the two type-handler cases that will never convert (a test that registers a specific instance and asserts on it, and ResetTypeHandlers/RemoveTypeMap, which are runtime map mutation).

Notes only — no code changes.

…ront

parity.md still described type handlers as an open unification question, and
still claimed DAP050 was the next free id. Both moved: #208 shipped declarative
registration, and DAP050-055 are now taken.

The type-handler row splits in two, because the answer was different for each
half: declaring a handler is supported (and a vanilla SqlMapper.ITypeHandler
can be named as-is, adapted by a generated shim), while registering one at
runtime is now an explicit non-goal with the reasoning recorded. XML types,
UDTs and bare DataTable members move from "not supported" to "expressible, no
built-in declaration shipped" - which is a different question and a much
smaller one.

Adds a delta summary at the top so the file answers "what is actually left"
without reading five tables: the corpus number, the interception ratio, and the
remaining work ordered by weight, including which items are corpus adoption
rather than product work, and the two type-handler ceilings that will not
convert at all.
@mgravell
mgravell merged commit d5125ce into main Aug 26, 2026
2 checks passed
@mgravell
mgravell deleted the parity-refresh branch September 11, 2026 13:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant