use of com.tinkerpop.pipes.filter.PropertyFilterPipe in project gremlin by tinkerpop.
the class GremlinFluentUtility method optimizePipelineForVertexQuery.
public static boolean optimizePipelineForVertexQuery(final GremlinPipeline pipeline, final Pipe pipe) {
VertexQueryPipe queryPipe = null;
for (int i = pipeline.size() - 1; i > 0; i--) {
final Pipe temp = pipeline.get(i);
if (temp instanceof VertexQueryPipe) {
queryPipe = (VertexQueryPipe) temp;
break;
} else if (!(temp instanceof IdentityPipe))
break;
}
if (null != queryPipe) {
if (pipe instanceof EdgesVerticesPipe) {
if (queryPipe.getResultElementClass().equals(Vertex.class))
return false;
queryPipe.setResultingElementClass(Vertex.class);
} else if (pipe instanceof VerticesVerticesPipe) {
if (queryPipe.getResultElementClass().equals(Vertex.class))
return false;
queryPipe.setDirection(((VerticesVerticesPipe) pipe).getDirection());
queryPipe.setLabels(((VerticesVerticesPipe) pipe).getLabels());
queryPipe.setBranchFactor(((VerticesVerticesPipe) pipe).getBranchFactor());
} else if (pipe instanceof VerticesEdgesPipe) {
if (queryPipe.getResultElementClass().equals(Vertex.class))
return false;
queryPipe.setResultingElementClass(Edge.class);
queryPipe.setDirection(((VerticesEdgesPipe) pipe).getDirection());
queryPipe.setLabels(((VerticesEdgesPipe) pipe).getLabels());
queryPipe.setBranchFactor(((VerticesEdgesPipe) pipe).getBranchFactor());
} else if (pipe instanceof PropertyFilterPipe) {
if (queryPipe.getResultElementClass().equals(Vertex.class))
return false;
final PropertyFilterPipe temp = (PropertyFilterPipe) pipe;
queryPipe.addHasContainer(new QueryPipe.HasContainer(temp.getKey(), temp.getPredicate(), temp.getValue()));
} else if (pipe instanceof IntervalFilterPipe) {
if (queryPipe.getResultElementClass().equals(Vertex.class))
return false;
final IntervalFilterPipe temp = (IntervalFilterPipe) pipe;
queryPipe.addIntervalContainer(new QueryPipe.IntervalContainer(temp.getKey(), temp.getStartValue(), temp.getEndValue()));
} else if (pipe instanceof RangeFilterPipe) {
queryPipe.setLowRange(((RangeFilterPipe) pipe).getLowRange());
queryPipe.setHighRange(((RangeFilterPipe) pipe).getHighRange());
}
pipeline.addPipe(new IdentityPipe());
return true;
} else {
return false;
}
}
use of com.tinkerpop.pipes.filter.PropertyFilterPipe in project gremlin by tinkerpop.
the class GremlinFluentUtilityTest method testNoEdgeConstraintOptimizations.
public void testNoEdgeConstraintOptimizations() {
Graph graph = TinkerGraphFactory.createTinkerGraph();
GremlinPipeline pipeline = new GremlinPipeline(graph.getVertex(1)).outE().sideEffect(null).inV();
// System.out.println(pipeline);
assertEquals(pipeline.size(), 4);
assertTrue(pipeline.get(0) instanceof GremlinStartPipe);
assertTrue(pipeline.get(1) instanceof VertexQueryPipe);
assertTrue(pipeline.get(2) instanceof SideEffectFunctionPipe);
assertTrue(pipeline.get(3) instanceof InVertexPipe);
pipeline = new GremlinPipeline(graph.getVertex(1)).outE().filter(null).inV();
//System.out.println(pipeline);
assertEquals(pipeline.size(), 4);
assertTrue(pipeline.get(0) instanceof GremlinStartPipe);
assertTrue(pipeline.get(1) instanceof VertexQueryPipe);
assertTrue(pipeline.get(2) instanceof FilterPipe);
assertTrue(pipeline.get(3) instanceof InVertexPipe);
pipeline = new GremlinPipeline(graph.getVertex(1)).outE().has("weight", 0.5).filter(null).has("date", 2012).inV();
//System.out.println(pipeline);
assertEquals(pipeline.size(), 6);
assertTrue(pipeline.get(0) instanceof GremlinStartPipe);
assertTrue(pipeline.get(1) instanceof VertexQueryPipe);
assertTrue(pipeline.get(2) instanceof IdentityPipe);
assertTrue(pipeline.get(3) instanceof FilterPipe);
assertTrue(pipeline.get(4) instanceof PropertyFilterPipe);
assertTrue(pipeline.get(5) instanceof InVertexPipe);
// TEST OPTIMIZE(BOOLEAN) PARAMETERIZATION
pipeline = new GremlinPipeline(graph.getVertex(1)).optimize(false).outE("knows").has("weight", 0.5).inV();
//System.out.println(pipeline);
assertEquals(pipeline.size(), 4);
assertTrue(pipeline.get(0) instanceof GremlinStartPipe);
assertTrue(pipeline.get(1) instanceof OutEdgesPipe);
assertTrue(pipeline.get(2) instanceof PropertyFilterPipe);
assertTrue(pipeline.get(3) instanceof InVertexPipe);
pipeline = new GremlinPipeline(graph.getVertex(1)).optimize(true).outE("knows").has("weight", 0.5).inV();
//System.out.println(pipeline);
assertEquals(pipeline.size(), 4);
assertTrue(pipeline.get(0) instanceof GremlinStartPipe);
assertTrue(pipeline.get(1) instanceof VertexQueryPipe);
assertTrue(pipeline.get(2) instanceof IdentityPipe);
assertTrue(pipeline.get(3) instanceof InVertexPipe);
}
use of com.tinkerpop.pipes.filter.PropertyFilterPipe in project gremlin by tinkerpop.
the class GremlinFluentUtility method optimizePipelineForGraphQuery.
private static boolean optimizePipelineForGraphQuery(final GremlinPipeline pipeline, final Pipe pipe) {
GraphQueryPipe queryPipe = null;
for (int i = pipeline.size() - 1; i > 0; i--) {
final Pipe temp = pipeline.get(i);
if (temp instanceof GraphQueryPipe) {
queryPipe = (GraphQueryPipe) temp;
break;
} else if (!(temp instanceof IdentityPipe))
break;
}
if (null != queryPipe) {
if (pipe instanceof PropertyFilterPipe) {
final PropertyFilterPipe temp = (PropertyFilterPipe) pipe;
queryPipe.addHasContainer(new QueryPipe.HasContainer(temp.getKey(), temp.getPredicate(), temp.getValue()));
} else if (pipe instanceof IntervalFilterPipe) {
final IntervalFilterPipe temp = (IntervalFilterPipe) pipe;
queryPipe.addIntervalContainer(new QueryPipe.IntervalContainer(temp.getKey(), temp.getStartValue(), temp.getEndValue()));
} else if (pipe instanceof RangeFilterPipe) {
queryPipe.setLowRange(((RangeFilterPipe) pipe).getLowRange());
queryPipe.setHighRange(((RangeFilterPipe) pipe).getHighRange());
}
pipeline.addPipe(new IdentityPipe());
return true;
} else {
return false;
}
}
use of com.tinkerpop.pipes.filter.PropertyFilterPipe in project gremlin by tinkerpop.
the class GremlinFluentUtilityTest method testVertexRangeOptimization.
public void testVertexRangeOptimization() {
Graph graph = TinkerGraphFactory.createTinkerGraph();
GremlinPipeline pipeline = new GremlinPipeline(graph.getVertex(1)).out().out();
//System.out.println(pipeline);
assertEquals(pipeline.size(), 3);
assertTrue(pipeline.get(0) instanceof GremlinStartPipe);
assertTrue(pipeline.get(1) instanceof VertexQueryPipe);
assertTrue(pipeline.get(2) instanceof VertexQueryPipe);
pipeline = new GremlinPipeline(graph.getVertex(1)).out().out().range(0, 10);
//System.out.println(pipeline);
assertEquals(pipeline.size(), 4);
assertTrue(pipeline.get(0) instanceof GremlinStartPipe);
assertTrue(pipeline.get(1) instanceof VertexQueryPipe);
assertTrue(pipeline.get(2) instanceof VertexQueryPipe);
assertTrue(pipeline.get(3) instanceof IdentityPipe);
pipeline = new GremlinPipeline(graph.getVertex(1)).out("knows").out().range(5, 10);
//System.out.println(pipeline);
assertEquals(pipeline.size(), 4);
assertTrue(pipeline.get(0) instanceof GremlinStartPipe);
assertTrue(pipeline.get(1) instanceof VertexQueryPipe);
assertTrue(pipeline.get(2) instanceof VertexQueryPipe);
assertTrue(pipeline.get(3) instanceof IdentityPipe);
// no optimization should occur
pipeline = new GremlinPipeline(graph.getVertex(1)).out("knows").out().has("name", "marko").range(0, 10);
// System.out.println(pipeline);
assertEquals(pipeline.size(), 5);
assertTrue(pipeline.get(0) instanceof GremlinStartPipe);
assertTrue(pipeline.get(1) instanceof VertexQueryPipe);
assertTrue(pipeline.get(2) instanceof VertexQueryPipe);
assertTrue(pipeline.get(3) instanceof PropertyFilterPipe);
assertTrue(pipeline.get(4) instanceof RangeFilterPipe);
}
Aggregations