[ 
https://issues.apache.org/jira/browse/SLING-13152?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18069617#comment-18069617
 ] 

Martin Schulze commented on SLING-13152:
----------------------------------------

https://github.com/apache/sling-org-apache-sling-graphql-core/pull/45

> [GraphQL] Multiple aliased selections for the same field lose sub-field 
> selections due to FQN collision in SelectedFieldWrapper
> -------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: SLING-13152
>                 URL: https://issues.apache.org/jira/browse/SLING-13152
>             Project: Sling
>          Issue Type: Bug
>          Components: GraphQL
>            Reporter: Martin Schulze
>            Priority: Major
>
> When a GraphQL query uses multiple aliases pointing at the same underlying 
> field:
>   {
>     AliasA: items { ... on TypeA { rteField { html } } }
>     AliasB: items { ... on TypeB { textField } }
>   }
> All aliases resolve to the same fully-qualified name (FQN), e.g. 
> `ParentType.items`.
> SelectedFieldWrapper stores sub-fields in a HashMap<String, SelectedField> 
> keyed by
> FQN. When the second alias is processed, its entry overwrites the first, 
> discarding
> the sub-field selections from AliasA.
> For fields whose values are resolved directly (scalars), this is harmless. 
> For fields
> that consult the selection set at resolution time — such as MultiFormatString 
> (RTE),
> which uses the sub-field list to determine which formats 
> (html/plaintext/markdown) to
> render — the result is null, because the selection set appears empty.
> Steps to reproduce:
> 1. Define two CF models, ModelA (with a MultiFormatString field) and ModelB
> 2. Create a container model with a fragment-reference multifield `items` 
> accepting
>    both ModelA and ModelB
> 3. Query with two aliases on `items`:
>      AliasA: items { ... on ModelAModel { rteField { html } } }
>      AliasB: items { ... on ModelBModel { textField } }
> 4. Observe: rteField { html } returns null
> Expected: html contains the stored HTML content
> Actual:   html is null
> Fix: when a duplicate FQN is encountered, merge the sub-field maps from both
> aliases instead of overwriting. This preserves all requested sub-fields
> regardless of how many aliases reference the same field.
> Affected class: SelectedFieldWrapper (and SelectionSetWrapper at the top 
> level)



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to