You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by fe...@apache.org on 2018/12/21 07:03:53 UTC
[zeppelin] branch master updated: Revert "[ZEPPELIN-3882]
Neo4jInterpreter - Support Point and Date Types" (#3270)
This is an automated email from the ASF dual-hosted git repository.
felixcheung pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/zeppelin.git
The following commit(s) were added to refs/heads/master by this push:
new 45fa3fd Revert "[ZEPPELIN-3882] Neo4jInterpreter - Support Point and Date Types" (#3270)
45fa3fd is described below
commit 45fa3fdac0c79f78f6d0416e1bbfce281ef4e0df
Author: Felix Cheung <fe...@users.noreply.github.com>
AuthorDate: Fri Dec 21 02:03:48 2018 -0500
Revert "[ZEPPELIN-3882] Neo4jInterpreter - Support Point and Date Types" (#3270)
* Revert "fix checkstyle"
This reverts commit 5542262568b3532fd11e2832d3168b386f35b3d6.
* Revert "Added support for Neo4j temporal and point types"
This reverts commit b98ccea98996eda183382a332379f3cfc428c0e9.
* Revert "Added support for Neo4j temporal and point types"
This reverts commit 0fbcd1111dae980ff245eead964e8a5e0ee0f1a6.
---
docs/interpreter/neo4j.md | 3 -
neo4j/pom.xml | 6 +-
.../graph/neo4j/Neo4jCypherInterpreter.java | 14 ---
.../graph/neo4j/Neo4jCypherInterpreterTest.java | 105 ++++-----------------
4 files changed, 20 insertions(+), 108 deletions(-)
diff --git a/docs/interpreter/neo4j.md b/docs/interpreter/neo4j.md
index eec9e07..1b14127 100644
--- a/docs/interpreter/neo4j.md
+++ b/docs/interpreter/neo4j.md
@@ -26,9 +26,6 @@ limitations under the License.
## Overview
[Neo4j](https://neo4j.com/product/) is a native graph database, designed to store and process graphs from bottom to top.
-### Supported Version
-
-The Neo4j Interpreter supports all Neo4j versions since v3 via the official [Neo4j Java Driver](https://github.com/neo4j/neo4j-java-driver)
![Neo4j - Interpreter - Video]({{BASE_PATH}}/assets/themes/zeppelin/img/docs-img/neo4j-interpreter-video.gif)
diff --git a/neo4j/pom.xml b/neo4j/pom.xml
index cc39fdc..b8a89ad 100644
--- a/neo4j/pom.xml
+++ b/neo4j/pom.xml
@@ -33,9 +33,9 @@
<name>Zeppelin: Neo4j interpreter</name>
<properties>
- <neo4j.driver.version>1.7.1</neo4j.driver.version>
- <test.neo4j.kernel.version>3.4.10</test.neo4j.kernel.version>
- <neo4j.version>3.4.10</neo4j.version>
+ <neo4j.driver.version>1.4.3</neo4j.driver.version>
+ <test.neo4j.kernel.version>3.2.3</test.neo4j.kernel.version>
+ <neo4j.version>3.2.3</neo4j.version>
<jackson.version>2.8.9</jackson.version>
<interpreter.name>neo4j</interpreter.name>
</properties>
diff --git a/neo4j/src/main/java/org/apache/zeppelin/graph/neo4j/Neo4jCypherInterpreter.java b/neo4j/src/main/java/org/apache/zeppelin/graph/neo4j/Neo4jCypherInterpreter.java
index d7f8485..bcb9d7b 100644
--- a/neo4j/src/main/java/org/apache/zeppelin/graph/neo4j/Neo4jCypherInterpreter.java
+++ b/neo4j/src/main/java/org/apache/zeppelin/graph/neo4j/Neo4jCypherInterpreter.java
@@ -201,20 +201,6 @@ public class Neo4jCypherInterpreter extends Interpreter {
value = val.asList();
} else if (val.hasType(InternalTypeSystem.TYPE_SYSTEM.MAP())) {
value = val.asMap();
- } else if (val.hasType(InternalTypeSystem.TYPE_SYSTEM.POINT())) {
- value = val.asPoint();
- } else if (val.hasType(InternalTypeSystem.TYPE_SYSTEM.DATE())) {
- value = val.asLocalDate();
- } else if (val.hasType(InternalTypeSystem.TYPE_SYSTEM.TIME())) {
- value = val.asOffsetTime();
- } else if (val.hasType(InternalTypeSystem.TYPE_SYSTEM.LOCAL_TIME())) {
- value = val.asLocalTime();
- } else if (val.hasType(InternalTypeSystem.TYPE_SYSTEM.LOCAL_DATE_TIME())) {
- value = val.asLocalDateTime();
- } else if (val.hasType(InternalTypeSystem.TYPE_SYSTEM.DATE_TIME())) {
- value = val.asZonedDateTime();
- } else if (val.hasType(InternalTypeSystem.TYPE_SYSTEM.DURATION())) {
- value = val.asIsoDuration();
}
}
if (value instanceof Collection) {
diff --git a/neo4j/src/test/java/org/apache/zeppelin/graph/neo4j/Neo4jCypherInterpreterTest.java b/neo4j/src/test/java/org/apache/zeppelin/graph/neo4j/Neo4jCypherInterpreterTest.java
index 7940d5f..24bd513 100644
--- a/neo4j/src/test/java/org/apache/zeppelin/graph/neo4j/Neo4jCypherInterpreterTest.java
+++ b/neo4j/src/test/java/org/apache/zeppelin/graph/neo4j/Neo4jCypherInterpreterTest.java
@@ -55,15 +55,10 @@ public class Neo4jCypherInterpreterTest {
private static final String REL_KNOWS = "KNOWS";
private static final String CYPHER_FOREACH =
- "FOREACH (x in range(1,100) | CREATE (:%s{name: \"name\" + x, age: %s, " +
- "address: point({ longitude: 56.7, latitude: 12.78, height: 8 }), " +
- "birth: date('1984-04-04')}))";
- private static final String CHPHER_UNWIND = "UNWIND range(1,100) as x "
- + "MATCH (n), (m) WHERE id(n) = x AND id(m) = toInt(rand() * 100) "
+ "FOREACH (x in range(1,1000) | CREATE (:%s{name: \"name\" + x, age: %s}))";
+ private static final String CHPHER_UNWIND = "UNWIND range(1,1000) as x "
+ + "MATCH (n), (m) WHERE id(n) = x AND id(m) = toInt(rand() * 1000) "
+ "CREATE (n)-[:%s]->(m)";
-
- private static final String TABLE_RESULT_PREFIX = "%table ";
- private static final String NETWORK_RESULT_PREFIX = "%network ";
@BeforeClass
public static void setUpNeo4jServer() throws Exception {
@@ -78,7 +73,7 @@ public class Neo4jCypherInterpreterTest {
public static void tearDownNeo4jServer() throws Exception {
server.close();
}
-
+
@Before
public void setUpZeppelin() {
Properties p = new Properties();
@@ -88,7 +83,7 @@ public class Neo4jCypherInterpreterTest {
interpreter = new Neo4jCypherInterpreter(p);
context = InterpreterContext.builder()
.setInterpreterOut(new InterpreterOutput(null))
- .build();
+ .build();;
}
@After
@@ -103,15 +98,14 @@ public class Neo4jCypherInterpreterTest {
"return 'a' as colA, 'b' as colB, [1, 2, 3] as colC", context);
assertEquals(Code.SUCCESS, result.code());
final String tableResult = "colA\tcolB\tcolC\n\"a\"\t\"b\"\t[1,2,3]\n";
- assertEquals(tableResult, result.toString().replace(TABLE_RESULT_PREFIX, StringUtils.EMPTY));
-
+ assertEquals(tableResult, result.toString().replace("%table ", StringUtils.EMPTY));
+
result = interpreter.interpret(
"return 'a' as colA, 'b' as colB, [{key: \"value\"}, {key: 1}] as colC", context);
assertEquals(Code.SUCCESS, result.code());
final String tableResultWithMap =
"colA\tcolB\tcolC\n\"a\"\t\"b\"\t[{\"key\":\"value\"},{\"key\":1}]\n";
- assertEquals(tableResultWithMap, result.toString().replace(TABLE_RESULT_PREFIX,
- StringUtils.EMPTY));
+ assertEquals(tableResultWithMap, result.toString().replace("%table ", StringUtils.EMPTY));
}
@Test
@@ -127,14 +121,10 @@ public class Neo4jCypherInterpreterTest {
interpreter.open();
InterpreterResult result = interpreter.interpret("MATCH (n:Person) "
+ "WHERE n.name IN ['name1', 'name2', 'name3'] "
- + "RETURN n.name AS name, n.age AS age, "
- + "n.address AS address, n.birth AS birth", context);
+ + "RETURN n.name AS name, n.age AS age", context);
assertEquals(Code.SUCCESS, result.code());
- final String tableResult = "name\tage\taddress\tbirth\n" +
- "\"name1\"\t1\tPoint{srid=4979, x=56.7, y=12.78, z=8.0}\t1984-04-04\n" +
- "\"name2\"\t2\tPoint{srid=4979, x=56.7, y=12.78, z=8.0}\t1984-04-04\n" +
- "\"name3\"\t3\tPoint{srid=4979, x=56.7, y=12.78, z=8.0}\t1984-04-04\n";
- assertEquals(tableResult, result.toString().replace(TABLE_RESULT_PREFIX, StringUtils.EMPTY));
+ final String tableResult = "name\tage\n\"name1\"\t1\n\"name2\"\t2\n\"name3\"\t3\n";
+ assertEquals(tableResult, result.toString().replace("%table ", StringUtils.EMPTY));
}
@Test
@@ -146,7 +136,7 @@ public class Neo4jCypherInterpreterTest {
final String objectListKey = "object.listKey";
InterpreterResult result = interpreter.interpret(jsonQuery, context);
assertEquals(Code.SUCCESS, result.code());
- String[] rows = result.toString().replace(TABLE_RESULT_PREFIX, StringUtils.EMPTY)
+ String[] rows = result.toString().replace("%table ", StringUtils.EMPTY)
.split(Neo4jCypherInterpreter.NEW_LINE);
assertEquals(rows.length, 2);
List<String> header = Arrays.asList(rows[0].split(Neo4jCypherInterpreter.TAB));
@@ -163,7 +153,7 @@ public class Neo4jCypherInterpreterTest {
+ "AS array UNWIND array AS object RETURN object";
result = interpreter.interpret(query, context);
assertEquals(Code.SUCCESS, result.code());
- rows = result.toString().replace(TABLE_RESULT_PREFIX, StringUtils.EMPTY)
+ rows = result.toString().replace("%table ", StringUtils.EMPTY)
.split(Neo4jCypherInterpreter.NEW_LINE);
assertEquals(rows.length, 3);
header = Arrays.asList(rows[0].split(Neo4jCypherInterpreter.TAB));
@@ -185,7 +175,7 @@ public class Neo4jCypherInterpreterTest {
+ "AS array UNWIND array AS object RETURN object";
result = interpreter.interpret(jsonListWithNullQuery, context);
assertEquals(Code.SUCCESS, result.code());
- rows = result.toString().replace(TABLE_RESULT_PREFIX, StringUtils.EMPTY)
+ rows = result.toString().replace("%table ", StringUtils.EMPTY)
.split(Neo4jCypherInterpreter.NEW_LINE);
assertEquals(rows.length, 3);
header = Arrays.asList(rows[0].split(Neo4jCypherInterpreter.TAB, -1));
@@ -201,13 +191,13 @@ public class Neo4jCypherInterpreterTest {
assertEquals(row.get(header.indexOf(objectKey)), "value2");
assertEquals(row.get(header.indexOf(objectListKey)),
"[{\"inner\":\"Map1\"},{\"inner\":\"Map2\"}]");
-
+
final String jsonListWithoutListKeyQuery = "WITH [{key: \"value\"},"
+ "{key: \"value2\", listKey: [{inner: \"Map1\"}, {inner: \"Map2\"}]}] "
+ "AS array UNWIND array AS object RETURN object";
result = interpreter.interpret(jsonListWithoutListKeyQuery, context);
assertEquals(Code.SUCCESS, result.code());
- rows = result.toString().replace(TABLE_RESULT_PREFIX, StringUtils.EMPTY)
+ rows = result.toString().replace("%table ", StringUtils.EMPTY)
.split(Neo4jCypherInterpreter.NEW_LINE);
assertEquals(rows.length, 3);
header = Arrays.asList(rows[0].split(Neo4jCypherInterpreter.TAB, -1));
@@ -229,7 +219,7 @@ public class Neo4jCypherInterpreterTest {
interpreter.open();
InterpreterResult result = interpreter.interpret(
"MATCH (n)-[r:KNOWS]-(m) RETURN n, r, m LIMIT 1", context);
- GraphResult.Graph graph = gson.fromJson(result.toString().replace(NETWORK_RESULT_PREFIX,
+ GraphResult.Graph graph = gson.fromJson(result.toString().replace("%network ",
StringUtils.EMPTY), GraphResult.Graph.class);
assertEquals(2, graph.getNodes().size());
assertEquals(true, graph.getNodes().iterator().next().getLabel().equals(LABEL_PERSON));
@@ -258,65 +248,4 @@ public class Neo4jCypherInterpreterTest {
context);
assertEquals(Code.ERROR, result.code());
}
-
- @Test
- public void testDates() {
- InterpreterResult result = interpreter.interpret(
- "RETURN datetime('2015-06-24T12:50:35.556+0100') AS theDateTime", context);
- assertEquals(Code.SUCCESS, result.code());
- assertEquals("theDateTime\n2015-06-24T12:50:35.556+01:00\n", result.toString()
- .replace(TABLE_RESULT_PREFIX, StringUtils.EMPTY));
-
- result = interpreter.interpret("RETURN localdatetime('2015185T19:32:24') AS theLocalDateTime",
- context);
- assertEquals(Code.SUCCESS, result.code());
- assertEquals("theLocalDateTime\n2015-07-04T19:32:24\n", result.toString()
- .replace(TABLE_RESULT_PREFIX, StringUtils.EMPTY));
-
- result = interpreter.interpret("RETURN date('+2015-W13-4') AS theDate", context);
- assertEquals(Code.SUCCESS, result.code());
- assertEquals("theDate\n2015-03-26\n", result.toString()
- .replace(TABLE_RESULT_PREFIX, StringUtils.EMPTY));
-
- result = interpreter.interpret("RETURN time('125035.556+0100') AS theTime", context);
- assertEquals(Code.SUCCESS, result.code());
- assertEquals("theTime\n12:50:35.556+01:00\n", result.toString().replace(TABLE_RESULT_PREFIX,
- StringUtils.EMPTY));
-
- result = interpreter.interpret("RETURN localtime('12:50:35.556') AS theLocalTime", context);
- assertEquals(Code.SUCCESS, result.code());
- assertEquals("theLocalTime\n12:50:35.556\n", result.toString()
- .replace(TABLE_RESULT_PREFIX, StringUtils.EMPTY));
- }
-
- @Test
- public void testDuration() {
- InterpreterResult result = interpreter.interpret(
- "RETURN duration('P14DT16H12M') AS theDuration", context);
- assertEquals(Code.SUCCESS, result.code());
- assertEquals("theDuration\nP0M14DT58320S\n", result.toString()
- .replace(TABLE_RESULT_PREFIX, StringUtils.EMPTY));
- }
-
- @Test
- public void testPoint() {
- InterpreterResult result = interpreter.interpret("RETURN point({ x:3, y:0 }) AS cartesian_2d,"
- + "point({ x:0, y:4, z:1 }) AS cartesian_3d,"
- + "point({ latitude: 12, longitude: 56 }) AS geo_2d,"
- + "point({ latitude: 12, longitude: 56, height: 1000 }) AS geo_3d", context);
- assertEquals(Code.SUCCESS, result.code());
- assertEquals("cartesian_2d\tcartesian_3d\tgeo_2d\tgeo_3d\n" +
- "Point{srid=7203, x=3.0, y=0.0}\tPoint{srid=9157, x=0.0, y=4.0, z=1.0}\t" +
- "Point{srid=4326, x=56.0, y=12.0}\tPoint{srid=4979, x=56.0, y=12.0, z=1000.0}\n",
- result.toString().replace(TABLE_RESULT_PREFIX, StringUtils.EMPTY));
-
- result = interpreter.interpret(
- "WITH point({ latitude: 12, longitude: 56, height: 1000 }) AS geo_3d " +
- "RETURN geo_3d.latitude AS latitude, geo_3d.longitude AS longitude, " +
- "geo_3d.height AS height", context);
- assertEquals(Code.SUCCESS, result.code());
- assertEquals("latitude\tlongitude\theight\n" +
- "12.0\t56.0\t1000.0\n",
- result.toString().replace(TABLE_RESULT_PREFIX, StringUtils.EMPTY));
- }
}