Search in sources :

Example 6 with DeveloperRC

use of org.jpox.samples.models.company.DeveloperRC in project tests by datanucleus.

the class SQLQueryTest method testWithoutCandidateClassWithResultClass.

/**
 * Test of SQL queries when no candidate class is defined, and a result class is given.
 */
public void testWithoutCandidateClassWithResultClass() throws Exception {
    PersistenceManager pm = pmf.getPersistenceManager();
    Transaction tx = pm.currentTransaction();
    try {
        // Add a couple of payments
        tx.begin();
        Person pers1 = new Person(234568, "Homer", "Simpson", "homer.simpson@fox.com");
        pers1.setAge(45);
        Person pers2 = new Person(234578, "Marge", "Simpson", "marge.simpson@fox.com");
        pers1.setAge(42);
        pm.makePersistent(pers1);
        pm.makePersistent(pers2);
        tx.commit();
        // Test using ResultClass that is constructor-based
        tx.begin();
        try {
            String sqlText = "SELECT FIRSTNAME, LASTNAME, AGE FROM PERSON";
            Query query = pm.newQuery("javax.jdo.query.SQL", sqlText);
            query.setResultClass(PersonalDetails.class);
            List results = (List) query.execute();
            Iterator resultsIter = results.iterator();
            while (resultsIter.hasNext()) {
                Object obj = resultsIter.next();
                assertEquals("ResultClass of query is incorrect.", PersonalDetails.class.getName(), obj.getClass().getName());
            }
            query.closeAll();
        } catch (JDOUserException e) {
            fail(e.getMessage());
        }
        tx.commit();
        tx.begin();
        Developer p3 = new Developer();
        p3.setFirstName("John");
        p3.setSKILL("jdo");
        p3.setGlobalNum("GUID-p3");
        p3.setSerialNo("" + new Random(System.currentTimeMillis()).nextInt());
        pm.makePersistent(p3);
        Query inhQuery = pm.newNamedQuery(Developer.class, "DeveloperWithSkillForResult");
        inhQuery.setClass(null);
        List results = (List) inhQuery.execute("jdo");
        Iterator iter = results.iterator();
        while (iter.hasNext()) {
            Object obj = iter.next();
            assertTrue("Query with candidate class has returned the wrong type of object : was " + obj.getClass().getName() + " but should have been DeveloperRC", obj.getClass().getName().equals(DeveloperRC.class.getName()));
            DeveloperRC p = (DeveloperRC) obj;
            assertTrue("Query with candidate class has returned the wrong Developer object.", p.getSKILL().equals("jdo"));
        }
        tx.commit();
        tx.begin();
        Developer p4 = new Developer();
        p4.setFirstName("John");
        p4.setSKILL("ejb");
        p4.setGlobalNum("GUID-p4");
        p4.setSalary(10);
        p4.setPersonNum(100);
        p4.setSerialNo("" + new Random(System.currentTimeMillis()).nextInt());
        pm.makePersistent(p4);
        Query inhQuery2 = pm.newNamedQuery(Developer.class, "DeveloperWithSkillUsingJoinForResult");
        inhQuery2.setClass(null);
        results = (List) inhQuery2.execute("ejb");
        iter = results.iterator();
        while (iter.hasNext()) {
            Object obj = iter.next();
            assertTrue("Query with candidate class has returned the wrong type of object : was " + obj.getClass().getName() + " but should have been DeveloperRC", obj.getClass().getName().equals(DeveloperRC.class.getName()));
            DeveloperRC p = (DeveloperRC) obj;
            assertTrue("Query with candidate class has returned the wrong DeveloperRC object.", p.getSKILL().equals("ejb"));
            assertTrue("Query with candidate class has returned the wrong DeveloperRC object.", p.getGlobalNum().equals("GUID-p4"));
            assertEquals("Query with candidate class has returned the wrong DeveloperRC object.", 100, p.personNum);
            assertEquals("Query with candidate class has returned the wrong DeveloperRC object.", 10, (int) p.salary);
        }
        tx.commit();
        tx.begin();
        Developer p5 = new Developer();
        p5.setFirstName("John");
        p5.setSKILL("sap");
        p5.setGlobalNum("GUID-p5");
        p5.setSalary(10);
        p5.setPersonNum(100);
        p5.setSerialNo("" + new Random(System.currentTimeMillis()).nextInt());
        pm.makePersistent(p5);
        Query inhQuery3 = pm.newNamedQuery(Developer.class, "DeveloperWithSkillUsingJoinForResultHashMap");
        inhQuery3.setClass(null);
        results = (List) inhQuery3.execute("sap");
        iter = results.iterator();
        while (iter.hasNext()) {
            Object obj = iter.next();
            assertTrue("Query with candidate class has returned the wrong type of object : was " + obj.getClass().getName() + " but should have been HashMap", obj.getClass().getName().equals(HashMap.class.getName()));
            HashMap p = (HashMap) obj;
            assertTrue("Query with candidate class has returned the wrong DeveloperRC object.", getValueForKeyInMapCaseInsensitive(p, "SKILL").equals("sap"));
            assertTrue("Query with candidate class has returned the wrong DeveloperRC object.", getValueForKeyInMapCaseInsensitive(p, "GLOBALNUM").equals("GUID-p5"));
            Number salary = (Number) getValueForKeyInMapCaseInsensitive(p, "SALARY");
            assertEquals("Query with candidate class has returned the wrong DeveloperRC object.", 10, salary.intValue());
            Object personNumObj = getValueForKeyInMapCaseInsensitive(p, "PERSONNUM");
            if (personNumObj instanceof Long) {
                assertEquals("Query with candidate class has returned the wrong DeveloperRC object.", 100, ((Long) personNumObj).intValue());
            } else if (personNumObj instanceof BigDecimal) {
                assertEquals("Query with candidate class has returned the wrong DeveloperRC object.", 100, ((BigDecimal) personNumObj).intValue());
            } else {
                fail("Test doest support keys in map of type " + personNumObj.getClass());
            }
        }
        tx.commit();
    } finally {
        if (tx.isActive()) {
            tx.rollback();
        }
        pm.close();
        clean(Developer.class);
        clean(Person.class);
    }
}
Also used : Query(javax.jdo.Query) DeveloperRC(org.jpox.samples.models.company.DeveloperRC) PersistenceManager(javax.jdo.PersistenceManager) HashMap(java.util.HashMap) Developer(org.jpox.samples.models.company.Developer) PersonalDetails(org.jpox.samples.models.company.PersonalDetails) JDOUserException(javax.jdo.JDOUserException) BigDecimal(java.math.BigDecimal) Transaction(javax.jdo.Transaction) Random(java.util.Random) Iterator(java.util.Iterator) List(java.util.List) Person(org.jpox.samples.models.company.Person)

Aggregations

Iterator (java.util.Iterator)6 List (java.util.List)6 JDOUserException (javax.jdo.JDOUserException)6 PersistenceManager (javax.jdo.PersistenceManager)6 Query (javax.jdo.Query)6 Transaction (javax.jdo.Transaction)6 Developer (org.jpox.samples.models.company.Developer)6 DeveloperRC (org.jpox.samples.models.company.DeveloperRC)6 BigDecimal (java.math.BigDecimal)4 BigInteger (java.math.BigInteger)4 HashMap (java.util.HashMap)4 Random (java.util.Random)4 JDODataStoreException (javax.jdo.JDODataStoreException)4 Person (org.jpox.samples.models.company.Person)4 PersonalDetails (org.jpox.samples.models.company.PersonalDetails)4