예제 #1
0
        public IGremlinQueryBase Apply(IGremlinQueryBase query)
        {
            var environment = query.AsAdmin().Environment;
            var anonymous   = GremlinQuery.Anonymous(environment);

            var vertexCriterionTraversal = _vertexCriterion(anonymous.AsAdmin().ChangeQueryType <IVertexGremlinQuery <object> >());
            var edgeCriterionTraversal   = _edgeCriterion(anonymous.AsAdmin().ChangeQueryType <IEdgeGremlinQuery <object> >());

            if (vertexCriterionTraversal.AsAdmin().Steps.Count > 0 || edgeCriterionTraversal.AsAdmin().Steps.Count > 0)
            {
                var strategy = GremlinQuery.Create <object>(environment)
                               .AddStep(BuildStep.Instance);

                if (vertexCriterionTraversal.AsAdmin().Steps.Count > 0)
                {
                    strategy = strategy.AddStep(new VerticesStep(vertexCriterionTraversal));
                }

                if (edgeCriterionTraversal.AsAdmin().Steps.Count > 0)
                {
                    strategy = strategy.AddStep(new EdgesStep(edgeCriterionTraversal));
                }

                return(query
                       .AddStep(new WithStrategiesStep(strategy.AddStep(CreateStep.Instance))));
            }

            return(query);
        }
예제 #2
0
            private IGremlinQueryBase Create()
            {
                var startQuery = Volatile.Read(ref _startQuery);

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

                IGremlinQueryBase ret = GremlinQuery.Create <object>(Environment);

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

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

                return(Interlocked.CompareExchange(ref _startQuery, ret, null) ?? ret);
            }