/* * Copyright (c) 2010 Mysema Ltd. * All rights reserved. * */ package com.mysema.rdfbean.virtuoso.query; import static com.mysema.query.alias.Alias.$; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.joda.time.DateTime; import org.junit.Before; import org.junit.Test; import com.mysema.query.alias.Alias; import com.mysema.query.types.EntityPath; import com.mysema.rdfbean.domains.EntityDomain; import com.mysema.rdfbean.domains.EntityDomain.Entity; import com.mysema.rdfbean.object.BeanSubQuery; import com.mysema.rdfbean.testutil.SessionConfig; import com.mysema.rdfbean.virtuoso.AbstractConnectionTest; @SessionConfig(Entity.class) public class BeanSubQueryTest extends AbstractConnectionTest implements EntityDomain { private final List<DateTime> dateTimes = new ArrayList<DateTime>(); private final Entity var1 = Alias.alias(Entity.class, "var1"); private final Entity var2 = Alias.alias(Entity.class, "var2"); @Override @Before public void setUp() { DateTime dateTime = new DateTime(); dateTime = dateTime.minus(dateTime.getMillisOfSecond()); for (Long rev : Arrays.asList(5l, 10l, 15l, 20l, 25l, 30l)) { Entity entity = new Entity(rev, "text", dateTime.plusMinutes(rev.intValue())); dateTimes.add(entity.getCreated()); session.save(entity); } session.clear(); } @Test public void CompareLong() throws IOException { Entity result = session.from($(var1)) .where( sub($(var2)) .where($(var2).ne($(var1)), $(var2.getRevision()).gt($(var1.getRevision()))) .notExists()) .uniqueResult($(var1)); assertNotNull(result); assertEquals(30l, result.getRevision()); } @Test public void CompareDateTime() { Entity result = session.from($(var1)) .where( sub($(var2)) .where($(var2).ne($(var1)), $(var2.getCreated()).gt($(var1.getCreated()))) .notExists()) .uniqueResult($(var1)); assertNotNull(result); assertEquals(dateTimes.get(dateTimes.size() - 1).getMillis(), result.getCreated().getMillis()); } private BeanSubQuery sub(EntityPath<?> entity) { return new BeanSubQuery().from(entity); } }