Repository: jensneuse/graphql-go-tools
Pull request #348 (2022-03-21 11:48:26)

disable resolve field positions for cleaner tests


Patch:
diff --git a/pkg/engine/datasource/graphql_datasource/graphql_datasource.go b/pkg/engine/datasource/graphql_datasource/graphql_datasource.go
index 9d5e7b4c..a760a90a 100644
--- a/pkg/engine/datasource/graphql_datasource/graphql_datasource.go
+++ b/pkg/engine/datasource/graphql_datasource/graphql_datasource.go
@@ -401,6 +401,7 @@ func (p *Planner) LeaveInlineFragment(_ int) {
 }
 
 func (p *Planner) EnterField(ref int) {
+
 	fieldName := p.visitor.Operation.FieldNameString(ref)
 
 	// store root field name and ref
diff --git a/pkg/engine/plan/plan.go b/pkg/engine/plan/plan.go
index 4c9004f5..0d38da82 100644
--- a/pkg/engine/plan/plan.go
+++ b/pkg/engine/plan/plan.go
@@ -32,6 +32,10 @@ type Configuration struct {
 	DataSources                []DataSourceConfiguration
 	Fields                     FieldConfigurations
 	Types                      TypeConfigurations
+	// DisableResolveFieldPositions should be set to true for testing purposes
+	// This setting removes position information from all fields
+	// In production, this should be set to false so that error messages are easier to understand
+	DisableResolveFieldPositions bool
 }
 
 type DirectiveConfigurations []DirectiveConfiguration
@@ -238,6 +242,7 @@ func NewPlanner(ctx context.Context, config Configuration) *Planner {
 	planningVisitor := &Visitor{
 		Walker:       &planningWalker,
 		fieldConfigs: map[int]*FieldConfiguration{},
+		disableResolveFieldPositions: config.DisableResolveFieldPositions,
 	}
 
 	p := &Planner{
@@ -356,23 +361,24 @@ func (p *Planner) hasRequiredFields(config *Configuration) bool {
 }
 
 type Visitor struct {
-	Operation, Definition *ast.Document
-	Walker                *astvisitor.Walker
-	Importer              astimport.Importer
-	Config                Configuration
-	plan                  Plan
-	OperationName         string
-	operationDefinition   int
-	objects               []*resolve.Object
-	currentFields         []objectFields
-	currentField          *resolve.Field
-	planners              []plannerConfiguration
-	fetchConfigurations   []objectFetchConfiguration
-	fieldBuffers          map[int]int
-	skipFieldPaths        []string
-	fieldConfigs          map[int]*FieldConfiguration
-	exportedVariables     map[string]struct{}
-	skipIncludeFields     map[int]skipIncludeField
+	Operation, Definition        *ast.Document
+	Walker                       *astvisitor.Walker
+	Importer                     astimport.Importer
+	Config                       Configuration
+	plan                         Plan
+	OperationName                string
+	operationDefinition          int
+	objects                      []*resolve.Object
+	currentFields                []objectFields
+	currentField                 *resolve.Field
+	planners                     []plannerConfiguration
+	fetchConfigurations          []objectFetchConfiguration
+	fieldBuffers                 map[int]int
+	skipFieldPaths               []string
+	fieldConfigs                 map[int]*FieldConfiguration
+	exportedVariables            map[string]struct{}
+	skipIncludeFields            map[int]skipIncludeField
+	disableResolveFieldPositions bool
 }
 
 type skipIncludeField struct {
@@ -518,10 +524,7 @@ func (v *Visitor) EnterField(ref int) {
 				Path:     []string{"__typename"},
 			},
 			OnTypeName: v.resolveOnTypeName(),
-			Position: resolve.Position{
-				Line:   v.Operation.Fields[ref].Position.LineStart,
-				Column: v.Operation.Fields[ref].Position.CharStart,
-			},
+			Position: v.resolveFieldPosition(ref),
 			SkipDirectiveDefined:    skip,
 			SkipVariableName:        skipVariableName,
 			IncludeDirectiveDefined: include,
@@ -567,10 +570,7 @@ func (v *Visitor) EnterField(ref int) {
 		HasBuffer:  hasBuffer,
 		BufferID:   bufferID,
 		OnTypeName: v.resolveOnTypeName(),
-		Position: resolve.Position{
-			Line:   v.Operation.Fields[ref].Position.LineStart,
-			Column: v.Operation.Fields[ref].Position.CharStart,
-		},
+		Position: v.resolveFieldPosition(ref),
 		SkipDirectiveDefined:    skip,
 		SkipVariableName:        skipVariableName,
 		IncludeDirectiveDefined: include,
@@ -588,6 +588,16 @@ func (v *Visitor) EnterField(ref int) {
 	v.fieldConfigs[ref] = fieldConfig
 }
 
+func (v *Visitor) resolveFieldPosition(ref int) resolve.Position {
+	if v.disableResolveFieldPositions {
+		return resolve.Position{}
+	}
+	return resolve.Position{
+		Line:   v.Operation.Fields[ref].Position.LineStart,
+		Column: v.Operation.Fields[ref].Position.CharStart,
+	}
+}
+
 func (v *Visitor) resolveSkipForField(ref int) (bool, string) {
 	skipInclude, ok := v.skipIncludeFields[ref]
 	if ok {
@@ -654,7 +664,7 @@ func (v *Visitor) LeaveField(ref int) {
 	}
 	fieldDefinitionTypeNode := v.Definition.FieldDefinitionTypeNode(fieldDefinition)
 	switch fieldDefinitionTypeNode.Kind {
-	case ast.NodeKindObjectTypeDefinition, ast.NodeKindInterfaceTypeDefinition:
+	case ast.NodeKindObjectTypeDefinition, ast.NodeKindInterfaceTypeDefinition, ast.NodeKindUnionTypeDefinition:
 		v.objects = v.objects[:len(v.objects)-1]
 	}
 }


Test patch:
diff --git a/pkg/engine/datasource/graphql_datasource/graphql_datasource_test.go b/pkg/engine/datasource/graphql_datasource/graphql_datasource_test.go
index 764031ed..4d98d056 100644
--- a/pkg/engine/datasource/graphql_datasource/graphql_datasource_test.go
+++ b/pkg/engine/datasource/graphql_datasource/graphql_datasource_test.go
@@ -63,10 +63,6 @@ func TestGraphQLDataSource(t *testing.T) {
 						HasBuffer: true,
 						BufferID:  0,
 						Name:      []byte("droid"),
-						Position: resolve.Position{
-							Line:   3,
-							Column: 4,
-						},
 						Value: &resolve.Object{
 							Path:     []string{"droid"},
 							Nullable: true,
@@ -76,27 +72,15 @@ func TestGraphQLDataSource(t *testing.T) {
 									Value: &resolve.String{
 										Path: []string{"name"},
 									},
-									Position: resolve.Position{
-										Line:   4,
-										Column: 5,
-									},
 								},
 								{
 									Name: []byte("aliased"),
 									Value: &resolve.String{
 										Path: []string{"aliased"},
 									},
-									Position: resolve.Position{
-										Line:   5,
-										Column: 5,
-									},
 								},
 								{
 									Name: []byte("friends"),
-									Position: resolve.Position{
-										Line:   6,
-										Column: 5,
-									},
 									Value: &resolve.Array{
 										Nullable: true,
 										Path:     []string{"friends"},
@@ -108,10 +92,6 @@ func TestGraphQLDataSource(t *testing.T) {
 													Value: &resolve.String{
 														Path: []string{"name"},
 													},
-													Position: resolve.Position{
-														Line:   7,
-														Column: 6,
-													},
 												},
 											},
 										},
@@ -122,10 +102,6 @@ func TestGraphQLDataSource(t *testing.T) {
 									Value: &resolve.String{
 										Path: []string{"primaryFunction"},
 									},
-									Position: resolve.Position{
-										Line:   9,
-										Column: 5,
-									},
 								},
 							},
 						},
@@ -134,10 +110,6 @@ func TestGraphQLDataSource(t *testing.T) {
 						HasBuffer: true,
 						BufferID:  0,
 						Name:      []byte("hero"),
-						Position: resolve.Position{
-							Line:   11,
-							Column: 4,
-						},
 						Value: &resolve.Object{
 							Path:     []string{"hero"},
 							Nullable: true,
@@ -147,10 +119,6 @@ func TestGraphQLDataSource(t *testing.T) {
 									Value: &resolve.String{
 										Path: []string{"name"},
 									},
-									Position: resolve.Position{
-										Line:   12,
-										Column: 5,
-									},
 								},
 							},
 						},
@@ -159,10 +127,6 @@ func TestGraphQLDataSource(t *testing.T) {
 						HasBuffer: true,
 						BufferID:  0,
 						Name:      []byte("stringList"),
-						Position: resolve.Position{
-							Line:   14,
-							Column: 4,
-						},
 						Value: &resolve.Array{
 							Nullable: true,
 							Item: &resolve.String{
@@ -174,10 +138,6 @@ func TestGraphQLDataSource(t *testing.T) {
 						HasBuffer: true,
 						BufferID:  0,
 						Name:      []byte("nestedStringList"),
-						Position: resolve.Position{
-							Line:   15,
-							Column: 4,
-						},
 						Value: &resolve.Array{
 							Nullable: true,
 							Path:     []string{"nestedStringList"},
@@ -246,6 +206,7 @@ func TestGraphQLDataSource(t *testing.T) {
 				Path:      []string{"nestedStringList"},
 			},
 		},
+		DisableResolveFieldPositions: true,
 	}))
 	t.Run("selections on interface type", RunTest(interfaceSelectionSchema, `
 		query MyQuery {
@@ -269,10 +230,6 @@ func TestGraphQLDataSource(t *testing.T) {
 						HasBuffer: true,
 						BufferID:  0,
 						Name:      []byte("user"),
-						Position: resolve.Position{
-							Line:   3,
-							Column: 4,
-						},
 						Value: &resolve.Object{
 							Path:     []string{"user"},
 							Nullable: true,
@@ -282,20 +239,12 @@ func TestGraphQLDataSource(t *testing.T) {
 									Value: &resolve.String{
 										Path: []string{"id"},
 									},
-									Position: resolve.Position{
-										Line:   4,
-										Column: 5,
-									},
 								},
 								{
 									Name: []byte("displayName"),
 									Value: &resolve.String{
 										Path: []string{"displayName"},
 									},
-									Position: resolve.Position{
-										Line:   5,
-										Column: 5,
-									},
 								},
 							},
 						},
@@ -331,6 +280,7 @@ func TestGraphQLDataSource(t *testing.T) {
 			},
 		},
 		Fields: []plan.FieldConfiguration{},
+		DisableResolveFieldPositions: true,
 	}))
 	t.Run("skip directive with variable", RunTest(interfaceSelectionSchema, `
 		query MyQuery ($skip: Boolean!) {
@@ -360,10 +310,6 @@ func TestGraphQLDataSource(t *testing.T) {
 						HasBuffer: true,
 						BufferID:  0,
 						Name:      []byte("user"),
-						Position: resolve.Position{
-							Line:   3,
-							Column: 4,
-						},
 						Value: &resolve.Object{
 							Path:     []string{"user"},
 							Nullable: true,
@@ -373,20 +319,12 @@ func TestGraphQLDataSource(t *testing.T) {
 									Value: &resolve.String{
 										Path: []string{"id"},
 									},
-									Position: resolve.Position{
-										Line:   4,
-										Column: 5,
-									},
 								},
 								{
 									Name: []byte("displayName"),
 									Value: &resolve.String{
 										Path: []string{"displayName"},
 									},
-									Position: resolve.Position{
-										Line:   5,
-										Column: 5,
-									},
 									SkipDirectiveDefined: true,
 									SkipVariableName:     "skip",
 								},
@@ -424,6 +362,7 @@ func TestGraphQLDataSource(t *testing.T) {
 			},
 		},
 		Fields: []plan.FieldConfiguration{},
+		DisableResolveFieldPositions: true,
 	}))
 	t.Run("skip directive on __typename", RunTest(interfaceSelectionSchema, `
 		query MyQuery ($skip: Boolean!) {
@@ -449,10 +388,6 @@ func TestGraphQLDataSource(t *testing.T) {
 						HasBuffer: true,
 						BufferID:  0,
 						Name:      []byte("user"),
-						Position: resolve.Position{
-							Line:   3,
-							Column: 4,
-						},
 						Value: &resolve.Object{
 							Path:     []string{"user"},
 							Nullable: true,
@@ -462,30 +397,18 @@ func TestGraphQLDataSource(t *testing.T) {
 									Value: &resolve.String{
 										Path: []string{"id"},
 									},
-									Position: resolve.Position{
-										Line:   4,
-										Column: 5,
-									},
 								},
 								{
 									Name: []byte("displayName"),
 									Value: &resolve.String{
 										Path: []string{"displayName"},
 									},
-									Position: resolve.Position{
-										Line:   5,
-										Column: 5,
-									},
 								},
 								{
 									Name: []byte("__typename"),
 									Value: &resolve.String{
 										Path: []string{"__typename"},
 									},
-									Position: resolve.Position{
-										Line:   6,
-										Column: 5,
-									},
 									SkipDirectiveDefined: true,
 									SkipVariableName:     "skip",
 								},
@@ -494,10 +417,6 @@ func TestGraphQLDataSource(t *testing.T) {
 									Value: &resolve.String{
 										Path: []string{"__typename"},
 									},
-									Position: resolve.Position{
-										Line:   7,
-										Column: 5,
-									},
 									IncludeDirectiveDefined: true,
 									IncludeVariableName:     "skip",
 								},
@@ -535,6 +454,7 @@ func TestGraphQLDataSource(t *testing.T) {
 			},
 		},
 		Fields: []plan.FieldConfiguration{},
+		DisableResolveFieldPositions: true,
 	}))
 	t.Run("skip directive on an inline fragment", RunTest(interfaceSelectionSchema, `
 		query MyQuery ($skip: Boolean!) {
@@ -566,10 +486,6 @@ func TestGraphQLDataSource(t *testing.T) {
 						HasBuffer: true,
 						BufferID:  0,
 						Name:      []byte("user"),
-						Position: resolve.Position{
-							Line:   3,
-							Column: 4,
-						},
 						Value: &resolve.Object{
 							Path:     []string{"user"},
 							Nullable: true,
@@ -579,10 +495,6 @@ func TestGraphQLDataSource(t *testing.T) {
 									Value: &resolve.String{
 										Path: []string{"id"},
 									},
-									Position: resolve.Position{
-										Line:   5,
-										Column: 6,
-									},
 									SkipDirectiveDefined: true,
 									SkipVariableName:     "skip",
 								},
@@ -591,10 +503,6 @@ func TestGraphQLDataSource(t *testing.T) {
 									Value: &resolve.String{
 										Path: []string{"displayName"},
 									},
-									Position: resolve.Position{
-										Line:   6,
-										Column: 6,
-									},
 									SkipDirectiveDefined: true,
 									SkipVariableName:     "skip",
 								},
@@ -632,6 +540,7 @@ func TestGraphQLDataSource(t *testing.T) {
 			},
 		},
 		Fields: []plan.FieldConfiguration{},
+		DisableResolveFieldPositions: true,
 	}))
 	t.Run("include directive on an inline fragment", RunTest(interfaceSelectionSchema, `
 		query MyQuery ($include: Boolean!) {
@@ -663,10 +572,6 @@ func TestGraphQLDataSource(t *testing.T) {
 						HasBuffer: true,
 						BufferID:  0,
 						Name:      []byte("user"),
-						Position: resolve.Position{
-							Line:   3,
-							Column: 4,
-						},
 						Value: &resolve.Object{
 							Path:     []string{"user"},
 							Nullable: true,
@@ -676,10 +581,6 @@ func TestGraphQLDataSource(t *testing.T) {
 									Value: &resolve.String{
 										Path: []string{"id"},
 									},
-									Position: resolve.Position{
-										Line:   5,
-										Column: 6,
-									},
 									IncludeDirectiveDefined: true,
 									IncludeVariableName:     "include",
 								},
@@ -688,10 +589,6 @@ func TestGraphQLDataSource(t *testing.T) {
 									Value: &resolve.String{
 										Path: []string{"displayName"},
 									},
-									Position: resolve.Position{
-										Line:   6,
-										Column: 6,
-									},
 									IncludeDirectiveDefined: true,
 									IncludeVariableName:     "include",
 								},
@@ -729,6 +626,7 @@ func TestGraphQLDataSource(t *testing.T) {
 			},
 		},
 		Fields: []plan.FieldConfiguration{},
+		DisableResolveFieldPositions: true,
 	}))
 	t.Run("skip directive with inline value true", RunTest(interfaceSelectionSchema, `
 		query MyQuery {
@@ -752,10 +650,6 @@ func TestGraphQLDataSource(t *testing.T) {
 						HasBuffer: true,
 						BufferID:  0,
 						Name:      []byte("user"),
-						Position: resolve.Position{
-							Line:   3,
-							Column: 4,
-						},
 						Value: &resolve.Object{
 							Path:     []string{"user"},
 							Nullable: true,
@@ -765,10 +659,6 @@ func TestGraphQLDataSource(t *testing.T) {
 									Value: &resolve.String{
 										Path: []string{"id"},
 									},
-									Position: resolve.Position{
-										Line:   4,
-										Column: 5,
-									},
 								},
 							},
 						},
@@ -804,6 +694,7 @@ func TestGraphQLDataSource(t *testing.T) {
 			},
 		},
 		Fields: []plan.FieldConfiguration{},
+		DisableResolveFieldPositions: true,
 	}))
 	t.Run("skip directive with inline value false", RunTest(interfaceSelectionSchema, `
 		query MyQuery {
@@ -827,10 +718,6 @@ func TestGraphQLDataSource(t *testing.T) {
 						HasBuffer: true,
 						BufferID:  0,
 						Name:      []byte("user"),
-						Position: resolve.Position{
-							Line:   3,
-							Column: 4,
-						},
 						Value: &resolve.Object{
 							Path:     []string{"user"},
 							Nullable: true,
@@ -840,20 +727,12 @@ func TestGraphQLDataSource(t *testing.T) {
 									Value: &resolve.String{
 										Path: []string{"id"},
 									},
-									Position: resolve.Position{
-										Line:   4,
-										Column: 5,
-									},
 								},
 								{
 									Name: []byte("displayName"),
 									Value: &resolve.String{
 										Path: []string{"displayName"},
 									},
-									Position: resolve.Position{
-										Line:   5,
-										Column: 5,
-									},
 								},
 							},
 						},
@@ -889,6 +768,7 @@ func TestGraphQLDataSource(t *testing.T) {
 			},
 		},
 		Fields: []plan.FieldConfiguration{},
+		DisableResolveFieldPositions: true,
 	}))
 	t.Run("include directive with variable", RunTest(interfaceSelectionSchema, `
 		query MyQuery ($include: Boolean!) {
@@ -918,10 +798,6 @@ func TestGraphQLDataSource(t *testing.T) {
 						HasBuffer: true,
 						BufferID:  0,
 						Name:      []byte("user"),
-						Position: resolve.Position{
-							Line:   3,
-							Column: 4,
-						},
 						Value: &resolve.Object{
 							Path:     []string{"user"},
 							Nullable: true,
@@ -931,20 +807,12 @@ func TestGraphQLDataSource(t *testing.T) {
 									Value: &resolve.String{
 										Path: []string{"id"},
 									},
-									Position: resolve.Position{
-										Line:   4,
-										Column: 5,
-									},
 								},
 								{
 									Name: []byte("displayName"),
 									Value: &resolve.String{
 										Path: []string{"displayName"},
 									},
-									Position: resolve.Position{
-										Line:   5,
-										Column: 5,
-									},
 									IncludeDirectiveDefined: true,
 									IncludeVariableName:     "include",
 								},
@@ -982,6 +850,7 @@ func TestGraphQLDataSource(t *testing.T) {
 			},
 		},
 		Fields: []plan.FieldConfiguration{},
+		DisableResolveFieldPositions: true,
 	}))
 	t.Run("include directive with inline value true", RunTest(interfaceSelectionSchema, `
 		query MyQuery {
@@ -1005,10 +874,6 @@ func TestGraphQLDataSource(t *testing.T) {
 						HasBuffer: true,
 						BufferID:  0,
 						Name:      []byte("user"),
-						Position: resolve.Position{
-							Line:   3,
-							Column: 4,
-						},
 						Value: &resolve.Object{
 							Path:     []string{"user"},
 							Nullable: true,
@@ -1018,20 +883,12 @@ func TestGraphQLDataSource(t *testing.T) {
 									Value: &resolve.String{
 										Path: []string{"id"},
 									},
-									Position: resolve.Position{
-										Line:   4,
-										Column: 5,
-									},
 								},
 								{
 									Name: []byte("displayName"),
 									Value: &resolve.String{
 										Path: []string{"displayName"},
 									},
-									Position: resolve.Position{
-										Line:   5,
-										Column: 5,
-									},
 								},
 							},
 						},
@@ -1067,6 +924,7 @@ func TestGraphQLDataSource(t *testing.T) {
 			},
 		},
 		Fields: []plan.FieldConfiguration{},
+		DisableResolveFieldPositions: true,
 	}))
 	t.Run("include directive with inline value false", RunTest(interfaceSelectionSchema, `
 		query MyQuery {
@@ -1090,10 +948,6 @@ func TestGraphQLDataSource(t *testing.T) {
 						HasBuffer: true,
 						BufferID:  0,
 						Name:      []byte("user"),
-						Position: resolve.Position{
-							Line:   3,
-							Column: 4,
-						},
 						Value: &resolve.Object{
 							Path:     []string{"user"},
 							Nullable: true,
@@ -1103,10 +957,6 @@ func TestGraphQLDataSource(t *testing.T) {
 									Value: &resolve.String{
 										Path: []string{"id"},
 									},
-									Position: resolve.Position{
-										Line:   4,
-										Column: 5,
-									},
 								},
 							},
 						},
@@ -1142,6 +992,7 @@ func TestGraphQLDataSource(t *testing.T) {
 			},
 		},
 		Fields: []plan.FieldConfiguration{},
+		DisableResolveFieldPositions: true,
 	}))
 	t.Run("selections on interface type with object type interface", RunTest(interfaceSelectionSchema, `
 		query MyQuery {
@@ -1168,10 +1019,6 @@ func TestGraphQLDataSource(t *testing.T) {
 						HasBuffer: true,
 						BufferID:  0,
 						Name:      []byte("user"),
-						Position: resolve.Position{
-							Line:   3,
-							Column: 4,
-						},
 						Value: &resolve.Object{
 							Path:     []string{"user"},
 							Nullable: true,
@@ -1181,30 +1028,18 @@ func TestGraphQLDataSource(t *testing.T) {
 									Value: &resolve.String{
 										Path: []string{"id"},
 									},
-									Position: resolve.Position{
-										Line:   4,
-										Column: 5,
-									},
 								},
 								{
 									Name: []byte("displayName"),
 									Value: &resolve.String{
 										Path: []string{"displayName"},
 									},
-									Position: resolve.Position{
-										Line:   5,
-										Column: 5,
-									},
 								},
 								{
 									Name: []byte("hasVerifiedEmail"),
 									Value: &resolve.Boolean{
 										Path: []string{"hasVerifiedEmail"},
 									},
-									Position: resolve.Position{
-										Line:   7,
-										Column: 6,
-									},
 									OnTypeName: []byte("RegisteredUser"),
 								},
 							},
@@ -1241,6 +1076,7 @@ func TestGraphQLDataSource(t *testing.T) {
 			},
 		},
 		Fields: []plan.FieldConfiguration{},
+		DisableResolveFieldPositions: true,
 	}))
 	t.Run("variable at top level and recursively", RunTest(variableSchema, `
 		query MyQuery($name: String!){
@@ -1269,10 +1105,6 @@ func TestGraphQLDataSource(t *testing.T) {
 						HasBuffer: true,
 						BufferID:  0,
 						Name:      []byte("user"),
-						Position: resolve.Position{
-							Line:   3,
-							Column: 13,
-						},
 						Value: &resolve.Object{
 							Path:     []string{"user"},
 							Nullable: true,
@@ -1282,10 +1114,6 @@ func TestGraphQLDataSource(t *testing.T) {
 									Value: &resolve.String{
 										Path: []string{"normalized"},
 									},
-									Position: resolve.Position{
-										Line:   4,
-										Column: 17,
-									},
 								},
 							},
 						},
@@ -1339,6 +1167,7 @@ func TestGraphQLDataSource(t *testing.T) {
 				},
 			},
 		},
+		DisableResolveFieldPositions: true,
 	}))
 	t.Run("exported field", RunTest(starWarsSchemaWithExportDirective, `
 		query MyQuery($id: ID! $heroName: String!){
@@ -1389,10 +1218,6 @@ func TestGraphQLDataSource(t *testing.T) {
 						HasBuffer: true,
 						BufferID:  0,
 						Name:      []byte("droid"),
-						Position: resolve.Position{
-							Line:   3,
-							Column: 4,
-						},
 						Value: &resolve.Object{
 							Path:     []string{"droid"},
 							Nullable: true,
@@ -1402,27 +1227,15 @@ func TestGraphQLDataSource(t *testing.T) {
 									Value: &resolve.String{
 										Path: []string{"name"},
 									},
-									Position: resolve.Position{
-										Line:   4,
-										Column: 5,
-									},
 								},
 								{
 									Name: []byte("aliased"),
 									Value: &resolve.String{
 										Path: []string{"aliased"},
 									},
-									Position: resolve.Position{
-										Line:   5,
-										Column: 5,
-									},
 								},
 								{
 									Name: []byte("friends"),
-									Position: resolve.Position{
-										Line:   6,
-										Column: 5,
-									},
 									Value: &resolve.Array{
 										Nullable: true,
 										Path:     []string{"friends"},
@@ -1434,10 +1247,6 @@ func TestGraphQLDataSource(t *testing.T) {
 													Value: &resolve.String{
 														Path: []string{"name"},
 													},
-													Position: resolve.Position{
-														Line:   7,
-														Column: 6,
-													},
 												},
 											},
 										},
@@ -1448,10 +1257,6 @@ func TestGraphQLDataSource(t *testing.T) {
 									Value: &resolve.String{
 										Path: []string{"primaryFunction"},
 									},
-									Position: resolve.Position{
-										Line:   9,
-										Column: 5,
-									},
 								},
 							},
 						},
@@ -1460,10 +1265,6 @@ func TestGraphQLDataSource(t *testing.T) {
 						HasBuffer: true,
 						BufferID:  0,
 						Name:      []byte("hero"),
-						Position: resolve.Position{
-							Line:   11,
-							Column: 4,
-						},
 						Value: &resolve.Object{
 							Path:     []string{"hero"},
 							Nullable: true,
@@ -1477,10 +1278,6 @@ func TestGraphQLDataSource(t *testing.T) {
 											AsString: true,
 										},
 									},
-									Position: resolve.Position{
-										Line:   12,
-										Column: 5,
-									},
 								},
 							},
 						},
@@ -1489,10 +1286,6 @@ func TestGraphQLDataSource(t *testing.T) {
 						HasBuffer: true,
 						BufferID:  0,
 						Name:      []byte("search"),
-						Position: resolve.Position{
-							Line:   14,
-							Column: 4,
-						},
 						Value: &resolve.Object{
 							Nullable: true,
 							Path:     []string{"search"},
@@ -1502,10 +1295,6 @@ func TestGraphQLDataSource(t *testing.T) {
 									Value: &resolve.String{
 										Path: []string{"primaryFunction"},
 									},
-									Position: resolve.Position{
-										Line:   16,
-										Column: 6,
-									},
 									OnTypeName: []byte("Droid"),
 								},
 							},
@@ -1515,10 +1304,6 @@ func TestGraphQLDataSource(t *testing.T) {
 						HasBuffer: true,
 						BufferID:  0,
 						Name:      []byte("stringList"),
-						Position: resolve.Position{
-							Line:   19,
-							Column: 4,
-						},
 						Value: &resolve.Array{
 							Nullable: true,
 							Item: &resolve.String{
@@ -1530,10 +1315,6 @@ func TestGraphQLDataSource(t *testing.T) {
 						HasBuffer: true,
 						BufferID:  0,
 						Name:      []byte("nestedStringList"),
-						Position: resolve.Position{
-							Line:   20,
-							Column: 4,
-						},
 						Value: &resolve.Array{
 							Nullable: true,
 							Path:     []string{"nestedStringList"},
@@ -1614,6 +1395,7 @@ func TestGraphQLDataSource(t *testing.T) {
 				},
 			},
 		},
+		DisableResolveFieldPositions: true,
 	}))
 	t.Run("Query with renamed root fields", RunTest(renamedStarWarsSchema, `
 		query MyQuery($id: ID! $input: SearchInput_api! @api_onVariable $options: JSON_api) @otherapi_undefined @api_onOperation {
@@ -1683,10 +1465,6 @@ func TestGraphQLDataSource(t *testing.T) {
 						HasBuffer: true,
 						BufferID:  0,
 						Name:      []byte("api_droid"),
-						Position: resolve.Position{
-							Line:   3,
-							Column: 4,
-						},
 						Value: &resolve.Object{
 							Path:     []string{"api_droid"},
 							Nullable: true,
@@ -1696,27 +1474,15 @@ func TestGraphQLDataSource(t *testing.T) {
 									Value: &resolve.String{
 										Path: []string{"name"},
 									},
-									Position: resolve.Position{
-										Line:   4,
-										Column: 5,
-									},
 								},
 								{
 									Name: []byte("aliased"),
 									Value: &resolve.String{
 										Path: []string{"aliased"},
 									},
-									Position: resolve.Position{
-										Line:   5,
-										Column: 5,
-									},
 								},
 								{
 									Name: []byte("friends"),
-									Position: resolve.Position{
-										Line:   6,
-										Column: 5,
-									},
 									Value: &resolve.Array{
 										Nullable: true,
 										Path:     []string{"friends"},
@@ -1728,10 +1494,6 @@ func TestGraphQLDataSource(t *testing.T) {
 													Value: &resolve.String{
 														Path: []string{"name"},
 													},
-													Position: resolve.Position{
-														Line:   7,
-														Column: 6,
-													},
 												},
 											},
 										},
@@ -1742,10 +1504,6 @@ func TestGraphQLDataSource(t *testing.T) {
 									Value: &resolve.String{
 										Path: []string{"primaryFunction"},
 									},
-									Position: resolve.Position{
-										Line:   9,
-										Column: 5,
-									},
 								},
 							},
 						},
@@ -1754,10 +1512,6 @@ func TestGraphQLDataSource(t *testing.T) {
 						HasBuffer: true,
 						BufferID:  0,
 						Name:      []byte("api_hero"),
-						Position: resolve.Position{
-							Line:   11,
-							Column: 4,
-						},
 						Value: &resolve.Object{
 							Path:     []string{"api_hero"},
 							Nullable: true,
@@ -1767,20 +1521,12 @@ func TestGraphQLDataSource(t *testing.T) {
 									Value: &resolve.String{
 										Path: []string{"name"},
 									},
-									Position: resolve.Position{
-										Line:   12,
-										Column: 5,
-									},
 								},
 								{
 									Name: []byte("height"),
 									Value: &resolve.String{
 										Path: []string{"height"},
 									},
-									Position: resolve.Position{
-										Line:   14,
-										Column: 6,
-									},
 									OnTypeName: []byte("Human"),
 								},
 							},
@@ -1790,10 +1536,6 @@ func TestGraphQLDataSource(t *testing.T) {
 						HasBuffer: true,
 						BufferID:  0,
 						Name:      []byte("api_stringList"),
-						Position: resolve.Position{
-							Line:   17,
-							Column: 4,
-						},
 						Value: &resolve.Array{
 							Nullable: true,
 							Path:     []string{"api_stringList"},
@@ -1806,10 +1548,6 @@ func TestGraphQLDataSource(t *testing.T) {
 						HasBuffer: true,
 						BufferID:  0,
 						Name:      []byte("renamed"),
-						Position: resolve.Position{
-							Line:   18,
-							Column: 4,
-						},
 						Value: &resolve.Array{
 							Nullable: true,
 							Path:     []string{"renamed"},
@@ -1822,10 +1560,6 @@ func TestGraphQLDataSource(t *testing.T) {
 						HasBuffer: true,
 						BufferID:  0,
 						Name:      []byte("api_search"),
-						Position: resolve.Position{
-							Line:   19,
-							Column: 4,
-						},
 						Value: &resolve.Object{
 							Nullable: true,
 							Path:     []string{"api_search"},
@@ -1835,10 +1569,6 @@ func TestGraphQLDataSource(t *testing.T) {
 									Value: &resolve.String{
 										Path: []string{"primaryFunction"},
 									},
-									Position: resolve.Position{
-										Line:   21,
-										Column: 6,
-									},
 									OnTypeName: []byte("Droid"),
 								},
 							},
@@ -1848,10 +1578,6 @@ func TestGraphQLDataSource(t *testing.T) {
 						HasBuffer: true,
 						BufferID:  0,
 						Name:      []byte("api_searchWithInput"),
-						Position: resolve.Position{
-							Line:   24,
-							Column: 4,
-						},
 						Value: &resolve.Object{
 							Nullable: true,
 							Path:     []string{"api_searchWithInput"},
@@ -1861,10 +1587,6 @@ func TestGraphQLDataSource(t *testing.T) {
 									Value: &resolve.String{
 										Path: []string{"primaryFunction"},
 									},
-									Position: resolve.Position{
-										Line:   26,
-										Column: 6,
-									},
 									OnTypeName: []byte("Droid"),
 								},
 							},
@@ -1874,10 +1596,6 @@ func TestGraphQLDataSource(t *testing.T) {
 						HasBuffer: true,
 						BufferID:  0,
 						Name:      []byte("withOptions"),
-						Position: resolve.Position{
-							Line:   29,
-							Column: 4,
-						},
 						Value: &resolve.Object{
 							Nullable: true,
 							Path:     []string{"withOptions"},
@@ -1887,10 +1605,6 @@ func TestGraphQLDataSource(t *testing.T) {
 									Value: &resolve.String{
 										Path: []string{"primaryFunction"},
 									},
-									Position: resolve.Position{
-										Line:   33,
-										Column: 6,
-									},
 									OnTypeName: []byte("Droid"),
 								},
 							},
@@ -2019,6 +1733,7 @@ func TestGraphQLDataSource(t *testing.T) {
 				RenameTo: "JSON",
 			},
 		},
+		DisableResolveFieldPositions: true,
 	}))
 	t.Run("Query with array input", RunTest(subgraphTestSchema, `
 		query($representations: [_Any!]!) {
@@ -2055,10 +1770,6 @@ func TestGraphQLDataSource(t *testing.T) {
 						HasBuffer: true,
 						BufferID:  0,
 						Name:      []byte("_entities"),
-						Position: resolve.Position{
-							Line:   3,
-							Column: 4,
-						},
 						Value: &resolve.Array{
 							Path:     []string{"_entities"},
 							Nullable: false,
@@ -2082,10 +1793,6 @@ func TestGraphQLDataSource(t *testing.T) {
 															Path:     []string{"body"},
 															Nullable: false,
 														},
-														Position: resolve.Position{
-															Line:   6,
-															Column: 7,
-														},
 													},
 													{
 														Name: []byte("author"),
@@ -2099,10 +1806,6 @@ func TestGraphQLDataSource(t *testing.T) {
 																		Path:     []string{"username"},
 																		Nullable: false,
 																	},
-																	Position: resolve.Position{
-																		Line:   8,
-																		Column: 8,
-																	},
 																},
 																{
 																	Name: []byte("id"),
@@ -2110,25 +1813,13 @@ func TestGraphQLDataSource(t *testing.T) {
 																		Path:     []string{"id"},
 																		Nullable: false,
 																	},
-																	Position: resolve.Position{
-																		Line:   9,
-																		Column: 8,
-																	},
 																},
 															},
 														},
-														Position: resolve.Position{
-															Line:   7,
-															Column: 7,
-														},
 													},
 												},
 											},
 										},
-										Position: resolve.Position{
-											Line:   5,
-											Column: 6,
-										},
 										OnTypeName: []byte("Product"),
 									},
 								},
@@ -2209,6 +1900,7 @@ func TestGraphQLDataSource(t *testing.T) {
 				},
 			},
 		},
+		DisableResolveFieldPositions: true,
 	}))
 
 	t.Run("Query with ID array input", runTestOnTestDefinition(`
@@ -2250,10 +1942,6 @@ func TestGraphQLDataSource(t *testing.T) {
 												Path:     []string{"name"},
 												Nullable: false,
 											},
-											Position: resolve.Position{
-												Line:   4,
-												Column: 5,
-											},
 										},
 										{
 											Name: []byte("primaryFunction"),
@@ -2261,19 +1949,11 @@ func TestGraphQLDataSource(t *testing.T) {
 												Path:     []string{"primaryFunction"},
 												Nullable: false,
 											},
-											Position: resolve.Position{
-												Line:   5,
-												Column: 5,
-											},
 										},
 									},
 								},
 								Stream: resolve.Stream{},
 							},
-							Position: resolve.Position{
-								Line:   3,
-								Column: 4,
-							},
 							HasBuffer: true,
 							BufferID:  0,
 						},
@@ -2318,10 +1998,6 @@ func TestGraphQLDataSource(t *testing.T) {
 											Path:     []string{"name"},
 											Nullable: false,
 										},
-										Position: resolve.Position{
-											Line:   4,
-											Column: 5,
-										},
 									},
 									{
 										Name: []byte("primaryFunction"),
@@ -2329,17 +2005,9 @@ func TestGraphQLDataSource(t *testing.T) {
 											Path:     []string{"primaryFunction"},
 											Nullable: false,
 										},
-										Position: resolve.Position{
-											Line:   5,
-											Column: 5,
-										},
 									},
 								},
 							},
-							Position: resolve.Position{
-								Line:   3,
-								Column: 4,
-							},
 							HasBuffer: true,
 							BufferID:  0,
 						},
@@ -2383,17 +2051,9 @@ func TestGraphQLDataSource(t *testing.T) {
 											Path:     []string{"name"},
 											Nullable: false,
 										},
-										Position: resolve.Position{
-											Line:   4,
-											Column: 5,
-										},
 									},
 								},
 							},
-							Position: resolve.Position{
-								Line:   3,
-								Column: 4,
-							},
 							HasBuffer: true,
 							BufferID:  0,
 						},
@@ -2435,10 +2095,6 @@ func TestGraphQLDataSource(t *testing.T) {
 							BufferID:  0,
 							HasBuffer: true,
 							Name:      []byte("addFriend"),
-							Position: resolve.Position{
-								Line:   1,
-								Column: 37,
-							},
 							Value: &resolve.Object{
 								Fields: []*resolve.Field{
 									{
@@ -2446,20 +2102,12 @@ func TestGraphQLDataSource(t *testing.T) {
 										Value: &resolve.String{
 											Path: []string{"id"},
 										},
-										Position: resolve.Position{
-											Line:   1,
-											Column: 61,
-										},
 									},
 									{
 										Name: []byte("name"),
 										Value: &resolve.String{
 											Path: []string{"name"},
 										},
-										Position: resolve.Position{
-											Line:   1,
-											Column: 64,
-										},
 									},
 								},
 							},
@@ -2504,6 +2152,7 @@ func TestGraphQLDataSource(t *testing.T) {
 					},
 				},
 			},
+			DisableResolveFieldPositions: true,
 		},
 	))
 
@@ -2549,10 +2198,6 @@ func TestGraphQLDataSource(t *testing.T) {
 							BufferID:  0,
 							HasBuffer: true,
 							Name:      []byte("foo"),
-							Position: resolve.Position{
-								Line:   3,
-								Column: 4,
-							},
 							Value: &resolve.Object{
 								Nullable: true,
 								Path:     []string{"foo"},
@@ -2563,10 +2208,6 @@ func TestGraphQLDataSource(t *testing.T) {
 											Nullable: true,
 											Path:     []string{"bar"},
 										},
-										Position: resolve.Position{
-											Line:   4,
-											Column: 5,
-										},
 									},
 								},
 							},
@@ -2620,6 +2261,7 @@ func TestGraphQLDataSource(t *testing.T) {
 					},
 				},
 			},
+			DisableResolveFieldPositions: true,
 		},
 	))
 
@@ -2662,10 +2304,6 @@ func TestGraphQLDataSource(t *testing.T) {
 							BufferID:  0,
 							HasBuffer: true,
 							Name:      []byte("country"),
-							Position: resolve.Position{
-								Line:   3,
-								Column: 4,
-							},
 							Value: &resolve.Object{
 								Nullable: true,
 								Path:     []string{"country"},
@@ -2676,10 +2314,6 @@ func TestGraphQLDataSource(t *testing.T) {
 											Nullable: false,
 											Path:     []string{"name"},
 										},
-										Position: resolve.Position{
-											Line:   4,
-											Column: 5,
-										},
 									},
 								},
 							},
@@ -2688,10 +2322,6 @@ func TestGraphQLDataSource(t *testing.T) {
 							BufferID:  0,
 							HasBuffer: true,
 							Name:      []byte("alias"),
-							Position: resolve.Position{
-								Line:   6,
-								Column: 4,
-							},
 							Value: &resolve.Object{
 								Nullable: true,
 								Path:     []string{"alias"},
@@ -2702,10 +2332,6 @@ func TestGraphQLDataSource(t *testing.T) {
 											Nullable: false,
 											Path:     []string{"name"},
 										},
-										Position: resolve.Position{
-											Line:   7,
-											Column: 5,
-										},
 									},
 								},
 							},
@@ -2761,6 +2387,7 @@ func TestGraphQLDataSource(t *testing.T) {
 					},
 				},
 			},
+			DisableResolveFieldPositions: true,
 		},
 	))
 
@@ -2803,10 +2430,6 @@ func TestGraphQLDataSource(t *testing.T) {
 							BufferID:  0,
 							HasBuffer: true,
 							Name:      []byte("country"),
-							Position: resolve.Position{
-								Line:   3,
-								Column: 4,
-							},
 							Value: &resolve.Object{
 								Nullable: true,
 								Path:     []string{"country"},
@@ -2817,10 +2440,6 @@ func TestGraphQLDataSource(t *testing.T) {
 											Nullable: false,
 											Path:     []string{"name"},
 										},
-										Position: resolve.Position{
-											Line:   4,
-											Column: 5,
-										},
 									},
 								},
 							},
@@ -2829,10 +2448,6 @@ func TestGraphQLDataSource(t *testing.T) {
 							BufferID:  0,
 							HasBuffer: true,
 							Name:      []byte("countryAlias"),
-							Position: resolve.Position{
-								Line:   6,
-								Column: 4,
-							},
 							Value: &resolve.Object{
 								Nullable: true,
 								Path:     []string{"countryAlias"},
@@ -2843,10 +2458,6 @@ func TestGraphQLDataSource(t *testing.T) {
 											Nullable: false,
 											Path:     []string{"name"},
 										},
-										Position: resolve.Position{
-											Line:   7,
-											Column: 5,
-										},
 									},
 								},
 							},
@@ -2902,6 +2513,7 @@ func TestGraphQLDataSource(t *testing.T) {
 					},
 				},
 			},
+			DisableResolveFieldPositions: true,
 		},
 	))
 
@@ -2998,10 +2610,6 @@ func TestGraphQLDataSource(t *testing.T) {
 							BufferID:  0,
 							HasBuffer: true,
 							Name:      []byte("serviceOne"),
-							Position: resolve.Position{
-								Line:   3,
-								Column: 4,
-							},
 							Value: &resolve.Object{
 								Nullable: true,
 								Path:     []string{"serviceOne"},
@@ -3020,19 +2628,11 @@ func TestGraphQLDataSource(t *testing.T) {
 										Value: &resolve.String{
 											Path: []string{"fieldOne"},
 										},
-										Position: resolve.Position{
-											Line:   4,
-											Column: 5,
-										},
 									},
 									{
 										Name:      []byte("countries"),
 										HasBuffer: true,
 										BufferID:  1,
-										Position: resolve.Position{
-											Line:   5,
-											Column: 5,
-										},
 										Value: &resolve.Array{
 											Path: []string{"countries"},
 											Item: &resolve.Object{
@@ -3042,10 +2642,6 @@ func TestGraphQLDataSource(t *testing.T) {
 														Value: &resolve.String{
 															Path: []string{"name"},
 														},
-														Position: resolve.Position{
-															Line:   6,
-															Column: 6,
-														},
 													},
 												},
 											},
@@ -3058,10 +2654,6 @@ func TestGraphQLDataSource(t *testing.T) {
 							HasBuffer: true,
 							BufferID:  2,
 							Name:      []byte("serviceTwo"),
-							Position: resolve.Position{
-								Line:   9,
-								Column: 4,
-							},
 							Value: &resolve.Object{
 								Nullable: true,
 								Path:     []string{"serviceTwo"},
@@ -3085,19 +2677,11 @@ func TestGraphQLDataSource(t *testing.T) {
 											Nullable: true,
 											Path:     []string{"fieldTwo"},
 										},
-										Position: resolve.Position{
-											Line:   10,
-											Column: 5,
-										},
 									},
 									{
 										HasBuffer: true,
 										BufferID:  3,
 										Name:      []byte("serviceOneResponse"),
-										Position: resolve.Position{
-											Line:   11,
-											Column: 5,
-										},
 										Value: &resolve.Object{
 											Nullable: true,
 											Path:     []string{"serviceOneResponse"},
@@ -3107,10 +2691,6 @@ func TestGraphQLDataSource(t *testing.T) {
 													Value: &resolve.String{
 														Path: []string{"fieldOne"},
 													},
-													Position: resolve.Position{
-														Line:   12,
-														Column: 6,
-													},
 												},
 											},
 										},
@@ -3122,10 +2702,6 @@ func TestGraphQLDataSource(t *testing.T) {
 							HasBuffer: true,
 							BufferID:  0,
 							Name:      []byte("anotherServiceOne"),
-							Position: resolve.Position{
-								Line:   15,
-								Column: 4,
-							},
 							Value: &resolve.Object{
 								Nullable: true,
 								Path:     []string{"anotherServiceOne"},
@@ -3135,10 +2711,6 @@ func TestGraphQLDataSource(t *testing.T) {
 										Value: &resolve.String{
 											Path: []string{"fieldOne"},
 										},
-										Position: resolve.Position{
-											Line:   16,
-											Column: 5,
-										},
 									},
 								},
 							},
@@ -3147,10 +2719,6 @@ func TestGraphQLDataSource(t *testing.T) {
 							BufferID:  2,
 							HasBuffer: true,
 							Name:      []byte("secondServiceTwo"),
-							Position: resolve.Position{
-								Line:   18,
-								Column: 4,
-							},
 							Value: &resolve.Object{
 								Nullable: true,
 								Path:     []string{"secondServiceTwo"},
@@ -3161,10 +2729,6 @@ func TestGraphQLDataSource(t *testing.T) {
 											Path:     []string{"fieldTwo"},
 											Nullable: true,
 										},
-										Position: resolve.Position{
-											Line:   19,
-											Column: 5,
-										},
 									},
 									{
 										Name: []byte("serviceOneField"),
@@ -3172,10 +2736,6 @@ func TestGraphQLDataSource(t *testing.T) {
 											Path:     []string{"serviceOneField"},
 											Nullable: true,
 										},
-										Position: resolve.Position{
-											Line:   20,
-											Column: 5,
-										},
 									},
 								},
 							},
@@ -3184,10 +2744,6 @@ func TestGraphQLDataSource(t *testing.T) {
 							BufferID:  0,
 							HasBuffer: true,
 							Name:      []byte("reusingServiceOne"),
-							Position: resolve.Position{
-								Line:   22,
-								Column: 4,
-							},
 							Value: &resolve.Object{
 								Nullable: true,
 								Path:     []string{"reusingServiceOne"},
@@ -3197,10 +2753,6 @@ func TestGraphQLDataSource(t *testing.T) {
 										Value: &resolve.String{
 											Path: []string{"fieldOne"},
 										},
-										Position: resolve.Position{
-											Line:   23,
-											Column: 5,
-										},
 									},
 								},
 							},
@@ -3341,6 +2893,7 @@ func TestGraphQLDataSource(t *testing.T) {
 					},
 				},
 			},
+			DisableResolveFieldPositions: true,
 		},
 	))
 
@@ -3386,20 +2939,12 @@ func TestGraphQLDataSource(t *testing.T) {
 							HasBuffer: true,
 							BufferID:  0,
 							Name:      []byte("addTask"),
-							Position: resolve.Position{
-								Line:   2,
-								Column: 8,
-							},
 							Value: &resolve.Object{
 								Path:     []string{"addTask"},
 								Nullable: true,
 								Fields: []*resolve.Field{
 									{
 										Name: []byte("task"),
-										Position: resolve.Position{
-											Line:   3,
-											Column: 7,
-										},
 										Value: &resolve.Array{
 											Nullable: true,
 											Path:     []string{"task"},
@@ -3411,30 +2956,18 @@ func TestGraphQLDataSource(t *testing.T) {
 														Value: &resolve.String{
 															Path: []string{"id"},
 														},
-														Position: resolve.Position{
-															Line:   4,
-															Column: 9,
-														},
 													},
 													{
 														Name: []byte("title"),
 														Value: &resolve.String{
 															Path: []string{"title"},
 														},
-														Position: resolve.Position{
-															Line:   5,
-															Column: 9,
-														},
 													},
 													{
 														Name: []byte("completed"),
 														Value: &resolve.Boolean{
 															Path: []string{"completed"},
 														},
-														Position: resolve.Position{
-															Line:   6,
-															Column: 9,
-														},
 													},
 												},
 											},
@@ -3486,6 +3019,7 @@ func TestGraphQLDataSource(t *testing.T) {
 					},
 				},
 			},
+			DisableResolveFieldPositions: true,
 		},
 	))
 
@@ -3549,20 +3083,12 @@ func TestGraphQLDataSource(t *testing.T) {
 							BufferID:  0,
 							HasBuffer: true,
 							Name:      []byte("createUser"),
-							Position: resolve.Position{
-								Line:   3,
-								Column: 6,
-							},
 							Value: &resolve.Object{
 								Nullable: true,
 								Path:     []string{"createUser"},
 								Fields: []*resolve.Field{
 									{
 										Name: []byte("user"),
-										Position: resolve.Position{
-											Line:   4,
-											Column: 5,
-										},
 										Value: &resolve.Object{
 											Path:     []string{"user"},
 											Nullable: true,
@@ -3573,10 +3099,6 @@ func TestGraphQLDataSource(t *testing.T) {
 														Path:     []string{"id"},
 														Nullable: true,
 													},
-													Position: resolve.Position{
-														Line:   5,
-														Column: 7,
-													},
 												},
 												{
 													Name: []byte("username"),
@@ -3584,10 +3106,6 @@ func TestGraphQLDataSource(t *testing.T) {
 														Path:     []string{"username"},
 														Nullable: true,
 													},
-													Position: resolve.Position{
-														Line:   6,
-														Column: 7,
-													},
 												},
 												{
 													Name: []byte("createdDate"),
@@ -3595,10 +3113,6 @@ func TestGraphQLDataSource(t *testing.T) {
 														Path:     []string{"createdDate"},
 														Nullable: true,
 													},
-													Position: resolve.Position{
-														Line:   7,
-														Column: 7,
-													},
 												},
 											},
 										},
@@ -3649,6 +3163,7 @@ func TestGraphQLDataSource(t *testing.T) {
 					},
 				},
 			},
+			DisableResolveFieldPositions: true,
 		},
 	))
 
@@ -3697,19 +3212,11 @@ func TestGraphQLDataSource(t *testing.T) {
 								Path:     []string{"__typename"},
 								Nullable: false,
 							},
-							Position: resolve.Position{
-								Line:   3,
-								Column: 4,
-							},
 						},
 						{
 							Name:      []byte("namespaceCreate"),
 							HasBuffer: true,
 							BufferID:  0,
-							Position: resolve.Position{
-								Line:   4,
-								Column: 4,
-							},
 							Value: &resolve.Object{
 								Path: []string{"namespaceCreate"},
 								Fields: []*resolve.Field{
@@ -3719,18 +3226,10 @@ func TestGraphQLDataSource(t *testing.T) {
 											Path:     []string{"__typename"},
 											Nullable: false,
 										},
-										Position: resolve.Position{
-											Line:   5,
-											Column: 5,
-										},
 									},
 									{
 										OnTypeName: []byte("NamespaceCreated"),
 										Name:       []byte("namespace"),
-										Position: resolve.Position{
-											Line:   7,
-											Column: 6,
-										},
 										Value: &resolve.Object{
 											Path: []string{"namespace"},
 											Fields: []*resolve.Field{
@@ -3740,10 +3239,6 @@ func TestGraphQLDataSource(t *testing.T) {
 														Path:     []string{"id"},
 														Nullable: false,
 													},
-													Position: resolve.Position{
-														Line:   8,
-														Column: 7,
-													},
 												},
 												{
 													Name: []byte("name"),
@@ -3751,10 +3246,6 @@ func TestGraphQLDataSource(t *testing.T) {
 														Path:     []string{"name"},
 														Nullable: false,
 													},
-													Position: resolve.Position{
-														Line:   9,
-														Column: 7,
-													},
 												},
 											},
 										},
@@ -3765,10 +3256,6 @@ func TestGraphQLDataSource(t *testing.T) {
 										Value: &resolve.String{
 											Path: []string{"code"},
 										},
-										Position: resolve.Position{
-											Line:   13,
-											Column: 6,
-										},
 									},
 									{
 										OnTypeName: []byte("Error"),
@@ -3776,10 +3263,6 @@ func TestGraphQLDataSource(t *testing.T) {
 										Value: &resolve.String{
 											Path: []string{"message"},
 										},
-										Position: resolve.Position{
-											Line:   14,
-											Column: 6,
-										},
 									},
 								},
 							},
@@ -3840,6 +3323,7 @@ func TestGraphQLDataSource(t *testing.T) {
 					Path:                  []string{},
 				},
 			},
+			DisableResolveFieldPositions: true,
 			DefaultFlushIntervalMillis: 500,
 		}))
 	factory := &Factory{
@@ -3864,10 +3348,6 @@ func TestGraphQLDataSource(t *testing.T) {
 					Fields: []*resolve.Field{
 						{
 							Name: []byte("remainingJedis"),
-							Position: resolve.Position{
-								Line:   3,
-								Column: 4,
-							},
 							Value: &resolve.Integer{
 								Path:     []string{"remainingJedis"},
 								Nullable: false,
@@ -3906,10 +3386,6 @@ func TestGraphQLDataSource(t *testing.T) {
 					Fields: []*resolve.Field{
 						{
 							Name: []byte("foo"),
-							Position: resolve.Position{
-								Line:   3,
-								Column: 4,
-							},
 							Value: &resolve.Integer{
 								Path:     []string{"foo"},
 								Nullable: false,
@@ -3948,6 +3424,7 @@ func TestGraphQLDataSource(t *testing.T) {
 				},
 			},
 		},
+		DisableResolveFieldPositions: true,
 	}))
 
 	batchFactory := NewBatchFactory()
@@ -3993,10 +3470,6 @@ func TestGraphQLDataSource(t *testing.T) {
 							HasBuffer: true,
 							BufferID:  0,
 							Name:      []byte("me"),
-							Position: resolve.Position{
-								Line:   2,
-								Column: 7,
-							},
 							Value: &resolve.Object{
 								Fetch: &resolve.BatchFetch{
 									Fetch: &resolve.SingleFetch{
@@ -4025,29 +3498,17 @@ func TestGraphQLDataSource(t *testing.T) {
 										Value: &resolve.String{
 											Path: []string{"id"},
 										},
-										Position: resolve.Position{
-											Line:   3,
-											Column: 8,
-										},
 									},
 									{
 										Name: []byte("username"),
 										Value: &resolve.String{
 											Path: []string{"username"},
 										},
-										Position: resolve.Position{
-											Line:   4,
-											Column: 8,
-										},
 									},
 									{
 										HasBuffer: true,
 										BufferID:  1,
 										Name:      []byte("reviews"),
-										Position: resolve.Position{
-											Line:   5,
-											Column: 8,
-										},
 										Value: &resolve.Array{
 											Path:     []string{"reviews"},
 											Nullable: true,
@@ -4059,17 +3520,9 @@ func TestGraphQLDataSource(t *testing.T) {
 														Value: &resolve.String{
 															Path: []string{"body"},
 														},
-														Position: resolve.Position{
-															Line:   6,
-															Column: 9,
-														},
 													},
 													{
 														Name: []byte("author"),
-														Position: resolve.Position{
-															Line:   7,
-															Column: 9,
-														},
 														Value: &resolve.Object{
 															Path: []string{"author"},
 															Fields: []*resolve.Field{
@@ -4078,30 +3531,18 @@ func TestGraphQLDataSource(t *testing.T) {
 																	Value: &resolve.String{
 																		Path: []string{"id"},
 																	},
-																	Position: resolve.Position{
-																		Line:   8,
-																		Column: 10,
-																	},
 																},
 																{
 																	Name: []byte("username"),
 																	Value: &resolve.String{
 																		Path: []string{"username"},
 																	},
-																	Position: resolve.Position{
-																		Line:   9,
-																		Column: 10,
-																	},
 																},
 															},
 														},
 													},
 													{
 														Name: []byte("product"),
-														Position: resolve.Position{
-															Line:   11,
-															Column: 9,
-														},
 														Value: &resolve.Object{
 															Path: []string{"product"},
 															Fetch: &resolve.ParallelFetch{
@@ -4154,10 +3595,6 @@ func TestGraphQLDataSource(t *testing.T) {
 																	Value: &resolve.String{
 																		Path: []string{"name"},
 																	},
-																	Position: resolve.Position{
-																		Line:   12,
-																		Column: 10,
-																	},
 																},
 																{
 																	HasBuffer: true,
@@ -4166,19 +3603,11 @@ func TestGraphQLDataSource(t *testing.T) {
 																	Value: &resolve.Integer{
 																		Path: []string{"price"},
 																	},
-																	Position: resolve.Position{
-																		Line:   13,
-																		Column: 10,
-																	},
 																},
 																{
 																	HasBuffer: true,
 																	BufferID:  3,
 																	Name:      []byte("reviews"),
-																	Position: resolve.Position{
-																		Line:   14,
-																		Column: 10,
-																	},
 																	Value: &resolve.Array{
 																		Nullable: true,
 																		Path:     []string{"reviews"},
@@ -4190,17 +3619,9 @@ func TestGraphQLDataSource(t *testing.T) {
 																					Value: &resolve.String{
 																						Path: []string{"body"},
 																					},
-																					Position: resolve.Position{
-																						Line:   15,
-																						Column: 11,
-																					},
 																				},
 																				{
 																					Name: []byte("author"),
-																					Position: resolve.Position{
-																						Line:   16,
-																						Column: 11,
-																					},
 																					Value: &resolve.Object{
 																						Path: []string{"author"},
 																						Fields: []*resolve.Field{
@@ -4209,20 +3630,12 @@ func TestGraphQLDataSource(t *testing.T) {
 																								Value: &resolve.String{
 																									Path: []string{"id"},
 																								},
-																								Position: resolve.Position{
-																									Line:   17,
-																									Column: 12,
-																								},
 																							},
 																							{
 																								Name: []byte("username"),
 																								Value: &resolve.String{
 																									Path: []string{"username"},
 																								},
-																								Position: resolve.Position{
-																									Line:   18,
-																									Column: 12,
-																								},
 																							},
 																						},
 																					},
@@ -4375,26 +3788,54 @@ func TestGraphQLDataSource(t *testing.T) {
 					RequiresFields: []string{"upc"},
 				},
 			},
+			DisableResolveFieldPositions: true,
 		}))
-
-	t.Run("federation with variables", RunTest(federationTestSchema,
-		`	query MyReviews($publicOnly: Boolean!, $someSkipCondition: Boolean!) {
-						me {
-							reviews {
-								body
-								notes @skip(if: $someSkipCondition)
-								likes(filterToPublicOnly: $publicOnly)
-							}
+	t.Run("complex nested federation", RunTest(complexFederationSchema,
+		`	query User {
+					  user(id: "2") {
+						id
+						name {
+						  first
+						  last
+						}
+						username
+						birthDate
+						vehicle {
+						  id
+						  description
+						  price
+						  __typename
+						}
+						account {
+						  ... on PasswordAccount {
+							email
+						  }
+						  ... on SMSAccount {
+							number
+						  }
 						}
+						metadata {
+						  name
+						  address
+						  description
+						}
+						ssn
+					  }
 					}`,
-		"MyReviews",
+		"User",
 		&plan.SynchronousResponsePlan{
 			Response: &resolve.GraphQLResponse{
 				Data: &resolve.Object{
 					Fetch: &resolve.SingleFetch{
 						BufferId:              0,
-						Input:                 `{"method":"POST","url":"http://user.service","body":{"query":"{me {id}}"}}`,
+						Input:                 `{"method":"POST","url":"http://user.service","body":{"query":"query($a: ID!){user(id: $a){id name {first last} username birthDate ssn}}","variables":{"a":$$0$$}}}`,
 						DataSource:            &Source{},
+						Variables: resolve.NewVariables(
+							&resolve.ObjectVariable{
+								Path:     []string{"a"},
+								Renderer: resolve.NewJSONVariableRendererWithValidation(`{"type":["string","integer"]}`),
+							},
+						),
 						DataSourceIdentifier:  []byte("graphql_datasource.Source"),
 						ProcessResponseConfig: resolve.ProcessResponseConfig{ExtractGraphqlResponse: true},
 					},
@@ -4402,29 +3843,17 @@ func TestGraphQLDataSource(t *testing.T) {
 						{
 							HasBuffer: true,
 							BufferID:  0,
-							Name:      []byte("me"),
-							Position: resolve.Position{
-								Line:   2,
-								Column: 7,
-							},
+							Name:      []byte("user"),
 							Value: &resolve.Object{
 								Fetch: &resolve.BatchFetch{
 									Fetch: &resolve.SingleFetch{
 										BufferId: 1,
-										Input:    `{"method":"POST","url":"http://review.service","body":{"query":"query($representations: [_Any!]!, $someSkipCondition: Boolean!, $publicOnly: Boolean!){_entities(representations: $representations){... on User {reviews {body notes @skip(if: $someSkipCondition) likes(filterToPublicOnly: $publicOnly)}}}}","variables":{"publicOnly":$$2$$,"someSkipCondition":$$1$$,"representations":[{"id":$$0$$,"__typename":"User"}]}}}`,
+										Input:    `{"method":"POST","url":"http://product.service","body":{"query":"query($representations: [_Any!]!){_entities(representations: $representations){... on User {vehicle {__typename id description price}}}}","variables":{"representations":[{"id":$$0$$,"__typename":"User"}]}}}`,
 										Variables: resolve.NewVariables(
 											&resolve.ObjectVariable{
 												Path:     []string{"id"},
 												Renderer: resolve.NewJSONVariableRendererWithValidation(`{"type":["string","integer"]}`),
 											},
-											&resolve.ContextVariable{
-												Path:     []string{"someSkipCondition"},
-												Renderer: resolve.NewJSONVariableRendererWithValidation(`{"type":["boolean"]}`),
-											},
-											&resolve.ContextVariable{
-												Path:     []string{"publicOnly"},
-												Renderer: resolve.NewJSONVariableRendererWithValidation(`{"type":["boolean","null"]}`),
-											},
 										),
 										DataSource:           &Source{},
 										DataSourceIdentifier: []byte("graphql_datasource.Source"),
@@ -4435,83 +3864,677 @@ func TestGraphQLDataSource(t *testing.T) {
 									},
 									BatchFactory: batchFactory,
 								},
-								Path:     []string{"me"},
+								Path:     []string{"user"},
 								Nullable: true,
 								Fields: []*resolve.Field{
 									{
-										HasBuffer: true,
-										BufferID:  1,
-										Name:      []byte("reviews"),
-										Position: resolve.Position{
-											Line:   3,
-											Column: 8,
+										Name: []byte("id"),
+										Value: &resolve.String{
+											Path: []string{"id"},
 										},
-										Value: &resolve.Array{
-											Path:     []string{"reviews"},
+									},
+									{
+										Name: []byte("name"),
+										Value: &resolve.Object{
+											Path: []string{"name"},
 											Nullable: true,
-											Item: &resolve.Object{
-												Nullable: true,
-												Fields: []*resolve.Field{
-													{
-														Name: []byte("body"),
-														Value: &resolve.String{
-															Path: []string{"body"},
-														},
-														Position: resolve.Position{
-															Line:   4,
-															Column: 9,
-														},
-													},
-													{
-														Name: []byte("notes"),
-														Value: &resolve.String{
-															Path:     []string{"notes"},
-															Nullable: true,
-														},
-														Position: resolve.Position{
-															Line:   5,
-															Column: 9,
-														},
-														SkipDirectiveDefined: true,
-														SkipVariableName:     "someSkipCondition",
+											Fields: []*resolve.Field{
+												{
+													Name: []byte("first"),
+													Value: &resolve.String{
+														Nullable: true,
+														Path: []string{"first"},
 													},
-													{
-														Name: []byte("likes"),
-														Value: &resolve.String{
-															Path: []string{"likes"},
-														},
-														Position: resolve.Position{
-															Line:   6,
-															Column: 9,
-														},
+												},
+												{
+													Name: []byte("last"),
+													Value: &resolve.String{
+														Nullable: true,
+														Path: []string{"last"},
 													},
 												},
 											},
 										},
 									},
-								},
-							},
-						},
-					},
-				},
-			},
-		},
-		plan.Configuration{
-			DataSources: []plan.DataSourceConfiguration{
-				{
-					RootNodes: []plan.TypeField{
-						{
-							TypeName:   "Query",
-							FieldNames: []string{"me"},
-						},
-					},
-					ChildNodes: []plan.TypeField{
-						{
-							TypeName:   "User",
-							FieldNames: []string{"id"},
-						},
-					},
-					Custom: ConfigJson(Configuration{
+									{
+										Name: []byte("username"),
+										Value: &resolve.String{
+											Path: []string{"username"},
+											Nullable: true,
+										},
+									},
+									{
+										Name: []byte("birthDate"),
+										Value: &resolve.String{
+											Path: []string{"birthDate"},
+											Nullable: true,
+										},
+									},
+									{
+										Name: []byte("vehicle"),
+										HasBuffer: true,
+										BufferID: 1,
+										Value: &resolve.Object{
+											Path: []string{"vehicle"},
+											Nullable: true,
+											Fields: []*resolve.Field{
+												{
+													Name: []byte("id"),
+													Value: &resolve.String{
+														Path: []string{"id"},
+													},
+												},
+												{
+													Name: []byte("description"),
+													Value: &resolve.String{
+														Nullable: true,
+														Path: []string{"description"},
+													},
+												},
+												{
+													Name: []byte("price"),
+													Value: &resolve.String{
+														Nullable: true,
+														Path: []string{"price"},
+													},
+												},
+												{
+													Name: []byte("__typename"),
+													Value: &resolve.String{
+														Path: []string{"__typename"},
+													},
+												},
+											},
+										},
+									},
+									{
+										Name: []byte("account"),
+										Value: &resolve.Object{
+											Path: []string{"account"},
+											Nullable: true,
+											Fields: []*resolve.Field{
+												{
+													Name: []byte("email"),
+													Value: &resolve.String{
+														Path: []string{"email"},
+													},
+													OnTypeName: []byte("PasswordAccount"),
+												},
+												{
+													Name: []byte("number"),
+													Value: &resolve.String{
+														Nullable: true,
+														Path: []string{"number"},
+													},
+													OnTypeName: []byte("SMSAccount"),
+												},
+											},
+										},
+									},
+									{
+										Name: []byte("metadata"),
+										Value: &resolve.Array{
+											Path: []string{"metadata"},
+											Nullable: true,
+											Item: &resolve.Object{
+												Nullable: true,
+												Fields: []*resolve.Field{
+													{
+														Name: []byte("name"),
+														Value: &resolve.String{
+															Nullable: true,
+															Path: []string{"name"},
+														},
+													},
+													{
+														Name: []byte("address"),
+														Value: &resolve.String{
+															Nullable: true,
+															Path: []string{"address"},
+														},
+													},
+													{
+														Name: []byte("description"),
+														Value: &resolve.String{
+															Nullable: true,
+															Path: []string{"description"},
+														},
+													},
+												},
+											},
+										},
+									},
+									{
+										Name: []byte("ssn"),
+										Value: &resolve.String{
+											Nullable: true,
+											Path: []string{"ssn"},
+										},
+									},
+								},
+							},
+						},
+					},
+				},
+			},
+		},
+		plan.Configuration{
+			DataSources: []plan.DataSourceConfiguration{
+				{
+					RootNodes: []plan.TypeField{
+						{
+							TypeName:   "Query",
+							FieldNames: []string{"me","user"},
+						},
+					},
+					ChildNodes: []plan.TypeField{
+						{
+							TypeName:   "User",
+							FieldNames: []string{"id","name", "username","birthDate","metaData","ssn"},
+						},
+						{
+							TypeName: "UserMetadata",
+							FieldNames: []string{"name","address","description"},
+						},
+						{
+							TypeName: "Name",
+							FieldNames: []string{"first","last"},
+						},
+						{
+							TypeName: "PasswordAccount",
+							FieldNames: []string{"email"},
+						},
+						{
+							TypeName: "SMSAccount",
+							FieldNames: []string{"number"},
+						},
+					},
+					Custom: ConfigJson(Configuration{
+						Fetch: FetchConfiguration{
+							URL: "http://user.service",
+						},
+						Federation: FederationConfiguration{
+							Enabled:    true,
+							ServiceSDL: "extend type Query { me: User user(id: ID!): User} extend type Mutation { login( username: String! password: String! ): User} type User @key(fields: \"id\") { id: ID! name: Name username: String birthDate(locale: String): String account: AccountType metadata: [UserMetadata] ssn: String} type Name { first: String last: String } type PasswordAccount @key(fields: \"email\") { email: String! } type SMSAccount @key(fields: \"number\") { number: String } union AccountType = PasswordAccount | SMSAccounttype UserMetadata { name: String address: String description: String }",
+						},
+					}),
+					Factory: federationFactory,
+				},
+				{
+					RootNodes: []plan.TypeField{
+						{
+							TypeName:   "User",
+							FieldNames: []string{"vehicle"},
+						},
+					},
+					ChildNodes: []plan.TypeField{
+						{
+							TypeName:   "Vehicle",
+							FieldNames: []string{"id","name", "description","price"},
+						},
+					},
+					Custom: ConfigJson(Configuration{
+						Fetch: FetchConfiguration{
+							URL: "http://product.service",
+						},
+						Federation: FederationConfiguration{
+							Enabled:    true,
+							ServiceSDL: "extend type Query { product(upc: String!): Product vehicle(id: String!): Vehicle topProducts(first: Int = 5): [Product] topCars(first: Int = 5): [Car]} extend type Subscription { updatedPrice: Product! updateProductPrice(upc: String!): Product! stock: [Product!]} type Ikea { asile: Int} type Amazon { referrer: String } union Brand = Ikea | Amazon interface Product { upc: String! sku: String! name: String price: String details: ProductDetails inStock: Int! } interface ProductDetails { country: String} type ProductDetailsFurniture implements ProductDetails { country: String color: String} type ProductDetailsBook implements ProductDetails { country: String pages: Int } type Furniture implements Product @key(fields: \"upc\") @key(fields: \"sku\") { upc: String! sku: String! name: String price: String brand: Brand metadata: [MetadataOrError] details: ProductDetailsFurniture inStock: Int!} interface Vehicle { id: String! description: String price: String } type Car implements Vehicle @key(fields: \"id\") { id: String! description: String price: String} type Van implements Vehicle @key(fields: \"id\") { id: String! description: String price: String } union Thing = Car | Ikea extend type User @key(fields: \"id\") { id: ID! @external vehicle: Vehicle thing: Thing} type KeyValue { key: String! value: String! } type Error { code: Int message: String} union MetadataOrError = KeyValue | Error",
+						},
+					}),
+					Factory: federationFactory,
+				},
+			},
+			Fields: []plan.FieldConfiguration{
+				{
+					TypeName:  "Query",
+					FieldName: "user",
+					Arguments: []plan.ArgumentConfiguration{
+						{
+							Name:       "id",
+							SourceType: plan.FieldArgumentSource,
+						},
+					},
+				},
+				{
+					TypeName:       "User",
+					FieldName:      "vehicle",
+					RequiresFields: []string{"id"},
+				},
+			},
+			DisableResolveFieldPositions: true,
+		}))
+	t.Run("complex nested federation different order", RunTest(complexFederationSchema,
+		`	query User {
+					  user(id: "2") {
+						id
+						name {
+						  first
+						  last
+						}
+						username
+						birthDate
+						account {
+						  ... on PasswordAccount {
+							email
+						  }
+						  ... on SMSAccount {
+							number
+						  }
+						}
+						metadata {
+						  name
+						  address
+						  description
+						}
+						vehicle {
+						  id
+						  description
+						  price
+						  __typename
+						}
+						ssn
+					  }
+					}`,
+		"User",
+		&plan.SynchronousResponsePlan{
+			Response: &resolve.GraphQLResponse{
+				Data: &resolve.Object{
+					Fetch: &resolve.SingleFetch{
+						BufferId:              0,
+						Input:                 `{"method":"POST","url":"http://user.service","body":{"query":"query($a: ID!){user(id: $a){id name {first last} username birthDate ssn}}","variables":{"a":$$0$$}}}`,
+						DataSource:            &Source{},
+						Variables: resolve.NewVariables(
+							&resolve.ObjectVariable{
+								Path:     []string{"a"},
+								Renderer: resolve.NewJSONVariableRendererWithValidation(`{"type":["string","integer"]}`),
+							},
+						),
+						DataSourceIdentifier:  []byte("graphql_datasource.Source"),
+						ProcessResponseConfig: resolve.ProcessResponseConfig{ExtractGraphqlResponse: true},
+					},
+					Fields: []*resolve.Field{
+						{
+							HasBuffer: true,
+							BufferID:  0,
+							Name:      []byte("user"),
+							Value: &resolve.Object{
+								Fetch: &resolve.BatchFetch{
+									Fetch: &resolve.SingleFetch{
+										BufferId: 1,
+										Input:    `{"method":"POST","url":"http://product.service","body":{"query":"query($representations: [_Any!]!){_entities(representations: $representations){... on User {vehicle {__typename id description price}}}}","variables":{"representations":[{"id":$$0$$,"__typename":"User"}]}}}`,
+										Variables: resolve.NewVariables(
+											&resolve.ObjectVariable{
+												Path:     []string{"id"},
+												Renderer: resolve.NewJSONVariableRendererWithValidation(`{"type":["string","integer"]}`),
+											},
+										),
+										DataSource:           &Source{},
+										DataSourceIdentifier: []byte("graphql_datasource.Source"),
+										ProcessResponseConfig: resolve.ProcessResponseConfig{
+											ExtractGraphqlResponse:    true,
+											ExtractFederationEntities: true,
+										},
+									},
+									BatchFactory: batchFactory,
+								},
+								Path:     []string{"user"},
+								Nullable: true,
+								Fields: []*resolve.Field{
+									{
+										Name: []byte("id"),
+										Value: &resolve.String{
+											Path: []string{"id"},
+										},
+									},
+									{
+										Name: []byte("name"),
+										Value: &resolve.Object{
+											Path: []string{"name"},
+											Nullable: true,
+											Fields: []*resolve.Field{
+												{
+													Name: []byte("first"),
+													Value: &resolve.String{
+														Nullable: true,
+														Path: []string{"first"},
+													},
+												},
+												{
+													Name: []byte("last"),
+													Value: &resolve.String{
+														Nullable: true,
+														Path: []string{"last"},
+													},
+												},
+											},
+										},
+									},
+									{
+										Name: []byte("username"),
+										Value: &resolve.String{
+											Path: []string{"username"},
+											Nullable: true,
+										},
+									},
+									{
+										Name: []byte("birthDate"),
+										Value: &resolve.String{
+											Path: []string{"birthDate"},
+											Nullable: true,
+										},
+									},
+									{
+										Name: []byte("account"),
+										Value: &resolve.Object{
+											Path: []string{"account"},
+											Nullable: true,
+											Fields: []*resolve.Field{
+												{
+													Name: []byte("email"),
+													Value: &resolve.String{
+														Path: []string{"email"},
+													},
+													OnTypeName: []byte("PasswordAccount"),
+												},
+												{
+													Name: []byte("number"),
+													Value: &resolve.String{
+														Nullable: true,
+														Path: []string{"number"},
+													},
+													OnTypeName: []byte("SMSAccount"),
+												},
+											},
+										},
+									},
+									{
+										Name: []byte("metadata"),
+										Value: &resolve.Array{
+											Path: []string{"metadata"},
+											Nullable: true,
+											Item: &resolve.Object{
+												Nullable: true,
+												Fields: []*resolve.Field{
+													{
+														Name: []byte("name"),
+														Value: &resolve.String{
+															Nullable: true,
+															Path: []string{"name"},
+														},
+													},
+													{
+														Name: []byte("address"),
+														Value: &resolve.String{
+															Nullable: true,
+															Path: []string{"address"},
+														},
+													},
+													{
+														Name: []byte("description"),
+														Value: &resolve.String{
+															Nullable: true,
+															Path: []string{"description"},
+														},
+													},
+												},
+											},
+										},
+									},
+									{
+										Name: []byte("vehicle"),
+										HasBuffer: true,
+										BufferID: 1,
+										Value: &resolve.Object{
+											Path: []string{"vehicle"},
+											Nullable: true,
+											Fields: []*resolve.Field{
+												{
+													Name: []byte("id"),
+													Value: &resolve.String{
+														Path: []string{"id"},
+													},
+												},
+												{
+													Name: []byte("description"),
+													Value: &resolve.String{
+														Nullable: true,
+														Path: []string{"description"},
+													},
+												},
+												{
+													Name: []byte("price"),
+													Value: &resolve.String{
+														Nullable: true,
+														Path: []string{"price"},
+													},
+												},
+												{
+													Name: []byte("__typename"),
+													Value: &resolve.String{
+														Path: []string{"__typename"},
+													},
+												},
+											},
+										},
+									},
+									{
+										Name: []byte("ssn"),
+										Value: &resolve.String{
+											Nullable: true,
+											Path: []string{"ssn"},
+										},
+									},
+								},
+							},
+						},
+					},
+				},
+			},
+		},
+		plan.Configuration{
+			DataSources: []plan.DataSourceConfiguration{
+				{
+					RootNodes: []plan.TypeField{
+						{
+							TypeName:   "Query",
+							FieldNames: []string{"me","user"},
+						},
+					},
+					ChildNodes: []plan.TypeField{
+						{
+							TypeName:   "User",
+							FieldNames: []string{"id","name", "username","birthDate","metaData","ssn"},
+						},
+						{
+							TypeName: "UserMetadata",
+							FieldNames: []string{"name","address","description"},
+						},
+						{
+							TypeName: "Name",
+							FieldNames: []string{"first","last"},
+						},
+						{
+							TypeName: "PasswordAccount",
+							FieldNames: []string{"email"},
+						},
+						{
+							TypeName: "SMSAccount",
+							FieldNames: []string{"number"},
+						},
+					},
+					Custom: ConfigJson(Configuration{
+						Fetch: FetchConfiguration{
+							URL: "http://user.service",
+						},
+						Federation: FederationConfiguration{
+							Enabled:    true,
+							ServiceSDL: "extend type Query { me: User user(id: ID!): User} extend type Mutation { login( username: String! password: String! ): User} type User @key(fields: \"id\") { id: ID! name: Name username: String birthDate(locale: String): String account: AccountType metadata: [UserMetadata] ssn: String} type Name { first: String last: String } type PasswordAccount @key(fields: \"email\") { email: String! } type SMSAccount @key(fields: \"number\") { number: String } union AccountType = PasswordAccount | SMSAccounttype UserMetadata { name: String address: String description: String }",
+						},
+					}),
+					Factory: federationFactory,
+				},
+				{
+					RootNodes: []plan.TypeField{
+						{
+							TypeName:   "User",
+							FieldNames: []string{"vehicle"},
+						},
+					},
+					ChildNodes: []plan.TypeField{
+						{
+							TypeName:   "Vehicle",
+							FieldNames: []string{"id","name", "description","price"},
+						},
+					},
+					Custom: ConfigJson(Configuration{
+						Fetch: FetchConfiguration{
+							URL: "http://product.service",
+						},
+						Federation: FederationConfiguration{
+							Enabled:    true,
+							ServiceSDL: "extend type Query { product(upc: String!): Product vehicle(id: String!): Vehicle topProducts(first: Int = 5): [Product] topCars(first: Int = 5): [Car]} extend type Subscription { updatedPrice: Product! updateProductPrice(upc: String!): Product! stock: [Product!]} type Ikea { asile: Int} type Amazon { referrer: String } union Brand = Ikea | Amazon interface Product { upc: String! sku: String! name: String price: String details: ProductDetails inStock: Int! } interface ProductDetails { country: String} type ProductDetailsFurniture implements ProductDetails { country: String color: String} type ProductDetailsBook implements ProductDetails { country: String pages: Int } type Furniture implements Product @key(fields: \"upc\") @key(fields: \"sku\") { upc: String! sku: String! name: String price: String brand: Brand metadata: [MetadataOrError] details: ProductDetailsFurniture inStock: Int!} interface Vehicle { id: String! description: String price: String } type Car implements Vehicle @key(fields: \"id\") { id: String! description: String price: String} type Van implements Vehicle @key(fields: \"id\") { id: String! description: String price: String } union Thing = Car | Ikea extend type User @key(fields: \"id\") { id: ID! @external vehicle: Vehicle thing: Thing} type KeyValue { key: String! value: String! } type Error { code: Int message: String} union MetadataOrError = KeyValue | Error",
+						},
+					}),
+					Factory: federationFactory,
+				},
+			},
+			Fields: []plan.FieldConfiguration{
+				{
+					TypeName:  "Query",
+					FieldName: "user",
+					Arguments: []plan.ArgumentConfiguration{
+						{
+							Name:       "id",
+							SourceType: plan.FieldArgumentSource,
+						},
+					},
+					Path: []string{"user"},
+				},
+				{
+					TypeName:       "User",
+					FieldName:      "vehicle",
+					Path: []string{"vehicle"},
+					RequiresFields: []string{"id"},
+				},
+			},
+			DisableResolveFieldPositions: true,
+		}))
+	t.Run("federation with variables", RunTest(federationTestSchema,
+		`	query MyReviews($publicOnly: Boolean!, $someSkipCondition: Boolean!) {
+						me {
+							reviews {
+								body
+								notes @skip(if: $someSkipCondition)
+								likes(filterToPublicOnly: $publicOnly)
+							}
+						}
+					}`,
+		"MyReviews",
+		&plan.SynchronousResponsePlan{
+			Response: &resolve.GraphQLResponse{
+				Data: &resolve.Object{
+					Fetch: &resolve.SingleFetch{
+						BufferId:              0,
+						Input:                 `{"method":"POST","url":"http://user.service","body":{"query":"{me {id}}"}}`,
+						DataSource:            &Source{},
+						DataSourceIdentifier:  []byte("graphql_datasource.Source"),
+						ProcessResponseConfig: resolve.ProcessResponseConfig{ExtractGraphqlResponse: true},
+					},
+					Fields: []*resolve.Field{
+						{
+							HasBuffer: true,
+							BufferID:  0,
+							Name:      []byte("me"),
+							Value: &resolve.Object{
+								Fetch: &resolve.BatchFetch{
+									Fetch: &resolve.SingleFetch{
+										BufferId: 1,
+										Input:    `{"method":"POST","url":"http://review.service","body":{"query":"query($representations: [_Any!]!, $someSkipCondition: Boolean!, $publicOnly: Boolean!){_entities(representations: $representations){... on User {reviews {body notes @skip(if: $someSkipCondition) likes(filterToPublicOnly: $publicOnly)}}}}","variables":{"publicOnly":$$2$$,"someSkipCondition":$$1$$,"representations":[{"id":$$0$$,"__typename":"User"}]}}}`,
+										Variables: resolve.NewVariables(
+											&resolve.ObjectVariable{
+												Path:     []string{"id"},
+												Renderer: resolve.NewJSONVariableRendererWithValidation(`{"type":["string","integer"]}`),
+											},
+											&resolve.ContextVariable{
+												Path:     []string{"someSkipCondition"},
+												Renderer: resolve.NewJSONVariableRendererWithValidation(`{"type":["boolean"]}`),
+											},
+											&resolve.ContextVariable{
+												Path:     []string{"publicOnly"},
+												Renderer: resolve.NewJSONVariableRendererWithValidation(`{"type":["boolean","null"]}`),
+											},
+										),
+										DataSource:           &Source{},
+										DataSourceIdentifier: []byte("graphql_datasource.Source"),
+										ProcessResponseConfig: resolve.ProcessResponseConfig{
+											ExtractGraphqlResponse:    true,
+											ExtractFederationEntities: true,
+										},
+									},
+									BatchFactory: batchFactory,
+								},
+								Path:     []string{"me"},
+								Nullable: true,
+								Fields: []*resolve.Field{
+									{
+										HasBuffer: true,
+										BufferID:  1,
+										Name:      []byte("reviews"),
+										Value: &resolve.Array{
+											Path:     []string{"reviews"},
+											Nullable: true,
+											Item: &resolve.Object{
+												Nullable: true,
+												Fields: []*resolve.Field{
+													{
+														Name: []byte("body"),
+														Value: &resolve.String{
+															Path: []string{"body"},
+														},
+													},
+													{
+														Name: []byte("notes"),
+														Value: &resolve.String{
+															Path:     []string{"notes"},
+															Nullable: true,
+														},
+														SkipDirectiveDefined: true,
+														SkipVariableName:     "someSkipCondition",
+													},
+													{
+														Name: []byte("likes"),
+														Value: &resolve.String{
+															Path: []string{"likes"},
+														},
+													},
+												},
+											},
+										},
+									},
+								},
+							},
+						},
+					},
+				},
+			},
+		},
+		plan.Configuration{
+			DataSources: []plan.DataSourceConfiguration{
+				{
+					RootNodes: []plan.TypeField{
+						{
+							TypeName:   "Query",
+							FieldNames: []string{"me"},
+						},
+					},
+					ChildNodes: []plan.TypeField{
+						{
+							TypeName:   "User",
+							FieldNames: []string{"id"},
+						},
+					},
+					Custom: ConfigJson(Configuration{
 						Fetch: FetchConfiguration{
 							URL: "http://user.service",
 						},
@@ -4568,6 +4591,7 @@ func TestGraphQLDataSource(t *testing.T) {
 					},
 				},
 			},
+			DisableResolveFieldPositions: true,
 		}))
 
 	t.Run("federation with variables and renamed types", RunTest(federationTestSchema,
@@ -4596,10 +4620,6 @@ func TestGraphQLDataSource(t *testing.T) {
 							HasBuffer: true,
 							BufferID:  0,
 							Name:      []byte("me"),
-							Position: resolve.Position{
-								Line:   2,
-								Column: 7,
-							},
 							Value: &resolve.Object{
 								Fetch: &resolve.BatchFetch{
 									Fetch: &resolve.SingleFetch{
@@ -4635,10 +4655,6 @@ func TestGraphQLDataSource(t *testing.T) {
 										HasBuffer: true,
 										BufferID:  1,
 										Name:      []byte("reviews"),
-										Position: resolve.Position{
-											Line:   3,
-											Column: 8,
-										},
 										Value: &resolve.Array{
 											Path:     []string{"reviews"},
 											Nullable: true,
@@ -4650,10 +4666,6 @@ func TestGraphQLDataSource(t *testing.T) {
 														Value: &resolve.String{
 															Path: []string{"body"},
 														},
-														Position: resolve.Position{
-															Line:   4,
-															Column: 9,
-														},
 													},
 													{
 														Name: []byte("notes"),
@@ -4661,10 +4673,6 @@ func TestGraphQLDataSource(t *testing.T) {
 															Path:     []string{"notes"},
 															Nullable: true,
 														},
-														Position: resolve.Position{
-															Line:   5,
-															Column: 9,
-														},
 														SkipDirectiveDefined: true,
 														SkipVariableName:     "someSkipCondition",
 													},
@@ -4673,10 +4681,6 @@ func TestGraphQLDataSource(t *testing.T) {
 														Value: &resolve.String{
 															Path: []string{"likes"},
 														},
-														Position: resolve.Position{
-															Line:   6,
-															Column: 9,
-														},
 													},
 												},
 											},
@@ -4761,6 +4765,7 @@ func TestGraphQLDataSource(t *testing.T) {
 					},
 				},
 			},
+			DisableResolveFieldPositions: true,
 			Types: []plan.TypeConfiguration{
 				{
 					TypeName: "Boolean",
@@ -4793,10 +4798,6 @@ func TestGraphQLDataSource(t *testing.T) {
 							HasBuffer: true,
 							BufferID:  0,
 							Name:      []byte("serviceOne"),
-							Position: resolve.Position{
-								Line:   2,
-								Column: 7,
-							},
 							Value: &resolve.Object{
 								Fetch: &resolve.BatchFetch{
 									Fetch: &resolve.SingleFetch{
@@ -4833,10 +4834,6 @@ func TestGraphQLDataSource(t *testing.T) {
 										HasBuffer: true,
 										BufferID:  1,
 										Name:      []byte("serviceTwoFieldOne"),
-										Position: resolve.Position{
-											Line:   3,
-											Column: 8,
-										},
 										Value: &resolve.String{
 											Path: []string{"serviceTwoFieldOne"},
 										},
@@ -4845,10 +4842,6 @@ func TestGraphQLDataSource(t *testing.T) {
 										HasBuffer: true,
 										BufferID:  1,
 										Name:      []byte("serviceTwoFieldTwo"),
-										Position: resolve.Position{
-											Line:   4,
-											Column: 8,
-										},
 										Value: &resolve.String{
 											Path: []string{"serviceTwoFieldTwo"},
 										},
@@ -4923,6 +4916,7 @@ func TestGraphQLDataSource(t *testing.T) {
 					RequiresFields: []string{"id", "serviceOneFieldTwo"},
 				},
 			},
+			DisableResolveFieldPositions: true,
 		}))
 
 	t.Run("federation with renamed schema", RunTest(renamedFederationTestSchema,
@@ -4966,10 +4960,6 @@ func TestGraphQLDataSource(t *testing.T) {
 							HasBuffer: true,
 							BufferID:  0,
 							Name:      []byte("api_me"),
-							Position: resolve.Position{
-								Line:   2,
-								Column: 7,
-							},
 							Value: &resolve.Object{
 								Fetch: &resolve.BatchFetch{
 									Fetch: &resolve.SingleFetch{
@@ -4998,29 +4988,17 @@ func TestGraphQLDataSource(t *testing.T) {
 										Value: &resolve.String{
 											Path: []string{"id"},
 										},
-										Position: resolve.Position{
-											Line:   3,
-											Column: 8,
-										},
 									},
 									{
 										Name: []byte("username"),
 										Value: &resolve.String{
 											Path: []string{"username"},
 										},
-										Position: resolve.Position{
-											Line:   4,
-											Column: 8,
-										},
 									},
 									{
 										HasBuffer: true,
 										BufferID:  1,
 										Name:      []byte("reviews"),
-										Position: resolve.Position{
-											Line:   5,
-											Column: 8,
-										},
 										Value: &resolve.Array{
 											Path:     []string{"reviews"},
 											Nullable: true,
@@ -5032,17 +5010,9 @@ func TestGraphQLDataSource(t *testing.T) {
 														Value: &resolve.String{
 															Path: []string{"body"},
 														},
-														Position: resolve.Position{
-															Line:   6,
-															Column: 9,
-														},
 													},
 													{
 														Name: []byte("author"),
-														Position: resolve.Position{
-															Line:   7,
-															Column: 9,
-														},
 														Value: &resolve.Object{
 															Path: []string{"author"},
 															Fields: []*resolve.Field{
@@ -5051,30 +5021,18 @@ func TestGraphQLDataSource(t *testing.T) {
 																	Value: &resolve.String{
 																		Path: []string{"id"},
 																	},
-																	Position: resolve.Position{
-																		Line:   8,
-																		Column: 10,
-																	},
 																},
 																{
 																	Name: []byte("username"),
 																	Value: &resolve.String{
 																		Path: []string{"username"},
 																	},
-																	Position: resolve.Position{
-																		Line:   9,
-																		Column: 10,
-																	},
 																},
 															},
 														},
 													},
 													{
 														Name: []byte("product"),
-														Position: resolve.Position{
-															Line:   11,
-															Column: 9,
-														},
 														Value: &resolve.Object{
 															Path: []string{"product"},
 															Fetch: &resolve.ParallelFetch{
@@ -5127,10 +5085,6 @@ func TestGraphQLDataSource(t *testing.T) {
 																	Value: &resolve.String{
 																		Path: []string{"name"},
 																	},
-																	Position: resolve.Position{
-																		Line:   12,
-																		Column: 10,
-																	},
 																},
 																{
 																	HasBuffer: true,
@@ -5139,19 +5093,11 @@ func TestGraphQLDataSource(t *testing.T) {
 																	Value: &resolve.Integer{
 																		Path: []string{"price"},
 																	},
-																	Position: resolve.Position{
-																		Line:   13,
-																		Column: 10,
-																	},
 																},
 																{
 																	HasBuffer: true,
 																	BufferID:  3,
 																	Name:      []byte("reviews"),
-																	Position: resolve.Position{
-																		Line:   14,
-																		Column: 10,
-																	},
 																	Value: &resolve.Array{
 																		Nullable: true,
 																		Path:     []string{"reviews"},
@@ -5163,17 +5109,9 @@ func TestGraphQLDataSource(t *testing.T) {
 																					Value: &resolve.String{
 																						Path: []string{"body"},
 																					},
-																					Position: resolve.Position{
-																						Line:   15,
-																						Column: 11,
-																					},
 																				},
 																				{
 																					Name: []byte("author"),
-																					Position: resolve.Position{
-																						Line:   16,
-																						Column: 11,
-																					},
 																					Value: &resolve.Object{
 																						Path: []string{"author"},
 																						Fields: []*resolve.Field{
@@ -5182,20 +5120,12 @@ func TestGraphQLDataSource(t *testing.T) {
 																								Value: &resolve.String{
 																									Path: []string{"id"},
 																								},
-																								Position: resolve.Position{
-																									Line:   17,
-																									Column: 12,
-																								},
 																							},
 																							{
 																								Name: []byte("username"),
 																								Value: &resolve.String{
 																									Path: []string{"username"},
 																								},
-																								Position: resolve.Position{
-																									Line:   18,
-																									Column: 12,
-																								},
 																							},
 																						},
 																					},
@@ -5357,6 +5287,7 @@ func TestGraphQLDataSource(t *testing.T) {
 					RequiresFields: []string{"upc"},
 				},
 			},
+			DisableResolveFieldPositions: true,
 			Types: []plan.TypeConfiguration{
 				{
 					TypeName: "User_api",
@@ -5636,6 +5567,7 @@ func runTestOnTestDefinition(operation, operationName string, expectedPlan plan.
 				},
 			},
 		},
+		DisableResolveFieldPositions: true,
 	}
 
 	for _, opt := range options {
@@ -6754,6 +6686,144 @@ type User {
 }
 `
 
+const complexFederationSchema = `
+scalar String
+scalar Int
+scalar Float
+scalar ID
+
+union AccountType = PasswordAccount | SMSAccount
+type Amazon {
+  referrer: String
+}
+
+union Brand = Ikea | Amazon
+type Car implements Vehicle {
+  id: String!
+  description: String
+  price: String
+}
+
+type Error {
+  code: Int
+  message: String
+}
+
+type Furniture implements Product {
+  upc: String!
+  sku: String!
+  name: String
+  price: String
+  brand: Brand
+  metadata: [MetadataOrError]
+  details: ProductDetailsFurniture
+  inStock: Int!
+}
+
+type Ikea {
+  asile: Int
+}
+
+type KeyValue {
+  key: String!
+  value: String!
+}
+
+union MetadataOrError = KeyValue | Error
+type Mutation {
+  login(username: String!, password: String!): User
+}
+
+type Name {
+  first: String
+  last: String
+}
+
+type PasswordAccount {
+  email: String!
+}
+
+interface Product {
+  upc: String!
+  sku: String!
+  name: String
+  price: String
+  details: ProductDetails
+  inStock: Int!
+}
+
+interface ProductDetails {
+  country: String
+}
+
+type ProductDetailsBook implements ProductDetails {
+  country: String
+  pages: Int
+}
+
+type ProductDetailsFurniture implements ProductDetails {
+  country: String
+  color: String
+}
+
+type Query {
+  me: User
+  user(id: ID!): User
+  product(upc: String!): Product
+  vehicle(id: String!): Vehicle
+  topProducts(first: Int = 5): [Product]
+  topCars(first: Int = 5): [Car]
+}
+
+type Review {
+  body: String!
+  author: User!
+  product: Product!
+}
+
+type SMSAccount {
+  number: String
+}
+
+type Subscription {
+  updatedPrice: Product!
+  updateProductPrice(upc: String!): Product!
+  stock: [Product!]
+}
+
+union Thing = Car | Ikea
+type User {
+  id: ID!
+  name: Name
+  username: String
+  birthDate(locale: String): String
+  account: AccountType
+  metadata: [UserMetadata]
+  ssn: String
+  vehicle: Vehicle
+  thing: Thing
+  reviews: [Review]
+}
+
+type UserMetadata {
+  name: String
+  address: String
+  description: String
+}
+
+type Van implements Vehicle {
+  id: String!
+  description: String
+  price: String
+}
+
+interface Vehicle {
+  id: String!
+  description: String
+  price: String
+}
+`
+
 const renamedFederationTestSchema = `
 scalar String
 scalar Int
diff --git a/pkg/engine/datasource/rest_datasource/rest_datasource_test.go b/pkg/engine/datasource/rest_datasource/rest_datasource_test.go
index e27e657c..90c0b472 100644
--- a/pkg/engine/datasource/rest_datasource/rest_datasource_test.go
+++ b/pkg/engine/datasource/rest_datasource/rest_datasource_test.go
@@ -129,10 +129,6 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 							BufferID:  0,
 							HasBuffer: true,
 							Name:      []byte("friend"),
-							Position: resolve.Position{
-								Line:   3,
-								Column: 4,
-							},
 							Value: &resolve.Object{
 								Nullable: true,
 								Fetch: &resolve.SingleFetch{
@@ -156,19 +152,11 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 											Path:     []string{"name"},
 											Nullable: true,
 										},
-										Position: resolve.Position{
-											Line:   4,
-											Column: 5,
-										},
 									},
 									{
 										HasBuffer: true,
 										BufferID:  1,
 										Name:      []byte("pet"),
-										Position: resolve.Position{
-											Line:   5,
-											Column: 5,
-										},
 										Value: &resolve.Object{
 											Nullable: true,
 											Fields: []*resolve.Field{
@@ -178,10 +166,6 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 														Path:     []string{"id"},
 														Nullable: true,
 													},
-													Position: resolve.Position{
-														Line:   6,
-														Column: 6,
-													},
 												},
 												{
 													Name: []byte("name"),
@@ -189,10 +173,6 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 														Path:     []string{"name"},
 														Nullable: true,
 													},
-													Position: resolve.Position{
-														Line:   7,
-														Column: 6,
-													},
 												},
 											},
 										},
@@ -249,6 +229,7 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 					DisableDefaultMapping: true,
 				},
 			},
+			DisableResolveFieldPositions: true,
 		},
 	))
 	t.Run("get request with argument", datasourcetesting.RunTest(schema, argumentOperation, "ArgumentQuery",
@@ -277,10 +258,6 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 							BufferID:  0,
 							HasBuffer: true,
 							Name:      []byte("withArgument"),
-							Position: resolve.Position{
-								Line:   3,
-								Column: 4,
-							},
 							Value: &resolve.Object{
 								Nullable: true,
 								Fields: []*resolve.Field{
@@ -290,10 +267,6 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 											Path:     []string{"name"},
 											Nullable: true,
 										},
-										Position: resolve.Position{
-											Line:   4,
-											Column: 5,
-										},
 									},
 								},
 							},
@@ -327,6 +300,7 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 					DisableDefaultMapping: true,
 				},
 			},
+			DisableResolveFieldPositions: true,
 		},
 	))
 	t.Run("post request with nested JSON body", datasourcetesting.RunTest(authSchema, `
@@ -367,10 +341,6 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 							BufferID:  0,
 							HasBuffer: true,
 							Name:      []byte("Login"),
-							Position: resolve.Position{
-								Line:   3,
-								Column: 4,
-							},
 							Value: &resolve.Object{
 								Nullable: true,
 								Fields: []*resolve.Field{
@@ -380,10 +350,6 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 											Path:     []string{"code"},
 											Nullable: true,
 										},
-										Position: resolve.Position{
-											Line:   9,
-											Column: 5,
-										},
 									},
 								},
 							},
@@ -418,6 +384,7 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 					DisableDefaultMapping: true,
 				},
 			},
+			DisableResolveFieldPositions: true,
 		},
 	))
 	t.Run("get request with duplicated argument and alias", datasourcetesting.RunTest(schema, duplicatedArgumentOperationWithAlias, "ArgumentQuery",
@@ -467,10 +434,6 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 							BufferID:  0,
 							HasBuffer: true,
 							Name:      []byte("withArgument"),
-							Position: resolve.Position{
-								Line:   3,
-								Column: 4,
-							},
 							Value: &resolve.Object{
 								Nullable: true,
 								Fetch: &resolve.ParallelFetch{
@@ -510,10 +473,6 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 											Path:     []string{"name"},
 											Nullable: true,
 										},
-										Position: resolve.Position{
-											Line:   4,
-											Column: 5,
-										},
 									},
 									{
 										BufferID:  1,
@@ -523,10 +482,6 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 											Path:     []string{"phone"},
 											Nullable: true,
 										},
-										Position: resolve.Position{
-											Line:   5,
-											Column: 5,
-										},
 									},
 									{
 										BufferID:  2,
@@ -536,10 +491,6 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 											Path:     []string{"phone"},
 											Nullable: true,
 										},
-										Position: resolve.Position{
-											Line:   6,
-											Column: 5,
-										},
 									},
 								},
 							},
@@ -548,10 +499,6 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 							BufferID:  3,
 							HasBuffer: true,
 							Name:      []byte("aliased"),
-							Position: resolve.Position{
-								Line:   9,
-								Column: 4,
-							},
 							Value: &resolve.Object{
 								Nullable: true,
 								Fields: []*resolve.Field{
@@ -561,10 +508,6 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 											Path:     []string{"name"},
 											Nullable: true,
 										},
-										Position: resolve.Position{
-											Line:   10,
-											Column: 5,
-										},
 									},
 								},
 							},
@@ -613,6 +556,7 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 					DisableDefaultMapping: true,
 				},
 			},
+			DisableResolveFieldPositions: true,
 		},
 		func(t *testing.T, op ast.Document, actualPlan plan.Plan) {
 			assert.Equal(t, `{"d":"bar","c":"office","b":"home","a":"foo"}`, string(op.Input.Variables))
@@ -644,10 +588,6 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 							BufferID:  0,
 							HasBuffer: true,
 							Name:      []byte("withArgument"),
-							Position: resolve.Position{
-								Line:   3,
-								Column: 4,
-							},
 							Value: &resolve.Object{
 								Nullable: true,
 								Fields: []*resolve.Field{
@@ -657,10 +597,6 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 											Path:     []string{"name"},
 											Nullable: true,
 										},
-										Position: resolve.Position{
-											Line:   4,
-											Column: 5,
-										},
 									},
 								},
 							},
@@ -694,6 +630,7 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 					DisableDefaultMapping: true,
 				},
 			},
+			DisableResolveFieldPositions: true,
 		},
 	))
 	/*	t.Run("polling subscription get request with argument", datasourcetesting.RunTest(schema, argumentSubscription, "ArgumentQuery",
@@ -781,10 +718,6 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 							BufferID:  0,
 							HasBuffer: true,
 							Name:      []byte("friend"),
-							Position: resolve.Position{
-								Line:   3,
-								Column: 4,
-							},
 							Value: &resolve.Object{
 								Nullable: true,
 								Fields: []*resolve.Field{
@@ -794,10 +727,6 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 											Path:     []string{"name"},
 											Nullable: true,
 										},
-										Position: resolve.Position{
-											Line:   4,
-											Column: 5,
-										},
 									},
 								},
 							},
@@ -832,6 +761,7 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 					DisableDefaultMapping: true,
 				},
 			},
+			DisableResolveFieldPositions: true,
 		},
 	))
 	t.Run("get request with headers", datasourcetesting.RunTest(schema, simpleOperation, "",
@@ -855,10 +785,6 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 							BufferID:  0,
 							HasBuffer: true,
 							Name:      []byte("friend"),
-							Position: resolve.Position{
-								Line:   3,
-								Column: 4,
-							},
 							Value: &resolve.Object{
 								Nullable: true,
 								Fields: []*resolve.Field{
@@ -868,10 +794,6 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 											Path:     []string{"name"},
 											Nullable: true,
 										},
-										Position: resolve.Position{
-											Line:   4,
-											Column: 5,
-										},
 									},
 								},
 							},
@@ -911,6 +833,7 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 					DisableDefaultMapping: true,
 				},
 			},
+			DisableResolveFieldPositions: true,
 		},
 	))
 	t.Run("get request with query", datasourcetesting.RunTest(schema, argumentOperation, "ArgumentQuery",
@@ -939,10 +862,6 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 							BufferID:  0,
 							HasBuffer: true,
 							Name:      []byte("withArgument"),
-							Position: resolve.Position{
-								Line:   3,
-								Column: 4,
-							},
 							Value: &resolve.Object{
 								Nullable: true,
 								Fields: []*resolve.Field{
@@ -952,10 +871,6 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 											Path:     []string{"name"},
 											Nullable: true,
 										},
-										Position: resolve.Position{
-											Line:   4,
-											Column: 5,
-										},
 									},
 								},
 							},
@@ -1011,6 +926,7 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 					DisableDefaultMapping: true,
 				},
 			},
+			DisableResolveFieldPositions: true,
 		},
 	))
 	t.Run("get request with array query", datasourcetesting.RunTest(schema, arrayArgumentOperation, "ArgumentQuery",
@@ -1035,10 +951,6 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 							BufferID:  0,
 							HasBuffer: true,
 							Name:      []byte("withArrayArguments"),
-							Position: resolve.Position{
-								Line:   3,
-								Column: 4,
-							},
 							Value: &resolve.Object{
 								Nullable: true,
 								Fields: []*resolve.Field{
@@ -1048,10 +960,6 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 											Path:     []string{"name"},
 											Nullable: true,
 										},
-										Position: resolve.Position{
-											Line:   4,
-											Column: 5,
-										},
 									},
 								},
 							},
@@ -1091,6 +999,7 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 					DisableDefaultMapping: true,
 				},
 			},
+			DisableResolveFieldPositions: true,
 		},
 	))
 	t.Run("get request with array query", datasourcetesting.RunTest(schema, arrayArgumentOperation, "ArgumentQuery",
@@ -1115,10 +1024,6 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 							BufferID:  0,
 							HasBuffer: true,
 							Name:      []byte("withArrayArguments"),
-							Position: resolve.Position{
-								Line:   3,
-								Column: 4,
-							},
 							Value: &resolve.Object{
 								Nullable: true,
 								Fields: []*resolve.Field{
@@ -1128,10 +1033,6 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 											Path:     []string{"name"},
 											Nullable: true,
 										},
-										Position: resolve.Position{
-											Line:   4,
-											Column: 5,
-										},
 									},
 								},
 							},
@@ -1171,6 +1072,7 @@ func TestFastHttpJsonDataSourcePlanning(t *testing.T) {
 					},
 				},
 			},
+			DisableResolveFieldPositions: true,
 		},
 	))
 }
diff --git a/pkg/engine/datasource/staticdatasource/static_datasource_test.go b/pkg/engine/datasource/staticdatasource/static_datasource_test.go
index 35dc7858..ec58bd2b 100644
--- a/pkg/engine/datasource/staticdatasource/static_datasource_test.go
+++ b/pkg/engine/datasource/staticdatasource/static_datasource_test.go
@@ -26,10 +26,6 @@ func TestStaticDataSourcePlanning(t *testing.T) {
 							Value: &resolve.String{
 								Nullable: true,
 							},
-							Position: resolve.Position{
-								Line:   1,
-								Column: 3,
-							},
 						},
 					},
 					Fetch: &resolve.SingleFetch{
@@ -65,6 +61,7 @@ func TestStaticDataSourcePlanning(t *testing.T) {
 					DisableDefaultMapping: true,
 				},
 			},
+			DisableResolveFieldPositions: true,
 		},
 	))
 }