Search in sources :

Example 21 with Query

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

the class DataContextDelegateIT method testWillPerformQuery.

@Test
public void testWillPerformQuery() throws Exception {
    final List<Query> queriesPerformed = new ArrayList<Query>(1);
    DataContextDelegate delegate = new MockDataContextDelegate() {

        @Override
        public Query willPerformQuery(DataContext context, Query query) {
            queriesPerformed.add(query);
            return query;
        }
    };
    context.setDelegate(delegate);
    // test that delegate is consulted before select
    SelectQuery query = new SelectQuery(Gallery.class);
    List<?> results = context.performQuery(query);
    assertTrue("Delegate is not notified of a query being run.", queriesPerformed.contains(query));
    assertEquals(1, queriesPerformed.size());
    assertNotNull(results);
}
Also used : SelectQuery(org.apache.cayenne.query.SelectQuery) SelectQuery(org.apache.cayenne.query.SelectQuery) Query(org.apache.cayenne.query.Query) MockQuery(org.apache.cayenne.query.MockQuery) ArrayList(java.util.ArrayList) Test(org.junit.Test)

Example 22 with Query

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

the class JdbcPkGenerator method longPkFromDatabase.

/**
 * Performs primary key generation ignoring cache. Generates a range of
 * primary keys as specified by "pkCacheSize" bean property.
 * <p>
 * This method is called internally from "generatePkForDbEntity" and then
 * generated range of key values is saved in cache for performance.
 * Subclasses that implement different primary key generation solutions
 * should override this method, not "generatePkForDbEntity".
 * </p>
 *
 * @since 3.0
 */
protected long longPkFromDatabase(DataNode node, DbEntity entity) throws Exception {
    String select = "SELECT #result('NEXT_ID' 'long' 'NEXT_ID') FROM AUTO_PK_SUPPORT " + "WHERE TABLE_NAME = '" + entity.getName() + '\'';
    // run queries via DataNode to utilize its transactional behavior
    List<Query> queries = new ArrayList<>(2);
    queries.add(new SQLTemplate(entity, select));
    queries.add(new SQLTemplate(entity, pkUpdateString(entity.getName())));
    PkRetrieveProcessor observer = new PkRetrieveProcessor(entity.getName());
    node.performQueries(queries, observer);
    return observer.getId();
}
Also used : SQLTemplate(org.apache.cayenne.query.SQLTemplate) Query(org.apache.cayenne.query.Query) ArrayList(java.util.ArrayList)

Example 23 with Query

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

the class FrontBasePkGenerator method longPkFromDatabase.

/**
 * @since 3.0
 */
@Override
protected long longPkFromDatabase(DataNode node, DbEntity entity) throws Exception {
    String template = "SELECT #result('UNIQUE' 'long') FROM " + entity.getName();
    final long[] pkHolder = new long[1];
    SQLTemplate query = new SQLTemplate(entity, template);
    OperationObserver observer = new DoNothingOperationObserver() {

        @Override
        public void nextRows(Query query, List<?> dataRows) {
            if (dataRows.size() != 1) {
                throw new CayenneRuntimeException("Error fetching PK. Expected one row, got %d", dataRows.size());
            }
            DataRow row = (DataRow) dataRows.get(0);
            Number pk = (Number) row.get("UNIQUE");
            pkHolder[0] = pk.longValue();
        }
    };
    node.performQueries(Collections.singleton((Query) query), observer);
    return pkHolder[0];
}
Also used : SQLTemplate(org.apache.cayenne.query.SQLTemplate) Query(org.apache.cayenne.query.Query) CayenneRuntimeException(org.apache.cayenne.CayenneRuntimeException) OperationObserver(org.apache.cayenne.access.OperationObserver) DoNothingOperationObserver(org.apache.cayenne.access.util.DoNothingOperationObserver) ArrayList(java.util.ArrayList) List(java.util.List) DoNothingOperationObserver(org.apache.cayenne.access.util.DoNothingOperationObserver) DataRow(org.apache.cayenne.DataRow)

Example 24 with Query

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

the class CayenneContextIT method testBeforePropertyReadShouldInflateHollow.

@Test
public void testBeforePropertyReadShouldInflateHollow() {
    ObjectId gid = new ObjectId("MtTable1", "a", "b");
    final ClientMtTable1 inflated = new ClientMtTable1();
    inflated.setPersistenceState(PersistenceState.COMMITTED);
    inflated.setObjectId(gid);
    inflated.setGlobalAttribute1("abc");
    ClientConnection connection = mock(ClientConnection.class);
    when(connection.sendMessage((ClientMessage) any())).thenAnswer(new Answer<Object>() {

        public Object answer(InvocationOnMock invocation) {
            ClientMessage arg = (ClientMessage) invocation.getArguments()[0];
            if (arg instanceof BootstrapMessage) {
                return new EntityResolver();
            } else {
                return new GenericResponse(Arrays.asList(inflated));
            }
        }
    });
    ClientChannel channel = new ClientChannel(connection, false, new MockEventManager(), false);
    // check that a HOLLOW object is infalted on "beforePropertyRead"
    ClientMtTable1 hollow = new ClientMtTable1();
    hollow.setPersistenceState(PersistenceState.HOLLOW);
    hollow.setObjectId(gid);
    final boolean[] selectExecuted = new boolean[1];
    CayenneContext context = new CayenneContext(channel) {

        @Override
        public List<?> performQuery(Query query) {
            selectExecuted[0] = true;
            return super.performQuery(query);
        }
    };
    context.setEntityResolver(serverContext.getEntityResolver().getClientEntityResolver());
    context.graphManager.registerNode(hollow.getObjectId(), hollow);
    // testing this...
    context.prepareForAccess(hollow, ClientMtTable1.GLOBAL_ATTRIBUTE1_PROPERTY, false);
    assertTrue(selectExecuted[0]);
    assertSame(hollow, context.getGraphManager().getNode(gid));
    assertEquals(inflated.getGlobalAttribute1Direct(), hollow.getGlobalAttribute1Direct());
    assertEquals(PersistenceState.COMMITTED, hollow.getPersistenceState());
}
Also used : Query(org.apache.cayenne.query.Query) GenericResponse(org.apache.cayenne.util.GenericResponse) BootstrapMessage(org.apache.cayenne.remote.BootstrapMessage) ClientMessage(org.apache.cayenne.remote.ClientMessage) EntityResolver(org.apache.cayenne.map.EntityResolver) ClientChannel(org.apache.cayenne.remote.ClientChannel) ClientMtTable1(org.apache.cayenne.testdo.mt.ClientMtTable1) InvocationOnMock(org.mockito.invocation.InvocationOnMock) ClientConnection(org.apache.cayenne.remote.ClientConnection) MockEventManager(org.apache.cayenne.event.MockEventManager) Test(org.junit.Test)

Example 25 with Query

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

the class MockDataNode method initWithPresetResults.

private void initWithPresetResults(Collection queries, OperationObserver resultConsumer) {
    // stick preset results to the consumer
    Iterator it = queries.iterator();
    while (it.hasNext()) {
        Query query = (Query) it.next();
        resultConsumer.nextRows(query, (List) results.get(query));
    }
}
Also used : Query(org.apache.cayenne.query.Query) Iterator(java.util.Iterator)

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