Search in sources :

Example 6 with Query

use of org.apache.cayenne.query.Query in project cayenne by apache.

the class CayenneContextQueryAction method interceptRefreshQuery.

@Override
protected boolean interceptRefreshQuery() {
    if (query instanceof RefreshQuery) {
        RefreshQuery refreshQuery = (RefreshQuery) query;
        CayenneContext context = (CayenneContext) actingContext;
        // 1. refresh all
        if (refreshQuery.isRefreshAll()) {
            invalidateLocally(context.internalGraphManager(), context.internalGraphManager().registeredNodes().iterator());
            context.getQueryCache().clear();
            // cascade
            return !DONE;
        }
        // 2. invalidate object collection
        Collection<?> objects = refreshQuery.getObjects();
        if (objects != null && !objects.isEmpty()) {
            invalidateLocally(context.internalGraphManager(), objects.iterator());
            // cascade
            return !DONE;
        }
        // 3. refresh query - have to do it eagerly to refresh the objects involved
        if (refreshQuery.getQuery() != null) {
            Query cachedQuery = refreshQuery.getQuery();
            String cacheKey = cachedQuery.getMetaData(context.getEntityResolver()).getCacheKey();
            context.getQueryCache().remove(cacheKey);
            this.response = context.performGenericQuery(cachedQuery);
            // do not cascade to avoid running query twice
            return DONE;
        }
        // 4. refresh groups...
        if (refreshQuery.getGroupKeys() != null && refreshQuery.getGroupKeys().length > 0) {
            String[] groups = refreshQuery.getGroupKeys();
            for (String group : groups) {
                context.getQueryCache().removeGroup(group);
            }
            // cascade group invalidation
            return !DONE;
        }
    }
    return !DONE;
}
Also used : Query(org.apache.cayenne.query.Query) RefreshQuery(org.apache.cayenne.query.RefreshQuery) RefreshQuery(org.apache.cayenne.query.RefreshQuery)

Example 7 with Query

use of org.apache.cayenne.query.Query in project cayenne by apache.

the class ClientServerChannelIT method testOnQuery.

@Test
public void testOnQuery() {
    final boolean[] genericDone = new boolean[1];
    MockDataChannel parent = new MockDataChannel(new EntityResolver()) {

        @Override
        public QueryResponse onQuery(ObjectContext context, Query query) {
            genericDone[0] = true;
            return super.onQuery(context, query);
        }
    };
    DataContext context = (DataContext) runtime.newContext(parent);
    QueryMessage message = new QueryMessage(new MockQuery());
    new ClientServerChannel(context).onQuery(null, message.getQuery());
    assertTrue(genericDone[0]);
}
Also used : QueryMessage(org.apache.cayenne.remote.QueryMessage) SelectQuery(org.apache.cayenne.query.SelectQuery) MockQuery(org.apache.cayenne.query.MockQuery) Query(org.apache.cayenne.query.Query) EntityResolver(org.apache.cayenne.map.EntityResolver) ObjectContext(org.apache.cayenne.ObjectContext) MockQuery(org.apache.cayenne.query.MockQuery) MockDataChannel(org.apache.cayenne.MockDataChannel) Test(org.junit.Test)

Example 8 with Query

use of org.apache.cayenne.query.Query in project cayenne by apache.

the class ClientServerChannelIT method testPerformQueryObjectIDInjection.

@Test
public void testPerformQueryObjectIDInjection() throws Exception {
    tMtTable1.insert(55, "g1", "s1");
    Query query = new SelectQuery("MtTable1");
    QueryResponse response = clientServerChannel.onQuery(null, query);
    assertNotNull(response);
    List<?> results = response.firstList();
    assertNotNull(results);
    assertEquals(1, results.size());
    Object result = results.get(0);
    assertTrue(result instanceof ClientMtTable1);
    ClientMtTable1 clientObject = (ClientMtTable1) result;
    assertNotNull(clientObject.getObjectId());
    assertEquals(new ObjectId("MtTable1", MtTable1.TABLE1_ID_PK_COLUMN, 55), clientObject.getObjectId());
}
Also used : SelectQuery(org.apache.cayenne.query.SelectQuery) ClientMtTable1(org.apache.cayenne.testdo.mt.ClientMtTable1) SelectQuery(org.apache.cayenne.query.SelectQuery) MockQuery(org.apache.cayenne.query.MockQuery) Query(org.apache.cayenne.query.Query) ObjectId(org.apache.cayenne.ObjectId) QueryResponse(org.apache.cayenne.QueryResponse) Test(org.junit.Test)

Example 9 with Query

use of org.apache.cayenne.query.Query in project cayenne by apache.

the class ClientServerChannelIT method testPerformQueryValuePropagation.

@Test
public void testPerformQueryValuePropagation() throws Exception {
    byte[] bytes = new byte[] { 1, 2, 3 };
    tMtTable3.insert(1, bytes, "abc", 4);
    Query query = new SelectQuery("MtTable3");
    QueryResponse response = clientServerChannel.onQuery(null, query);
    assertNotNull(response);
    List<?> results = response.firstList();
    assertNotNull(results);
    assertEquals(1, results.size());
    Object result = results.get(0);
    assertTrue("Result is of wrong type: " + result, result instanceof ClientMtTable3);
    ClientMtTable3 clientObject = (ClientMtTable3) result;
    assertEquals("abc", clientObject.getCharColumn());
    assertEquals(new Integer(4), clientObject.getIntColumn());
    assertTrue(new EqualsBuilder().append(clientObject.getBinaryColumn(), bytes).isEquals());
}
Also used : SelectQuery(org.apache.cayenne.query.SelectQuery) ClientMtTable3(org.apache.cayenne.testdo.mt.ClientMtTable3) SelectQuery(org.apache.cayenne.query.SelectQuery) MockQuery(org.apache.cayenne.query.MockQuery) Query(org.apache.cayenne.query.Query) QueryResponse(org.apache.cayenne.QueryResponse) EqualsBuilder(org.apache.cayenne.util.EqualsBuilder) Test(org.junit.Test)

Example 10 with Query

use of org.apache.cayenne.query.Query in project cayenne by apache.

the class SchemaUpdateStrategyIT method testNoStandardSchema.

@Test
public void testNoStandardSchema() throws Exception {
    String template = "SELECT #result('ARTIST_ID' 'int') FROM ARTIST ORDER BY ARTIST_ID";
    SQLTemplate query = new SQLTemplate(Object.class, template);
    MockOperationObserver observer = new MockOperationObserver();
    setStrategy(TstSchemaUpdateStrategy.class);
    node.performQueries(Collections.singletonList((Query) query), observer);
    assertTrue(node.getSchemaUpdateStrategy() instanceof TstSchemaUpdateStrategy);
}
Also used : SQLTemplate(org.apache.cayenne.query.SQLTemplate) Query(org.apache.cayenne.query.Query) MockOperationObserver(org.apache.cayenne.access.MockOperationObserver) Test(org.junit.Test)

Aggregations

Query (org.apache.cayenne.query.Query)43 Test (org.junit.Test)25 SelectQuery (org.apache.cayenne.query.SelectQuery)15 SQLTemplate (org.apache.cayenne.query.SQLTemplate)14 ArrayList (java.util.ArrayList)10 CayenneRuntimeException (org.apache.cayenne.CayenneRuntimeException)8 DataRow (org.apache.cayenne.DataRow)6 QueryResponse (org.apache.cayenne.QueryResponse)6 MockQuery (org.apache.cayenne.query.MockQuery)6 List (java.util.List)5 ObjectIdQuery (org.apache.cayenne.query.ObjectIdQuery)5 Collection (java.util.Collection)4 HashMap (java.util.HashMap)4 ObjectContext (org.apache.cayenne.ObjectContext)4 ObjectId (org.apache.cayenne.ObjectId)4 Persistent (org.apache.cayenne.Persistent)4 MockOperationObserver (org.apache.cayenne.access.MockOperationObserver)4 Map (java.util.Map)3 DbEntity (org.apache.cayenne.map.DbEntity)3 EntityResolver (org.apache.cayenne.map.EntityResolver)3