Author: arminw Date: Mon Apr 2 11:15:05 2007 New Revision: 524865 URL: http://svn.apache.org/viewvc?view=rev&rev=524865 Log: fix tests, add new test
Modified: db/ojb/trunk/src/test/org/apache/ojb/broker/QueryTest.java Modified: db/ojb/trunk/src/test/org/apache/ojb/broker/QueryTest.java URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/broker/QueryTest.java?view=diff&rev=524865&r1=524864&r2=524865 ============================================================================== --- db/ojb/trunk/src/test/org/apache/ojb/broker/QueryTest.java (original) +++ db/ojb/trunk/src/test/org/apache/ojb/broker/QueryTest.java Mon Apr 2 11:15:05 2007 @@ -80,7 +80,7 @@ ClassDescriptor cld = broker.getClassDescriptor(Article.class); FieldDescriptor fld = cld.getFieldDescriptorByName("articleName"); - String sql = "select * from " + cld.getFullTableName() + " as A1 where A1." + fld.getColumnName() + " = '" + name + "'"; + String sql = "select * from " + cld.getFullTableName() + " A1 where A1." + fld.getColumnName() + " = '" + name + "'"; Query query = QueryFactory.newQuery(sql); Iterator it = broker.getReportQueryIteratorByQuery(query); @@ -508,7 +508,7 @@ Criteria crit; Query q; Collection results; - + // sql only crit = new Criteria(); crit.addSql("upper(firstname) = 'TOM' and id = 1"); @@ -516,8 +516,8 @@ results = broker.getCollectionByQuery(q); int size1 = results.size(); - - // sql plus attribute + + // sql plus attribute crit = new Criteria(); crit.addSql("upper(firstname) = 'TOM'"); crit.addEqualTo("id", new Integer(1)); @@ -525,8 +525,8 @@ results = broker.getCollectionByQuery(q); int size2 = results.size(); - - // attribute plus sql + + // attribute plus sql crit = new Criteria(); crit.addEqualTo("upper(firstname)", "TOM"); crit.addSql("id = 1"); @@ -553,7 +553,7 @@ Collection results = broker.getCollectionByQuery(q); assertNotNull(results); assertTrue(results.size() > 0); - + // compare with count int count = broker.getCount(q); assertEquals(results.size(), count); @@ -586,6 +586,7 @@ list_projects.add(p2); p.setProjects(list_projects); + // another Project but without associated Person objects Project p3 = new Project(); p3.setTitle(name); ArrayList list_3 = new ArrayList(); @@ -658,7 +659,7 @@ */ public void testSubQuery2() { - Collection results = null; + Collection results; String stamp = "testSubQuery2_" + System.currentTimeMillis(); int loops = 10; // create ProductGroups without article @@ -674,15 +675,15 @@ ReportQueryByCriteria subQuery; Criteria subCrit = new Criteria(); - Criteria subCrit2 = new Criteria(); - Criteria crit = new Criteria(); + // we want to execute a "not in" query, so we have to guaratee none null + // results in the sub-query, else the whole sub-result will be false + subCrit.addNotNull("productGroupId"); - subCrit2.addNotNull("productGroupId"); - subCrit.addAndCriteria(subCrit2); subQuery = ojb.getQueryFactory().newReportQuery(Article.class, subCrit); subQuery.setAttributes(new String[]{"productGroupId"}); subQuery.setDistinct(true); + Criteria crit = new Criteria(); crit.addEqualTo("groupName", "test group " + stamp); crit.addNotIn("groupId", subQuery); Query q = ojb.getQueryFactory().newQuery(ProductGroup.class, crit); @@ -691,7 +692,50 @@ assertNotNull(results); // System.out.println("*** Found " + results.size() + " empty ProductGroups ***"); assertEquals("Result of the query with sub-query does not match", loops, results.size()); + } + + /** + * test Subquery get all product groups without articles, with orderby in sub-query + * <p/> + * test may fail if db does not support sub queries + */ + public void testSubQuery2a() + { + Collection results; + String stamp = "testSubQuery2a_" + System.currentTimeMillis(); + int loops = 10; + // create ProductGroups without article + broker.beginTransaction(); + for(int i = 0; i < loops; i++) + { + ProductGroup pg = new ProductGroup(); + pg.setGroupName("test group " + stamp); + pg.setDescription("build by QueryTest#testSubQuery2"); + broker.store(pg); + } + broker.commitTransaction(); + + ReportQueryByCriteria subQuery; + Criteria subCrit = new Criteria(); + // we want to execute a "not in" query, so we have to guaratee none null + // results in the sub-query, else the whole sub-result will be false + subCrit.addNotNull("productGroupId"); + + subQuery = QueryFactory.newReportQuery(Article.class, subCrit); + subQuery.setAttributes(new String[]{"productGroupId"}); + subQuery.setDistinct(true); + // this doesn't make sense in this test, it's only added to check + // orderby clause in sub-query + subQuery.addOrderBy("productGroupId", true); + Criteria crit = new Criteria(); + crit.addEqualTo("groupName", "test group " + stamp); + crit.addNotIn("groupId", subQuery); + Query q = QueryFactory.newQuery(ProductGroup.class, crit); + + results = broker.getCollectionByQuery(q); + assertNotNull(results); + assertEquals("Result of the query with sub-query does not match", loops, results.size()); } /** @@ -2111,8 +2155,6 @@ */ public void testReportPathExpressionForExtents1() { - ArrayList list = new ArrayList(); - Criteria crit = new Criteria(); crit.addGreaterOrEqualThan("allArticlesInGroup.articleId", new Integer(1)); crit.addLessOrEqualThan("allArticlesInGroup.articleId", new Integer(5)); @@ -2124,18 +2166,11 @@ while (iter.hasNext()) { Object row; - Object[] columns; - - assertNotNull("Invalid ReportQueryIterator, hasNext() is true but next() is null", - row = iter.next()); - assertTrue("ReportQuery result row is not Object[]", - row instanceof Object[]); - columns = (Object[]) row; - list.add(columns); - - assertTrue("ReportQuery result row does not contain all expected columns", - columns.length == 3); - + Object[] columns; + assertNotNull("Invalid ReportQueryIterator, hasNext() is true but next() is null", row = iter.next()); + assertTrue("ReportQuery result row is not Object[]", row instanceof Object[]); + columns = (Object[]) row; + assertTrue("ReportQuery result row does not contain all expected columns", columns.length == 3); /* arminw: think hsql returns the wrong result or interpret the query in wrong @@ -2147,18 +2182,21 @@ // System.out.println("### " + ((Object[]) obj)[0] // + " " + ((Object[]) obj)[1] // + " " + ((Object[]) obj)[2]); - Object articleId = columns[2]; - int i = -1; - if (articleId instanceof Integer) { - i = ((Integer) articleId).intValue(); - } else if (articleId instanceof BigDecimal) { - i = ((BigDecimal) articleId).intValue(); - } else { - assertTrue("TODO: Your platforms resulting class for INTEGER (" + - articleId.getClass().getName() + - ") is not yet supported in testcase.", false); - } - + Object articleId = columns[2]; + int i = -1; + if (articleId instanceof Integer) + { + i = ((Integer) articleId).intValue(); + } + else if (articleId instanceof BigDecimal) + { + i = ((BigDecimal) articleId).intValue(); + } + else + { + assertTrue("TODO: Your platforms resulting class for INTEGER (" + + articleId.getClass().getName() + ") is not yet supported in testcase.", false); + } assertTrue("i=" + i, i < 6 & i > 0); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]