@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 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));
  }