From: <me...@us...> - 2002-10-01 02:47:18
|
Update of /cvsroot/cayenne/cayenne/src/tests/java/org/objectstyle/cayenne/access/trans In directory usw-pr-cvs1:/tmp/cvs-serv24600/src/tests/java/org/objectstyle/cayenne/access/trans Modified Files: QualifierTranslatorTst.java SelectTranslatorTst.java Log Message: added test case for the recent translator fix Index: QualifierTranslatorTst.java =================================================================== RCS file: /cvsroot/cayenne/cayenne/src/tests/java/org/objectstyle/cayenne/access/trans/QualifierTranslatorTst.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** QualifierTranslatorTst.java 8 Sep 2002 23:02:01 -0000 1.1 --- QualifierTranslatorTst.java 1 Oct 2002 02:47:15 -0000 1.2 *************** *** 91,96 **** } } ! ! public void testNullQualifier() throws java.lang.Exception { try { assertNull(new QualifierTranslator(qa).doTranslation()); --- 91,96 ---- } } ! ! public void testNullQualifier() throws Exception { try { assertNull(new QualifierTranslator(qa).doTranslation()); Index: SelectTranslatorTst.java =================================================================== RCS file: /cvsroot/cayenne/cayenne/src/tests/java/org/objectstyle/cayenne/access/trans/SelectTranslatorTst.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** SelectTranslatorTst.java 8 Sep 2002 23:02:01 -0000 1.1 --- SelectTranslatorTst.java 1 Oct 2002 02:47:15 -0000 1.2 *************** *** 73,324 **** public class SelectTranslatorTst extends CayenneTestCase { ! static Logger logObj = ! Logger.getLogger(SelectTranslatorTst.class.getName()); ! protected SelectQuery q; ! protected DbEntity artistEnt; ! public SelectTranslatorTst(String name) { ! super(name); ! } ! protected void setUp() throws Exception { ! q = new SelectQuery(); ! artistEnt = getSharedDomain().lookupEntity("Artist").getDbEntity(); ! } ! private SelectTranslator buildTranslator(Connection con) throws Exception { ! SelectTranslator t = new SelectTranslator(); ! t.setAdapter(getSharedNode().getAdapter()); ! t.setCon(con); ! t.setEngine(getSharedDomain()); ! t.setQuery(q); ! return t; ! } ! /** ! * Tests query creation with qualifier and ordering. ! */ ! public void testCreateSqlString1() throws Exception { ! Connection con = getSharedConnection(); ! try { ! // query with qualifier and ordering ! q.setObjEntityName("Artist"); ! q.setQualifier( ! ExpressionFactory.binaryExp( ! Expression.LIKE, ! "artistName", ! "a%")); ! q.addOrdering("dateOfBirth", Ordering.ASC); ! String generatedSql = buildTranslator(con).createSqlString(); ! // do some simple assertions to make sure all parts are in ! assertNotNull(generatedSql); ! assertTrue(generatedSql.startsWith("SELECT ")); ! assertTrue(generatedSql.indexOf(" FROM ") > 0); ! assertTrue( ! generatedSql.indexOf(" WHERE ") ! > generatedSql.indexOf(" FROM ")); ! assertTrue( ! generatedSql.indexOf(" ORDER BY ") ! > generatedSql.indexOf(" WHERE ")); ! } finally { ! con.close(); ! } ! } ! /** ! * Tests query creation with "distinct" specified. ! */ ! public void testCreateSqlString2() throws java.lang.Exception { ! Connection con = getSharedConnection(); ! try { ! // query with "distinct" set ! q.setObjEntityName("Artist"); ! q.setDistinct(true); ! String generatedSql = buildTranslator(con).createSqlString(); ! // do some simple assertions to make sure all parts are in ! assertNotNull(generatedSql); ! assertTrue(generatedSql.startsWith("SELECT DISTINCT")); ! } finally { ! con.close(); ! } ! } ! /** ! * Tests query creation with relationship from derived entity. ! */ ! public void testCreateSqlString3() throws Exception { ! ObjectId id = new ObjectId("Artist", "ARTIST_ID", 35); ! Artist a1 = (Artist) createDataContext().registeredObject(id); ! Connection con = getSharedConnection(); ! try { ! // query with qualifier and ordering ! q.setObjEntityName("ArtistAssets"); ! q.setQualifier(ExpressionFactory.matchExp("toArtist", a1)); ! String sql = buildTranslator(con).createSqlString(); ! // do some simple assertions to make sure all parts are in ! assertNotNull(sql); ! assertTrue(sql.startsWith("SELECT ")); ! assertTrue(sql.indexOf(" FROM ") > 0); ! // no WHERE clause ! assertTrue(sql.indexOf(" WHERE ") < 0); ! assertTrue(sql.indexOf(" GROUP BY ") > 0); ! assertTrue(sql.indexOf("ARTIST_ID =") > 0); ! assertTrue(sql.indexOf("ARTIST_ID =") > sql.indexOf(" GROUP BY ")); ! } finally { ! con.close(); ! } ! } ! /** ! * Tests query creation with relationship from derived entity. ! */ ! public void testCreateSqlString4() throws Exception { ! Connection con = getSharedConnection(); ! try { ! // query with qualifier and ordering ! q.setObjEntityName("ArtistAssets"); ! q.setParentObjEntityName("Painting"); ! q.setParentQualifier( ! ExpressionFactory.matchExp("toArtist.artistName", "abc")); ! q.setQualifier(ExpressionFactory.matchExp("estimatedPrice", new BigDecimal(3))); ! String sql = buildTranslator(con).createSqlString(); ! // do some simple assertions to make sure all parts are in ! assertNotNull(sql); ! assertTrue(sql.startsWith("SELECT ")); ! assertTrue(sql.indexOf(" FROM ") > 0); ! // no WHERE clause ! assertTrue("WHERE clause is expected: " + sql, sql.indexOf(" WHERE ") > 0); ! assertTrue( ! "GROUP BY clause is expected:" + sql, ! sql.indexOf(" GROUP BY ") > 0); ! assertTrue( ! "HAVING clause is expected", ! sql.indexOf(" HAVING ") > 0); ! assertTrue(sql.indexOf("ARTIST_ID =") > 0); ! assertTrue( ! "Relationship join must be in WHERE: " + sql, ! sql.indexOf("ARTIST_ID =") > sql.indexOf(" WHERE ")); ! assertTrue( ! "Relationship join must be in WHERE: " + sql, ! sql.indexOf("ARTIST_ID =") < sql.indexOf(" GROUP BY ")); ! assertTrue( ! "Qualifier for related entity must be in WHERE: " + sql, ! sql.indexOf("ARTIST_NAME") > sql.indexOf(" WHERE ")); ! assertTrue( ! "Qualifier for related entity must be in WHERE: " + sql, ! sql.indexOf("ARTIST_NAME") < sql.indexOf(" GROUP BY ")); ! } finally { ! con.close(); ! } ! } ! public void testBuildColumnList1() throws Exception { ! Connection con = getSharedConnection(); ! try { ! // configure query with entity that maps one-to-one to DbEntity ! q.setObjEntityName("Artist"); ! SelectTranslator transl = buildTranslator(con); ! transl.createSqlString(); ! List columns = transl.getColumnList(); ! List dbAttrs = artistEnt.getAttributeList(); ! assertEquals(dbAttrs.size(), columns.size()); ! Iterator it = dbAttrs.iterator(); ! while (it.hasNext()) { ! assertTrue(columns.contains(it.next())); ! } ! } finally { ! con.close(); ! } ! } ! public void testBuildColumnList2() throws Exception { ! Connection con = getSharedConnection(); ! try { ! // configure query with custom attributes ! q.setObjEntityName("Artist"); ! q.addCustDbAttribute("ARTIST_ID"); ! SelectTranslator transl = buildTranslator(con); ! transl.createSqlString(); ! List columns = transl.getColumnList(); ! Object[] dbAttrs = ! new Object[] { artistEnt.getAttribute("ARTIST_ID")}; ! assertEquals(dbAttrs.length, columns.size()); ! for (int i = 0; i < dbAttrs.length; i++) { ! assertTrue(columns.contains(dbAttrs[i])); ! } ! } finally { ! con.close(); ! } ! } ! public void testBuildColumnList3() throws Exception { ! Connection con = getSharedConnection(); ! try { ! // configure query with entity that maps to a subset of DbEntity ! q.setObjEntityName("SubPainting"); ! SelectTranslator transl = buildTranslator(con); ! transl.createSqlString(); ! List columns = transl.getColumnList(); ! ObjEntity subPainting = ! getSharedDomain().lookupEntity("SubPainting"); ! // assert that the number of attributes in the query is right ! // 1 (obj attr) + 1 (pk) = 2 ! assertEquals(2, columns.size()); ! } finally { ! con.close(); ! } ! } ! public void testBuildColumnList4() throws Exception { ! Connection con = getSharedConnection(); ! try { ! // configure query with derived entity that maps to a subset of DbEntity ! q.setObjEntityName("ArtistPaintingCounts"); ! SelectTranslator transl = buildTranslator(con); ! transl.createSqlString(); ! List columns = transl.getColumnList(); ! ObjEntity countsEnt = ! getSharedDomain().lookupEntity("ArtistPaintingCounts"); ! // assert that the number of attributes in the query is right ! // 1 (obj attr) + 1 (pk) = 2 ! assertEquals(2, columns.size()); ! } finally { ! con.close(); ! } ! } } --- 73,361 ---- public class SelectTranslatorTst extends CayenneTestCase { ! static Logger logObj = Logger.getLogger(SelectTranslatorTst.class.getName()); ! protected SelectQuery q; ! protected DbEntity artistEnt; ! public SelectTranslatorTst(String name) { ! super(name); ! } ! protected void setUp() throws Exception { ! q = new SelectQuery(); ! artistEnt = getSharedDomain().lookupEntity("Artist").getDbEntity(); ! } ! private SelectTranslator buildTranslator(Connection con) throws Exception { ! SelectTranslator transl = ! (SelectTranslator) getSharedNode().getAdapter().getQueryTranslator(q); ! transl.setEngine(getSharedNode()); ! transl.setCon(con); ! return transl; ! } ! /** ! * Tests query creation with qualifier and ordering. ! */ ! public void testCreateSqlString1() throws Exception { ! Connection con = getSharedConnection(); ! try { ! // query with qualifier and ordering ! q.setObjEntityName("Artist"); ! q.setQualifier( ! ExpressionFactory.binaryExp(Expression.LIKE, "artistName", "a%")); ! q.addOrdering("dateOfBirth", Ordering.ASC); ! String generatedSql = buildTranslator(con).createSqlString(); ! // do some simple assertions to make sure all parts are in ! assertNotNull(generatedSql); ! assertTrue(generatedSql.startsWith("SELECT ")); ! assertTrue(generatedSql.indexOf(" FROM ") > 0); ! assertTrue(generatedSql.indexOf(" WHERE ") > generatedSql.indexOf(" FROM ")); ! assertTrue( ! generatedSql.indexOf(" ORDER BY ") > generatedSql.indexOf(" WHERE ")); ! } finally { ! con.close(); ! } ! } ! /** ! * Tests query creation with "distinct" specified. ! */ ! public void testCreateSqlString2() throws java.lang.Exception { ! Connection con = getSharedConnection(); ! try { ! // query with "distinct" set ! q.setObjEntityName("Artist"); ! q.setDistinct(true); ! String generatedSql = buildTranslator(con).createSqlString(); ! // do some simple assertions to make sure all parts are in ! assertNotNull(generatedSql); ! assertTrue(generatedSql.startsWith("SELECT DISTINCT")); ! } finally { ! con.close(); ! } ! } ! /** ! * Tests query creation with relationship from derived entity. ! */ ! public void testCreateSqlString3() throws Exception { ! ObjectId id = new ObjectId("Artist", "ARTIST_ID", 35); ! Artist a1 = (Artist) createDataContext().registeredObject(id); ! Connection con = getSharedConnection(); ! try { ! // query with qualifier and ordering ! q.setObjEntityName("ArtistAssets"); ! q.setQualifier(ExpressionFactory.matchExp("toArtist", a1)); ! String sql = buildTranslator(con).createSqlString(); ! // do some simple assertions to make sure all parts are in ! assertNotNull(sql); ! assertTrue(sql.startsWith("SELECT ")); ! assertTrue(sql.indexOf(" FROM ") > 0); ! // no WHERE clause ! assertTrue(sql.indexOf(" WHERE ") < 0); ! assertTrue(sql.indexOf(" GROUP BY ") > 0); ! assertTrue(sql.indexOf("ARTIST_ID =") > 0); ! assertTrue(sql.indexOf("ARTIST_ID =") > sql.indexOf(" GROUP BY ")); ! } finally { ! con.close(); ! } ! } ! /** ! * Tests query creation with relationship from derived entity. ! */ ! public void testCreateSqlString4() throws Exception { ! Connection con = getSharedConnection(); ! try { ! // query with qualifier and ordering ! q.setObjEntityName("ArtistAssets"); ! q.setParentObjEntityName("Painting"); ! q.setParentQualifier( ! ExpressionFactory.matchExp("toArtist.artistName", "abc")); ! q.setQualifier( ! ExpressionFactory.matchExp("estimatedPrice", new BigDecimal(3))); ! String sql = buildTranslator(con).createSqlString(); ! // do some simple assertions to make sure all parts are in ! assertNotNull(sql); ! assertTrue(sql.startsWith("SELECT ")); ! assertTrue(sql.indexOf(" FROM ") > 0); ! // no WHERE clause ! assertTrue("WHERE clause is expected: " + sql, sql.indexOf(" WHERE ") > 0); ! assertTrue( ! "GROUP BY clause is expected:" + sql, ! sql.indexOf(" GROUP BY ") > 0); ! assertTrue("HAVING clause is expected", sql.indexOf(" HAVING ") > 0); ! assertTrue(sql.indexOf("ARTIST_ID =") > 0); ! assertTrue( ! "Relationship join must be in WHERE: " + sql, ! sql.indexOf("ARTIST_ID =") > sql.indexOf(" WHERE ")); ! assertTrue( ! "Relationship join must be in WHERE: " + sql, ! sql.indexOf("ARTIST_ID =") < sql.indexOf(" GROUP BY ")); ! assertTrue( ! "Qualifier for related entity must be in WHERE: " + sql, ! sql.indexOf("ARTIST_NAME") > sql.indexOf(" WHERE ")); ! assertTrue( ! "Qualifier for related entity must be in WHERE: " + sql, ! sql.indexOf("ARTIST_NAME") < sql.indexOf(" GROUP BY ")); ! } finally { ! con.close(); ! } ! } ! /** ! * Test aliases when the same table used in more then 1 relationship. ! * Check translation of relationship path "ArtistExhibit.toArtist.artistName" ! * and "ArtistExhibit.toExhibit.toGallery.paintingArray.toArtist.artistName". ! */ ! public void testCreateSqlString5() throws Exception { ! Connection con = getSharedConnection(); ! try { ! // query with qualifier and ordering ! q.setObjEntityName("ArtistExhibit"); ! q.setQualifier( ! ExpressionFactory.binaryPathExp( ! Expression.LIKE, ! "toArtist.artistName", ! "a%")); ! q.andQualifier( ! ExpressionFactory.binaryPathExp( ! Expression.LIKE, ! "toExhibit.toGallery.paintingArray.toArtist.artistName", ! "a%")); ! SelectTranslator transl = buildTranslator(con); ! String generatedSql = transl.createSqlString(); ! // logObj.warn("Query: " + generatedSql); ! // do some simple assertions to make sure all parts are in ! assertNotNull(generatedSql); ! assertTrue(generatedSql.startsWith("SELECT ")); ! assertTrue(generatedSql.indexOf(" FROM ") > 0); ! assertTrue(generatedSql.indexOf(" WHERE ") > generatedSql.indexOf(" FROM ")); ! // check that there are 2 distinct aliases for the ARTIST table ! int ind1 = generatedSql.indexOf("ARTIST t", generatedSql.indexOf(" FROM ")); ! assertTrue(ind1 > 0); ! int ind2 = generatedSql.indexOf("ARTIST t", ind1 + 1); ! assertTrue(ind2 > 0); ! assertTrue( ! generatedSql.charAt(ind1 + "ARTIST t".length()) ! != generatedSql.charAt(ind2 + "ARTIST t".length())); ! } finally { ! con.close(); ! } ! } ! public void testBuildColumnList1() throws Exception { ! Connection con = getSharedConnection(); ! try { ! // configure query with entity that maps one-to-one to DbEntity ! q.setObjEntityName("Artist"); ! SelectTranslator transl = buildTranslator(con); ! transl.createSqlString(); ! List columns = transl.getColumnList(); ! List dbAttrs = artistEnt.getAttributeList(); ! assertEquals(dbAttrs.size(), columns.size()); ! Iterator it = dbAttrs.iterator(); ! while (it.hasNext()) { ! assertTrue(columns.contains(it.next())); ! } ! } finally { ! con.close(); ! } ! } ! public void testBuildColumnList2() throws Exception { ! Connection con = getSharedConnection(); ! try { ! // configure query with custom attributes ! q.setObjEntityName("Artist"); ! q.addCustDbAttribute("ARTIST_ID"); ! SelectTranslator transl = buildTranslator(con); ! transl.createSqlString(); ! List columns = transl.getColumnList(); ! Object[] dbAttrs = new Object[] { artistEnt.getAttribute("ARTIST_ID")}; ! assertEquals(dbAttrs.length, columns.size()); ! for (int i = 0; i < dbAttrs.length; i++) { ! assertTrue(columns.contains(dbAttrs[i])); ! } ! } finally { ! con.close(); ! } ! } ! public void testBuildColumnList3() throws Exception { ! Connection con = getSharedConnection(); ! try { ! // configure query with entity that maps to a subset of DbEntity ! q.setObjEntityName("SubPainting"); ! SelectTranslator transl = buildTranslator(con); ! transl.createSqlString(); ! List columns = transl.getColumnList(); ! ! ObjEntity subPainting = getSharedDomain().lookupEntity("SubPainting"); ! ! // assert that the number of attributes in the query is right ! // 1 (obj attr) + 1 (pk) = 2 ! assertEquals(2, columns.size()); ! ! } finally { ! con.close(); ! } ! } ! ! public void testBuildColumnList4() throws Exception { ! Connection con = getSharedConnection(); ! ! try { ! // configure query with derived entity that maps to a subset of DbEntity ! q.setObjEntityName("ArtistPaintingCounts"); ! SelectTranslator transl = buildTranslator(con); ! transl.createSqlString(); ! ! List columns = transl.getColumnList(); ! ! ObjEntity countsEnt = getSharedDomain().lookupEntity("ArtistPaintingCounts"); ! ! // assert that the number of attributes in the query is right ! // 1 (obj attr) + 1 (pk) = 2 ! assertEquals(2, columns.size()); ! ! } finally { ! con.close(); ! } ! } } |