public TitanGraphStep(final GraphStep<E> originalStep) { super(originalStep.getTraversal(), originalStep.getReturnClass(), originalStep.getIds()); originalStep.getLabels().forEach(this::addLabel); this.setIteratorSupplier(() -> { TitanTransaction tx = TitanTraversalUtil.getTx(traversal); TitanGraphQuery query = tx.query(); for (HasContainer condition : hasContainers) { query.has(condition.getKey(), TitanPredicate.Converter.convert(condition.getBiPredicate()), condition.getValue()); } for (OrderEntry order : orders) query.orderBy(order.key, order.order); if (limit != BaseQuery.NO_LIMIT) query.limit(limit); ((GraphCentricQueryBuilder) query).profiler(queryProfiler); return Vertex.class.isAssignableFrom(this.returnClass) ? query.vertices().iterator() : query.edges().iterator(); }); }
break; case EDGE: result = query.edges(); break; case VERTEX:
@Test public void testWithoutIndex() { PropertyKey kid = mgmt.makePropertyKey("kid").dataType(Long.class).make(); mgmt.makePropertyKey("name").dataType(String.class).make(); mgmt.makeEdgeLabel("knows").signature(kid).make(); finishSchema(); Random random = new Random(); int numV = 1000; TitanVertex previous = null; for (int i = 0; i < numV; i++) { TitanVertex v = graph.addVertex( "kid", random.nextInt(numV), "name", "v" + i); if (previous != null) { Edge e = v.addEdge("knows", previous, "kid", random.nextInt(numV / 2)); } previous = v; } verifyElementOrder(graph.query().orderBy("kid", incr).limit(500).vertices(), "kid", Order.ASC, 500); verifyElementOrder(graph.query().orderBy("kid", incr).limit(300).edges(), "kid", Order.ASC, 300); verifyElementOrder(graph.query().orderBy("kid", decr).limit(400).vertices(), "kid", Order.DESC, 400); verifyElementOrder(graph.query().orderBy("kid", decr).limit(200).edges(), "kid", Order.DESC, 200); clopen(); //Copied from above verifyElementOrder(graph.query().orderBy("kid", incr).limit(500).vertices(), "kid", Order.ASC, 500); verifyElementOrder(graph.query().orderBy("kid", incr).limit(300).edges(), "kid", Order.ASC, 300); verifyElementOrder(graph.query().orderBy("kid", decr).limit(400).vertices(), "kid", Order.DESC, 400); verifyElementOrder(graph.query().orderBy("kid", decr).limit(200).edges(), "kid", Order.DESC, 200); }
@Test public void testSimpleUpdate() { PropertyKey name = makeKey("name", String.class); EdgeLabel knows = makeLabel("knows"); mgmt.buildIndex("namev", Vertex.class).addKey(name).buildMixedIndex(INDEX); mgmt.buildIndex("namee", Edge.class).addKey(name).buildMixedIndex(INDEX); finishSchema(); TitanVertex v = tx.addVertex("name", "Marko Rodriguez"); Edge e = v.addEdge("knows", v, "name", "Hulu Bubab"); assertCount(1, tx.query().has("name", Text.CONTAINS, "marko").vertices()); assertCount(1, tx.query().has("name", Text.CONTAINS, "Hulu").edges()); for (Vertex u : tx.getVertices()) assertEquals("Marko Rodriguez", u.value("name")); clopen(); assertCount(1, tx.query().has("name", Text.CONTAINS, "marko").vertices()); assertCount(1, tx.query().has("name", Text.CONTAINS, "Hulu").edges()); for (Vertex u : tx.getVertices()) assertEquals("Marko Rodriguez", u.value("name")); v = getOnlyVertex(tx.query().has("name", Text.CONTAINS, "marko")); v.property(VertexProperty.Cardinality.single, "name", "Marko"); e = getOnlyEdge(v.query().direction(Direction.OUT)); e.property("name", "Tubu Rubu"); assertCount(1, tx.query().has("name", Text.CONTAINS, "marko").vertices()); assertCount(1, tx.query().has("name", Text.CONTAINS, "Rubu").edges()); assertCount(0, tx.query().has("name", Text.CONTAINS, "Hulu").edges()); for (Vertex u : tx.getVertices()) assertEquals("Marko", u.value("name")); clopen(); assertCount(1, tx.query().has("name", Text.CONTAINS, "marko").vertices()); assertCount(1, tx.query().has("name", Text.CONTAINS, "Rubu").edges()); assertCount(0, tx.query().has("name", Text.CONTAINS, "Hulu").edges()); for (Vertex u : tx.getVertices()) assertEquals("Marko", u.value("name")); }
final int numE = numV-1; assertCount(numV,tx.query().vertices()); assertCount(numE,tx.query().edges());
e4.property("type", 2); TitanEdge ef = getOnlyElement(v1.query().direction(Direction.OUT).labels("friend").edges()); assertEquals(ef, (Edge) getOnlyElement(graph.query().has("type", 0).edges())); ef.property("type", 1); graph.tx().commit();
assertCount(numV / strs.length * 2, graph.query().has("text", Text.CONTAINS, "ducks").edges()); assertCount(numV / strs.length * 2, graph.query().has("text", Text.CONTAINS, "farm").edges()); assertCount(numV / strs.length, graph.query().has("text", Text.CONTAINS, "beautiful").edges()); evaluateQuery(graph.query().has("text", Text.CONTAINS_PREFIX, "beauti"), ElementCategory.EDGE, numV / strs.length, new boolean[]{true, true}, EINDEX); assertCount(numV / strs.length, graph.query().has("text", Text.CONTAINS_REGEX, "be[r]+y").edges()); assertCount(0, graph.query().has("text", Text.CONTAINS, "lolipop").edges()); assertCount(numV / strs.length, graph.query().has("name", Cmp.EQUAL, strs[1]).edges()); assertCount(numV / strs.length, graph.query().has("name", Cmp.EQUAL, strs[1]).edges()); assertCount(numV / strs.length * (strs.length - 1), graph.query().has("name", Cmp.NOT_EQUAL, strs[2]).edges()); assertCount(0, graph.query().has("name", Cmp.EQUAL, "farm").edges()); assertCount(numV / strs.length, graph.query().has("name", Text.PREFIX, "ducks").edges()); assertCount(numV / strs.length * 2, graph.query().has("name", Text.REGEX, "(.*)ducks(.*)").edges()); assertCount(numV / strs.length * 2, graph.query().has("text", Text.CONTAINS, "ducks").edges()); assertCount(numV / strs.length * 2, graph.query().has("text", Text.CONTAINS, "farm").edges()); assertCount(numV / strs.length, graph.query().has("text", Text.CONTAINS, "beautiful").edges()); evaluateQuery(graph.query().has("text", Text.CONTAINS_PREFIX, "beauti"), ElementCategory.EDGE, numV / strs.length, new boolean[]{true, true}, EINDEX); assertCount(numV / strs.length, graph.query().has("text", Text.CONTAINS_REGEX, "be[r]+y").edges()); assertCount(0, graph.query().has("text", Text.CONTAINS, "lolipop").edges()); assertCount(numV / strs.length, graph.query().has("name", Cmp.EQUAL, strs[1]).edges()); assertCount(numV / strs.length, graph.query().has("name", Cmp.EQUAL, strs[1]).edges()); assertCount(numV / strs.length * (strs.length - 1), graph.query().has("name", Cmp.NOT_EQUAL, strs[2]).edges()); assertCount(0, graph.query().has("name", Cmp.EQUAL, "farm").edges()); assertCount(numV / strs.length, graph.query().has("name", Text.PREFIX, "ducks").edges()); assertCount(numV / strs.length * 2, graph.query().has("name", Text.REGEX, "(.*)ducks(.*)").edges());
int expectedSize = numV / words.length; assertCount(expectedSize, tx.query().has("text", Text.CONTAINS, words[i]).vertices()); assertCount(expectedSize, tx.query().has("text", Text.CONTAINS, words[i]).edges()); assertCount(3, tx.query().has("group", 3).orderBy("time", decr).limit(3).edges()); assertCount(i, tx.query().has("time", Cmp.GREATER_THAN_EQUAL, i).has("time", Cmp.LESS_THAN, i + i).edges()); distance = Geoshape.point(0.0, 0.0).getPoint().distance(Geoshape.point(offset, offset).getPoint()) + 20; assertCount(i + 1, tx.query().has("location", Geo.WITHIN, Geoshape.circle(0.0, 0.0, distance)).vertices()); assertCount(i + 1, tx.query().has("location", Geo.WITHIN, Geoshape.circle(0.0, 0.0, distance)).edges()); assertCount(4, tx.query().has("category", 1).interval("time", 10, 28).edges()); assertCount(numV, tx.query().edges()); int expectedSize = numV / words.length; assertCount(expectedSize, tx.query().has("text", Text.CONTAINS, words[i]).vertices()); assertCount(expectedSize, tx.query().has("text", Text.CONTAINS, words[i]).edges()); assertCount(3, tx.query().has("group", 3).orderBy("time", decr).limit(3).edges()); assertCount(i, tx.query().has("time", Cmp.GREATER_THAN_EQUAL, i).has("time", Cmp.LESS_THAN, i + i).edges()); distance = Geoshape.point(0.0, 0.0).getPoint().distance(Geoshape.point(offset, offset).getPoint()) + 20; assertCount(i + 1, tx.query().has("location", Geo.WITHIN, Geoshape.circle(0.0, 0.0, distance)).vertices()); assertCount(i + 1, tx.query().has("location", Geo.WITHIN, Geoshape.circle(0.0, 0.0, distance)).edges()); assertCount(4, tx.query().has("category", 1).interval("time", 10, 28).edges());
@Override public Iterable<AtlasEdge<Titan1Vertex, Titan1Edge>> edges() { Iterable<TitanEdge> it = query.edges(); return graph.wrapEdges(it); }
@Override public Iterable<AtlasEdge<Titan0Vertex, Titan0Edge>> edges() { Iterable it = query.edges(); return graph.wrapEdges(it); } @Override
public TitanGraphStep(final GraphStep<E> originalStep) { super(originalStep.getTraversal(), originalStep.getReturnClass(), originalStep.getIds()); originalStep.getLabels().forEach(this::addLabel); this.setIteratorSupplier(() -> { TitanTransaction tx = TitanTraversalUtil.getTx(traversal); TitanGraphQuery query = tx.query(); for (HasContainer condition : hasContainers) { query.has(condition.getKey(), TitanPredicate.Converter.convert(condition.getBiPredicate()), condition.getValue()); } for (OrderEntry order : orders) query.orderBy(order.key, order.order); if (limit != BaseQuery.NO_LIMIT) query.limit(limit); ((GraphCentricQueryBuilder) query).profiler(queryProfiler); return Vertex.class.isAssignableFrom(this.returnClass) ? query.vertices().iterator() : query.edges().iterator(); }); }
assertEquals(numV/strs.length*2,Iterables.size(graph.query().has("text",Text.CONTAINS,"ducks").edges())); assertEquals(numV/strs.length*2,Iterables.size(graph.query().has("text",Text.CONTAINS,"farm").edges())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("text",Text.CONTAINS,"beautiful").edges())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("text",Text.CONTAINS_PREFIX,"beauti").edges())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("text",Text.CONTAINS_REGEX,"be[r]+y").edges())); assertEquals(0,Iterables.size(graph.query().has("text",Text.CONTAINS,"lolipop").edges())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("name",Cmp.EQUAL,strs[1]).edges())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("name",Cmp.EQUAL,strs[1]).edges())); assertEquals(numV/strs.length*(strs.length-1),Iterables.size(graph.query().has("name",Cmp.NOT_EQUAL,strs[2]).edges())); assertEquals(0,Iterables.size(graph.query().has("name",Cmp.EQUAL,"farm").edges())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("name",Text.PREFIX,"ducks").edges())); assertEquals(numV/strs.length*2,Iterables.size(graph.query().has("name",Text.REGEX,"(.*)ducks(.*)").edges())); assertEquals(numV/strs.length*2,Iterables.size(graph.query().has("text",Text.CONTAINS,"ducks").edges())); assertEquals(numV/strs.length*2,Iterables.size(graph.query().has("text",Text.CONTAINS,"farm").edges())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("text",Text.CONTAINS,"beautiful").edges())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("text",Text.CONTAINS_PREFIX,"beauti").edges())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("text",Text.CONTAINS_REGEX,"be[r]+y").edges())); assertEquals(0,Iterables.size(graph.query().has("text",Text.CONTAINS,"lolipop").edges())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("name",Cmp.EQUAL,strs[1]).edges())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("name",Cmp.EQUAL,strs[1]).edges())); assertEquals(numV/strs.length*(strs.length-1),Iterables.size(graph.query().has("name",Cmp.NOT_EQUAL,strs[2]).edges())); assertEquals(0,Iterables.size(graph.query().has("name",Cmp.EQUAL,"farm").edges())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("name",Text.PREFIX,"ducks").edges())); assertEquals(numV/strs.length*2,Iterables.size(graph.query().has("name",Text.REGEX,"(.*)ducks(.*)").edges()));
e.setProperty("name","Hulu Bubab"); assertEquals(1, Iterables.size(tx.query().has("name", Text.CONTAINS, "marko").vertices())); assertEquals(1, Iterables.size(tx.query().has("name", Text.CONTAINS, "Hulu").edges())); for (Vertex u : tx.getVertices()) assertEquals("Marko Rodriguez",u.getProperty("name")); clopen(); assertEquals(1, Iterables.size(tx.query().has("name", Text.CONTAINS, "marko").vertices())); assertEquals(1, Iterables.size(tx.query().has("name", Text.CONTAINS, "Hulu").edges())); for (Vertex u : tx.getVertices()) assertEquals("Marko Rodriguez",u.getProperty("name")); v = (Vertex) Iterables.getOnlyElement(tx.query().has("name", Text.CONTAINS, "marko").vertices()); e.setProperty("name","Tubu Rubu"); assertEquals(1, Iterables.size(tx.query().has("name", Text.CONTAINS, "marko").vertices())); assertEquals(1, Iterables.size(tx.query().has("name", Text.CONTAINS, "Rubu").edges())); assertEquals(0, Iterables.size(tx.query().has("name", Text.CONTAINS, "Hulu").edges())); for (Vertex u : tx.getVertices()) assertEquals("Marko",u.getProperty("name")); clopen(); assertEquals(1, Iterables.size(tx.query().has("name", Text.CONTAINS, "marko").vertices())); assertEquals(1, Iterables.size(tx.query().has("name", Text.CONTAINS, "Rubu").edges())); assertEquals(0, Iterables.size(tx.query().has("name", Text.CONTAINS, "Hulu").edges())); for (Vertex u : tx.getVertices()) assertEquals("Marko",u.getProperty("name"));
assertEquals(numV/strs.length*2,Iterables.size(graph.query().has("text",Text.CONTAINS,"ducks").edges())); assertEquals(numV/strs.length*2,Iterables.size(graph.query().has("text",Text.CONTAINS,"farm").edges())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("text",Text.CONTAINS,"beautiful").edges())); evaluateQuery(graph.query().has("text",Text.CONTAINS_PREFIX,"beauti"), ElementCategory.EDGE,numV/strs.length,new boolean[]{true,true},EINDEX); assertEquals(numV/strs.length,Iterables.size(graph.query().has("text",Text.CONTAINS_REGEX,"be[r]+y").edges())); assertEquals(0,Iterables.size(graph.query().has("text",Text.CONTAINS,"lolipop").edges())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("name",Cmp.EQUAL,strs[1]).edges())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("name",Cmp.EQUAL,strs[1]).edges())); assertEquals(numV/strs.length*(strs.length-1),Iterables.size(graph.query().has("name",Cmp.NOT_EQUAL,strs[2]).edges())); assertEquals(0,Iterables.size(graph.query().has("name",Cmp.EQUAL,"farm").edges())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("name",Text.PREFIX,"ducks").edges())); assertEquals(numV/strs.length*2,Iterables.size(graph.query().has("name",Text.REGEX,"(.*)ducks(.*)").edges())); assertEquals(numV/strs.length*2,Iterables.size(graph.query().has("text",Text.CONTAINS,"ducks").edges())); assertEquals(numV/strs.length*2,Iterables.size(graph.query().has("text",Text.CONTAINS,"farm").edges())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("text",Text.CONTAINS,"beautiful").edges())); evaluateQuery(graph.query().has("text",Text.CONTAINS_PREFIX,"beauti"), ElementCategory.EDGE,numV/strs.length,new boolean[]{true,true},EINDEX); assertEquals(numV/strs.length,Iterables.size(graph.query().has("text",Text.CONTAINS_REGEX,"be[r]+y").edges())); assertEquals(0,Iterables.size(graph.query().has("text",Text.CONTAINS,"lolipop").edges())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("name",Cmp.EQUAL,strs[1]).edges())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("name",Cmp.EQUAL,strs[1]).edges())); assertEquals(numV/strs.length*(strs.length-1),Iterables.size(graph.query().has("name",Cmp.NOT_EQUAL,strs[2]).edges())); assertEquals(0,Iterables.size(graph.query().has("name",Cmp.EQUAL,"farm").edges())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("name",Text.PREFIX,"ducks").edges())); assertEquals(numV/strs.length*2,Iterables.size(graph.query().has("name",Text.REGEX,"(.*)ducks(.*)").edges()));
switch(resultType) { case PROPERTY: result = query.properties(); break; case EDGE: result = query.edges(); break; case VERTEX: result = query.vertices(); break; default: throw new AssertionError();
@Test public void testWithoutIndex() { PropertyKey kid = mgmt.makePropertyKey("kid").dataType(Long.class).make(); mgmt.makePropertyKey("name").dataType(String.class).make(); mgmt.makeEdgeLabel("knows").signature(kid).make(); finishSchema(); Random random = new Random(); int numV = 1000; TitanVertex previous = null; for (int i=0;i<numV;i++) { TitanVertex v = graph.addVertex(null); v.setProperty("kid",random.nextInt(numV)); v.setProperty("name","v"+i); if (previous!=null) { TitanEdge e = v.addEdge("knows",previous); e.setProperty("kid",random.nextInt(numV/2)); } previous=v; } TestUtil.verifyElementOrder(graph.query().orderBy("kid",Order.ASC).limit(500).vertices(),"kid",Order.ASC,500); TestUtil.verifyElementOrder(graph.query().orderBy("kid",Order.ASC).limit(300).edges(),"kid",Order.ASC,300); TestUtil.verifyElementOrder(graph.query().orderBy("kid",Order.DESC).limit(400).vertices(),"kid",Order.DESC,400); TestUtil.verifyElementOrder(graph.query().orderBy("kid",Order.DESC).limit(200).edges(),"kid",Order.DESC,200); clopen(); //Copied from above TestUtil.verifyElementOrder(graph.query().orderBy("kid",Order.ASC).limit(500).vertices(),"kid",Order.ASC,500); TestUtil.verifyElementOrder(graph.query().orderBy("kid",Order.ASC).limit(300).edges(),"kid",Order.ASC,300); TestUtil.verifyElementOrder(graph.query().orderBy("kid",Order.DESC).limit(400).vertices(),"kid",Order.DESC,400); TestUtil.verifyElementOrder(graph.query().orderBy("kid",Order.DESC).limit(200).edges(),"kid",Order.DESC,200); }
@Test public void testWithoutIndex() { TitanKey kid = graph.makeKey("kid").dataType(Long.class).single().make(); graph.makeKey("name").dataType(String.class).single().make(); graph.makeLabel("knows").signature(kid).make(); Random random = new Random(); int numV = 1000; TitanVertex previous = null; for (int i=0;i<numV;i++) { TitanVertex v = graph.addVertex(null); v.setProperty("kid",random.nextInt(numV)); v.setProperty("name","v"+i); if (previous!=null) { TitanEdge e = v.addEdge("knows",previous); e.setProperty("kid",random.nextInt(numV/2)); } previous=v; } clopen(); TestUtil.verifyElementOrder(graph.query().orderBy("kid",Order.ASC).limit(500).vertices(),"kid",Order.ASC,500); TestUtil.verifyElementOrder(graph.query().orderBy("kid",Order.ASC).limit(300).edges(),"kid",Order.ASC,300); TestUtil.verifyElementOrder(graph.query().orderBy("kid",Order.DESC).limit(400).vertices(),"kid",Order.DESC,400); TestUtil.verifyElementOrder(graph.query().orderBy("kid",Order.DESC).limit(200).edges(),"kid",Order.DESC,200); }
int expectedSize = numV / words.length; assertEquals(expectedSize, Iterables.size(tx.query().has("text", Text.CONTAINS, words[i]).vertices())); assertEquals(expectedSize, Iterables.size(tx.query().has("text", Text.CONTAINS, words[i]).edges())); for (Iterable<? extends Element> iter : ImmutableList.of( tx.query().has("text", Text.CONTAINS, words[i]).orderBy(orderKey, order).vertices(), tx.query().has("text", Text.CONTAINS, words[i]).orderBy(orderKey, order).edges() )) { Element previous = null; assertEquals(3, Iterables.size(tx.query().has("group", 3).orderBy("time", Order.DESC).limit(3).edges())); assertEquals(i, Iterables.size(tx.query().has("time", Cmp.GREATER_THAN_EQUAL, i).has("time", Cmp.LESS_THAN, i + i).edges())); distance = Geoshape.point(0.0, 0.0).getPoint().distance(Geoshape.point(offset, offset).getPoint()) + 20; assertEquals(i + 1, Iterables.size(tx.query().has("location", Geo.WITHIN, Geoshape.circle(0.0, 0.0, distance)).vertices())); assertEquals(i + 1, Iterables.size(tx.query().has("location", Geo.WITHIN, Geoshape.circle(0.0, 0.0, distance)).edges())); assertEquals(4, Iterables.size(tx.query().has("category", 1).interval("time", 10, 28).edges())); int expectedSize = numV / words.length; assertEquals(expectedSize, Iterables.size(tx.query().has("text", Text.CONTAINS, words[i]).vertices())); assertEquals(expectedSize, Iterables.size(tx.query().has("text", Text.CONTAINS, words[i]).edges())); for (Iterable<? extends Element> iter : ImmutableList.of( tx.query().has("text", Text.CONTAINS, words[i]).orderBy(orderKey, order).vertices(), tx.query().has("text", Text.CONTAINS, words[i]).orderBy(orderKey, order).edges() )) { TestUtil.verifyElementOrder(iter,orderKey,order,expectedSize);