use of org.jpox.samples.models.company.PersonHolder in project tests by datanucleus.
the class JDOQLResultTest method testNewObjectInResult.
/**
* Test case to use the JDO 2.0 setResultClass().
*/
public void testNewObjectInResult() {
try {
PersistenceManager pm = pmf.getPersistenceManager();
Transaction tx = pm.currentTransaction();
try {
tx.begin();
Person p1 = new Person(101, "Fred", "Flintstone", "fred.flintstone@jpox.com");
p1.setAge(34);
Person p2 = new Person(102, "Barney", "Rubble", "barney.rubble@jpox.com");
p2.setAge(37);
pm.makePersistent(p1);
pm.makePersistent(p2);
tx.commit();
} finally {
if (tx.isActive()) {
tx.rollback();
}
}
// Query using PersonHolder result output
try {
tx.begin();
// check with default constructor
Query q = pm.newQuery(pm.getExtent(Person.class, false));
q.setFilter("age > 35");
q.setResult("new org.jpox.samples.models.company.PersonHolder()");
List results = (List) q.execute();
assertEquals(1, results.size());
Iterator resultsIter = results.iterator();
if (resultsIter.hasNext()) {
Object obj = resultsIter.next();
assertTrue("ResultClass of query is incorrect. Should have been " + PersonHolder.class.getName() + " but is " + obj.getClass().getName(), PersonHolder.class == obj.getClass());
PersonHolder holder = (PersonHolder) obj;
assertNull(holder.getPerson1());
}
q.closeAll();
// check with simple argument
q = pm.newQuery(pm.getExtent(Person.class, false));
q.setFilter("age > 35");
q.setResult("new org.jpox.samples.models.company.PersonHolder(this)");
results = (List) q.execute();
assertEquals(1, results.size());
resultsIter = results.iterator();
if (resultsIter.hasNext()) {
Object obj = resultsIter.next();
assertTrue("ResultClass of query is incorrect. Should have been " + PersonHolder.class.getName() + " but is " + obj.getClass().getName(), PersonHolder.class == obj.getClass());
PersonHolder holder = (PersonHolder) obj;
assertNotNull(holder.getPerson1());
assertNull(holder.getPerson2());
}
q.closeAll();
// check multiple args and with a literal null
q = pm.newQuery(pm.getExtent(Person.class, false));
q.setFilter("age > 35");
q.setResult("new org.jpox.samples.models.company.PersonHolder(this,null,this.firstName)");
results = (List) q.execute();
assertEquals(1, results.size());
resultsIter = results.iterator();
if (resultsIter.hasNext()) {
Object obj = resultsIter.next();
assertTrue("ResultClass of query is incorrect. Should have been " + PersonHolder.class.getName() + " but is " + obj.getClass().getName(), PersonHolder.class == obj.getClass());
PersonHolder holder = (PersonHolder) obj;
assertNotNull(holder.getPerson1());
assertNull(holder.getPerson2());
assertEquals("Barney", holder.getFirstName().trim());
}
q.closeAll();
// add more literals
q = pm.newQuery(pm.getExtent(Person.class, false));
q.setFilter("age > 35");
q.setResult("new org.jpox.samples.models.company.PersonHolder(this,null,this.firstName,'string',1)");
results = (List) q.execute();
assertEquals(1, results.size());
resultsIter = results.iterator();
if (resultsIter.hasNext()) {
Object obj = resultsIter.next();
assertTrue("ResultClass of query is incorrect. Should have been " + PersonHolder.class.getName() + " but is " + obj.getClass().getName(), PersonHolder.class == obj.getClass());
PersonHolder holder = (PersonHolder) obj;
assertNotNull(holder.getPerson1());
assertNull(holder.getPerson2());
assertEquals("Barney", holder.getFirstName().trim());
assertEquals("string", holder.getLiteralString());
assertEquals(1, holder.getLiteralInt());
}
q.closeAll();
// make sure if objects after literal, they work
q = pm.newQuery(pm.getExtent(Person.class, false));
q.setFilter("age > 35");
q.setResult("new org.jpox.samples.models.company.PersonHolder(this,null,this.firstName,'string',1,this)");
results = (List) q.execute();
assertEquals(1, results.size());
resultsIter = results.iterator();
if (resultsIter.hasNext()) {
Object obj = resultsIter.next();
assertTrue("ResultClass of query is incorrect. Should have been " + PersonHolder.class.getName() + " but is " + obj.getClass().getName(), PersonHolder.class == obj.getClass());
PersonHolder holder = (PersonHolder) obj;
assertNotNull(holder.getPerson1());
assertNull(holder.getPerson2());
assertEquals("Barney", holder.getFirstName().trim());
assertEquals("string", holder.getLiteralString());
assertEquals(1, holder.getLiteralInt());
}
q.closeAll();
// test new Object(new Object())
q = pm.newQuery(pm.getExtent(Person.class, false));
q.setFilter("age > 35");
q.setResult("new org.jpox.samples.models.company.PersonHolder(new org.jpox.samples.models.company.PersonHolder(new org.jpox.samples.models.company.PersonHolder(this),this),this)");
results = (List) q.execute();
assertEquals(1, results.size());
resultsIter = results.iterator();
if (resultsIter.hasNext()) {
Object obj = resultsIter.next();
assertTrue("ResultClass of query is incorrect. Should have been " + PersonHolder.class.getName() + " but is " + obj.getClass().getName(), PersonHolder.class == obj.getClass());
PersonHolder holder = (PersonHolder) obj;
assertNotNull(holder.getPerson1());
assertNotNull(holder.getPerson2());
}
q.closeAll();
// test new Object(new Object())
q = pm.newQuery(pm.getExtent(Person.class, false));
q.setFilter("age > 35");
q.setResult("this, 0, new org.jpox.samples.models.company.PersonHolder(new org.jpox.samples.models.company.PersonHolder(new org.jpox.samples.models.company.PersonHolder(this),this),this), 1, null");
results = (List) q.execute();
assertEquals(1, results.size());
resultsIter = results.iterator();
if (resultsIter.hasNext()) {
Object[] obj = (Object[]) resultsIter.next();
assertTrue("ResultClass of query is incorrect. Should have been " + PersonHolder.class.getName() + " but is " + obj[2].getClass().getName(), PersonHolder.class == obj[2].getClass());
PersonHolder holder = (PersonHolder) obj[2];
assertNotNull(holder.getPerson1());
assertNotNull(holder.getPerson2());
assertNotNull(obj[0]);
assertEquals(obj[0], holder.getPerson1());
assertEquals(0, ((Long) obj[1]).intValue());
assertNotNull(obj[3]);
assertEquals(1, ((Long) obj[3]).intValue());
assertNull(obj[4]);
}
q.closeAll();
tx.commit();
} catch (JDOException ex) {
LOG.error("Exception in query", ex);
fail(ex.getMessage());
} catch (Exception e) {
LOG.error("Exception caught", e);
fail(e.getMessage());
} finally {
if (tx.isActive()) {
tx.rollback();
}
pm.close();
}
} finally {
// Clean out our data
clean(Person.class);
}
}
Aggregations