package jef.orm.exists;
import java.util.List;
import jef.codegen.EntityEnhancer;
import jef.common.log.LogUtil;
import jef.database.DbClient;
import jef.database.IConditionField.Exists;
import jef.database.IConditionField.NotExists;
import jef.database.QB;
import jef.database.query.Query;
import jef.database.query.RefField;
import jef.database.test.DataSource;
import jef.database.test.DataSourceContext;
import jef.database.test.DatabaseInit;
import jef.database.test.JefJUnit4DatabaseTestRunner;
import jef.orm.exists.model.TableA;
import jef.orm.exists.model.TableB;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(JefJUnit4DatabaseTestRunner.class)
@DataSourceContext({
@DataSource(name="oracle",url="${oracle.url}",user="${oracle.user}",password="${oracle.password}"),
@DataSource(name = "mysql", url = "${mysql.url}", user = "${mysql.user}", password = "${mysql.password}"),
@DataSource(name="postgresql",url="${postgresql.url}",user="${postgresql.user}",password="${postgresql.password}"),
@DataSource(name="derby",url="jdbc:derby:./db;create=true"),
@DataSource(name = "hsqldb", url = "jdbc:hsqldb:mem:testhsqldb", user = "sa", password = ""),
@DataSource(name = "sqlite", url = "jdbc:sqlite:test.db?date_string_format=yyyy-MM-dd HH:mm:ss"),
@DataSource(name = "sqlserver", url = "${sqlserver.url}",user="${sqlserver.user}",password="${sqlserver.password}")
})
public class ExistsTest extends org.junit.Assert{
private DbClient db;
@DatabaseInit
public void prepare() throws Exception {
try{
db.dropTable(TableA.class);
db.dropTable(TableB.class);
db.createTable(TableA.class,TableB.class);
TableA a=new TableA(1);
db.insert(a);
a=new TableA(2);
db.insert(a);
a=new TableA(3);
db.insert(a);
TableB b=new TableB(1);
db.insert(b);
b=new TableB(2);
db.insert(b);
b=new TableB(4);
db.insert(b);
} catch (Exception e) {
LogUtil.exception(e);
}
}
@Test
public void testExists() throws Exception {
Query<TableA> entityA=QB.create(TableA.class);
Query<TableB> entityB=QB.create(TableB.class);
entityB.addCondition(TableB.Field.id, new RefField(entityA,"id"));
entityA.addCondition(new Exists(entityB));
entityA.orderByAsc(TableA.Field.id);
List<TableA> list=db.select(entityA);
Assert.assertEquals(list.size(),2);
Assert.assertEquals(list.get(0).getId(),Integer.valueOf(1));
Assert.assertEquals(list.get(1).getId(),Integer.valueOf(2));
}
@Test
public void testNotExists()throws Exception {
Query<TableA> entityA=QB.create(TableA.class);
Query<TableB> entityB=QB.create(TableB.class);
entityB.addCondition(TableB.Field.id, new RefField(entityA,"id"));
entityA.addCondition(new NotExists(entityB));
List<TableA> list=db.select(entityA);
Assert.assertEquals(list.size(),1);
Assert.assertEquals(list.get(0).getId(),Integer.valueOf(3));
}
}