diff --git a/query-compiler/query-compiler/src/translate.rs b/query-compiler/query-compiler/src/translate.rs index 99e56b6d0fe..1240cc0542e 100644 --- a/query-compiler/query-compiler/src/translate.rs +++ b/query-compiler/query-compiler/src/translate.rs @@ -72,7 +72,12 @@ impl<'a, 'b> NodeTranslator<'a, 'b> { fn translate_query(&mut self) -> TranslateResult { self.graph.mark_visited(&self.node); - let children = self.process_children()?; + // Don't recurse into children if the current node is already a result node. + let children = if !self.graph.is_result_node(&self.node) { + self.process_children()? + } else { + Vec::new() + }; let mut node = self.graph.pluck_node(&self.node); diff --git a/query-compiler/query-compiler/tests/data/update-one-returning.json b/query-compiler/query-compiler/tests/data/update-one-returning.json new file mode 100644 index 00000000000..8c77b808fe4 --- /dev/null +++ b/query-compiler/query-compiler/tests/data/update-one-returning.json @@ -0,0 +1,13 @@ +{ + "modelName": "User", + "action": "updateOne", + "query": { + "arguments": { + "where": { "email": "user.1737556028164@prisma.io" }, + "data": { "email": "user.2737556028164@prisma.io" } + }, + "selection": { + "email": true + } + } +} diff --git a/query-compiler/query-compiler/tests/snapshots/queries__queries@update-one-returning.json.snap b/query-compiler/query-compiler/tests/snapshots/queries__queries@update-one-returning.json.snap new file mode 100644 index 00000000000..5f481b1cd2c --- /dev/null +++ b/query-compiler/query-compiler/tests/snapshots/queries__queries@update-one-returning.json.snap @@ -0,0 +1,10 @@ +--- +source: query-compiler/query-compiler/tests/queries.rs +expression: pretty +input_file: query-compiler/query-compiler/tests/data/update-one-returning.json +--- +unique (query «UPDATE "public"."User" SET "email" = $1 WHERE + ("public"."User"."email" = $2 AND 1=1) RETURNING + "public"."User"."id", "public"."User"."email"» + params [const(String("user.2737556028164@prisma.io")), + const(String("user.1737556028164@prisma.io"))])