func Do(p Params) *Result { source := source.NewSource(&source.Source{ Body: []byte(p.RequestString), Name: "GraphQL request", }) AST, err := parser.Parse(parser.ParseParams{Source: source}) if err != nil { return &Result{ Errors: gqlerrors.FormatErrors(err), } } validationResult := ValidateDocument(&p.Schema, AST, nil) if !validationResult.IsValid { return &Result{ Errors: validationResult.Errors, } } return Execute(ExecuteParams{ Schema: p.Schema, Root: p.RootObject, AST: AST, OperationName: p.OperationName, Args: p.VariableValues, Context: p.Context, }) }
func executeOperation(p ExecuteOperationParams) *Result { operationType, err := getOperationRootType(p.ExecutionContext.Schema, p.Operation) if err != nil { return &Result{Errors: gqlerrors.FormatErrors(err)} } fields := collectFields(CollectFieldsParams{ ExeContext: p.ExecutionContext, RuntimeType: operationType, SelectionSet: p.Operation.GetSelectionSet(), }) executeFieldsParams := ExecuteFieldsParams{ ExecutionContext: p.ExecutionContext, ParentType: operationType, Source: p.Root, Fields: fields, } if p.Operation.GetOperation() == ast.OperationTypeMutation { return executeFieldsSerially(executeFieldsParams) } return executeFields(executeFieldsParams) }