private IGremlinQuery Create()
            {
                var startQuery = Volatile.Read(ref _startQuery);

                if (startQuery != null)
                {
                    return(startQuery);
                }

                IGremlinQuery ret = GremlinQuery.Create(
                    Model,
                    Executor,
                    Name,
                    Logger);

                if (!ExcludedStrategyNames.IsEmpty)
                {
                    ret = ret.AddStep(new WithoutStrategiesStep(ExcludedStrategyNames.ToArray()));
                }

                foreach (var strategy in IncludedStrategies)
                {
                    ret = strategy.Apply(ret);
                }

                return(Interlocked.CompareExchange(ref _startQuery, ret, null) ?? ret);
            }
 public IConfigurableGremlinQuerySource WithoutStrategies(params string[] strategies)
 {
     return(new ConfigurableGremlinQuerySourceImpl(Name, Model, _isUserSetModel, Executor, IncludedStrategies, ExcludedStrategyNames.AddRange(strategies), Logger));
 }
 IConfigurableGremlinQuerySource IConfigurableGremlinQuerySource.RemoveStrategies(params string[] strategies)
 {
     return(new ConfigurableGremlinQuerySourceImpl(Name, Model, Options, _isUserSetModel, Pipeline, IncludedStrategies, ExcludedStrategyNames.AddRange(strategies), Logger));
 }