You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by sk...@apache.org on 2016/11/11 19:43:51 UTC

[1/2] cayenne git commit: Redundant relationship created when syncing ObjEntity with many-to-many relationship and DbEntity

Repository: cayenne
Updated Branches:
  refs/heads/master 94dfec08d -> b67f8f1fc


Redundant relationship created when syncing ObjEntity with many-to-many relationship and DbEntity


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

Branch: refs/heads/master
Commit: f5de1f2a07835d153ea5579ea564bb1eab0f576a
Parents: 2b7a21b
Author: Nikita Timofeev <st...@gmail.com>
Authored: Tue Nov 8 17:19:18 2016 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Tue Nov 8 17:19:18 2016 +0300

----------------------------------------------------------------------
 .../dbsync/merge/EntityMergeSupport.java        | 61 +++++++++++++++++++-
 1 file changed, 59 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/f5de1f2a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/EntityMergeSupport.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/EntityMergeSupport.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/EntityMergeSupport.java
index c7b3b2a..a61de0c 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/EntityMergeSupport.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/EntityMergeSupport.java
@@ -31,6 +31,7 @@ import org.apache.cayenne.map.Entity;
 import org.apache.cayenne.map.ObjAttribute;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.map.ObjRelationship;
+import org.apache.cayenne.map.Relationship;
 import org.apache.cayenne.util.DeleteRuleUpdater;
 import org.apache.cayenne.util.EntityMergeListener;
 import org.apache.commons.logging.Log;
@@ -388,8 +389,64 @@ public class EntityMergeSupport {
         return true;
     }
 
-    protected boolean shouldAddToObjEntity(ObjEntity entity, DbRelationship dbRelationship) {
-        return dbRelationship.getName() != null && entity.getRelationshipForDbRelationship(dbRelationship) == null;
+    private boolean shouldAddToObjEntity(ObjEntity entity, DbRelationship dbRelationship) {
+        if(dbRelationship.getName() == null) {
+            return false;
+        }
+
+        for(Relationship relationship : entity.getRelationships()) {
+            ObjRelationship objRelationship = (ObjRelationship)relationship;
+            if(objRelationshipHasDbRelationship(objRelationship, dbRelationship)) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * @return true if objRelationship includes given dbRelationship
+     */
+    private boolean objRelationshipHasDbRelationship(ObjRelationship objRelationship, DbRelationship dbRelationship) {
+        for(DbRelationship relationship : objRelationship.getDbRelationships()) {
+
+            if(relationship.getSourceEntityName().equals(dbRelationship.getSourceEntityName())
+                    && relationship.getTargetEntityName().equals(dbRelationship.getTargetEntityName())
+                    && isSameAttributes(relationship.getSourceAttributes(), dbRelationship.getSourceAttributes())
+                    && isSameAttributes(relationship.getTargetAttributes(), dbRelationship.getTargetAttributes())) {
+                return true;
+            }
+
+        }
+        return false;
+    }
+
+
+    /**
+     * @param collection1 first collection to compare
+     * @param collection2 second collection to compare
+     * @return true if collections have same size and attributes in them have same names
+     */
+    private boolean isSameAttributes(Collection<DbAttribute> collection1, Collection<DbAttribute> collection2) {
+        if(collection1.size() != collection2.size()) {
+            return false;
+        }
+
+        if(collection1.isEmpty()) {
+            return true;
+        }
+
+        Iterator<DbAttribute> iterator1 = collection1.iterator();
+        Iterator<DbAttribute> iterator2 = collection2.iterator();
+        for(int i=0; i<collection1.size(); i++) {
+            DbAttribute attr1 = iterator1.next();
+            DbAttribute attr2 = iterator2.next();
+            if(!attr1.getName().equals(attr2.getName())) {
+                return false;
+            }
+        }
+
+        return true;
     }
 
     private Collection<DbRelationship> getIncomingRelationships(DbEntity entity) {


[2/2] cayenne git commit: Merge branch '121'

Posted by sk...@apache.org.
Merge branch '121'


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

Branch: refs/heads/master
Commit: b67f8f1fca29ec520bff5ee883218b3286e30d04
Parents: 94dfec0 f5de1f2
Author: Savva Kolbachev <s....@gmail.com>
Authored: Fri Nov 11 22:08:44 2016 +0300
Committer: Savva Kolbachev <s....@gmail.com>
Committed: Fri Nov 11 22:08:44 2016 +0300

----------------------------------------------------------------------
 .../dbsync/merge/EntityMergeSupport.java        | 61 +++++++++++++++++++-
 1 file changed, 59 insertions(+), 2 deletions(-)
----------------------------------------------------------------------