CAY-1979 | fix prefetches on Many-to-Many Relationships with Longvarchar

clarifying commnet


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/f8d9a780
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/f8d9a780
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/f8d9a780

Branch: refs/heads/master
Commit: f8d9a780cb4e777d70154a94142059bb8ef0feb0
Parents: 49f4083
Author: Savva Kolbachev <s.kolbac...@gmail.com>
Authored: Wed Dec 17 18:38:59 2014 +0300
Committer: Andrus Adamchik <aadamc...@apache.org>
Committed: Thu Dec 18 14:13:10 2014 +0300

----------------------------------------------------------------------
 .../access/translator/select/SelectTranslator.java   | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/f8d9a780/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/SelectTranslator.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/SelectTranslator.java
 
b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/SelectTranslator.java
index a2d16f1..b09fee4 100644
--- 
a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/SelectTranslator.java
+++ 
b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/SelectTranslator.java
@@ -415,11 +415,16 @@ public class SelectTranslator extends QueryAssembler {
                 for (PathComponent<DbAttribute, DbRelationship> component : 
table
                         .resolvePath(pathExp, getPathAliases())) {
 
-                    if (component.getRelationship() != null) {
-                        // In this case we must have forcingDistinct = false 
(as default)
-                        // so we don't invoke dbRelationshipAdded() and invoke 
pushJoin() at once.
-                        getJoinStack().pushJoin(component.getRelationship(), 
component.getJoinType(), null);
-                    }
+                                       if (component.getRelationship() != 
null) {
+                                               // do not invoke 
dbRelationshipAdded(), invoke
+                                               // pushJoin() instead. This is 
to prevent
+                                               // 'forcingDistinct' flipping 
to true, that will result
+                                               // in unneeded extra processing 
and sometimes in invalid
+                                               // results (see CAY-1979). 
Distinctness of each row is
+                                               // guaranteed by the prefetch 
query semantics - we
+                                               // include target ID in the 
result columns
+                                               
getJoinStack().pushJoin(component.getRelationship(), component.getJoinType(), 
null);
+                                       }
 
                     lastComponent = component;
                 }

Reply via email to