Search in sources :

Example 46 with Artist

use of org.apache.cayenne.testdo.testmap.Artist in project cayenne by apache.

the class DataContextQueryCachingIT method testLocalCacheRefreshObjectsRefresh.

@Test
public void testLocalCacheRefreshObjectsRefresh() throws Exception {
    createInsertDataSet();
    SelectQuery<Artist> select = new SelectQuery<>(Artist.class);
    select.setCacheStrategy(QueryCacheStrategy.LOCAL_CACHE_REFRESH);
    // no cache yet...
    List<Artist> objects1 = context.performQuery(select);
    assertEquals(1, objects1.size());
    Artist a1 = objects1.get(0);
    assertEquals("aaa", a1.getArtistName());
    // cache, but force refresh
    createUpdateDataSet1();
    List<?> objects2 = context.performQuery(select);
    assertEquals(1, objects2.size());
    Artist a2 = (Artist) objects2.get(0);
    assertSame(a1, a2);
    assertEquals("bbb", a2.getArtistName());
}
Also used : Artist(org.apache.cayenne.testdo.testmap.Artist) SelectQuery(org.apache.cayenne.query.SelectQuery) Test(org.junit.Test)

Example 47 with Artist

use of org.apache.cayenne.testdo.testmap.Artist in project cayenne by apache.

the class DataContextRefreshQueryIT method testRefreshCollection.

@Test
public void testRefreshCollection() throws Exception {
    createRefreshCollectionDataSet();
    SelectQuery<Artist> q = new SelectQuery<>(Artist.class);
    q.addOrdering("db:ARTIST_ID", SortOrder.ASCENDING);
    List<?> artists = context.performQuery(q);
    Artist a1 = (Artist) artists.get(0);
    Artist a2 = (Artist) artists.get(1);
    assertEquals(2, a1.getPaintingArray().size());
    assertEquals(0, a2.getPaintingArray().size());
    assertNotNull(context.getParentDataDomain().getSharedSnapshotCache().getCachedSnapshot(a1.getObjectId()));
    assertNotNull(context.getParentDataDomain().getSharedSnapshotCache().getCachedSnapshot(a2.getObjectId()));
    RefreshQuery refresh = new RefreshQuery(artists);
    context.performQuery(refresh);
    assertNull(context.getParentDataDomain().getSharedSnapshotCache().getCachedSnapshot(a1.getObjectId()));
    assertNull(context.getParentDataDomain().getSharedSnapshotCache().getCachedSnapshot(a2.getObjectId()));
    assertEquals(PersistenceState.HOLLOW, a1.getPersistenceState());
    assertEquals(PersistenceState.HOLLOW, a2.getPersistenceState());
    assertTrue(((ValueHolder) a1.readProperty(Artist.PAINTING_ARRAY.getName())).isFault());
    assertTrue(((ValueHolder) a2.readProperty(Artist.PAINTING_ARRAY.getName())).isFault());
}
Also used : Artist(org.apache.cayenne.testdo.testmap.Artist) SelectQuery(org.apache.cayenne.query.SelectQuery) RefreshQuery(org.apache.cayenne.query.RefreshQuery) Test(org.junit.Test)

Example 48 with Artist

use of org.apache.cayenne.testdo.testmap.Artist in project cayenne by apache.

the class DataContextRefreshQueryIT method testRefreshQueryResultsLocalCache.

@Test
public void testRefreshQueryResultsLocalCache() throws Exception {
    createRefreshCollectionDataSet();
    Expression qual = Painting.PAINTING_TITLE.eq("P2");
    SelectQuery<Painting> q = new SelectQuery<>(Painting.class, qual);
    q.addOrdering("db:PAINTING_ID", SortOrder.ASCENDING);
    q.setCacheStrategy(QueryCacheStrategy.LOCAL_CACHE);
    q.setCacheGroup("X");
    List<?> paints = context.performQuery(q);
    // fetch P1 separately from cached query
    Painting p1 = Cayenne.objectForPK(context, Painting.class, 33001);
    Painting p2 = (Painting) paints.get(0);
    Artist a1 = p2.getToArtist();
    assertSame(a1, p1.getToArtist());
    assertNotNull(context.getParentDataDomain().getSharedSnapshotCache().getCachedSnapshot(p1.getObjectId()));
    assertNotNull(context.getParentDataDomain().getSharedSnapshotCache().getCachedSnapshot(p2.getObjectId()));
    createRefreshCollectionToOneUpdateDataSet();
    RefreshQuery refresh = new RefreshQuery(q);
    context.performQuery(refresh);
    assertNotNull(context.getParentDataDomain().getSharedSnapshotCache().getCachedSnapshot(p1.getObjectId()));
    // probably refreshed eagerly
    assertNotNull(context.getParentDataDomain().getSharedSnapshotCache().getCachedSnapshot(p2.getObjectId()));
    assertEquals(PersistenceState.COMMITTED, p1.getPersistenceState());
    assertEquals(PersistenceState.COMMITTED, p2.getPersistenceState());
    assertSame(a1, p1.getToArtist());
    assertNotSame(a1, p2.getToArtist());
    assertEquals("c", p1.getToArtist().getArtistName());
    assertEquals("b", p2.getToArtist().getArtistName());
}
Also used : SelectQuery(org.apache.cayenne.query.SelectQuery) Artist(org.apache.cayenne.testdo.testmap.Artist) Expression(org.apache.cayenne.exp.Expression) RefreshQuery(org.apache.cayenne.query.RefreshQuery) Painting(org.apache.cayenne.testdo.testmap.Painting) Test(org.junit.Test)

Example 49 with Artist

use of org.apache.cayenne.testdo.testmap.Artist in project cayenne by apache.

the class DataContextRefreshQueryIT method testRefreshQueryResultGroupLocal.

@Test
public void testRefreshQueryResultGroupLocal() throws Exception {
    createRefreshCollectionDataSet();
    Expression qual = Painting.PAINTING_TITLE.eq("P2");
    SelectQuery<Painting> q = new SelectQuery<>(Painting.class, qual);
    q.addOrdering("db:PAINTING_ID", SortOrder.ASCENDING);
    q.setCacheStrategy(QueryCacheStrategy.LOCAL_CACHE);
    q.setCacheGroup("X");
    List<?> paints = context.performQuery(q);
    // fetch P1 separately from cached query
    Painting p1 = Cayenne.objectForPK(context, Painting.class, 33001);
    Painting p2 = (Painting) paints.get(0);
    Artist a1 = p2.getToArtist();
    assertSame(a1, p1.getToArtist());
    assertNotNull(context.getParentDataDomain().getSharedSnapshotCache().getCachedSnapshot(p1.getObjectId()));
    assertNotNull(context.getParentDataDomain().getSharedSnapshotCache().getCachedSnapshot(p2.getObjectId()));
    createRefreshCollectionToOneUpdateDataSet();
    // results are served from cache and therefore are not refreshed
    context.performQuery(q);
    assertSame(a1, p1.getToArtist());
    assertSame(a1, p2.getToArtist());
    assertEquals("c", p1.getToArtist().getArtistName());
    assertEquals("c", p2.getToArtist().getArtistName());
    RefreshQuery refresh = new RefreshQuery("X");
    // this should invalidate results for the next query run
    context.performQuery(refresh);
    // this should force a refresh
    context.performQuery(q);
    assertEquals(PersistenceState.COMMITTED, p1.getPersistenceState());
    assertEquals(PersistenceState.COMMITTED, p2.getPersistenceState());
    assertSame(a1, p1.getToArtist());
    assertNotSame(a1, p2.getToArtist());
    assertEquals("c", p1.getToArtist().getArtistName());
    assertEquals("b", p2.getToArtist().getArtistName());
}
Also used : SelectQuery(org.apache.cayenne.query.SelectQuery) Artist(org.apache.cayenne.testdo.testmap.Artist) Expression(org.apache.cayenne.exp.Expression) RefreshQuery(org.apache.cayenne.query.RefreshQuery) Painting(org.apache.cayenne.testdo.testmap.Painting) Test(org.junit.Test)

Example 50 with Artist

use of org.apache.cayenne.testdo.testmap.Artist in project cayenne by apache.

the class DataContextRefreshingIT method testRefetchRootWithAddedToMany.

@Test
public void testRefetchRootWithAddedToMany() throws Exception {
    createSingleArtistDataSet();
    Artist artist = (Artist) context.performQuery(new SelectQuery(Artist.class)).get(0);
    assertEquals(artist.getPaintingArray().size(), 0);
    tPainting.insert(5, "p", 5, 1000);
    // select without prefetch
    SelectQuery query = new SelectQuery(Artist.class);
    artist = (Artist) context.performQuery(query).get(0);
    assertEquals(artist.getPaintingArray().size(), 0);
    // select using relationship prefetching
    query.addPrefetch(Artist.PAINTING_ARRAY.disjoint());
    artist = (Artist) context.performQuery(query).get(0);
    assertEquals(artist.getPaintingArray().size(), 1);
}
Also used : Artist(org.apache.cayenne.testdo.testmap.Artist) SelectQuery(org.apache.cayenne.query.SelectQuery) Test(org.junit.Test)

Aggregations

Artist (org.apache.cayenne.testdo.testmap.Artist)490 Test (org.junit.Test)481 Painting (org.apache.cayenne.testdo.testmap.Painting)145 SelectQuery (org.apache.cayenne.query.SelectQuery)126 Expression (org.apache.cayenne.exp.Expression)67 UnitTestClosure (org.apache.cayenne.unit.di.UnitTestClosure)47 EJBQLQuery (org.apache.cayenne.query.EJBQLQuery)39 List (java.util.List)36 ObjectContext (org.apache.cayenne.ObjectContext)30 SQLTemplate (org.apache.cayenne.query.SQLTemplate)26 ParallelTestContainer (org.apache.cayenne.test.parallel.ParallelTestContainer)26 DataRow (org.apache.cayenne.DataRow)21 ArrayList (java.util.ArrayList)20 ValueHolder (org.apache.cayenne.ValueHolder)18 ArtGroup (org.apache.cayenne.testdo.testmap.ArtGroup)16 LifecycleCallbackRegistry (org.apache.cayenne.reflect.LifecycleCallbackRegistry)15 ObjectId (org.apache.cayenne.ObjectId)14 ROPainting (org.apache.cayenne.testdo.testmap.ROPainting)13 Gallery (org.apache.cayenne.testdo.testmap.Gallery)12 ROArtist (org.apache.cayenne.testdo.testmap.ROArtist)12