/** * Visiting filters in SPARQL algebra. */ @Override public void visit(final OpFilter opFilter) { Traversal traversal; for (Expr expr : opFilter.getExprs().getList()) { if (expr != null) { traversal = __.where(WhereTraversalBuilder.transform(expr)); traversalList.add(traversal); } } }
/** * Visiting LeftJoin(Optional) in SPARQL algebra. */ @Override public void visit(final OpLeftJoin opLeftJoin) { optionalFlag = true; optionalVisit(opLeftJoin.getRight()); if (opLeftJoin.getExprs() != null) { for (Expr expr : opLeftJoin.getExprs().getList()) { if (expr != null) { if (optionalFlag) optionalTraversals.add(__.where(WhereTraversalBuilder.transform(expr))); } } } }
@Override public Traversal<Vertex, Map<String, Object>> get_g_V_matchXwhereXandXa_created_b__b_0created_count_isXeqX3XXXX__a_both_b__whereXb_inXX() { return g.V().match( where(and( as("a").out("created").as("b"), as("b").in("created").count().is(eq(3)))), as("a").both().as("b"), where(as("b").in())); }
@Override public Traversal<Vertex, Map<String, Vertex>> get_g_V_matchXa_hasXname_GarciaX__a_0writtenBy_b__b_followedBy_c__c_writtenBy_d__whereXd_neqXaXXX() { return g.V().match( as("a").has("name", "Garcia"), as("a").in("writtenBy").as("b"), as("b").out("followedBy").as("c"), as("c").out("writtenBy").as("d"), where("d", P.neq("a"))); }
@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); }
@Override public Traversal<Vertex, Map<String, Object>> get_g_V_matchXwhereXandXa_created_b__b_0created_count_isXeqX3XXXX__a_both_b__whereXb_inXX() { return g.V().match( where(and( as("a").out("created").as("b"), as("b").in("created").count().is(eq(3)))), as("a").both().as("b"), where(as("b").in())); }
public void addToLastItemOfCollection(Vertex rawCollection, Vertex result) { if (curCollection == rawCollection && lastVertex != null) { //should be the one that usually called lastVertex.addEdge(TinkerpopSaver.NEXT_RAW_ITEM_EDGE_NAME, result); lastVertex = result; } else if (!rawCollection.edges(Direction.OUT, TinkerpopSaver.NEXT_RAW_ITEM_EDGE_NAME).hasNext()) { //should be called only once rawCollection.addEdge(TinkerpopSaver.NEXT_RAW_ITEM_EDGE_NAME, result); lastVertex = result; curCollection = rawCollection; } else { //should never be called LOG.error("This method is slow and ought to never be called."); Vertex previous = graphWrapper.getGraph().traversal().V(rawCollection.id()) .out(TinkerpopSaver.RAW_ITEM_EDGE_NAME) .not(__.where(__.out(TinkerpopSaver.NEXT_RAW_ITEM_EDGE_NAME))) .next(); previous.addEdge(TinkerpopSaver.NEXT_RAW_ITEM_EDGE_NAME, result); } }
@Override public Traversal<Vertex, List<Object>> getAllShortestPaths() { // TODO: remove .withoutStrategies(PathRetractionStrategy.class) return g.withoutStrategies(ComputerVerificationStrategy.class, PathRetractionStrategy.class). V().as("v").both().as("v"). project("src", "tgt", "p"). by(select(first, "v")). by(select(last, "v")). by(select(all, "v")).as("triple"). group("x"). by(select("src", "tgt")). by(select("p").fold()).select("tgt").barrier(). repeat(both().as("v"). project("src", "tgt", "p"). by(select(first, "v")). by(select(last, "v")). by(select(all, "v")).as("t"). filter(select(all, "p").count(local).as("l"). select(last, "t").select(all, "p").dedup(local).count(local).where(eq("l"))). select(last, "t"). not(select(all, "p").as("p").count(local).as("l"). select(all, "x").unfold().filter(select(keys).where(eq("t")).by(select("src", "tgt"))). filter(select(values).unfold().or(count(local).where(lt("l")), where(eq("p"))))). barrier(). group("x"). by(select("src", "tgt")). by(select(all, "p").fold()).select("tgt").barrier()). cap("x").select(values).unfold().unfold().map(unfold().id().fold()); }
static <S> GraphTraversal<S, Vertex> traverseSchemaConceptFromEdge( GraphTraversal<S, Edge> traversal, Schema.EdgeProperty edgeProperty) { // Access label ID from edge Var labelId = Graql.var(); traversal.values(edgeProperty.name()).as(labelId.name()); // Look up schema concept using ID return traversal.V().has(LABEL_ID.name(), __.where(P.eq(labelId.name()))); }
.V(relationTypes) .has("relationtype_regularName", __.where(P.eq("edgeLabel"))) .properties("relationtype_inverseName").value() .as("label")
@Override public Traversal<Vertex, Map<String, Vertex>> get_g_V_matchXa_hasXname_GarciaX__a_0writtenBy_b__b_followedBy_c__c_writtenBy_d__whereXd_neqXaXXX() { return g.V().match( as("a").has("name", "Garcia"), as("a").in("writtenBy").as("b"), as("b").out("followedBy").as("c"), as("c").out("writtenBy").as("d"), where("d", P.neq("a"))); }
private GraphTraversal<Vertex, Edge> toEdgeInstances() { Var type = var(); Var labelId = var(); // There is no fast way to retrieve all edge instances, because edges cannot be globally indexed. // This is a best-effort, that uses the schema to limit the search space... // First retrieve the type ID GraphTraversal<Vertex, Vertex> traversal = __.<Vertex>as(type.name()).values(LABEL_ID.name()).as(labelId.name()).select(type.name()); // Next, navigate the schema to all possible types whose instances can be in this relation traversal = Fragments.inSubs(traversal.out(RELATES.getLabel()).in(PLAYS.getLabel())); // Navigate to all (vertex) instances of those types // (we do not need to navigate to edge instances, because edge instances cannot be role-players) traversal = toVertexInstances(traversal); // Finally, navigate to all relation edges with the correct type attached to these instances return traversal.outE(ATTRIBUTE.getLabel()) .has(RELATIONSHIP_TYPE_LABEL_ID.name(), __.where(P.eq(labelId.name()))); }
@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); }
@Override public Traversal<Vertex, List<Object>> getAllShortestPaths() { // TODO: remove .withoutStrategies(PathRetractionStrategy.class) return g.withoutStrategies(ComputerVerificationStrategy.class, PathRetractionStrategy.class). V().as("v").both().as("v"). project("src", "tgt", "p"). by(select(first, "v")). by(select(last, "v")). by(select(all, "v")).as("triple"). group("x"). by(select("src", "tgt")). by(select("p").fold()).select("tgt").barrier(). repeat(both().as("v"). project("src", "tgt", "p"). by(select(first, "v")). by(select(last, "v")). by(select(all, "v")).as("t"). filter(select(all, "p").count(local).as("l"). select(last, "t").select(all, "p").dedup(local).count(local).where(eq("l"))). select(last, "t"). not(select(all, "p").as("p").count(local).as("l"). select(all, "x").unfold().filter(select(keys).where(eq("t")).by(select("src", "tgt"))). filter(select(values).unfold().or(count(local).where(lt("l")), where(eq("p"))))). barrier(). group("x"). by(select("src", "tgt")). by(select(all, "p").fold()).select("tgt").barrier()). cap("x").select(values).unfold().unfold().map(unfold().id().fold()); }