if (direction!=null && predicate.getBiPredicate()== Compare.eq && predicate.getValue() instanceof Vertex) { TitanVertex vertex = TitanTraversalUtil.getTitanVertex((Vertex)predicate.getValue()); HasContainer.makeHasContainers(ImplicitKey.ADJACENT_ID.name(), P.eq(vertex))), traversal);
return new OrP((List<P>) value); case "between": return P.between(((List) value).get(0), ((List) value).get(1)); case "inside": return P.inside(((List) value).get(0), ((List) value).get(1)); case "outside": return P.outside(((List) value).get(0), ((List) value).get(1)); case "within": return P.within((Collection) value); case "without": return P.without((Collection) value); default: return (P) P.class.getMethod(predicate, Collection.class).invoke(null, (Collection) value);
public static <V> P<V> geoDisjoint(final V value) { return new P(Geo.DISJOINT, value); } public static <V> P<V> geoWithin(final V value) {
assertCount(1, g.V().or(__.has("name", "Hiro"),__.has("age", 2))); assertCount(2, g.V().or(__.has("name", "Totoro"),__.has("age", 2))); assertTraversal(g.V().has("length", P.lte(100)).or(__.has("name", "Totoro"),__.has("age", P.gte(2))), hiro); assertTraversal(g.V().or(__.has("name", "Totoro"),__.has("age", P.gte(2))).has("length", P.lte(100)), hiro); assertTraversal(g.V().or(__.has("name", "Totoro"), __.has("length", P.lte(120)).order().by(ORDER_LENGTH_DECR)), totoro, john, hiro); assertTraversal(g.V().or(__.has("name", "Totoro"), __.has("length", P.lte(120)).order().by(ORDER_LENGTH_INCR)), totoro, hiro, john); assertTraversal(g.V().or(__.has("name", "John"), __.has("length", P.lte(120)).order().by(ORDER_LENGTH_INCR)), john, hiro); assertTraversal(g.V().or(__.has("name", "Totoro"), __.has("length", P.lte(120)).order().by(ORDER_AGE_DECR)), totoro, john, hiro); assertTraversal(g.V().or(__.has("name", "Totoro"), __.has("length", P.lte(120)).order().by(ORDER_AGE_INCR)), totoro, hiro, john); assertTraversal(g.V().or(__.has("name", "Totoro"), __.has("length", P.lte(120)).order().by(ORDER_LENGTH_DECR)).order().by(ORDER_AGE_INCR), totoro, hiro, john); assertTraversal(g.V().or(__.has("name", "Totoro"), __.has("length", P.lte(120)).order().by(ORDER_LENGTH_INCR)).order().by(ORDER_AGE_DECR), john, hiro, totoro); assertTraversal(g.V().or(__.has("name", "Totoro"), __.has("length", P.lte(120))).order().by(ORDER_AGE_INCR).limit(2), totoro, hiro); assertTraversal(g.V().or(__.has("name", "Totoro"), __.has("length", P.lte(120))).order().by(ORDER_AGE_INCR).range(2, 3), john); assertTraversal(g.V().or(__.has("name", "Totoro"), __.has("length", P.lte(130)).order().by(ORDER_LENGTH_INCR).limit(1)), totoro, hiro); assertTraversal(g.V().or(__.has("name", "Hiro"), __.has("length", P.lte(130)).order().by(ORDER_LENGTH_INCR).limit(1)), hiro); assertTraversal(g.V().or(__.has("name", "Totoro"), __.has("length", P.lte(130)).order().by(ORDER_LENGTH_INCR).range(1, 2)), totoro, john); assertTraversal(g.V().or(__.has("name", "Totoro"), __.has("length", P.lte(130)).order().by(ORDER_LENGTH_INCR).range(1, 3)).limit(2), totoro, john); assertTraversal(g.V().has("length", P.gte(130).or(P.lt(100))).order().by(ORDER_AGE_INCR), hiro, mike); assertTraversal(g.V().has("length", P.gte(80).and(P.gte(130).or(P.lt(100)))).order().by(ORDER_AGE_INCR), hiro, mike); if (indexFeatures.supportNotQueryNormalForm()) { assertTraversal(g.V().has("length", P.gte(80).and(P.gte(130)).or(P.gte(80).and(P.lt(100)))).order().by(ORDER_AGE_INCR), hiro, mike);
@Override public void write(Kryo kryo, Output output, P p) { output.writeString( p instanceof ConnectiveP ? (p instanceof AndP ? "and" : "or") : p.getBiPredicate().toString()); if (p instanceof ConnectiveP || p.getValue() instanceof Collection) { output.writeByte((byte) 0); final Collection<?> coll = p instanceof ConnectiveP ? ((ConnectiveP<?>) p).getPredicates() : (Collection) p.getValue(); output.writeInt(coll.size()); coll.forEach(v -> kryo.writeClassAndObject(output, v)); } else { output.writeByte((byte) 1); kryo.writeClassAndObject(output, p.getValue()); } }
assertNumStep(superV * (numV / 5), 2, gts.V().has("id", sid).outE("knows").has("weight", 1), TitanGraphStep.class, TitanVertexStep.class); assertNumStep(superV * (numV / 5 * 2), 2, gts.V().has("id", sid).outE("knows").has("weight", P.gte(1)).has("weight", P.lt(3)), TitanGraphStep.class, TitanVertexStep.class); assertNumStep(superV * (numV / 5 * 2), 2, gts.V().has("id", sid).outE("knows").has("weight", P.between(1, 3)), TitanGraphStep.class, TitanVertexStep.class); assertNumStep(superV * 10, 2, gts.V().has("id", sid).local(__.outE("knows").has("weight", P.gte(1)).has("weight", P.lt(3)).limit(10)), TitanGraphStep.class, TitanVertexStep.class); assertNumStep(superV * 10, 2, gts.V().has("id", sid).local(__.outE("knows").has("weight", P.between(1, 3)).order().by("weight", decr).limit(10)), TitanGraphStep.class, TitanVertexStep.class); assertNumStep(superV * (numV / 5), 2, gts.V().has("id", sid).outE("knows").has("weight", 1), TitanGraphStep.class, TitanVertexStep.class); assertNumStep(superV * (numV / 5 * 2), 2, gts.V().has("id", sid).outE("knows").has("weight", P.between(1, 3)), TitanGraphStep.class, TitanVertexStep.class); assertNumStep(superV * 10, 2, gts.V().has("id", sid).local(__.outE("knows").has("weight", P.gte(1)).has("weight", P.lt(3)).limit(10)), TitanGraphStep.class, TitanVertexStep.class); assertNumStep(superV * 10, 2, gts.V().has("id", sid).local(__.outE("knows").has("weight", P.between(1, 3)).order().by("weight", decr).limit(10)), TitanGraphStep.class, TitanVertexStep.class); assertNumStep(superV * numV, 2, gts.V().has("id", sid).values("names"), TitanGraphStep.class, TitanPropertiesStep.class); t = gts.V().has("id", sid).local(__.outE("knows").has("weight", P.between(1, 3)).order().by("weight", decr).limit(10)).profile(); assertCount(superV * 10, t); metrics = (TraversalMetrics) t.asAdmin().getSideEffects().get("~metrics").get(); t = gts.V().has("id", sid).local(__.outE("knows").has("weight", P.gte(1)).has("weight",P.lt(3)).order().by("weight", decr).limit(10)).profile(); assertCount(superV * 10, t); metrics = (TraversalMetrics) t.asAdmin().getSideEffects().get("~metrics").get();
public void shouldGenerateCorrectTraversers() throws Exception { assumeThat(graph, Matchers.not(Matchers.instanceOf(RemoteGraph.class))); SubgraphStrategy strategy; strategy = SubgraphStrategy.build().vertices(has("name", P.within("josh", "lop", "ripple"))).create(); sg = g.withStrategies(strategy); traversal = sg.V().outE().iterate().asAdmin(); assertTrue(traversal.getTraverserGenerator() instanceof B_O_TraverserGenerator); traversal = sg.V().outE().inV().iterate().asAdmin(); assertTrue(traversal.getTraverserGenerator() instanceof B_O_TraverserGenerator); traversal = sg.V().out().iterate().asAdmin(); assertTrue(traversal.getTraverserGenerator() instanceof B_LP_O_P_S_SE_SL_TraverserGenerator); traversal = sg.V().flatMap(bothE()).iterate().asAdmin(); assertTrue(traversal.getTraverserGenerator() instanceof B_O_TraverserGenerator); traversal = sg.V().flatMap(bothE().otherV()).iterate().asAdmin(); assertTrue(traversal.getTraverserGenerator() instanceof B_LP_O_P_S_SE_SL_TraverserGenerator); traversal = sg.V().flatMap(both()).iterate().asAdmin();
@Test @LoadGraphWith(LoadGraphWith.GraphData.CLASSIC) public void shouldReadWriteVerticesNoEdgesToGraphSONManual() throws Exception { assumeThat(ioType, startsWith("graphson")); try (final ByteArrayOutputStream os = new ByteArrayOutputStream()) { final GraphWriter writer = writerMaker.apply(graph); writer.writeVertices(os, g.V().has("age", P.gt(30))); final AtomicInteger called = new AtomicInteger(0); final GraphReader reader = readerMaker.apply(graph); try (final BufferedReader br = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(os.toByteArray())))) { String line = br.readLine(); reader.readVertex(new ByteArrayInputStream(line.getBytes()), attachable -> { called.incrementAndGet(); return mock(Vertex.class); }); line = br.readLine(); reader.readVertex(new ByteArrayInputStream(line.getBytes()), detachedVertex -> { called.incrementAndGet(); return mock(Vertex.class); }); } assertEquals(2, called.get()); } }
@Override public Traversal<Vertex, String> get_g_V_matchXa_hasXsong_name_sunshineX__a_mapX0followedBy_weight_meanX_b__a_0followedBy_c__c_filterXweight_whereXgteXbXXX_outV_dX_selectXdX_byXnameX() { return g.V().match( as("a").has("song", "name", "HERE COMES SUNSHINE"), as("a").map(inE("followedBy").values("weight").mean()).as("b"), as("a").inE("followedBy").as("c"), as("c").filter(values("weight").where(P.gte("b"))).outV().as("d")). <String>select("d").by("name"); }
@Override public Traversal<Vertex, String> getClassicRecommendation() { return g.V().has("name", "DARK STAR").as("a").out("followedBy").aggregate("stash"). in("followedBy").where(neq("a").and(P.not(P.within("stash")))). groupCount(). unfold(). project("x", "y", "z"). by(select(keys).values("name")). by(select(keys).values("performances")). by(select(values)). order(). by(select("z"), Order.desc). by(select("y"), Order.asc). limit(5).store("m").select("x"); }
@Override public Traversal<Vertex, Map<String, Map<String, Map<String, Object>>>> getCoworkerSummary() { return g.V().hasLabel("person").filter(outE("created")).aggregate("p").as("p1").values("name").as("p1n") .select("p").unfold().where(neq("p1")).as("p2").values("name").as("p2n").select("p2") .out("created").choose(in("created").where(eq("p1")), values("name"), constant(emptyList())) .<String, Map<String, Map<String, Object>>>group().by(select("p1n")). by(group().by(select("p2n")). by(unfold().fold().project("numCoCreated", "coCreated").by(count(local)).by())); }
@Test public void testQueryByDatePropertyInMultiFormatString() { HugeGraph graph = graph(); initPersonIndex(false); init5Persons(); List<Vertex> vertices = null; String[] dates = new String[]{ "2012-01-01", "2013-01-01 00:00:00.000", "2014-01-01 00:00:00.000", "2015-01-01 00:00:00", "2016-01-01 00:00:00.000" }; vertices = graph.traversal().V().hasLabel("person") .has("birth", dates[0]) .toList(); Assert.assertEquals(1, vertices.size()); Assert.assertEquals(Utils.date(dates[0]), vertices.get(0).value("birth")); vertices = graph.traversal().V().hasLabel("person") .has("birth", P.gt(dates[0])) .toList(); Assert.assertEquals(4, vertices.size()); vertices = graph.traversal().V().hasLabel("person") .has("birth", P.between(dates[3], dates[4])) .toList(); Assert.assertEquals(1, vertices.size()); Assert.assertEquals(Utils.date(dates[3]), vertices.get(0).value("birth")); }
@Override public Traversal<Vertex, Map<String, Object>> get_g_V_matchXa_whereXa_neqXcXX__a_created_b__orXa_knows_vadas__a_0knows_and_a_hasXlabel_personXX__b_0created_c__b_0created_count_isXgtX1XXX_selectXa_b_cX_byXidX() { return g.V().match( where("a", P.neq("c")), as("a").out("created").as("b"), or( as("a").out("knows").has("name", "vadas"), as("a").in("knows").and().as("a").has(T.label, "person") ), as("b").in("created").as("c"), as("b").in("created").count().is(P.gt(1))) .select("a", "b", "c").by(T.id); }
}; louise.addEdge("buy", java1, "place", "haidian", "date", dates[0]); jeff.addEdge("buy", java2, "place", "chaoyang", "date", dates[1]); sean.addEdge("buy", java3, "place", "chaoyang", "date", dates[2]); List<Edge> edges = graph.traversal().E().hasLabel("buy") .has("date", dates[0]) .toList(); Assert.assertEquals(1, edges.size()); Assert.assertEquals(Utils.date(dates[0]), edges.get(0).value("date")); edges = graph.traversal().E().hasLabel("buy") .has("date", P.gt(dates[0])) .toList(); Assert.assertEquals(2, edges.size()); edges = graph.traversal().E().hasLabel("buy") .has("date", P.between(dates[1], dates[2])) .toList(); Assert.assertEquals(1, edges.size());
@Override public Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_out_asXbX_whereXin_count_isXeqX3XX_or_whereXoutXcreatedX_and_hasXlabel_personXXX_selectXa_bX() { return g.V().as("a").out().as("b").where(as("b").in().count().is(eq(3)).or().where(as("b").out("created").and().as("b").has(T.label, "person"))).select("a", "b"); }
@Override public Traversal<Vertex, Map<String, Object>> get_g_V_asXaX_out_asXbX_whereXandXasXaX_outXknowsX_asXbX__orXasXbX_outXcreatedX_hasXname_rippleX__asXbX_inXknowsX_count_isXnotXeqX0XXXXX_selectXa_bX() { return g.V().as("a").out().as("b").where(and(as("a").out("knows").as("b"), or(as("b").out("created").has("name", "ripple"), as("b").in("knows").count().is(not(eq(0)))))).select("a", "b"); }
@Override public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_outEXcreatedX_asXbX_inV_asXcX_inXcreatedX_asXdX_whereXa_ltXbX_orXgtXcXX_andXneqXdXXX_byXageX_byXweightX_byXinXcreatedX_valuesXageX_minX_selectXa_c_dX() { return g.V().as("a").outE("created").as("b").inV().as("c").in("created").as("d").where("a", lt("b").or(gt("c")).and(neq("d"))).by("age").by("weight").by(in("created").values("age").min()).<String>select("a", "c", "d").by("name"); }