public IGremlinQuery Apply(IGremlinQuery query)
        {
            var admin     = query.AsAdmin();
            var anonymous = GremlinQuery.Anonymous(admin.Model);

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

            if (vertexCriterionTraversal.AsAdmin().Steps.Count > 0 || edgeCriterionTraversal.AsAdmin().Steps.Count > 0)
            {
                var strategy = GremlinQuery.Create <Unit>(admin.Model, GremlinQueryExecutor.Invalid, "SubgraphStrategy")
                               .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
        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);
        }