@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)); }
@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")); }
evaluateQuery(graph.query().has("text", Text.CONTAINS, "ducks"), ElementCategory.VERTEX, numV / strs.length * 2, new boolean[]{true, true}, VINDEX); assertCount(numV / strs.length * 2, graph.query().has("text", Text.CONTAINS, "ducks").vertices()); assertCount(numV / strs.length * 2, graph.query().has("text", Text.CONTAINS, "farm").vertices()); assertCount(numV / strs.length, graph.query().has("text", Text.CONTAINS, "beautiful").vertices()); evaluateQuery(graph.query().has("text", Text.CONTAINS_PREFIX, "beauti"), ElementCategory.VERTEX, numV / strs.length, new boolean[]{true, true}, VINDEX); assertCount(numV / strs.length, graph.query().has("text", Text.CONTAINS_REGEX, "be[r]+y").vertices()); assertCount(0, graph.query().has("text", Text.CONTAINS, "lolipop").vertices()); assertCount(numV / strs.length, graph.query().has("name", Cmp.EQUAL, strs[1]).vertices()); assertCount(numV / strs.length, graph.query().has("name", Cmp.EQUAL, strs[1]).vertices()); assertCount(numV / strs.length * (strs.length - 1), graph.query().has("name", Cmp.NOT_EQUAL, strs[2]).vertices()); assertCount(0, graph.query().has("name", Cmp.EQUAL, "farm").vertices()); assertCount(numV / strs.length, graph.query().has("name", Text.PREFIX, "ducks").vertices()); assertCount(numV / strs.length * 2, graph.query().has("name", Text.REGEX, "(.*)ducks(.*)").vertices()); evaluateQuery(graph.query().has("text", Text.CONTAINS, "ducks"), ElementCategory.EDGE, numV / strs.length * 2, new boolean[]{true, true}, EINDEX); 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());
@Override public void run() { while (true) { // Set propType to a random value on a random node TitanVertex n = getOnlyVertex(tx.query().has(idKey, RandomGenerator.randomInt(0, nodeCount))); String propVal = RandomGenerator.randomString(); n.property(randomKey, propVal); if (Thread.interrupted()) break; // Is creating the same property twice an error? } } }
v2.property(VertexProperty.Cardinality.single, "time", time2); evaluateQuery(tx.query().has("name", "first event").orderBy("time", decr), ElementCategory.VERTEX, 1, new boolean[]{true, true}, tx.getPropertyKey("time"), Order.DESC, "index1"); evaluateQuery(tx.query().has("text", Text.CONTAINS, "help").has(LABEL_NAME, "event"), ElementCategory.VERTEX, 1, new boolean[]{true, true}, "index2"); Object v2Id = v2.id(); evaluateQuery(tx.query().has("name", "first event").orderBy("time", decr), ElementCategory.VERTEX, 1, new boolean[]{true, true}, tx.getPropertyKey("time"), Order.DESC, "index1"); evaluateQuery(tx.query().has("text", Text.CONTAINS, "help").has(LABEL_NAME, "event"), ElementCategory.VERTEX, 1, new boolean[]{true, true}, "index2"); evaluateQuery(tx.query().has("text", Text.CONTAINS, "help").has(LABEL_NAME, "event"), ElementCategory.VERTEX, 0, new boolean[]{true, true}, "index2"); evaluateQuery(tx.query().has("name", "first event").orderBy("time", decr), ElementCategory.VERTEX, 0, new boolean[]{true, true}, tx.getPropertyKey("time"), Order.DESC, "index1");
evaluateQuery(tx.query().has("text", Text.CONTAINS, "rocks"), ElementCategory.VERTEX, 1, new boolean[]{true, true}, "theIndex"); evaluateQuery(tx.query().has("time", 5), ElementCategory.VERTEX, 1, new boolean[]{false, true}); evaluateQuery(tx.query().interval("height", 100, 200), ElementCategory.VERTEX, 1, new boolean[]{false, true}); evaluateQuery(tx.query().interval("height", 100, 200).has("time", 5), ElementCategory.VERTEX, 1, new boolean[]{false, true}); evaluateQuery(tx.query().has("text", Text.CONTAINS, "rocks").has("time", 5).interval("height", 100, 200), ElementCategory.VERTEX, 1, new boolean[]{false, true}, "theIndex"); if (indexFeatures.supportsCardinality(Cardinality.LIST)) { evaluateQuery(tx.query().has("phone", Cmp.EQUAL, "1234"), ElementCategory.VERTEX, 1, new boolean[]{false, true}); evaluateQuery(tx.query().has("phone", Cmp.EQUAL, "5678"), ElementCategory.VERTEX, 1, new boolean[]{false, true}); evaluateQuery(tx.query().has("text", Text.CONTAINS, "rocks"), ElementCategory.VERTEX, 3, new boolean[]{true, true}, "theIndex"); evaluateQuery(tx.query().has("time", 5), ElementCategory.VERTEX, 2, new boolean[]{true, true}, "theIndex"); evaluateQuery(tx.query().interval("height", 100, 200), ElementCategory.VERTEX, 3, new boolean[]{false, true}); evaluateQuery(tx.query().interval("height", 100, 200).has("time", 5), ElementCategory.VERTEX, 2, new boolean[]{false, true}, "theIndex"); evaluateQuery(tx.query().has("text", Text.CONTAINS, "rocks").has("time", 5).interval("height", 100, 200), ElementCategory.VERTEX, 2, new boolean[]{false, true}, "theIndex"); if (indexFeatures.supportsCardinality(Cardinality.LIST)) { evaluateQuery(tx.query().has("phone", Cmp.EQUAL, "1234"), ElementCategory.VERTEX, 3, new boolean[]{false, true});
switch (resultType) { case PROPERTY: result = query.properties(); break; case EDGE: result = query.edges(); break; case VERTEX: result = query.vertices(); break; default:
public static TitanVertex getOnlyVertex(TitanGraphQuery<?> query) { return (TitanVertex)getOnlyElement(query.vertices()); }
evaluateQuery(tx.query().has("time", Cmp.EQUAL, 10).has("weight", Cmp.EQUAL, 0), ElementCategory.EDGE, 1, new boolean[]{true, sorted}, edge1.name()); evaluateQuery(tx.query().has("time", Contain.IN, ImmutableList.of(10, 20, 30)).has("weight", Cmp.EQUAL, 0), ElementCategory.EDGE, 3, new boolean[]{true, sorted}, edge1.name()); evaluateQuery(tx.query().has("time", Cmp.EQUAL, 10).has("weight", Cmp.EQUAL, 0).has("text", Cmp.EQUAL, strs[10 % strs.length]), ElementCategory.EDGE, 1, new boolean[]{false, sorted}, edge1.name()); evaluateQuery(tx.query().has("time", Cmp.EQUAL, 10).has("weight", Cmp.EQUAL, 1), ElementCategory.EDGE, 1, new boolean[]{true, sorted}, edge1.name()); evaluateQuery(tx.query().has("time", Cmp.EQUAL, 20).has("weight", Cmp.EQUAL, 0), ElementCategory.EDGE, 1, new boolean[]{true, sorted}, edge1.name()); evaluateQuery(tx.query().has("time", Cmp.EQUAL, 20).has("weight", Cmp.EQUAL, 3), ElementCategory.EDGE, 0, new boolean[]{true, sorted}, edge1.name()); 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]), ElementCategory.EDGE, numV / strs.length * 2, new boolean[]{false, sorted}); evaluateQuery(tx.query().has("weight", Cmp.EQUAL, 1.5), ElementCategory.EDGE, numV / 10 * 2, new boolean[]{false, sorted}); evaluateQuery(tx.query().has("time", Cmp.EQUAL, 50), ElementCategory.PROPERTY, 2, new boolean[]{true, sorted}, prop1.name()); evaluateQuery(tx.query().has("weight", Cmp.EQUAL, 0.0).has("text", Cmp.EQUAL, strs[0]), ElementCategory.PROPERTY, 2 * numV / (4 * 5), new boolean[]{true, sorted}, prop2.name()); evaluateQuery(tx.query().has("weight", Cmp.EQUAL, 0.0).has("text", Cmp.EQUAL, strs[0]).has("time", Cmp.EQUAL, 0), ElementCategory.PROPERTY, 2, new boolean[]{true, sorted}, prop2.name(), prop1.name()); evaluateQuery(tx.query().has("weight", Cmp.EQUAL, 1.5), ElementCategory.PROPERTY, 2 * numV / 10, new boolean[]{false, sorted});
QueryDescription qd; switch(resultType) { case PROPERTY: qd = query.describeForProperties(); break; case EDGE: qd = query.describeForEdges(); break; case VERTEX: qd = query.describeForVertices(); break; default: throw new AssertionError(); case PROPERTY: result = query.properties(); break; case EDGE: result = query.edges(); break; case VERTEX: result = query.vertices(); break; default: throw new AssertionError();
@Override public Iterable<AtlasEdge<Titan1Vertex, Titan1Edge>> edges() { Iterable<TitanEdge> it = query.edges(); return graph.wrapEdges(it); }
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(numV/strs.length*2,Iterables.size(graph.query().has("text",Text.CONTAINS,"ducks").vertices())); assertEquals(numV/strs.length*2,Iterables.size(graph.query().has("text",Text.CONTAINS,"farm").vertices())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("text",Text.CONTAINS,"beautiful").vertices())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("text",Text.CONTAINS_PREFIX,"beauti").vertices())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("text",Text.CONTAINS_REGEX,"be[r]+y").vertices())); assertEquals(0,Iterables.size(graph.query().has("text",Text.CONTAINS,"lolipop").vertices())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("name",Cmp.EQUAL,strs[1]).vertices())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("name",Cmp.EQUAL,strs[1]).vertices())); assertEquals(numV/strs.length*(strs.length-1),Iterables.size(graph.query().has("name",Cmp.NOT_EQUAL,strs[2]).vertices())); assertEquals(0,Iterables.size(graph.query().has("name",Cmp.EQUAL,"farm").vertices())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("name",Text.PREFIX,"ducks").vertices())); assertEquals(numV/strs.length*2,Iterables.size(graph.query().has("name",Text.REGEX,"(.*)ducks(.*)").vertices())); 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").vertices())); assertEquals(numV/strs.length*2,Iterables.size(graph.query().has("text",Text.CONTAINS,"farm").vertices())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("text",Text.CONTAINS,"beautiful").vertices()));
evaluateQuery(graph.query().has("text",Text.CONTAINS,"ducks"), ElementCategory.VERTEX,numV/strs.length*2,new boolean[]{true,true},VINDEX); assertEquals(numV/strs.length*2,Iterables.size(graph.query().has("text",Text.CONTAINS,"ducks").vertices())); assertEquals(numV/strs.length*2,Iterables.size(graph.query().has("text",Text.CONTAINS,"farm").vertices())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("text",Text.CONTAINS,"beautiful").vertices())); evaluateQuery(graph.query().has("text",Text.CONTAINS_PREFIX,"beauti"), ElementCategory.VERTEX,numV/strs.length,new boolean[]{true,true},VINDEX); assertEquals(numV/strs.length,Iterables.size(graph.query().has("text",Text.CONTAINS_REGEX,"be[r]+y").vertices())); assertEquals(0,Iterables.size(graph.query().has("text",Text.CONTAINS,"lolipop").vertices())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("name",Cmp.EQUAL,strs[1]).vertices())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("name",Cmp.EQUAL,strs[1]).vertices())); assertEquals(numV/strs.length*(strs.length-1),Iterables.size(graph.query().has("name",Cmp.NOT_EQUAL,strs[2]).vertices())); assertEquals(0,Iterables.size(graph.query().has("name",Cmp.EQUAL,"farm").vertices())); assertEquals(numV/strs.length,Iterables.size(graph.query().has("name",Text.PREFIX,"ducks").vertices())); assertEquals(numV/strs.length*2,Iterables.size(graph.query().has("name",Text.REGEX,"(.*)ducks(.*)").vertices())); evaluateQuery(graph.query().has("text",Text.CONTAINS,"ducks"), ElementCategory.EDGE,numV/strs.length*2,new boolean[]{true,true},EINDEX); 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()));