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/28 09:30:24 UTC

svn commit: r903998 - in /cayenne/main/branches/STABLE-3.0: docs/doc/src/main/resources/ framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/ framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/

Author: aadamchik
Date: Thu Jan 28 08:30:24 2010
New Revision: 903998

URL: http://svn.apache.org/viewvc?rev=903998&view=rev
Log:
CAY-1377 EJBQLQuery: when using relationships in the SELECT clause, must generate INNER, not OUTER JOINS

patch by Ksenia Khailenko with some edits

Modified:
    cayenne/main/branches/STABLE-3.0/docs/doc/src/main/resources/RELEASE-NOTES.txt
    cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLAggregateColumnTranslator.java
    cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLJoinAppender.java
    cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLPathTranslator.java
    cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectColumnsTranslator.java
    cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLGroupByHavingTest.java

Modified: cayenne/main/branches/STABLE-3.0/docs/doc/src/main/resources/RELEASE-NOTES.txt
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/docs/doc/src/main/resources/RELEASE-NOTES.txt?rev=903998&r1=903997&r2=903998&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/docs/doc/src/main/resources/RELEASE-NOTES.txt (original)
+++ cayenne/main/branches/STABLE-3.0/docs/doc/src/main/resources/RELEASE-NOTES.txt Thu Jan 28 08:30:24 2010
@@ -19,7 +19,6 @@
 CAY-1326 Document Cayenne Embeddables Feature
 CAY-1352 in "code generation" dialog add generation embeddables
 CAY-1366 EJBQL: Support for fetch joins
-CAY-1371 EJBQL query doesn't preserve grouping by brackets
 
 Bug Fixes Since 3.0RC1:
 
@@ -34,6 +33,8 @@
 CAY-1367 EJBQL: Implement support for relationship-ending paths in GROUP BY clause
 CAY-1368 Left Join and Prefetches do not work together
 CAY-1369 EJBQL: Fix likeIgnoreCase issues
+CAY-1371 EJBQL query doesn't preserve grouping by brackets
+CAY-1377 EJBQLQuery: when using relationships in the SELECT clause, must generate INNER, not OUTER JOINS
 
 ----------------------------------
 Release: 3.0 RC 1

Modified: cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLAggregateColumnTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLAggregateColumnTranslator.java?rev=903998&r1=903997&r2=903998&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLAggregateColumnTranslator.java (original)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLAggregateColumnTranslator.java Thu Jan 28 08:30:24 2010
@@ -138,7 +138,7 @@
                     .getTargetEntity()).getDbEntity().getAttributes();
 
             if (dbAttr.size() > 0) {
-                this.resolveJoin(false);
+                this.resolveJoin(true);
             }
             context.append('*');
         }

Modified: cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLJoinAppender.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLJoinAppender.java?rev=903998&r1=903997&r2=903998&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLJoinAppender.java (original)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLJoinAppender.java Thu Jan 28 08:30:24 2010
@@ -164,7 +164,7 @@
 
                     }
 
-                    context.append(" LEFT OUTER JOIN ");
+                    context.append(" JOIN ");
                     context.append(subqueryTargetTableName).append(' ').append(
                             subqueryTargetAlias);
                     generateJoiningExpression(

Modified: cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLPathTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLPathTranslator.java?rev=903998&r1=903997&r2=903998&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLPathTranslator.java (original)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLPathTranslator.java Thu Jan 28 08:30:24 2010
@@ -137,6 +137,16 @@
             }
         }
         else {
+            Relationship lastRelationship = currentEntity
+                    .getRelationship(lastPathComponent);
+
+            ObjEntity targetEntity = null;
+            if (lastRelationship != null) {
+                targetEntity = (ObjEntity) lastRelationship.getTargetEntity();
+            }
+            else {
+                targetEntity = currentEntity;
+            }
 
             // register join
             if (inner) {
@@ -144,8 +154,6 @@
                         joinMarker,
                         new EJBQLTableId(idPath),
                         new EJBQLTableId(fullPath));
-                this.lastAlias = context.getTableAlias(fullPath, currentEntity
-                        .getDbEntity().getFullyQualifiedName());
             }
             else {
                 joinAppender.appendOuterJoin(
@@ -153,14 +161,12 @@
                         new EJBQLTableId(idPath),
                         new EJBQLTableId(fullPath));
 
-                Relationship lastRelationship = currentEntity
-                        .getRelationship(lastPathComponent);
-                ObjEntity targetEntity = (ObjEntity) lastRelationship.getTargetEntity();
-
-                this.lastAlias = context.getTableAlias(fullPath, targetEntity
-                        .getDbEntity().getFullyQualifiedName());
             }
 
+            this.lastAlias = context.getTableAlias(fullPath, targetEntity
+                    .getDbEntity()
+                    .getFullyQualifiedName());
+
             this.idPath = newPath;
         }
     }

Modified: cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectColumnsTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectColumnsTranslator.java?rev=903998&r1=903997&r2=903998&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectColumnsTranslator.java (original)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectColumnsTranslator.java Thu Jan 28 08:30:24 2010
@@ -92,7 +92,7 @@
 
                 Iterator<DbAttribute> it = dbAttr.iterator();
                 if (dbAttr.size() > 0) {
-                    this.resolveJoin(false);
+                    this.resolveJoin(true);
                 }
 
                 String alias = this.lastAlias != null ? lastAlias : context

Modified: cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLGroupByHavingTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLGroupByHavingTest.java?rev=903998&r1=903997&r2=903998&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLGroupByHavingTest.java (original)
+++ cayenne/main/branches/STABLE-3.0/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLGroupByHavingTest.java Thu Jan 28 08:30:24 2010
@@ -207,12 +207,9 @@
                 "GROUP BY p.toGallery, p.toArtist ");
         List<Object[]> data = createDataContext().performQuery(query);
         assertNotNull(data);
-        assertEquals(5, data.size());
+        assertEquals(2, data.size());
         
         HashSet<List> expectedResults=new HashSet<List>();
-        expectedResults.add(Arrays.asList(3L, null,null));
-        expectedResults.add(Arrays.asList(1L, "AA1",null));
-        expectedResults.add(Arrays.asList(1L, "AA2",null));
         expectedResults.add(Arrays.asList(1L, "AA2","gallery1"));
         expectedResults.add(Arrays.asList(1L, "AA1","gallery2"));