Search in sources :

Example 6 with TypeQLInsert

use of com.vaticle.typeql.lang.query.TypeQLInsert in project grakn by graknlabs.

the class TraversalTest method test_closure_backtrack_clears_scopes.

@Test
public void test_closure_backtrack_clears_scopes() {
    session = databaseMgr.session(database, Arguments.Session.Type.SCHEMA);
    try (TypeDB.Transaction transaction = session.transaction(WRITE)) {
        TypeQLDefine query = TypeQL.parseQuery("define " + "lastname sub attribute, value string; " + "person sub entity, owns lastname; ");
        transaction.query().define(query);
        transaction.commit();
    }
    session.close();
    session = databaseMgr.session(database, Arguments.Session.Type.DATA);
    try (TypeDB.Transaction transaction = session.transaction(WRITE)) {
        TypeQLInsert query = TypeQL.parseQuery("insert " + "$x isa person," + "  has lastname \"Smith\"," + "  has name \"Alex\";" + "$y isa person," + "  has lastname \"Smith\"," + "  has name \"John\";" + "$r (friend: $x, friend: $y) isa friendship, has ref 1;" + "$r1 (friend: $x, friend: $y) isa friendship, has ref 2;" + "$reflexive (friend: $x, friend: $x) isa friendship, has ref 3;").asInsert();
        transaction.query().insert(query);
        transaction.commit();
    }
    try (CoreTransaction transaction = session.transaction(READ)) {
        GraphProcedure.Builder proc = GraphProcedure.builder(10);
        /*
            vertices:
            $_0 [thing] { hasIID: false, types: [name], predicates: [= <STRING>] } (end) // Alex
            $_1 [thing] { hasIID: false, types: [name], predicates: [= <STRING>] } (end) // John
            $f1 [thing] { hasIID: false, types: [friendship], predicates: [] }
            $n [thing] { hasIID: false, types: [lastname], predicates: [] } (start)
            $r1 [thing] { hasIID: false, types: [ref], predicates: [= <LONG>] } (end) // 3
            $r2 [thing] { hasIID: false, types: [ref], predicates: [= <LONG>] } (end) // 1
            $refl [thing] { hasIID: false, types: [friendship], predicates: [] }
            $x [thing] { hasIID: false, types: [person], predicates: [] }
            $y [thing] { hasIID: false, types: [person], predicates: [] }

             */
        ProcedureVertex.Thing _0 = proc.anonymousThing(0);
        _0.props().predicate(Predicate.Value.String.of(TypeQLToken.Predicate.Equality.EQ));
        _0.props().types(set(Label.of("name")));
        ProcedureVertex.Thing _1 = proc.anonymousThing(1);
        _1.props().predicate(Predicate.Value.String.of(TypeQLToken.Predicate.Equality.EQ));
        _1.props().types(set(Label.of("name")));
        ProcedureVertex.Thing f1 = proc.namedThing("f1");
        f1.props().types(set(Label.of("friendship")));
        ProcedureVertex.Thing refl = proc.namedThing("refl");
        refl.props().types(set(Label.of("friendship")));
        ProcedureVertex.Thing n = proc.namedThing("n", true);
        n.props().types(set(Label.of("lastname")));
        ProcedureVertex.Thing r1 = proc.namedThing("r1");
        r1.props().predicate(Predicate.Value.Numerical.of(TypeQLToken.Predicate.Equality.EQ, PredicateArgument.Value.LONG));
        r1.props().types(set(Label.of("ref")));
        ProcedureVertex.Thing r2 = proc.namedThing("r2");
        r2.props().predicate(Predicate.Value.Numerical.of(TypeQLToken.Predicate.Equality.EQ, PredicateArgument.Value.LONG));
        r2.props().types(set(Label.of("ref")));
        ProcedureVertex.Thing x = proc.namedThing("x");
        x.props().types(set(Label.of("person")));
        ProcedureVertex.Thing y = proc.namedThing("y");
        y.props().types(set(Label.of("person")));
        GraphTraversal.Thing.Parameters params = new GraphTraversal.Thing.Parameters();
        params.pushValue(_0.id().asVariable(), Predicate.Value.String.of(TypeQLToken.Predicate.Equality.EQ), new GraphTraversal.Thing.Parameters.Value("Alex"));
        params.pushValue(_1.id().asVariable(), Predicate.Value.String.of(TypeQLToken.Predicate.Equality.EQ), new GraphTraversal.Thing.Parameters.Value("John"));
        params.pushValue(r1.id().asVariable(), Predicate.Value.Numerical.of(TypeQLToken.Predicate.Equality.EQ, PredicateArgument.Value.LONG), new GraphTraversal.Thing.Parameters.Value(3L));
        params.pushValue(r2.id().asVariable(), Predicate.Value.Numerical.of(TypeQLToken.Predicate.Equality.EQ, PredicateArgument.Value.LONG), new GraphTraversal.Thing.Parameters.Value(1L));
        /*
            edges:
            1: ($n <--[HAS]--* $x)
            2: ($n <--[HAS]--* $y)
            3: ($x *--[HAS]--> $_0)
            4: ($x <--[ROLEPLAYER]--* $refl) { roleTypes: [friendship:friend] }
            5: ($x <--[ROLEPLAYER]--* $refl) { roleTypes: [friendship:friend] }
            6: ($x <--[ROLEPLAYER]--* $f1) { roleTypes: [friendship:friend] }
            7: ($y *--[HAS]--> $_1)
            8: ($y <--[ROLEPLAYER]--* $f1) { roleTypes: [friendship:friend] }
            9: ($refl *--[HAS]--> $r1)
            10: ($f1 *--[HAS]--> $r2)
             */
        proc.backwardHas(1, n, x);
        proc.backwardHas(2, n, y);
        proc.forwardHas(3, x, _0);
        proc.backwardRolePlayer(4, x, refl, set(Label.of("friend", "friendship")));
        proc.backwardRolePlayer(5, x, refl, set(Label.of("friend", "friendship")));
        proc.backwardRolePlayer(6, x, f1, set(Label.of("friend", "friendship")));
        proc.forwardHas(7, y, _1);
        proc.backwardRolePlayer(8, y, f1, set(Label.of("friend", "friendship")));
        proc.forwardHas(9, refl, r1);
        proc.forwardHas(10, f1, r2);
        Set<Identifier.Variable.Retrievable> filter = set(n.id().asVariable().asRetrievable(), x.id().asVariable().asRetrievable(), y.id().asVariable().asRetrievable(), refl.id().asVariable().asRetrievable(), f1.id().asVariable().asRetrievable(), r1.id().asVariable().asRetrievable(), r1.id().asVariable().asRetrievable(), _0.id().asVariable().asRetrievable(), _1.id().asVariable().asRetrievable());
        GraphProcedure procedure = proc.build();
        FunctionalIterator<VertexMap> vertices = procedure.iterator(transaction.traversal().graph(), params, filter);
        vertices.next();
    }
    session.close();
}
Also used : VertexMap(com.vaticle.typedb.core.traversal.common.VertexMap) TypeDB(com.vaticle.typedb.core.TypeDB) CoreTransaction(com.vaticle.typedb.core.database.CoreTransaction) Identifier(com.vaticle.typedb.core.traversal.common.Identifier) TypeQLDefine(com.vaticle.typeql.lang.query.TypeQLDefine) TypeQLInsert(com.vaticle.typeql.lang.query.TypeQLInsert) ProcedureVertex(com.vaticle.typedb.core.traversal.procedure.ProcedureVertex) GraphProcedure(com.vaticle.typedb.core.traversal.procedure.GraphProcedure) Test(org.junit.Test)

Aggregations

TypeQLInsert (com.vaticle.typeql.lang.query.TypeQLInsert)6 TypeDB (com.vaticle.typedb.core.TypeDB)3 TypeQLDefine (com.vaticle.typeql.lang.query.TypeQLDefine)3 Test (org.junit.Test)3 ConceptMap (com.vaticle.typedb.core.concept.answer.ConceptMap)2 Context (com.vaticle.typedb.core.common.parameters.Context)1 Attribute (com.vaticle.typedb.core.concept.thing.Attribute)1 Entity (com.vaticle.typedb.core.concept.thing.Entity)1 CoreTransaction (com.vaticle.typedb.core.database.CoreTransaction)1 Identifier (com.vaticle.typedb.core.traversal.common.Identifier)1 VertexMap (com.vaticle.typedb.core.traversal.common.VertexMap)1 GraphProcedure (com.vaticle.typedb.core.traversal.procedure.GraphProcedure)1 ProcedureVertex (com.vaticle.typedb.core.traversal.procedure.ProcedureVertex)1 TypeQLDelete (com.vaticle.typeql.lang.query.TypeQLDelete)1 TypeQLMatch (com.vaticle.typeql.lang.query.TypeQLMatch)1 Given (io.cucumber.java.en.Given)1 When (io.cucumber.java.en.When)1