You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2010/01/14 17:42:53 UTC
svn commit: r899283 - in /cayenne/main/trunk: docs/doc/src/main/resources/
framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/
framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/trans/
framework/...
Author: aadamchik
Date: Thu Jan 14 16:42:52 2010
New Revision: 899283
URL: http://svn.apache.org/viewvc?rev=899283&view=rev
Log:
CAY-952 Generate OUTER joins for flattened attributes in a SelectQuery
Patch by Ksenia Khailenko. Changes to EJBQLJoinAppender are actually related to another issue: CAY-1069
Modified:
cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLJoinAppender.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/trans/SelectTranslator.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextFlattenedAttributesTest.java
Modified: cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt?rev=899283&r1=899282&r2=899283&view=diff
==============================================================================
--- cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt (original)
+++ cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt Thu Jan 14 16:42:52 2010
@@ -13,6 +13,7 @@
----------------------------------
Changes/New Features Since 3.0:
+CAY-952 Generate OUTER joins for flattened attributes in a SelectQuery
CAY-1251 Memorize user-selected column widths in preferences
CAY-1310 Remove everything deprecated in 3.0
CAY-1314 Migrate Modeler Preferences to Java Preferences API: migrate org.apache.cayenne.modeler.ModelerPreferences
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLJoinAppender.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLJoinAppender.java?rev=899283&r1=899282&r2=899283&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLJoinAppender.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLJoinAppender.java Thu Jan 14 16:42:52 2010
@@ -166,7 +166,7 @@
}
- context.append(" JOIN ");
+ context.append(" LEFT OUTER JOIN ");
context.append(subqueryTargetTableName).append(' ').append(
subqueryTargetAlias);
generateJoiningExpression(
@@ -330,7 +330,7 @@
CayenneMapEntry next = dbPathIterator.next();
if (next instanceof DbRelationship) {
DbRelationship rel = (DbRelationship) next;
- context.append(" JOIN ");
+ context.append(" LEFT OUTER JOIN ");
String targetEntityName = rel.getTargetEntityName();
String subqueryTargetAlias = context.getTableAlias(id
.getEntityId(), targetEntityName);
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/trans/SelectTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/trans/SelectTranslator.java?rev=899283&r1=899282&r2=899283&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/trans/SelectTranslator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/trans/SelectTranslator.java Thu Jan 14 16:42:52 2010
@@ -342,7 +342,7 @@
}
else if (pathPart instanceof DbRelationship) {
DbRelationship rel = (DbRelationship) pathPart;
- dbRelationshipAdded(rel, JoinType.INNER, null);
+ dbRelationshipAdded(rel, JoinType.LEFT_OUTER, null);
}
else if (pathPart instanceof DbAttribute) {
DbAttribute dbAttr = (DbAttribute) pathPart;
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextFlattenedAttributesTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextFlattenedAttributesTest.java?rev=899283&r1=899282&r2=899283&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextFlattenedAttributesTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextFlattenedAttributesTest.java Thu Jan 14 16:42:52 2010
@@ -118,7 +118,7 @@
List<?> objects = context.performQuery(query);
assertNotNull(objects);
- assertEquals(3, objects.size());
+ assertEquals(8, objects.size());
assertTrue("CompoundPainting expected, got " + objects.get(0).getClass(), objects
.get(0) instanceof CompoundPainting);
@@ -131,23 +131,32 @@
assertEquals("CompoundPainting.getPaintingTitle(): "
+ painting.getPaintingTitle(), "painting" + id, painting
.getPaintingTitle());
- assertEquals(
- "CompoundPainting.getTextReview(): " + painting.getTextReview(),
- "painting review" + id,
- painting.getTextReview());
+ if (painting.getToPaintingInfo()==null){
+ assertNull(painting.getTextReview());
+ }else{
+ assertEquals("CompoundPainting.getTextReview(): "
+ + painting.getTextReview(), "painting review" + id, painting
+ .getTextReview());
+ }
assertEquals(
"CompoundPainting.getArtistName(): " + painting.getArtistName(),
painting.getToArtist().getArtistName(),
painting.getArtistName());
- assertEquals(
- "CompoundPainting.getArtistName(): " + painting.getGalleryName(),
- painting.getToGallery().getGalleryName(),
- painting.getGalleryName());
+ if (painting.getToGallery() == null) {
+ assertNull(painting.getGalleryName());
+ }
+ else {
+ assertEquals("CompoundPainting.getGalleryName(): "
+ + painting.getGalleryName(), painting
+ .getToGallery()
+ .getGalleryName(), painting.getGalleryName());
+ }
}
}
// TODO: andrus 1/5/2007 - CAY-952: SelectQuery uses INNER JOIN for flattened attributes, while
// EJBQLQuery does an OUTER JOIN... which seems like a better idea...
+ // 14/01/2010 now it uses LEFT JOIN
public void testSelectCompound2() throws Exception {
populateTables();
SelectQuery query = new SelectQuery(CompoundPainting.class, ExpressionFactory
@@ -155,25 +164,14 @@
List<?> objects = context.performQuery(query);
assertNotNull(objects);
- assertEquals(1, objects.size());
+ assertEquals(2, objects.size());
assertTrue("CompoundPainting expected, got " + objects.get(0).getClass(), objects
.get(0) instanceof CompoundPainting);
for (Iterator<?> i = objects.iterator(); i.hasNext();) {
CompoundPainting painting = (CompoundPainting) i.next();
assertEquals(PersistenceState.COMMITTED, painting.getPersistenceState());
- Number id = (Number) painting
- .getObjectId()
- .getIdSnapshot()
- .get("PAINTING_ID");
- assertEquals("CompoundPainting.getObjectId(): " + id, id.intValue(), 2);
- assertEquals("CompoundPainting.getPaintingTitle(): "
- + painting.getPaintingTitle(), "painting" + id, painting
- .getPaintingTitle());
- assertEquals(
- "CompoundPainting.getTextReview(): " + painting.getTextReview(),
- "painting review" + id,
- painting.getTextReview());
+
assertEquals(
"CompoundPainting.getArtistName(): " + painting.getArtistName(),
"artist2",