-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Closed
Description
Describe the bug
Error paths and locations are duplicated with duplicate queries that error lazily.
I provided a simple script to reproduce this issue. It uses a simple single field schema with a dataloader that always resolves to an error:
require 'graphql'
require 'json'
class ItemLoader < GraphQL::Dataloader::Source
def fetch(keys)
keys.map { |key| GraphQL::ExecutionError.new("Error for #{key}") }
end
end
class QueryType < GraphQL::Schema::Object
field :item, String do
argument :key, String
end
def item(key:)
dataloader.with(ItemLoader).load(key)
end
end
class Schema < GraphQL::Schema
query QueryType
use GraphQL::Dataloader
end
query = <<-GRAPHQL
query {
query0: item(key: "a")
query1: item(key: "a")
}
GRAPHQL
result = Schema.execute(query)
puts JSON.pretty_generate(result.to_h)When running the above, I would expect to see the following:
{
"errors": [
{
"message": "Error for a",
"locations": [
{
"line": 2,
"column": 5
}
],
"path": [
"query0"
]
},
{
"message": "Error for a",
"locations": [
{
"line": 3,
"column": 5
}
],
"path": [
"query1"
]
}
],
"data": {
"query0": null,
"query1": null
}
}but instead, I'm seeing this:
{
"errors": [
{
"message": "Error for a",
"locations": [
{
"line": 2,
"column": 5
}
],
"path": [
"query0"
]
},
{
"message": "Error for a",
"locations": [
{
"line": 2,
"column": 5
}
],
"path": [
"query0"
]
}
],
"data": {
"query0": null,
"query1": null
}
}Versions
graphql version: 2.3.9
GraphQL schema
class ItemLoader < GraphQL::Dataloader::Source
def fetch(keys)
keys.map { |key| GraphQL::ExecutionError.new("Error for #{key}") }
end
end
class QueryType < GraphQL::Schema::Object
field :item, String do
argument :key, String
end
def item(key:)
dataloader.with(ItemLoader).load(key)
end
end
class Schema < GraphQL::Schema
query QueryType
use GraphQL::Dataloader
endGraphQL query
Example GraphQL query and response (if query execution is involved)
query {
query0: item(key: "a")
query1: item(key: "a")
}
{
"errors": [
{
"message": "Error for a",
"locations": [
{
"line": 2,
"column": 5
}
],
"path": [
"query0"
]
},
{
"message": "Error for a",
"locations": [
{
"line": 2,
"column": 5
}
],
"path": [
"query0"
]
}
],
"data": {
"query0": null,
"query1": null
}
}Steps to reproduce
The script I provided at the beginning of this issue is all you need
Expected behavior
I expect error paths and locations for all fields to be unique per field
Actual behavior
I'm seeing error paths and locations for duplicate queries/fields duplicated, instead of being unique
Metadata
Metadata
Assignees
Labels
No labels