Repository navigation
Release v19.10.0
Added
- A join in a projection declaration can set its own
automaporno automap, which overrides the projection's setting. The setting is stored with the definition, and applies to live join events and to backfill. Older clients and stored definitions keep inheriting the projection's setting. The fluent .NETJoinBuilderand generated client code don't express it yet. - Joins inside a
nestedobject are wired: joined values are set on the nested object, both when the join event arrives and through backfill.
Changed
The declaration language now rejects shapes that were silently ignored, overwritten or failing, instead of compiling them. Stored definitions still load; this only affects compiling or saving a declaration.
allinsidechildrenornested. Useallat the root with a dotted path instead.remove via joinat the root or insidenested.childreninsidenested.joininside anestedobject beneathchildren.- More than one
every/allblock at the same level. Twoeveryblocks insidechildrenused to be merged; they are now an error. - The same event more than once at one level, including across join blocks, repeated
clear with, andremove withplusclear withfor the same event. These checks now also run when no schema is supplied.
Fluent and model-bound definitions that use the unsupported root remove via join, or a join inside a nested object beneath children, now log a warning and leave out that wiring, instead of failing the projection's partition.
A nested object inside another nested object now automaps against its own schema instead of the parent's, so values projected for new events can differ.
Fixed
everymappings, such ascount,incrementandadd, ran twice for join events. They now run once. Existing read models keep their doubled values until you replay the affected projections. Their definitions don't change, so no replay is triggered automatically.
Part of #4125. Follow-ups cover live joins in nested objects beneath children, root removal via join, and letting child events update parent every fields as an explicit opt-in.