/* * Copyright (c) 2010 Mysema Ltd. * All rights reserved. * */ package com.mysema.rdfbean.rdb.query; import static com.mysema.query.alias.Alias.$; import static org.junit.Assert.assertEquals; import java.io.IOException; import java.util.Arrays; import java.util.List; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import com.mysema.query.alias.Alias; import com.mysema.query.types.EntityPath; import com.mysema.rdfbean.domains.EntityDocumentRevisionDomain; import com.mysema.rdfbean.domains.EntityDocumentRevisionDomain.Document; import com.mysema.rdfbean.domains.EntityDocumentRevisionDomain.Entity; import com.mysema.rdfbean.domains.EntityDocumentRevisionDomain.Revision; import com.mysema.rdfbean.object.BeanSubQuery; import com.mysema.rdfbean.rdb.AbstractRDBTest; import com.mysema.rdfbean.testutil.SessionConfig; @SessionConfig({ Document.class, Entity.class, Revision.class }) public class BeanSubQuery2Test extends AbstractRDBTest implements EntityDocumentRevisionDomain { private Revision rev1 = Alias.alias(Revision.class, "rev1"); private Revision rev2 = Alias.alias(Revision.class, "rev2"); @Before public void setUp() { Document document = new Document(); session.save(document); Entity entity = new Entity(); entity.document = document; session.save(entity); for (int created : Arrays.asList(1, 2, 3, 4, 5, 6)) { Revision rev = new Revision(); rev.svnRevision = 1; rev.revisionOf = entity; rev.created = created; session.save(rev); } session.clear(); } @Test public void SubQuery_exists() throws IOException { Entity entity = session.findInstances(Entity.class).get(0); List<Revision> results = session.from($(rev1)) .where( $(rev1.getRevisionOf()).eq(entity), $(rev1.getSvnRevision()).loe(1), sub($(rev2)).where( $(rev2).ne($(rev1)), $(rev2.getRevisionOf()).eq($(rev1.getRevisionOf())), $(rev2.getSvnRevision()).loe(1), $(rev2.getCreated()).gt($(rev1.getCreated()))).notExists()) .list($(rev1)); assertEquals(1, results.size()); Revision result = results.get(0); assertEquals(6, result.getCreated()); } @Test public void SubQuery_exists2() throws IOException { Document document = session.findInstances(Document.class).get(0); List<Revision> results = session.from($(rev1)) .where( $(rev1.getRevisionOf().getDocument()).eq(document), $(rev1.getSvnRevision()).loe(1), sub($(rev2)).where( $(rev2).ne($(rev1)), $(rev2.getRevisionOf()).eq($(rev1.getRevisionOf())), $(rev2.getSvnRevision()).loe(1), $(rev2.getCreated()).gt($(rev1.getCreated()))).notExists()) .list($(rev1)); assertEquals(1, results.size()); Revision result = results.get(0); assertEquals(6, result.getCreated()); } @Test @Ignore public void SubQuery_all() throws IOException { // FIXME : Scalar subquery contains more than one row [90053-133] Document document = session.findInstances(Document.class).get(0); List<Revision> results = session.from($(rev1)) .where( $(rev1.getRevisionOf().getDocument()).eq(document), $(rev1.getSvnRevision()).loe(1), $(rev1.getCreated()).goe( sub($(rev2)).where( $(rev2.getRevisionOf()).eq($(rev1.getRevisionOf())), $(rev2.getSvnRevision()).loe(1)).unique($(rev2.getCreated())))) .list($(rev1)); assertEquals(1, results.size()); Revision result = results.get(0); assertEquals(6, result.getCreated()); } private BeanSubQuery sub(EntityPath<?> entity) { return new BeanSubQuery().from(entity); } }