Skip to content

Commit fb8fd75

Browse files
authored
Merge pull request #11 from n9te9/improve/apply
Improve/apply
2 parents 0ccc94e + 2a8b32f commit fb8fd75

File tree

6 files changed

+595
-1545
lines changed

6 files changed

+595
-1545
lines changed

executor/planner.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import (
55
)
66

77
type Node struct {
8-
Name []byte
8+
Name string
99
Directives []*query.Directive
1010
Arguments []*query.Argument
1111
Type string
@@ -55,7 +55,7 @@ func PlanExecution(selections []query.Selection, fragmentDefinitions query.Fragm
5555
switch s := sel.(type) {
5656
case *query.Field:
5757
node := &Node{
58-
Name: s.Name,
58+
Name: string(s.Name),
5959
Directives: s.Directives,
6060
Children: make([]*Node, 0, len(s.Selections)),
6161
Arguments: s.Arguments,
@@ -76,7 +76,7 @@ func digExecution(selectSet query.Selection, fragmentDefinitions query.FragmentD
7676
switch s := selectSet.(type) {
7777
case *query.Field:
7878
node := &Node{
79-
Name: s.Name,
79+
Name: string(s.Name),
8080
Directives: s.Directives,
8181
Arguments: s.Arguments,
8282
Children: make([]*Node, 0, len(s.Selections)),

executor/planner_test.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ func TestPlanExecution(t *testing.T) {
2828
},
2929
resultTree: []*executor.Node{
3030
{
31-
Name: []byte("field1"),
31+
Name: "field1",
3232
Children: []*executor.Node{
3333
{
34-
Name: []byte("childField1"),
34+
Name: "childField1",
3535
Children: []*executor.Node{},
3636
},
3737
},
@@ -62,16 +62,16 @@ func TestPlanExecution(t *testing.T) {
6262
},
6363
resultTree: []*executor.Node{
6464
{
65-
Name: []byte("level1"),
65+
Name: "level1",
6666
Children: []*executor.Node{
6767
{
68-
Name: []byte("level2"),
68+
Name: "level2",
6969
Children: []*executor.Node{
7070
{
71-
Name: []byte("level3"),
71+
Name: "level3",
7272
Children: []*executor.Node{
7373
{
74-
Name: []byte("leafField"),
74+
Name: "leafField",
7575
Children: []*executor.Node{},
7676
},
7777
},
@@ -100,13 +100,13 @@ func TestPlanExecution(t *testing.T) {
100100
},
101101
resultTree: []*executor.Node{
102102
{
103-
Name: []byte("field"),
103+
Name: "field",
104104
Children: []*executor.Node{
105105
{
106106
Type: "TypeName",
107107
Children: []*executor.Node{
108108
{
109-
Name: []byte("subfield"),
109+
Name: "subfield",
110110
Children: []*executor.Node{},
111111
},
112112
},
@@ -143,7 +143,7 @@ func TestPlanExecution(t *testing.T) {
143143
},
144144
resultTree: []*executor.Node{
145145
{
146-
Name: []byte("field"),
146+
Name: "field",
147147
Children: []*executor.Node{
148148
{
149149
Type: "TypeName1",
@@ -155,7 +155,7 @@ func TestPlanExecution(t *testing.T) {
155155
Type: "TypeName3",
156156
Children: []*executor.Node{
157157
{
158-
Name: []byte("subfield"),
158+
Name: "subfield",
159159
Children: []*executor.Node{},
160160
},
161161
},

go.sum

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
github.com/99designs/gqlgen v0.17.73 h1:A3Ki+rHWqKbAOlg5fxiZBnz6OjW3nwupDHEG15gEsrg=
22
github.com/99designs/gqlgen v0.17.73/go.mod h1:2RyGWjy2k7W9jxrs8MOQthXGkD3L3oGr0jXW3Pu8lGg=
3+
github.com/PuerkitoBio/goquery v1.10.3 h1:pFYcNSqHxBD06Fpj/KsbStFRsgRATgnf3LeXiUkhzPo=
4+
github.com/PuerkitoBio/goquery v1.10.3/go.mod h1:tMUX0zDMHXYlAQk6p35XxQMqMweEKB7iK7iLNd4RH4Y=
35
github.com/agnivade/levenshtein v1.2.1 h1:EHBY3UOn1gwdy/VbFwgo4cxecRznFk7fKWN1KOX7eoM=
46
github.com/agnivade/levenshtein v1.2.1/go.mod h1:QVVI16kDrtSuwcpd0p1+xMC6Z/VfhtCyDIjcwga4/DU=
57
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ=
68
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
9+
github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kktS1LM=
10+
github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA=
711
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0 h1:jfIu9sQUG6Ig+0+Ap1h4unLjW6YQJpKZVmUzxsD4E/Q=
812
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE=
913
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
@@ -40,6 +44,8 @@ github.com/vektah/gqlparser/v2 v2.5.26 h1:REqqFkO8+SOEgZHR/eHScjjVjGS8Nk3RMO/jui
4044
github.com/vektah/gqlparser/v2 v2.5.26/go.mod h1:D1/VCZtV3LPnQrcPBeR/q5jkSQIPti0uYCP/RI0gIeo=
4145
golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU=
4246
golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
47+
golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY=
48+
golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E=
4349
golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610=
4450
golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
4551
golang.org/x/tools v0.32.0 h1:Q7N1vhpkQv7ybVzLFtTjvQya2ewbwNDZzUgfXGqtMWU=

internal/generator/introspection.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,31 @@ func generateIntrospectionModelAST(types []*schema.TypeDefinition) []ast.Decl {
4646
return decls
4747
}
4848

49+
func generateModelFieldForResponse(field schema.FieldDefinitions) *ast.FieldList {
50+
fields := make([]*ast.Field, 0, len(field))
51+
52+
for _, f := range field {
53+
fieldTypeExpr := generateExprForResponse(f.Type)
54+
55+
fields = append(fields, &ast.Field{
56+
Names: []*ast.Ident{
57+
{
58+
Name: toUpperCase(string(f.Name)),
59+
},
60+
},
61+
Type: fieldTypeExpr,
62+
Tag: &ast.BasicLit{
63+
Kind: token.STRING,
64+
Value: fmt.Sprintf("`json:\"%s,omitempty\"`", string(f.Name)),
65+
},
66+
})
67+
}
68+
69+
return &ast.FieldList{
70+
List: fields,
71+
}
72+
}
73+
4974
func generateIntrospectionTypeResponseDataModelAST() ast.Decl {
5075
return &ast.GenDecl{
5176
Tok: token.TYPE,

internal/generator/resolver.go

Lines changed: 0 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -245,77 +245,6 @@ func generateTypeExprFromFieldTypeForReturn(typePrefix string, fieldType *schema
245245
return baseTypeExpr
246246
}
247247

248-
func generateApplyQueryResponseFuncDecls(operationDefinition *schema.OperationDefinition, indexes *schema.Indexes, nestCount int, typePrefix string) []ast.Decl {
249-
ret := make([]ast.Decl, 0)
250-
for _, field := range operationDefinition.Fields {
251-
_, isScalar := indexes.ScalarIndex[string(field.Type.GetRootType().Name)]
252-
if field.Type.GetRootType().IsPrimitive() || isScalar {
253-
continue
254-
}
255-
256-
ret = append(ret, generateApplyQueryResponseFuncDeclFromField(field, indexes, typePrefix, string(field.Name), true))
257-
ret = append(ret, generateApplyNestedFieldQueryResponseFuncDecls(field.Type, indexes, typePrefix, string(field.Name))...)
258-
}
259-
260-
return ret
261-
}
262-
263-
func getNestCount(fieldType *schema.FieldType, nestcount int) int {
264-
if fieldType.IsList {
265-
return getNestCount(fieldType.ListType, nestcount+1)
266-
}
267-
268-
return nestcount
269-
}
270-
271-
func generateApplyNestedFieldQueryResponseFuncDecls(fieldType *schema.FieldType, indexes *schema.Indexes, typePrefix, operationPrefix string) []ast.Decl {
272-
ret := make([]ast.Decl, 0)
273-
274-
rootType := fieldType.GetRootType()
275-
typeDefinition := indexes.TypeIndex[string(rootType.Name)]
276-
if typeDefinition != nil {
277-
ret = append(ret, generateApplyNestedFieldQueryResponseFuncDeclsFromTypeDefinition(typeDefinition, indexes, typePrefix, operationPrefix)...)
278-
}
279-
280-
if unionDefinitinon := indexes.UnionIndex[string(rootType.Name)]; unionDefinitinon != nil {
281-
for _, unionType := range unionDefinitinon.Types {
282-
typeDefinition, ok := indexes.TypeIndex[string(unionType)]
283-
if !ok {
284-
continue
285-
}
286-
287-
ret = append(ret, generateApplyNestedFieldQueryResponseFuncDeclsFromTypeDefinition(typeDefinition, indexes, typePrefix, operationPrefix)...)
288-
}
289-
}
290-
291-
interfaceDefinition := indexes.InterfaceIndex[string(rootType.Name)]
292-
if interfaceDefinition != nil {
293-
interfaceImplementedTypes := indexes.GetImplementedType(interfaceDefinition)
294-
for _, implementedType := range interfaceImplementedTypes {
295-
ret = append(ret, generateApplyNestedFieldQueryResponseFuncDeclsFromTypeDefinition(implementedType, indexes, typePrefix, operationPrefix)...)
296-
}
297-
}
298-
299-
return ret
300-
}
301-
302-
func generateApplyNestedFieldQueryResponseFuncDeclsFromTypeDefinition(typeDefinition *schema.TypeDefinition, indexes *schema.Indexes, typePrefix, operationPrefix string) []ast.Decl {
303-
ret := make([]ast.Decl, 0)
304-
305-
for _, field := range typeDefinition.Fields {
306-
_, isScalar := indexes.ScalarIndex[string(field.Type.Name)]
307-
_, isEnum := indexes.EnumIndex[string(field.Type.Name)]
308-
309-
if field.Type.GetRootType().IsPrimitive() || isScalar || isEnum {
310-
continue
311-
}
312-
313-
ret = append(ret, generateApplyQueryResponseFuncDeclFromField(field, indexes, typePrefix, operationPrefix, false))
314-
}
315-
316-
return ret
317-
}
318-
319248
func generateQueryExecutor(query *schema.OperationDefinition) *ast.FuncDecl {
320249
return &ast.FuncDecl{
321250
Name: ast.NewIdent("queryExecutor"),

0 commit comments

Comments
 (0)