From 305518a56b8e2de1db216a8e96dd5bd08c5e6a61 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 15 Sep 2026 20:40:35 +0000 Subject: [PATCH 1/2] Initial plan From d9b6ec7e8202dbf6a2b4188d647b04ea9fa4ce1c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 15 Sep 2026 20:45:49 +0000 Subject: [PATCH 2/2] Isolate fragment directive stacks during async resolution Co-authored-by: wravery <6502881+wravery@users.noreply.github.com> --- src/GraphQLService.cpp | 9 ++++++--- test/CoroutineTests.cpp | 13 +++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/GraphQLService.cpp b/src/GraphQLService.cpp index d3cd2095..a01daba5 100644 --- a/src/GraphQLService.cpp +++ b/src/GraphQLService.cpp @@ -934,9 +934,12 @@ SelectionVisitor::SelectionVisitor(const SelectionSetParams& selectionSetParams, , _variables(variables) , _typeNames(typeNames) , _resolvers(resolvers) - , _fragmentDefinitionDirectives { selectionSetParams.fragmentDefinitionDirectives } - , _fragmentSpreadDirectives { selectionSetParams.fragmentSpreadDirectives } - , _inlineFragmentDirectives { selectionSetParams.inlineFragmentDirectives } + , _fragmentDefinitionDirectives { std::make_shared( + *selectionSetParams.fragmentDefinitionDirectives) } + , _fragmentSpreadDirectives { std::make_shared( + *selectionSetParams.fragmentSpreadDirectives) } + , _inlineFragmentDirectives { std::make_shared( + *selectionSetParams.inlineFragmentDirectives) } { static const Directives s_emptyFragmentDefinitionDirectives; diff --git a/test/CoroutineTests.cpp b/test/CoroutineTests.cpp index 5cf074f8..8ba5758c 100644 --- a/test/CoroutineTests.cpp +++ b/test/CoroutineTests.cpp @@ -287,6 +287,9 @@ TEST_F(CoroutineCase, QueryEverythingThreaded) auto query = R"( query Everything { appointments { + pageInfo { + ...PageInfoFields + } edges { node { id @@ -298,6 +301,9 @@ TEST_F(CoroutineCase, QueryEverythingThreaded) } } tasks { + pageInfo { + ...PageInfoFields + } edges { node { id @@ -308,6 +314,9 @@ TEST_F(CoroutineCase, QueryEverythingThreaded) } } unreadCounts { + pageInfo { + ...PageInfoFields + } edges { node { id @@ -317,6 +326,10 @@ TEST_F(CoroutineCase, QueryEverythingThreaded) } } } + } + fragment PageInfoFields on PageInfo { + hasNextPage + hasPreviousPage })"_graphql; response::Value variables(response::Type::Map); auto state = std::make_shared(3);