From 79495e21391c825f63e58479a7c5fe9d2cf1c944 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Piaggio?= Date: Mon, 22 Jun 2026 11:34:20 -0300 Subject: [PATCH] fix accumulation of used variables --- modules/core/src/main/scala/compiler.scala | 2 +- .../test/scala/compiler/VariablesSuite.scala | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/modules/core/src/main/scala/compiler.scala b/modules/core/src/main/scala/compiler.scala index 403859ab..3748918d 100644 --- a/modules/core/src/main/scala/compiler.scala +++ b/modules/core/src/main/scala/compiler.scala @@ -424,7 +424,7 @@ class QueryCompiler(parser: QueryParser, schema: Schema, phases: List[Phase]) { else values.next() match { case VariableRef(nme) => - loop(values, Set(nme)) + loop(values, vars + nme) case ObjectValue(fields) => loop(fields.iterator.map(_._2) ++ values, vars) case ListValue(elems) => diff --git a/modules/core/src/test/scala/compiler/VariablesSuite.scala b/modules/core/src/test/scala/compiler/VariablesSuite.scala index a0969441..6ce1231a 100644 --- a/modules/core/src/test/scala/compiler/VariablesSuite.scala +++ b/modules/core/src/test/scala/compiler/VariablesSuite.scala @@ -587,6 +587,29 @@ final class VariablesSuite extends CatsEffectSuite { assertEquals(compiled, Result.success(expected)) } + test("multiple variables used in one input object are all detected as used") { + val query = """ + query doSearch($name: String, $age: Int, $id: ID) { + search(pattern: { name: $name, age: $age, id: $id }) { + name + id + } + } + """ + + val variables = json""" + { + "name": "Foo", + "age": 23, + "id": "123" + } + """ + + val compiled = VariablesMapping.compiler.compile(query, untypedVars = Some(variables)) + + assertEquals(compiled.toProblems.toList, List.empty[Problem]) + } + test("oneOf variables") { val query = """ query oneOfTest($input: OneOfInObj!) {