Conversation
|
|
||
| /// <summary> | ||
| /// Generates the projection in the relational command | ||
| /// Generates SQL for the projection clause of the given SELECT expression. |
There was a problem hiding this comment.
The API review has a note to rename GenerateProjection to GenerateFrom, which I think is a confusion with GenerateTables (I did this). I'm not sure what we'd rename GenerateProjection to - it really is the projection of the SELECT (i.e. the part after SELECT and before FROM).
|
As the internals analyzer graciously reminded me, we do use SqlAliasManager.GenerateTableAlias() in providers (e.g. SQL Server, e.g. when a JSON lookup is transformed into OPENJSON by composing a LINQ operator on a JSON collection. So making SqlAliasManager fully pubternal would mean using internal APIs from providers. We can at least keep SqlAliasManager (and SqlAliasManagerFactory?) full-public because of this, but only publicly expose APIs that are for provider consumption (as opposed to APIs for overriding/customizing actual alias logic). Will bring to design. |
Part of dotnet#33220
roji
left a comment
There was a problem hiding this comment.
I now remember why I didn't include a check to ensure no aliases are generated after the postprocessing pass has occured... We occasionally need to generate new aliases in SqlNullabilityProcessor; that's in the 2nd part of the query pipeline, and so after post-processing. I debated while implementing if the alias postprocessing run should be moved to the end of the 2nd part of the query pipeline, but we want to keep that as light as possible, and alias post-processing is inherently optional (close gaps).
So for now I'll leave it as it is until we have a good reason to do otherwise (if anyone objects, let me know and we'll revisit).
| /// for more information and examples. | ||
| /// </para> | ||
| /// </remarks> | ||
| [Experimental("EF1004")] |
There was a problem hiding this comment.
Note: I'll extract all diagnostic IDs to a centralized place so we can track them etc.
| where ns.StartsWith("Microsoft.Entity", StringComparison.Ordinal) | ||
| && !ns.EndsWith(".Internal", StringComparison.Ordinal) | ||
| && !it.Name.EndsWith("Dependencies", StringComparison.Ordinal) | ||
| && it.GetCustomAttribute<ExperimentalAttribute>() is null |
There was a problem hiding this comment.
@AndriySvyryd note check exemption for services marked as experimental.
Just add a comment there, so we take it into account in the future |
Part of #33220