Skip to content

Conversation

@JoasE
Copy link
Contributor

@JoasE JoasE commented Dec 18, 2025

Adds a CosmosStructuralTypeMaterializerSource and overrides AddStructuralTypeInitialization in CosmosShapedQueryCompilingExpressionVisitor to generate materialization expressions for complex properties
Leverages Nullable<>.HasValue for nullable value types in to support value types without equals operator
Part of: #31253

@JoasE

This comment was marked as resolved.

@JoasE JoasE marked this pull request as ready for review December 19, 2025 11:53
@JoasE JoasE requested a review from a team as a code owner December 19, 2025 11:53
Copilot AI review requested due to automatic review settings December 19, 2025 11:53
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request implements binding logic for complex properties in the Cosmos DB provider, enabling proper materialization of complex types from JSON documents. The implementation introduces a custom CosmosStructuralTypeMaterializerSource that defers complex property handling to allow nested materialization expressions to be generated during query compilation.

Key changes:

  • Introduces CosmosStructuralTypeMaterializerSource to control when complex properties are materialized during shaping
  • Implements nested complex property and collection binding in CosmosShapedQueryCompilingExpressionVisitor
  • Enhances null-handling logic in CosmosProjectionBindingExpressionVisitor for nullable value types

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 13 comments.

Show a summary per file
File Description
src/EFCore.Cosmos/Query/Internal/CosmosStructuralTypeMaterializerSource.cs New class that overrides complex type materialization behavior to enable deferred binding
src/EFCore.Cosmos/Query/Internal/CosmosShapedQueryCompilingExpressionVisitor.cs Adds logic to generate materialization expressions for complex properties and collections from JObject/JArray
src/EFCore.Cosmos/Query/Internal/CosmosShapedQueryCompilingExpressionVisitor.CosmosProjectionBindingRemovingExpressionVisitorBase.cs Exposes methods and fields needed for complex property binding; adds handling for ComplexPropertyBindingExpression
src/EFCore.Cosmos/Query/Internal/CosmosProjectionBindingExpressionVisitor.cs Improves null-safety checks for nullable value types and refactors member expression updates
src/EFCore.Cosmos/Extensions/CosmosServiceCollectionExtensions.cs Registers the new CosmosStructuralTypeMaterializerSource service
test/EFCore.Cosmos.FunctionalTests/CosmosComplexTypesTrackingTest.cs Uncomments assertions that now pass with complex property binding implemented
test/EFCore.Cosmos.FunctionalTests/Query/Associations/ComplexProperties/ComplexPropertiesProjectionCosmosTest.cs New test class with Cosmos-specific overrides for complex property projection tests
test/EFCore.Cosmos.FunctionalTests/Query/Associations/ComplexProperties/ComplexPropertiesCosmosFixture.cs Test fixture configuration for complex properties tests in Cosmos

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 4 comments.

@JoasE JoasE marked this pull request as draft December 19, 2025 12:33
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

@JoasE JoasE marked this pull request as ready for review December 19, 2025 16:48
Copy link
Member

@roji roji left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @JoasE, thanks for submitting this and sorry I haven't gotten around to reviewing it earlier.

I admit that this part of the Cosmos query pipeline is generally unfamiliar to me, and also represents an older/legacy part of the EF codebase in general. I'll do my best to fully understand everything and provide meaningful feedback. As we add more test coverage I'm sure issues will be flushed out.

For now, here's a first round of review comments - most are nits but see some more important things as well.

@JoasE JoasE requested a review from roji January 9, 2026 11:29
Copilot AI review requested due to automatic review settings January 9, 2026 15:04
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

@roji
Copy link
Member

roji commented Jan 10, 2026

@JoasE just a note - when you've handled a review comment, please resolve it to keep track of comments that still need handling (or discussion) vs. those which are completely done.

(I'll re-review very soon)

@roji roji force-pushed the main branch 2 times, most recently from 249ae47 to 6b86657 Compare January 13, 2026 17:46
@JoasE
Copy link
Contributor Author

JoasE commented Jan 19, 2026

@roji friendly reminder in this! No worries if priorities changed :)

@roji
Copy link
Member

roji commented Jan 21, 2026

Yeah, sorry about that - I'll really try to get to it in the next few days (and in general be more reactive to your Cosmos PRs).

Copy link
Member

@roji roji left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Finally got around to this, sorry for the delay @JoasE. This looks ready to merge - see the comments below (nothing major). I'll prioritize this (and your other PRs) so we can iterate quickly and built out the support.

@JoasE JoasE requested a review from roji January 28, 2026 07:05
Copy link
Member

@roji roji left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @JoasE, looking forward to the follow-up PRs!

@roji roji merged commit 71384a4 into dotnet:main Jan 28, 2026
10 checks passed
@roji roji linked an issue Jan 28, 2026 that may be closed by this pull request
3 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add Cosmos support for complex types

3 participants