99designs / 99designs/gqlgen

Error generating resolvers for federated schema with interface fields in @key

未关闭
#3,002 0 条评论 1 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
Go
星标
10.8k
派生
1.3k
平均合并
2 天 36 分钟
30 天内合并 PR
26

描述

### What happened?

Attempting to use a field from an interface in `@key` results in a `SIGSEGV` during code gen.

### What did you expect?

Proper code gen.

### Minimal graphql.schema and models to reproduce

See the simple schema change at https://github.com/carldunham/gqlgen/commit/33795267b52ce0231f742b58d73eac31e437fc8e.

```
extend type Query {
topProducts(first: Int = 5): [Product]
}

interface Producter {
id: String!
}

type Manufacturer implements Producter @key(fields: "id") {
id: String!
name: String!
}

type Product @key(fields: "manufacturer { id } id") @key(fields: "upc") {
id: String!
manufacturer: Producter!
upc: String!
name: String!
price: Int!
}
```

Run `go generate ./...`

See the error:
```
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x2 addr=0x30 pc=0x10090daf0]

goroutine 1 [running]:
github.com/99designs/gqlgen/plugin/federation/fieldset.fieldByName(0x1009d2902?, {0x140001f40f6, 0x2})
/Users/carl.dunham/src/gqlgen/plugin/federation/fieldset/fieldset.go:177 +0x20
github.com/99designs/gqlgen/plugin/federation/fieldset.Field.TypeReference({0x14000132ec0, 0x2, 0x140001f40d1?}, 0x3?, {0x140003bec00, 0xb, 0x14000d796a8?})
/Users/carl.dunham/src/gqlgen/plugin/federation/fieldset/fieldset.go:78 +0x80
github.com/99designs/gqlgen/plugin/federation.(*federation).GenerateCode(0x1400007da70, 0x140000ee0b0)
/Users/carl.dunham/src/gqlgen/plugin/federation/federation.go:308 +0x1048
github.com/99designs/gqlgen/api.Generate(0x14000151448, {0x0, 0x0, 0x0?})
/Users/carl.dunham/src/gqlgen/api/generate.go:111 +0x9d4
main.main()
/Users/carl.dunham/src/gqlgen/testdata/gqlgen.go:43 +0x2d8
exit status 2
federation/products/server.go:1: running "go": exit status 1
```

### versions
- `go run github.com/99designs/gqlgen version`? `v0.17.45-dev`
- `go version`? `go version go1.22.1 darwin/arm64`

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。