METAMODEL-231: Fixed
authorTomasz Guzialek <tomasz@guzialek.info>
Sat, 30 Jan 2016 11:31:44 +0000 (12:31 +0100)
committerKasper Sørensen <i.am.kasper.sorensen@gmail.com>
Sat, 30 Jan 2016 11:31:44 +0000 (12:31 +0100)
Fixes #88

CHANGES.md
neo4j/src/main/java/org/apache/metamodel/neo4j/Neo4jDataContext.java
neo4j/src/test/java/org/apache/metamodel/neo4j/Neo4jDataContextTest.java

index 773a57d..13f1694 100644 (file)
@@ -2,6 +2,7 @@
 
  * [METAMODEL-227] - Fix for respecting CSV escape character also when no quote character is set.
  * [METAMODEL-183] - MongoDB module split into three: common, Mongo2 and Mongo3 to allow use of either old or new MongoDB API.
+ * [METAMODEL-231] - Fixed a bug causing the Neo4j to represent the same table multiple times within a schema.
 
 ### Apache MetaModel 4.5.0
 
index 568ad71..cb0b2ac 100644 (file)
@@ -19,7 +19,9 @@
 package org.apache.metamodel.neo4j;
 
 import java.util.ArrayList;
+import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.Set;
 
 import org.apache.http.HttpHost;
 import org.apache.http.client.methods.HttpGet;
@@ -170,7 +172,7 @@ public class Neo4jDataContext extends QueryPostprocessDataContext implements Dat
                     }
                 }
 
-                List<String> relationshipPropertiesPerLabel = new ArrayList<String>();
+                Set<String> relationshipPropertiesPerLabel = new LinkedHashSet<String>();
                 for (JSONObject node : nodesPerLabel) {
                     Integer nodeId = (Integer) node.getJSONObject("metadata").get("id");
                     List<JSONObject> relationshipsPerNode = getOutgoingRelationshipsPerNode(nodeId);
index d4e3774..1246ce2 100644 (file)
@@ -100,12 +100,22 @@ public class Neo4jDataContextTest extends Neo4jTestCase {
         requestWrapper.executeCypherQuery("CREATE (n:JUnitPerson { name: 'Tomasz', age: 26})");
         requestWrapper.executeCypherQuery("CREATE (n:JUnitPerson { name: 'Philomeena', age: 18})");
         requestWrapper.executeCypherQuery("CREATE (n:JUnitBook { title: 'Introduction to algorithms'})");
+        requestWrapper.executeCypherQuery("CREATE (n:JUnitBook { title: 'Rich Dad Poor Dad'})");
         requestWrapper.executeCypherQuery("MATCH (a:JUnitPerson),(b:JUnitBook)"
                 + "WHERE a.name = 'Tomasz' AND b.title = 'Introduction to algorithms'"
                 + "CREATE (a)-[r:HAS_READ { rating : 5 }]->(b)");
         requestWrapper.executeCypherQuery("MATCH (a:JUnitPerson),(b:JUnitBook)"
                 + "WHERE a.name = 'Philomeena' AND b.title = 'Introduction to algorithms'"
                 + "CREATE (a)-[r:HAS_BROWSED]->(b)");
+        requestWrapper.executeCypherQuery("MATCH (a:JUnitPerson),(b:JUnitBook)"
+                + "WHERE a.name = 'Philomeena' AND b.title = 'Introduction to algorithms'"
+                + "CREATE (a)-[r:HAS_BROWSED]->(b)");
+        requestWrapper.executeCypherQuery("MATCH (a:JUnitPerson),(b:JUnitBook)"
+                + "WHERE a.name = 'Tomasz' AND b.title = 'Rich Dad Poor Dad'"
+                + "CREATE (a)-[r:HAS_READ { rating : 4 }]->(b)");
+        requestWrapper.executeCypherQuery("MATCH (a:JUnitPerson),(b:JUnitBook)"
+                + "WHERE a.name = 'Philomeena' AND b.title = 'Rich Dad Poor Dad'"
+                + "CREATE (a)-[r:HAS_READ { rating : 2 }]->(b)");
 
         Neo4jDataContext strategy = new Neo4jDataContext(getHostname(), getPort(), getUsername(), getPassword());
         Schema schema = strategy.getSchemaByName(strategy.getDefaultSchemaName());