Пример #1
0
        public Selection RewriteSelection(
            SelectionOptimizerContext context,
            Selection selection)
        {
            for (var i = 0; i < _optimizer.Count; i++)
            {
                if (_optimizer[i].CanHandle(selection))
                {
                    selection = _optimizer[i].RewriteSelection(context, selection);
                }
            }

            for (var i = 0; i < _fieldHandlers.Count; i++)
            {
                if (_fieldHandlers[i].CanHandle(selection))
                {
                    IProjectionFieldHandler fieldHandler = _fieldHandlers[i];

                    for (var m = 0; m < _fieldInterceptors.Count; m++)
                    {
                        if (_fieldInterceptors[m].CanHandle(selection))
                        {
                            fieldHandler = fieldHandler.Wrap(_fieldInterceptors[m]);
                        }
                    }

                    return(ProjectionSelection.From(
                               selection,
                               fieldHandler));
                }
            }

            return(selection);
        }
Пример #2
0
    private bool AllowFragmentDeferral(
        CompilerContext context,
        FragmentSpreadNode fragmentSpread,
        FragmentDefinitionNode fragmentDefinition)
    {
        if (context.Optimizers.Count == 0)
        {
            return(true);
        }

        var optimizerContext = new SelectionOptimizerContext(this, context);

        if (context.Optimizers.Count == 1)
        {
            return(context.Optimizers[0].AllowFragmentDeferral(
                       optimizerContext, fragmentSpread, fragmentDefinition));
        }

        for (var i = 0; i < context.Optimizers.Count; i++)
        {
            if (!context.Optimizers[i].AllowFragmentDeferral(
                    optimizerContext, fragmentSpread, fragmentDefinition))
            {
                return(false);
            }
        }

        return(true);
    }
Пример #3
0
 public bool AllowFragmentDeferral(
     SelectionOptimizerContext context,
     FragmentSpreadNode fragmentSpread,
     FragmentDefinitionNode fragmentDefinition)
 {
     throw new NotImplementedException();
 }
Пример #4
0
 public bool AllowFragmentDeferral(
     SelectionOptimizerContext context,
     FragmentSpreadNode fragmentSpread,
     FragmentDefinitionNode fragmentDefinition)
 {
     return(false);
 }
Пример #5
0
        public void OptimizeSelectionSet(SelectionOptimizerContext context)
        {
            var processedFields = new HashSet <string>();

            while (!processedFields.SetEquals(context.Fields.Keys))
            {
                var fieldsToProcess = new HashSet <string>(context.Fields.Keys);
                fieldsToProcess.ExceptWith(processedFields);
                foreach (var field in fieldsToProcess)
                {
                    context.Fields[field] =
                        _provider.RewriteSelection(context, context.Fields[field]);
                    processedFields.Add(field);
                }
            }
        }
Пример #6
0
    private void OptimizeSelectionSet(CompilerContext context)
    {
        if (context.Optimizers.Count == 0)
        {
            return;
        }

        var optimizerContext = new SelectionOptimizerContext(this, context);

        if (context.Optimizers.Count == 1)
        {
            context.Optimizers[0].OptimizeSelectionSet(optimizerContext);
            return;
        }

        for (var i = 0; i < context.Optimizers.Count; i++)
        {
            context.Optimizers[i].OptimizeSelectionSet(optimizerContext);
        }
    }
Пример #7
0
 public bool AllowFragmentDeferral(
     SelectionOptimizerContext context,
     InlineFragmentNode fragment)
 {
     throw new NotImplementedException();
 }
Пример #8
0
 public void OptimizeSelectionSet(SelectionOptimizerContext context)
 {
     throw new NotImplementedException();
 }
Пример #9
0
 public Selection RewriteSelection(
     SelectionOptimizerContext context,
     Selection selection)
 {
     throw new NotImplementedException();
 }
Пример #10
0
 public bool AllowFragmentDeferral(
     SelectionOptimizerContext context,
     InlineFragmentNode fragment)
 {
     return(false);
 }