protected static function executeOperation(ExecutionContext $context, $root, OperationDefinition $operation)
    {
        $type = self::getOperationRootType($context->schema, $operation);
        $fields = self::collectFields($context, $type, $operation->get('selectionSet'), new \ArrayObject(), new \ArrayObject());
        if ($operation->get('operation') === 'mutation') {
            return self::executeFieldsSerially($context, $type, $root, $fields->getArrayCopy());
        }

        return self::executeFields($context, $type, $root, $fields);
    }