Search in sources :

Example 6 with TypeQLDefine

use of com.vaticle.typeql.lang.query.TypeQLDefine 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)

Example 7 with TypeQLDefine

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

the class TraversalTest method setup.

@BeforeClass
public static void setup() throws IOException {
    Util.resetDirectory(dataDir);
    databaseMgr = CoreDatabaseManager.open(options);
    databaseMgr.create(database);
    session = databaseMgr.session(database, Arguments.Session.Type.SCHEMA);
    try (TypeDB.Transaction transaction = session.transaction(WRITE)) {
        TypeQLDefine query = TypeQL.parseQuery("define " + "person sub entity, " + "  plays friendship:friend, " + "  owns name;" + "dog sub entity," + "  plays friendship:friend; " + "friendship sub relation, " + "  relates friend, " + "  owns ref;" + "name sub attribute, value string; " + "ref sub attribute, value long; ");
        transaction.query().define(query);
        transaction.commit();
    }
    session.close();
}
Also used : TypeQLDefine(com.vaticle.typeql.lang.query.TypeQLDefine) TypeDB(com.vaticle.typedb.core.TypeDB) BeforeClass(org.junit.BeforeClass)

Example 8 with TypeQLDefine

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

the class QueryTest method test_query_delete.

@Test
public void test_query_delete() throws IOException {
    Util.resetDirectory(dataDir);
    try (TypeDB.DatabaseManager typedb = CoreDatabaseManager.open(options)) {
        typedb.create(database);
        try (TypeDB.Session session = typedb.session(database, Arguments.Session.Type.SCHEMA)) {
            try (TypeDB.Transaction transaction = session.transaction(Arguments.Transaction.Type.WRITE)) {
                TypeQLDefine query = TypeQL.parseQuery(new String(Files.readAllBytes(Paths.get("test/integration/schema.tql")), UTF_8));
                transaction.query().define(query);
                transaction.commit();
            }
        }
        try (TypeDB.Session session = typedb.session(database, Arguments.Session.Type.DATA)) {
            try (TypeDB.Transaction transaction = session.transaction(Arguments.Transaction.Type.WRITE)) {
                String insertString = "insert " + "$o isa organisation, has name 'vaticle'; " + "$t isa team, has name 'engineers', has symbol 'vaticle/engineers'; " + "$u isa user, has name 'butler', has email 'butler@vaticle.com'; " + "($o, $t) isa org-team; " + "($o, $u) isa org-member; " + "($t, $u) isa team-member;";
                TypeQLInsert insertQuery = TypeQL.parseQuery(insertString);
                transaction.query().insert(insertQuery);
                transaction.commit();
            }
            try (TypeDB.Transaction transaction = session.transaction(Arguments.Transaction.Type.WRITE)) {
                String deleteString = "match $x isa thing; delete $x isa thing;";
                TypeQLDelete deleteQuery = TypeQL.parseQuery(deleteString);
                transaction.query().delete(deleteQuery);
                transaction.commit();
            }
            try (TypeDB.Transaction transaction = session.transaction(Arguments.Transaction.Type.READ)) {
                String matchString = "match $x isa thing;";
                TypeQLMatch matchQuery = TypeQL.parseQuery(matchString);
                FunctionalIterator<ConceptMap> answers = transaction.query().match(matchQuery);
                assertFalse(answers.hasNext());
            }
        }
    }
}
Also used : TypeQLDefine(com.vaticle.typeql.lang.query.TypeQLDefine) TypeQLDelete(com.vaticle.typeql.lang.query.TypeQLDelete) TypeDB(com.vaticle.typedb.core.TypeDB) TypeQLInsert(com.vaticle.typeql.lang.query.TypeQLInsert) TypeQLMatch(com.vaticle.typeql.lang.query.TypeQLMatch) ConceptMap(com.vaticle.typedb.core.concept.answer.ConceptMap) Test(org.junit.Test)

Example 9 with TypeQLDefine

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

the class QueryTest method test_query_define.

@Test
public void test_query_define() throws IOException {
    Util.resetDirectory(dataDir);
    try (TypeDB.DatabaseManager typedb = CoreDatabaseManager.open(options)) {
        typedb.create(database);
        try (TypeDB.Session session = typedb.session(database, Arguments.Session.Type.SCHEMA)) {
            try (TypeDB.Transaction transaction = session.transaction(Arguments.Transaction.Type.WRITE)) {
                TypeQLDefine query = TypeQL.parseQuery(new String(Files.readAllBytes(Paths.get("test/integration/schema.tql")), UTF_8));
                transaction.query().define(query);
                transaction.commit();
            }
            try (TypeDB.Transaction tx = session.transaction(Arguments.Transaction.Type.READ)) {
                AttributeType.String name = tx.concepts().getAttributeType("name").asString();
                AttributeType.String symbol = tx.concepts().getAttributeType("symbol").asString();
                AttributeType.Boolean active = tx.concepts().getAttributeType("active").asBoolean();
                AttributeType.Long priority = tx.concepts().getAttributeType("priority").asLong();
                assertNotNulls(name, symbol, active, priority);
                EntityType organisation = tx.concepts().getEntityType("organisation");
                EntityType team = tx.concepts().getEntityType("team");
                EntityType user = tx.concepts().getEntityType("user");
                EntityType repository = tx.concepts().getEntityType("repository");
                EntityType branchRule = tx.concepts().getEntityType("branch-rule");
                EntityType commit = tx.concepts().getEntityType("commit");
                assertNotNulls(organisation, team, user, repository, branchRule, commit);
                assertTrue(organisation.getOwns().anyMatch(a -> a.equals(name)));
                assertTrue(team.getOwns().anyMatch(a -> a.equals(symbol)));
                assertTrue(user.getOwns().anyMatch(a -> a.equals(name)));
                assertTrue(repository.getOwns().anyMatch(a -> a.equals(active)));
                assertTrue(branchRule.getOwns().anyMatch(a -> a.equals(priority)));
                assertTrue(commit.getOwns().anyMatch(a -> a.equals(symbol)));
                RelationType orgTeam = tx.concepts().getRelationType("org-team");
                RelationType teamMember = tx.concepts().getRelationType("team-member");
                RelationType repoDependency = tx.concepts().getRelationType("repo-dependency");
                assertNotNulls(orgTeam, teamMember, repoDependency);
                RoleType orgTeam_org = orgTeam.getRelates("org");
                RoleType orgTeam_team = orgTeam.getRelates("team");
                RoleType teamMember_team = teamMember.getRelates("team");
                RoleType teamMember_member = teamMember.getRelates("member");
                assertNotNulls(orgTeam_org, orgTeam_team, teamMember_team, teamMember_member);
                assertTrue(organisation.getPlays().anyMatch(r -> r.equals(orgTeam_org)));
                assertTrue(team.getPlays().anyMatch(r -> r.equals(orgTeam_team)));
                assertTrue(team.getPlays().anyMatch(r -> r.equals(teamMember_team)));
                assertTrue(user.getPlays().anyMatch(r -> r.equals(teamMember_member)));
                // check first 4 rules
                assertNotNull(tx.logic().getRule("repo-fork-rule"));
                assertNotNull(tx.logic().getRule("repo-dependency-transitive-rule"));
                assertNotNull(tx.logic().getRule("repo-dependency-transitive-type-rule"));
                assertNotNull(tx.logic().getRule("repo-collaborator-org-rule"));
                // check total count
                assertEquals(15, tx.logic().rules().toList().size());
            }
        }
    }
}
Also used : TypeQLDelete(com.vaticle.typeql.lang.query.TypeQLDelete) TypeQLInsert(com.vaticle.typeql.lang.query.TypeQLInsert) MB(com.vaticle.typedb.core.common.collection.Bytes.MB) TypeQLUndefine(com.vaticle.typeql.lang.query.TypeQLUndefine) Util.assertNotNulls(com.vaticle.typedb.core.test.integration.util.Util.assertNotNulls) RelationType(com.vaticle.typedb.core.concept.type.RelationType) Arguments(com.vaticle.typedb.core.common.parameters.Arguments) Path(java.nio.file.Path) TypeQLDefine(com.vaticle.typeql.lang.query.TypeQLDefine) TypeQL(com.vaticle.typeql.lang.TypeQL) FunctionalIterator(com.vaticle.typedb.core.common.iterator.FunctionalIterator) CoreDatabaseManager(com.vaticle.typedb.core.database.CoreDatabaseManager) Files(java.nio.file.Files) UTF_8(java.nio.charset.StandardCharsets.UTF_8) Assert.assertNotNull(org.junit.Assert.assertNotNull) Assert.assertTrue(org.junit.Assert.assertTrue) ConceptMap(com.vaticle.typedb.core.concept.answer.ConceptMap) Test(org.junit.Test) IOException(java.io.IOException) RoleType(com.vaticle.typedb.core.concept.type.RoleType) TypeDB(com.vaticle.typedb.core.TypeDB) List(java.util.List) Assert.assertNull(org.junit.Assert.assertNull) Paths(java.nio.file.Paths) Assert.assertFalse(org.junit.Assert.assertFalse) Attribute(com.vaticle.typedb.core.concept.thing.Attribute) Database(com.vaticle.typedb.core.common.parameters.Options.Database) AttributeType(com.vaticle.typedb.core.concept.type.AttributeType) EntityType(com.vaticle.typedb.core.concept.type.EntityType) TypeQLMatch(com.vaticle.typeql.lang.query.TypeQLMatch) Entity(com.vaticle.typedb.core.concept.thing.Entity) Assert.assertEquals(org.junit.Assert.assertEquals) Util(com.vaticle.typedb.core.test.integration.util.Util) RoleType(com.vaticle.typedb.core.concept.type.RoleType) TypeDB(com.vaticle.typedb.core.TypeDB) EntityType(com.vaticle.typedb.core.concept.type.EntityType) TypeQLDefine(com.vaticle.typeql.lang.query.TypeQLDefine) AttributeType(com.vaticle.typedb.core.concept.type.AttributeType) RelationType(com.vaticle.typedb.core.concept.type.RelationType) Test(org.junit.Test)

Example 10 with TypeQLDefine

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

the class TypeQLSteps method typeql_define.

@Given("typeql define")
public void typeql_define(String defineQueryStatements) {
    TypeQLDefine typeQLQuery = TypeQL.parseQuery(String.join("\n", defineQueryStatements)).asDefine();
    tx().query().define(typeQLQuery);
}
Also used : TypeQLDefine(com.vaticle.typeql.lang.query.TypeQLDefine) Given(io.cucumber.java.en.Given)

Aggregations

TypeQLDefine (com.vaticle.typeql.lang.query.TypeQLDefine)11 TypeDB (com.vaticle.typedb.core.TypeDB)7 TypeQLInsert (com.vaticle.typeql.lang.query.TypeQLInsert)5 Test (org.junit.Test)5 ConceptMap (com.vaticle.typedb.core.concept.answer.ConceptMap)3 Attribute (com.vaticle.typedb.core.concept.thing.Attribute)3 Entity (com.vaticle.typedb.core.concept.thing.Entity)3 TypeQLDelete (com.vaticle.typeql.lang.query.TypeQLDelete)3 TypeQLMatch (com.vaticle.typeql.lang.query.TypeQLMatch)3 MB (com.vaticle.typedb.core.common.collection.Bytes.MB)2 FunctionalIterator (com.vaticle.typedb.core.common.iterator.FunctionalIterator)2 Arguments (com.vaticle.typedb.core.common.parameters.Arguments)2 Database (com.vaticle.typedb.core.common.parameters.Options.Database)2 AttributeType (com.vaticle.typedb.core.concept.type.AttributeType)2 EntityType (com.vaticle.typedb.core.concept.type.EntityType)2 RelationType (com.vaticle.typedb.core.concept.type.RelationType)2 RoleType (com.vaticle.typedb.core.concept.type.RoleType)2 CoreDatabaseManager (com.vaticle.typedb.core.database.CoreDatabaseManager)2 Util (com.vaticle.typedb.core.test.integration.util.Util)2 Util.assertNotNulls (com.vaticle.typedb.core.test.integration.util.Util.assertNotNulls)2