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
commit 5542262568b3532fd11e2832d3168b386f35b3d6 Author: Andrea Santurbano <sant...@gmail.com> AuthorDate: Thu Nov 29 09:44:11 2018 +0100 fix checkstyle --- .../graph/neo4j/Neo4jCypherInterpreter.java | 14 +++ .../graph/neo4j/Neo4jCypherInterpreterTest.java | 101 ++++++++++++++++++--- 2 files changed, 100 insertions(+), 15 deletions(-) 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 bcb9d7b..d7f8485 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,6 +201,20 @@ 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 f44cd77..7940d5f 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,10 +55,15 @@ 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')}))"; + "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) " + "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 { @@ -73,7 +78,7 @@ public class Neo4jCypherInterpreterTest { public static void tearDownNeo4jServer() throws Exception { server.close(); } - + @Before public void setUpZeppelin() { Properties p = new Properties(); @@ -83,7 +88,7 @@ public class Neo4jCypherInterpreterTest { interpreter = new Neo4jCypherInterpreter(p); context = InterpreterContext.builder() .setInterpreterOut(new InterpreterOutput(null)) - .build();; + .build(); } @After @@ -98,14 +103,15 @@ 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 ", StringUtils.EMPTY)); - + assertEquals(tableResult, result.toString().replace(TABLE_RESULT_PREFIX, 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 ", StringUtils.EMPTY)); + assertEquals(tableResultWithMap, result.toString().replace(TABLE_RESULT_PREFIX, + StringUtils.EMPTY)); } @Test @@ -121,10 +127,14 @@ 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", context); + + "RETURN n.name AS name, n.age AS age, " + + "n.address AS address, n.birth AS birth", context); assertEquals(Code.SUCCESS, result.code()); - final String tableResult = "name\tage\n\"name1\"\t1\n\"name2\"\t2\n\"name3\"\t3\n"; - assertEquals(tableResult, result.toString().replace("%table ", StringUtils.EMPTY)); + 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)); } @Test @@ -136,7 +146,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 ", StringUtils.EMPTY) + String[] rows = result.toString().replace(TABLE_RESULT_PREFIX, StringUtils.EMPTY) .split(Neo4jCypherInterpreter.NEW_LINE); assertEquals(rows.length, 2); List<String> header = Arrays.asList(rows[0].split(Neo4jCypherInterpreter.TAB)); @@ -153,7 +163,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 ", StringUtils.EMPTY) + rows = result.toString().replace(TABLE_RESULT_PREFIX, StringUtils.EMPTY) .split(Neo4jCypherInterpreter.NEW_LINE); assertEquals(rows.length, 3); header = Arrays.asList(rows[0].split(Neo4jCypherInterpreter.TAB)); @@ -175,7 +185,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 ", StringUtils.EMPTY) + rows = result.toString().replace(TABLE_RESULT_PREFIX, StringUtils.EMPTY) .split(Neo4jCypherInterpreter.NEW_LINE); assertEquals(rows.length, 3); header = Arrays.asList(rows[0].split(Neo4jCypherInterpreter.TAB, -1)); @@ -191,13 +201,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 ", StringUtils.EMPTY) + rows = result.toString().replace(TABLE_RESULT_PREFIX, StringUtils.EMPTY) .split(Neo4jCypherInterpreter.NEW_LINE); assertEquals(rows.length, 3); header = Arrays.asList(rows[0].split(Neo4jCypherInterpreter.TAB, -1)); @@ -219,7 +229,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 ", + GraphResult.Graph graph = gson.fromJson(result.toString().replace(NETWORK_RESULT_PREFIX, StringUtils.EMPTY), GraphResult.Graph.class); assertEquals(2, graph.getNodes().size()); assertEquals(true, graph.getNodes().iterator().next().getLabel().equals(LABEL_PERSON)); @@ -248,4 +258,65 @@ 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)); + } }