Search in sources :

Example 1 with Step

use of org.apache.tinkerpop.gremlin.process.traversal.Step in project titan by thinkaurelius.

the class FulgoraUtil method getReverseTraversal.

private static FulgoraElementTraversal<Vertex, Edge> getReverseTraversal(final MessageScope.Local<?> scope, final TitanTransaction graph, @Nullable final Vertex start) {
    Traversal.Admin<Vertex, Edge> incident = scope.getIncidentTraversal().get().asAdmin();
    FulgoraElementTraversal<Vertex, Edge> result = FulgoraElementTraversal.of(graph);
    for (Step step : incident.getSteps()) result.addStep(step);
    Step<Vertex, ?> startStep = result.getStartStep();
    assert startStep instanceof VertexStep;
    ((VertexStep) startStep).reverseDirection();
    if (start != null)
        result.addStep(0, new StartStep<>(incident, start));
    result.asAdmin().setStrategies(FULGORA_STRATEGIES);
    return result;
}
Also used : TitanVertexStep(com.thinkaurelius.titan.graphdb.tinkerpop.optimize.TitanVertexStep) VertexStep(org.apache.tinkerpop.gremlin.process.traversal.step.map.VertexStep) Vertex(org.apache.tinkerpop.gremlin.structure.Vertex) Traversal(org.apache.tinkerpop.gremlin.process.traversal.Traversal) StartStep(org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.StartStep) TitanVertexStep(com.thinkaurelius.titan.graphdb.tinkerpop.optimize.TitanVertexStep) StartStep(org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.StartStep) OrderLocalStep(org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderLocalStep) Step(org.apache.tinkerpop.gremlin.process.traversal.Step) FilterStep(org.apache.tinkerpop.gremlin.process.traversal.step.filter.FilterStep) OrderGlobalStep(org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderGlobalStep) IdentityStep(org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.IdentityStep) VertexStep(org.apache.tinkerpop.gremlin.process.traversal.step.map.VertexStep) Edge(org.apache.tinkerpop.gremlin.structure.Edge)

Example 2 with Step

use of org.apache.tinkerpop.gremlin.process.traversal.Step in project titan by thinkaurelius.

the class TitanLocalQueryOptimizerStrategy method apply.

@Override
public void apply(final Traversal.Admin<?, ?> traversal) {
    if (!traversal.getGraph().isPresent())
        return;
    Graph graph = traversal.getGraph().get();
    //If this is a compute graph then we can't apply local traversal optimisation at this stage.
    StandardTitanGraph titanGraph = graph instanceof StandardTitanTx ? ((StandardTitanTx) graph).getGraph() : (StandardTitanGraph) graph;
    final boolean useMultiQuery = traversal.getEngine().isStandard() && titanGraph.getConfiguration().useMultiQuery();
    /*
                ====== VERTEX STEP ======
         */
    TraversalHelper.getStepsOfClass(VertexStep.class, traversal).forEach(originalStep -> {
        TitanVertexStep vstep = new TitanVertexStep(originalStep);
        TraversalHelper.replaceStep(originalStep, vstep, traversal);
        if (TitanTraversalUtil.isEdgeReturnStep(vstep)) {
            HasStepFolder.foldInHasContainer(vstep, traversal);
        }
        assert TitanTraversalUtil.isEdgeReturnStep(vstep) || TitanTraversalUtil.isVertexReturnStep(vstep);
        Step nextStep = TitanTraversalUtil.getNextNonIdentityStep(vstep);
        if (nextStep instanceof RangeGlobalStep) {
            int limit = QueryUtil.convertLimit(((RangeGlobalStep) nextStep).getHighRange());
            vstep.setLimit(QueryUtil.mergeLimits(limit, vstep.getLimit()));
        }
        if (useMultiQuery) {
            vstep.setUseMultiQuery(true);
        }
    });
    /*
                ====== PROPERTIES STEP ======
         */
    TraversalHelper.getStepsOfClass(PropertiesStep.class, traversal).forEach(originalStep -> {
        TitanPropertiesStep vstep = new TitanPropertiesStep(originalStep);
        TraversalHelper.replaceStep(originalStep, vstep, traversal);
        if (vstep.getReturnType().forProperties()) {
            HasStepFolder.foldInHasContainer(vstep, traversal);
        }
        if (useMultiQuery) {
            vstep.setUseMultiQuery(true);
        }
    });
    /*
                ====== EITHER INSIDE LOCAL ======
         */
    TraversalHelper.getStepsOfClass(LocalStep.class, traversal).forEach(localStep -> {
        Traversal.Admin localTraversal = ((LocalStep<?, ?>) localStep).getLocalChildren().get(0);
        Step localStart = localTraversal.getStartStep();
        if (localStart instanceof VertexStep) {
            TitanVertexStep vstep = new TitanVertexStep((VertexStep) localStart);
            TraversalHelper.replaceStep(localStart, vstep, localTraversal);
            if (TitanTraversalUtil.isEdgeReturnStep(vstep)) {
                HasStepFolder.foldInHasContainer(vstep, localTraversal);
                HasStepFolder.foldInOrder(vstep, localTraversal, traversal, false);
            }
            HasStepFolder.foldInRange(vstep, localTraversal);
            unfoldLocalTraversal(traversal, localStep, localTraversal, vstep, useMultiQuery);
        }
        if (localStart instanceof PropertiesStep) {
            TitanPropertiesStep vstep = new TitanPropertiesStep((PropertiesStep) localStart);
            TraversalHelper.replaceStep(localStart, vstep, localTraversal);
            if (vstep.getReturnType().forProperties()) {
                HasStepFolder.foldInHasContainer(vstep, localTraversal);
                HasStepFolder.foldInOrder(vstep, localTraversal, traversal, false);
            }
            HasStepFolder.foldInRange(vstep, localTraversal);
            unfoldLocalTraversal(traversal, localStep, localTraversal, vstep, useMultiQuery);
        }
    });
}
Also used : PropertiesStep(org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertiesStep) Traversal(org.apache.tinkerpop.gremlin.process.traversal.Traversal) PropertiesStep(org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertiesStep) Step(org.apache.tinkerpop.gremlin.process.traversal.Step) LocalStep(org.apache.tinkerpop.gremlin.process.traversal.step.branch.LocalStep) RangeGlobalStep(org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStep) VertexStep(org.apache.tinkerpop.gremlin.process.traversal.step.map.VertexStep) LocalStep(org.apache.tinkerpop.gremlin.process.traversal.step.branch.LocalStep) StandardTitanTx(com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx) VertexStep(org.apache.tinkerpop.gremlin.process.traversal.step.map.VertexStep) StandardTitanGraph(com.thinkaurelius.titan.graphdb.database.StandardTitanGraph) Graph(org.apache.tinkerpop.gremlin.structure.Graph) StandardTitanGraph(com.thinkaurelius.titan.graphdb.database.StandardTitanGraph) RangeGlobalStep(org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStep)

Example 3 with Step

use of org.apache.tinkerpop.gremlin.process.traversal.Step in project titan by thinkaurelius.

the class TitanGraphTest method assertNumStep.

private static void assertNumStep(int expectedResults, int expectedSteps, GraphTraversal traversal, Class<? extends Step>... expectedStepTypes) {
    int num = 0;
    while (traversal.hasNext()) {
        traversal.next();
        num++;
    }
    //        System.out.println(traversal);
    assertEquals(expectedResults, num);
    //Verify that steps line up with what is expected after Titan's optimizations are applied
    List<Step> steps = traversal.asAdmin().getSteps();
    Set<Class<? extends Step>> expSteps = Sets.newHashSet(expectedStepTypes);
    int numSteps = 0;
    for (Step s : steps) {
        //            System.out.println(s.getClass());
        if (s.getClass().equals(GraphStep.class) || s.getClass().equals(StartStep.class))
            continue;
        assertTrue(s.getClass().getName(), expSteps.contains(s.getClass()));
        numSteps++;
    }
    assertEquals(expectedSteps, numSteps);
}
Also used : TitanGraphStep(com.thinkaurelius.titan.graphdb.tinkerpop.optimize.TitanGraphStep) GraphStep(org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.GraphStep) StartStep(org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.StartStep) TitanGraphStep(com.thinkaurelius.titan.graphdb.tinkerpop.optimize.TitanGraphStep) StartStep(org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.StartStep) GraphStep(org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.GraphStep) TitanVertexStep(com.thinkaurelius.titan.graphdb.tinkerpop.optimize.TitanVertexStep) TitanPropertiesStep(com.thinkaurelius.titan.graphdb.tinkerpop.optimize.TitanPropertiesStep) LocalStep(org.apache.tinkerpop.gremlin.process.traversal.step.branch.LocalStep) OrderGlobalStep(org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderGlobalStep) Step(org.apache.tinkerpop.gremlin.process.traversal.Step) TraversalFilterStep(org.apache.tinkerpop.gremlin.process.traversal.step.filter.TraversalFilterStep)

Aggregations

Step (org.apache.tinkerpop.gremlin.process.traversal.Step)3 TitanVertexStep (com.thinkaurelius.titan.graphdb.tinkerpop.optimize.TitanVertexStep)2 Traversal (org.apache.tinkerpop.gremlin.process.traversal.Traversal)2 LocalStep (org.apache.tinkerpop.gremlin.process.traversal.step.branch.LocalStep)2 OrderGlobalStep (org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderGlobalStep)2 VertexStep (org.apache.tinkerpop.gremlin.process.traversal.step.map.VertexStep)2 StartStep (org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.StartStep)2 StandardTitanGraph (com.thinkaurelius.titan.graphdb.database.StandardTitanGraph)1 TitanGraphStep (com.thinkaurelius.titan.graphdb.tinkerpop.optimize.TitanGraphStep)1 TitanPropertiesStep (com.thinkaurelius.titan.graphdb.tinkerpop.optimize.TitanPropertiesStep)1 StandardTitanTx (com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx)1 FilterStep (org.apache.tinkerpop.gremlin.process.traversal.step.filter.FilterStep)1 RangeGlobalStep (org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStep)1 TraversalFilterStep (org.apache.tinkerpop.gremlin.process.traversal.step.filter.TraversalFilterStep)1 OrderLocalStep (org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderLocalStep)1 PropertiesStep (org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertiesStep)1 GraphStep (org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.GraphStep)1 IdentityStep (org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.IdentityStep)1 Edge (org.apache.tinkerpop.gremlin.structure.Edge)1 Graph (org.apache.tinkerpop.gremlin.structure.Graph)1