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(); }); }
@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 testLimitWithMixedIndexCoverage() { final String vt = "vt"; final String fn = "firstname"; final String user = "user"; final String alice = "alice"; final String bob = "bob"; PropertyKey vtk = makeVertexIndexedKey(vt, String.class); PropertyKey fnk = makeKey(fn, String.class); finishSchema(); TitanVertex a = tx.addVertex(vt, user, fn, "alice"); TitanVertex b = tx.addVertex(vt, user, fn, "bob"); TitanVertex v; v = getOnlyElement(tx.query().has(vt, user).has(fn, bob).limit(1).vertices()); assertEquals(bob, v.value(fn)); assertEquals(user, v.value(vt)); v = getOnlyElement(tx.query().has(vt, user).has(fn, alice).limit(1).vertices()); assertEquals(alice, v.value(fn)); assertEquals(user, v.value(vt)); tx.commit(); tx = graph.newTransaction(); v = getOnlyElement(tx.query().has(vt, user).has(fn, bob).limit(1).vertices()); assertEquals(bob, v.value(fn)); assertEquals(user, v.value(vt)); v = getOnlyElement(tx.query().has(vt, user).has(fn, alice).limit(1).vertices()); assertEquals(alice, v.value(fn)); assertEquals(user, v.value(vt)); }
for (TitanVertex v : tx.query().limit(deleteV).vertices()) { v.remove();
evaluateQuery(tx.query().has("text", Cmp.EQUAL, strs[0]).has(LABEL_NAME, "connect"), ElementCategory.EDGE, numV / strs.length, new boolean[]{true, sorted}, edge2.name()); evaluateQuery(tx.query().has("text", Cmp.EQUAL, strs[0]).has(LABEL_NAME, "connect").limit(10), ElementCategory.EDGE, 10, new boolean[]{true, sorted}, edge2.name()); evaluateQuery(tx.query().has("text", Cmp.EQUAL, strs[0]), evaluateQuery(tx.query().has("text", Cmp.EQUAL, strs[0]).has(LABEL_NAME, "connect"), ElementCategory.EDGE, numV / strs.length, new boolean[]{true, sorted}, edge2.name()); evaluateQuery(tx.query().has("text", Cmp.EQUAL, strs[0]).has(LABEL_NAME, "connect").limit(10), ElementCategory.EDGE, 10, new boolean[]{true, sorted}, edge2.name()); evaluateQuery(tx.query().has("text", Cmp.EQUAL, strs[0]), evaluateQuery(tx.query().has("time", Cmp.EQUAL, numV + 10).has("weight", Cmp.EQUAL, 0), ElementCategory.EDGE, 1, new boolean[]{true, sorted}, edge1.name()); evaluateQuery(tx.query().has("text", Cmp.EQUAL, strs[0]).has(LABEL_NAME, "connect").limit(10), ElementCategory.EDGE, 10, new boolean[]{true, sorted}, edge2.name()); evaluateQuery(tx.query().has("weight", Cmp.EQUAL, 1.5), evaluateQuery(tx.query().has("time", Cmp.EQUAL, numV + 10).has("weight", Cmp.EQUAL, 0), ElementCategory.EDGE, 1, new boolean[]{true, sorted}, edge1.name()); evaluateQuery(tx.query().has("text", Cmp.EQUAL, strs[0]).has(LABEL_NAME, "connect").limit(10), ElementCategory.EDGE, 10, new boolean[]{true, sorted}, edge2.name()); evaluateQuery(tx.query().has("weight", Cmp.EQUAL, 1.5),
assertCount(3, tx.query().has("group", 3).orderBy("time", incr).limit(3).vertices()); assertCount(3, tx.query().has("group", 3).orderBy("time", decr).limit(3).edges()); assertCount(3, tx.query().has("group", 3).orderBy("time", incr).limit(3).vertices()); assertCount(3, tx.query().has("group", 3).orderBy("time", decr).limit(3).edges());
@Override public Iterable<AtlasVertex<Titan0Vertex, Titan0Edge>> vertices(int offset, int limit) { List<Vertex> result = new ArrayList<>(limit); Iterator<Vertex> iter = query.limit(offset + limit).vertices().iterator(); for (long resultIdx = 0; iter.hasNext() && result.size() < limit; resultIdx++) { if (resultIdx < offset) { continue; } result.add(iter.next()); } return graph.wrapVertices(result); }
@Override public Iterable<AtlasVertex<Titan1Vertex, Titan1Edge>> vertices(int offset, int limit) { List<Vertex> result = new ArrayList<>(limit); Iterator<? extends Vertex> iter = query.limit(offset + limit).vertices().iterator(); for (long resultIdx = 0; iter.hasNext() && result.size() < limit; resultIdx++) { if (resultIdx < offset) { continue; } result.add(iter.next()); } return graph.wrapVertices(result); }
@Override public Iterable<AtlasVertex<Titan0Vertex, Titan0Edge>> vertices(int limit) { Iterable it = query.limit(limit).vertices(); return graph.wrapVertices(it); }
@Override public Iterable<AtlasVertex<Titan1Vertex, Titan1Edge>> vertices(int limit) { Iterable<TitanVertex> it = query.limit(limit).vertices(); return graph.wrapVertices(it); }
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(); }); }
@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); }
i = tx.query().has(vt, user).has(fn, bob).limit(1).vertices(); assertEquals(bob, Iterators.getOnlyElement(i.iterator()).getProperty(fn)); assertEquals(user, Iterators.getOnlyElement(i.iterator()).getProperty(vt)); assertEquals(1, Iterators.size(i.iterator())); i = tx.query().has(vt, user).has(fn, alice).limit(1).vertices(); assertEquals(alice, Iterators.getOnlyElement(i.iterator()).getProperty(fn)); assertEquals(user, Iterators.getOnlyElement(i.iterator()).getProperty(vt)); tx = graph.newTransaction(); i = tx.query().has(vt, user).has(fn, bob).limit(1).vertices(); assertEquals(bob, Iterators.getOnlyElement(i.iterator()).getProperty(fn)); assertEquals(user, Iterators.getOnlyElement(i.iterator()).getProperty(vt)); assertEquals(1, Iterators.size(i.iterator())); i = tx.query().has(vt, user).has(fn, alice).limit(1).vertices(); assertEquals(alice, Iterators.getOnlyElement(i.iterator()).getProperty(fn)); assertEquals(user, Iterators.getOnlyElement(i.iterator()).getProperty(vt));
i = tx.query().has(vt, user).has(fn, bob).limit(1).vertices(); assertEquals(bob, Iterators.getOnlyElement(i.iterator()).getProperty(fn)); assertEquals(user, Iterators.getOnlyElement(i.iterator()).getProperty(vt)); assertEquals(1, Iterators.size(i.iterator())); i = tx.query().has(vt, user).has(fn, alice).limit(1).vertices(); assertEquals(alice, Iterators.getOnlyElement(i.iterator()).getProperty(fn)); assertEquals(user, Iterators.getOnlyElement(i.iterator()).getProperty(vt)); tx = graph.newTransaction(); i = tx.query().has(vt, user).has(fn, bob).limit(1).vertices(); assertEquals(bob, Iterators.getOnlyElement(i.iterator()).getProperty(fn)); assertEquals(user, Iterators.getOnlyElement(i.iterator()).getProperty(vt)); assertEquals(1, Iterators.size(i.iterator())); i = tx.query().has(vt, user).has(fn, alice).limit(1).vertices(); assertEquals(alice, Iterators.getOnlyElement(i.iterator()).getProperty(fn)); assertEquals(user, Iterators.getOnlyElement(i.iterator()).getProperty(vt));
assertEquals(3, Iterables.size(tx.query().has("group", 3).orderBy("time", Order.ASC).limit(3).vertices())); assertEquals(3, Iterables.size(tx.query().has("group", 3).orderBy("time", Order.DESC).limit(3).edges())); assertEquals(3, Iterables.size(tx.query().has("group", 3).orderBy("time", Order.ASC).limit(3).vertices())); assertEquals(3, Iterables.size(tx.query().has("group", 3).orderBy("time", Order.DESC).limit(3).edges()));
assertEquals(3, Iterables.size(tx.query().has("group", 3).orderBy("time", Order.ASC).limit(3).vertices())); assertEquals(3, Iterables.size(tx.query().has("group", 3).orderBy("time", Order.DESC).limit(3).edges())); assertEquals(3, Iterables.size(tx.query().has("group", 3).orderBy("time", Order.ASC).limit(3).vertices())); assertEquals(3, Iterables.size(tx.query().has("group", 3).orderBy("time", Order.DESC).limit(3).edges()));
evaluateQuery(tx.query().has(text,Cmp.EQUAL,strs[0]).has("label",connect.getName()), ElementCategory.EDGE,numV/strs.length,new boolean[]{true,sorted},edge2.getName()); evaluateQuery(tx.query().has(text,Cmp.EQUAL,strs[0]).has("label",connect.getName()).limit(10), ElementCategory.EDGE,10,new boolean[]{true,sorted},edge2.getName()); evaluateQuery(tx.query().has(text,Cmp.EQUAL,strs[0]), evaluateQuery(tx.query().has(text,Cmp.EQUAL,strs[0]).has("label",connect.getName()), ElementCategory.EDGE,numV/strs.length,new boolean[]{true,sorted},edge2.getName()); evaluateQuery(tx.query().has(text,Cmp.EQUAL,strs[0]).has("label",connect.getName()).limit(10), ElementCategory.EDGE,10,new boolean[]{true,sorted},edge2.getName()); evaluateQuery(tx.query().has(text,Cmp.EQUAL,strs[0]), evaluateQuery(tx.query().has(time,Cmp.EQUAL,numV+10).has(weight,Cmp.EQUAL,0), ElementCategory.EDGE,1,new boolean[]{true,sorted},edge1.getName()); evaluateQuery(tx.query().has(text,Cmp.EQUAL,strs[0]).has("label",connect.getName()).limit(10), ElementCategory.EDGE,10,new boolean[]{true,sorted},edge2.getName()); evaluateQuery(tx.query().has(weight,Cmp.EQUAL,1.5), evaluateQuery(tx.query().has(time,Cmp.EQUAL,numV+10).has(weight,Cmp.EQUAL,0), ElementCategory.EDGE,1,new boolean[]{true,sorted},edge1.getName()); evaluateQuery(tx.query().has(text,Cmp.EQUAL,strs[0]).has("label",connect.getName()).limit(10), ElementCategory.EDGE,10,new boolean[]{true,sorted},edge2.getName()); evaluateQuery(tx.query().has(weight,Cmp.EQUAL,1.5),