@Override
  public InterpreterResult interpret(String cypherQuery, InterpreterContext interpreterContext) {
    LOGGER.info("Opening session");
    if (StringUtils.isBlank(cypherQuery)) {
      return new InterpreterResult(Code.SUCCESS);
    }
    final List<String> queries = isMultiStatementEnabled ?
            Arrays.asList(cypherQuery.split(";[^'|^\"|^(\\w+`)]")) : Arrays.asList(cypherQuery);
    if (queries.size() == 1) {
      final String query = queries.get(0);
      return runQuery(query, interpreterContext);
    } else {
      final int lastIndex = queries.size() - 1;
      final List<String> subQueries = queries.subList(0, lastIndex);
      for (String query : subQueries) {
        runQuery(query, interpreterContext);
      }
      return runQuery(queries.get(lastIndex), interpreterContext);
    }
  }
@Test
  void testNodeDataTypes() throws IOException {
    InterpreterResult result = interpreter.interpret(
            "CREATE (n:NodeTypes{" +
                    "dateTime: datetime('2015-06-24T12:50:35.556+0100')," +
                    "point3d: point({ x:0, y:4, z:1 })})\n" +
                    "RETURN n",
            context);
    assertEquals(Code.SUCCESS, result.code());
    ObjectMapper jsonMapper = new ObjectMapper();

    GraphResult.Graph graph = jsonMapper.readValue(result.toString()
            .replace(NETWORK_RESULT_PREFIX, StringUtils.EMPTY), GraphResult.Graph.class);

    final Node node = graph.getNodes().iterator().next();
    Map<String, Object> expectedMap = new HashMap<>();
    expectedMap.put("point3d", "Point{srid=9157, x=0.0, y=4.0, z=1.0}");
    expectedMap.put("dateTime", "2015-06-24T12:50:35.556+01:00");
    assertEquals(expectedMap, node.getData());
    interpreter.interpret("MATCH (n:NodeTypes) DETACH DELETE n", context);
  }