code: def execute_operation(
          self, operation: OperationDefinitionNode, root_value: Any
      ) -> Optional[AwaitableOrValue[Any]]:
          
          type_ = get_operation_root_type(self.schema, operation)
          fields = self.collect_fields(type_, operation.selection_set, {}, set())
  
          path = None
  
          # Errors from sub-fields of a NonNull type may propagate to the top level, at
          # which point we still log the error and null the parent field, which in this
          # case is the entire response.
          #
          # Similar to complete_value_catching_error.
          try:
              result = (
                  self.execute_fields_serially
                  if operation.operation == OperationType.MUTATION
                  else self.execute_fields
              )(type_, root_value, path, fields)
          except GraphQLError as error:
              self.errors.append(error)
              return None
          except Exception as error:
              error = GraphQLError(str(error), original_error=error)
              self.errors.append(error)
              return None
          else:
              if isawaitable(result):
                  # noinspection PyShadowingNames
                  async def await_result():
                      try:
                          return await result
                      except GraphQLError as error:
                          self.errors.append(error)
                      except Exception as error:
                          error = GraphQLError(str(error), original_error=error)
                          self.errors.append(error)
  
                  return await_result()
              return result
docs: Execute an operation.
  
          Implements the "Evaluating operations" section of the spec.