JPM-14938 - Address ClassTable bug with duplicate inherited interface indexes.#488
Draft
Devereux-Henley wants to merge 2 commits into
Draft
Conversation
BuildClassTableIndexes' inherited-interface dedup guard compares
type.Indexes against the interfaceIndex reference itself:
if (type.Indexes.Any(i => i.DeclaringIndex == interfaceIndex)) continue;
When a type sits in DirectInterfaces via more than one path (e.g. a hierarchy
root implements IBusinessEntity both directly via a base class and transitively
via a sub-interface like INamedBusinessEntity), each path contributes a
distinct IndexInfo for the same logical interface index. The identity check
misses the second visit, BuildInheritedIndex runs again and produces an index
with the same name, and NodeCollection.Add throws "Item with name
'<Type>.<Interface>.FK_<Field>' already exists in '<Type>.Indexes'" — the
hierarchy fails to build.
Sibling BuildConcreteTableIndexes already handles this with a name-based check
after BuildInheritedIndex (and disposes the surplus IndexInfo). Mirror that
pattern here. Also dispose the index in the IndexBuiltOverInheritedFields
branch, which previously leaked the unused IndexInfo.
BuildSingleTableIndexes is unaffected — it dedups against
interfaceIndex.DeclaringIndex (chain-normalized identity).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…tion Regression test for the previous commit. Repros the case where a type implements the same persistent interface through two paths in DirectInterfaces (here: Root implements IOwned directly via OwnedBase AND transitively via NamedOwnedBase → INamedAndOwned : IOwned). Before the fix, Domain.Build threw "Item with name 'Root.IOwned.FK_Owner' already exists in 'Root.Indexes'" out of IndexBuilder.BuildClassTableIndexes. With the fix it builds cleanly. Mirrors the conventions in IndexesAndInheritanceSchemaTest.cs (nested *TestModel namespace, DomainConfigurationFactory.Create, namespace-scoped Types.Register). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.