Search in sources :

Example 16 with Query

use of ai.grakn.graql.Query in project grakn by graknlabs.

the class GraqlController method executeQuery.

/**
 * Execute a query and return a response in the format specified by the request.
 *
 * @param tx          open transaction to current graph
 * @param queryString read query to be executed
 * @param acceptType  response format that the client will accept
 * @param multi       execute multiple statements
 * @param parser
 */
private String executeQuery(EmbeddedGraknTx<?> tx, String queryString, String acceptType, boolean multi, boolean skipSerialisation, QueryParser parser) throws JsonProcessingException {
    Printer printer = this.printer;
    if (APPLICATION_TEXT.equals(acceptType))
        printer = Printers.graql(false);
    String formatted;
    boolean commitQuery = true;
    if (multi) {
        Stream<Query<?>> query = parser.parseList(queryString);
        List<?> collectedResults = query.map(this::executeAndMonitor).collect(Collectors.toList());
        if (skipSerialisation) {
            formatted = mapper.writeValueAsString(new Object[collectedResults.size()]);
        } else {
            formatted = printer.graqlString(collectedResults);
        }
    } else {
        Query<?> query = parser.parseQuery(queryString);
        if (skipSerialisation) {
            formatted = "";
        } else {
            formatted = printer.graqlString(executeAndMonitor(query));
        }
        commitQuery = !query.isReadOnly();
    }
    if (commitQuery)
        tx.commitSubmitNoLogs().ifPresent(postProcessor::submit);
    return formatted;
}
Also used : GetQuery(ai.grakn.graql.GetQuery) Query(ai.grakn.graql.Query) Printer(ai.grakn.graql.Printer)

Example 17 with Query

use of ai.grakn.graql.Query in project grakn by graknlabs.

the class QueryParserTest method testParseListMatchInsert.

@Test
public void testParseListMatchInsert() {
    String matchString = "match $y isa movie; limit 1;";
    String insertString = "insert $x isa movie;";
    List<Query<?>> queries = Graql.parser().parseList(matchString + insertString).collect(toList());
    assertEquals(ImmutableList.of(match(var("y").isa("movie")).limit(1).insert(var("x").isa("movie"))), queries);
}
Also used : ConnectedComponentQuery(ai.grakn.graql.analytics.ConnectedComponentQuery) AggregateQuery(ai.grakn.graql.AggregateQuery) DefineQuery(ai.grakn.graql.DefineQuery) UndefineQuery(ai.grakn.graql.UndefineQuery) DeleteQuery(ai.grakn.graql.DeleteQuery) InsertQuery(ai.grakn.graql.InsertQuery) GetQuery(ai.grakn.graql.GetQuery) Query(ai.grakn.graql.Query) CoreMatchers.containsString(org.hamcrest.CoreMatchers.containsString) Test(org.junit.Test)

Example 18 with Query

use of ai.grakn.graql.Query in project grakn by graknlabs.

the class QueryParserTest method whenParsingAnInfiniteListOfQueriesWithASyntaxError_Throw.

@Test
public void whenParsingAnInfiniteListOfQueriesWithASyntaxError_Throw() {
    String queryText1 = "match $x isa movie; insert ($x, $x) isa has-genre;";
    String queryText2 = "match $x isa person insert ($x, $x) isa has-genre;";
    Query query1 = Graql.parse(queryText1);
    char[] queryChars = (queryText1 + queryText2).toCharArray();
    InputStream infStream = new InputStream() {

        int pos = 0;

        @Override
        public int read() throws IOException {
            char c = queryChars[pos];
            pos += 1;
            if (pos >= queryChars.length) {
                pos -= queryChars.length;
            }
            return c;
        }
    };
    Stream<Query<?>> queries = Graql.parser().parseList(new InputStreamReader(infStream));
    Iterator<Query<?>> iterator = queries.iterator();
    assertEquals(query1, iterator.next());
    exception.expect(GraqlSyntaxException.class);
    iterator.next();
}
Also used : ConnectedComponentQuery(ai.grakn.graql.analytics.ConnectedComponentQuery) AggregateQuery(ai.grakn.graql.AggregateQuery) DefineQuery(ai.grakn.graql.DefineQuery) UndefineQuery(ai.grakn.graql.UndefineQuery) DeleteQuery(ai.grakn.graql.DeleteQuery) InsertQuery(ai.grakn.graql.InsertQuery) GetQuery(ai.grakn.graql.GetQuery) Query(ai.grakn.graql.Query) InputStreamReader(java.io.InputStreamReader) InputStream(java.io.InputStream) CoreMatchers.containsString(org.hamcrest.CoreMatchers.containsString) Test(org.junit.Test)

Example 19 with Query

use of ai.grakn.graql.Query in project grakn by graknlabs.

the class QueryParserTest method testParseListOneMatch.

@Test
public void testParseListOneMatch() {
    String getString = "match $y isa movie; limit 1; get;";
    List<Query<?>> queries = Graql.parser().parseList(getString).collect(toList());
    assertEquals(ImmutableList.of(match(var("y").isa("movie")).limit(1).get()), queries);
}
Also used : ConnectedComponentQuery(ai.grakn.graql.analytics.ConnectedComponentQuery) AggregateQuery(ai.grakn.graql.AggregateQuery) DefineQuery(ai.grakn.graql.DefineQuery) UndefineQuery(ai.grakn.graql.UndefineQuery) DeleteQuery(ai.grakn.graql.DeleteQuery) InsertQuery(ai.grakn.graql.InsertQuery) GetQuery(ai.grakn.graql.GetQuery) Query(ai.grakn.graql.Query) CoreMatchers.containsString(org.hamcrest.CoreMatchers.containsString) Test(org.junit.Test)

Example 20 with Query

use of ai.grakn.graql.Query in project grakn by graknlabs.

the class QueryParserTest method testParseManyMatchInsertWithoutStackOverflow.

@Test
public void testParseManyMatchInsertWithoutStackOverflow() {
    int numQueries = 10_000;
    String matchInsertString = "match $x; insert $y;";
    String longQueryString = Strings.repeat(matchInsertString, numQueries);
    Query<?> matchInsert = match(var("x")).insert(var("y"));
    List<Query<?>> queries = Graql.parser().parseList(longQueryString).collect(toList());
    assertEquals(Collections.nCopies(numQueries, matchInsert), queries);
}
Also used : ConnectedComponentQuery(ai.grakn.graql.analytics.ConnectedComponentQuery) AggregateQuery(ai.grakn.graql.AggregateQuery) DefineQuery(ai.grakn.graql.DefineQuery) UndefineQuery(ai.grakn.graql.UndefineQuery) DeleteQuery(ai.grakn.graql.DeleteQuery) InsertQuery(ai.grakn.graql.InsertQuery) GetQuery(ai.grakn.graql.GetQuery) Query(ai.grakn.graql.Query) CoreMatchers.containsString(org.hamcrest.CoreMatchers.containsString) Test(org.junit.Test)

Aggregations

Query (ai.grakn.graql.Query)21 Test (org.junit.Test)15 GetQuery (ai.grakn.graql.GetQuery)13 InsertQuery (ai.grakn.graql.InsertQuery)13 DefineQuery (ai.grakn.graql.DefineQuery)12 AggregateQuery (ai.grakn.graql.AggregateQuery)11 DeleteQuery (ai.grakn.graql.DeleteQuery)11 UndefineQuery (ai.grakn.graql.UndefineQuery)11 ConnectedComponentQuery (ai.grakn.graql.analytics.ConnectedComponentQuery)11 CoreMatchers.containsString (org.hamcrest.CoreMatchers.containsString)11 Keyspace (ai.grakn.Keyspace)4 BatchExecutorClient (ai.grakn.client.BatchExecutorClient)3 SimpleURI (ai.grakn.util.SimpleURI)2 List (java.util.List)2 Optional (java.util.Optional)2 Collectors (java.util.stream.Collectors)2 Logger (org.slf4j.Logger)2 LoggerFactory (org.slf4j.LoggerFactory)2 API (ai.grakn.API)1 GraknTx (ai.grakn.GraknTx)1