use of org.neo4j.driver.Value in project neo4j by neo4j.
the class OutputFormatterTest method shouldReportTotalDBHits.
@Test
public void shouldReportTotalDBHits() {
Value labelScan = buildOperator("NodeByLabelScan", 1002L, 1001L, null);
Value filter = buildOperator("Filter", 1402, 280, labelScan);
Value planMap = buildOperator("ProduceResults", 0, 280, filter);
ProfiledPlan plan = PROFILED_PLAN_FROM_VALUE.apply(planMap);
ResultSummary summary = new InternalResultSummary(new Query("PROFILE MATCH (n:LABEL) WHERE 20 < n.age < 35 return n"), new InternalServerInfo("agent", new BoltServerAddress("localhost:7687"), ServerVersion.vInDev, BoltProtocolV43.VERSION), new InternalDatabaseInfo("neo4j"), QueryType.READ_ONLY, null, plan, plan, Collections.emptyList(), 39, 55);
// When
Map<String, Value> info = OutputFormatter.info(summary);
// Then
assertThat(info.get("DbHits").asLong(), equalTo(2404L));
}
use of org.neo4j.driver.Value in project neo4j by neo4j.
the class PrettyPrinterTest method printRelationshipsAndNodesWithEscapingForSpecialCharacters.
@Test
public void printRelationshipsAndNodesWithEscapingForSpecialCharacters() {
// given
Record record = mock(Record.class);
Value relVal = mock(Value.class);
Value nodeVal = mock(Value.class);
Relationship relationship = mock(Relationship.class);
HashMap<String, Object> relProp = new HashMap<>();
relProp.put("prop1", "\"prop1, value\"");
relProp.put("prop2", "prop2_value");
Node node = mock(Node.class);
HashMap<String, Object> nodeProp = new HashMap<>();
nodeProp.put("prop1", "\"prop1:value\"");
nodeProp.put("1prop2", "\"\"");
nodeProp.put("ä", "not-escaped");
when(relVal.type()).thenReturn(InternalTypeSystem.TYPE_SYSTEM.RELATIONSHIP());
when(nodeVal.type()).thenReturn(InternalTypeSystem.TYPE_SYSTEM.NODE());
when(relVal.asRelationship()).thenReturn(relationship);
when(relationship.type()).thenReturn("RELATIONSHIP,TYPE");
when(relationship.asMap(anyObject())).thenReturn(unmodifiableMap(relProp));
when(nodeVal.asNode()).thenReturn(node);
when(node.labels()).thenReturn(asList("label `1", "label2"));
when(node.asMap(anyObject())).thenReturn(unmodifiableMap(nodeProp));
when(record.keys()).thenReturn(asList("rel", "node"));
when(record.values()).thenReturn(asList(relVal, nodeVal));
BoltResult result = new ListBoltResult(asList(record), mock(ResultSummary.class));
// when
String actual = plainPrinter.format(result);
// then
assertThat(actual, is("rel, node" + NEWLINE + "[:`RELATIONSHIP,TYPE` {prop2: prop2_value, prop1: \"prop1, value\"}], " + "(:`label ``1`:label2 {prop1: \"prop1:value\", `1prop2`: \"\", ä: not-escaped})" + NEWLINE));
}
use of org.neo4j.driver.Value in project neo4j by neo4j.
the class PrettyPrinterTest method prettyPrintThreeSegmentPath.
@Test
public void prettyPrintThreeSegmentPath() {
// given
Record record = mock(Record.class);
Value value = mock(Value.class);
Node start = mock(Node.class);
when(start.labels()).thenReturn(asList("start"));
when(start.id()).thenReturn(1L);
Node second = mock(Node.class);
when(second.labels()).thenReturn(asList("second"));
when(second.id()).thenReturn(2L);
Node third = mock(Node.class);
when(third.labels()).thenReturn(asList("third"));
when(third.id()).thenReturn(3L);
Node end = mock(Node.class);
when(end.labels()).thenReturn(asList("end"));
when(end.id()).thenReturn(4L);
Path path = mock(Path.class);
when(path.start()).thenReturn(start);
Relationship relationship = mock(Relationship.class);
when(relationship.type()).thenReturn("RELATIONSHIP_TYPE");
when(relationship.startNodeId()).thenReturn(1L).thenReturn(3L).thenReturn(3L);
Path.Segment segment1 = mock(Path.Segment.class);
when(segment1.start()).thenReturn(start);
when(segment1.end()).thenReturn(second);
when(segment1.relationship()).thenReturn(relationship);
Path.Segment segment2 = mock(Path.Segment.class);
when(segment2.start()).thenReturn(second);
when(segment2.end()).thenReturn(third);
when(segment2.relationship()).thenReturn(relationship);
Path.Segment segment3 = mock(Path.Segment.class);
when(segment3.start()).thenReturn(third);
when(segment3.end()).thenReturn(end);
when(segment3.relationship()).thenReturn(relationship);
when(value.type()).thenReturn(InternalTypeSystem.TYPE_SYSTEM.PATH());
when(value.asPath()).thenReturn(path);
when(path.iterator()).thenReturn(asList(segment1, segment2, segment3).iterator());
when(record.keys()).thenReturn(asList("path"));
when(record.values()).thenReturn(asList(value));
BoltResult result = new ListBoltResult(singletonList(record), mock(ResultSummary.class));
// when
String actual = plainPrinter.format(result);
// then
assertThat(actual, is("path" + NEWLINE + "(:start)-[:RELATIONSHIP_TYPE]->" + "(:second)<-[:RELATIONSHIP_TYPE]-(:third)-[:RELATIONSHIP_TYPE]->(:end)" + NEWLINE));
}
use of org.neo4j.driver.Value in project neo4j by neo4j.
the class TablePlanFormatter method details.
@Nonnull
private Map<String, Cell> details(@Nonnull Plan plan, @Nonnull Map<String, Integer> columns) {
Map<String, Value> args = plan.arguments();
Stream<Optional<Pair<String, Cell>>> formattedPlan = args.entrySet().stream().map(e -> {
Value value = e.getValue();
switch(e.getKey()) {
case "EstimatedRows":
return mapping(ESTIMATED_ROWS, new RightJustifiedCell(format(value.asDouble())), columns);
case "Rows":
return mapping(ROWS, new RightJustifiedCell(value.asNumber().toString()), columns);
case "DbHits":
return mapping(HITS, new RightJustifiedCell(value.asNumber().toString()), columns);
case "PageCacheHits":
return mapping(PAGE_CACHE, new RightJustifiedCell(String.format("%s/%s", value.asNumber(), args.getOrDefault("PageCacheMisses", ZERO_VALUE).asNumber())), columns);
case "Time":
return mapping(TIME, new RightJustifiedCell(String.format("%.3f", value.asLong() / 1000000.0d)), columns);
case "Order":
return mapping(ORDER, new LeftJustifiedCell(String.format("%s", value.asString())), columns);
case "Details":
return mapping(DETAILS, new LeftJustifiedCell(splitDetails(value.asString())), columns);
case "Memory":
return mapping(MEMORY, new RightJustifiedCell(String.format("%s", value.asNumber().toString())), columns);
default:
return Optional.empty();
}
});
return Stream.concat(formattedPlan, Stream.of(Optional.of(Pair.of(IDENTIFIERS, new LeftJustifiedCell(identifiers(plan, columns)))), Optional.of(Pair.of(OTHER, new LeftJustifiedCell(other(plan, columns)))))).filter(Optional::isPresent).collect(toMap(o -> o.get()._1, o -> o.get()._2));
}
use of org.neo4j.driver.Value in project zeppelin by apache.
the class Neo4jCypherInterpreter method runQuery.
private InterpreterResult runQuery(String cypherQuery, InterpreterContext interpreterContext) {
if (StringUtils.isBlank(cypherQuery)) {
return new InterpreterResult(Code.SUCCESS);
}
try {
Iterator<Record> result = this.neo4jConnectionManager.execute(cypherQuery, interpreterContext).iterator();
Set<Node> nodes = new HashSet<>();
Set<Relationship> relationships = new HashSet<>();
List<String> columns = new ArrayList<>();
List<List<String>> lines = new ArrayList<List<String>>();
while (result.hasNext()) {
Record record = result.next();
List<Pair<String, Value>> fields = record.fields();
List<String> line = new ArrayList<>();
for (Pair<String, Value> field : fields) {
if (field.value().hasType(InternalTypeSystem.TYPE_SYSTEM.NODE())) {
nodes.add(field.value().asNode());
} else if (field.value().hasType(InternalTypeSystem.TYPE_SYSTEM.RELATIONSHIP())) {
relationships.add(field.value().asRelationship());
} else if (field.value().hasType(InternalTypeSystem.TYPE_SYSTEM.PATH())) {
nodes.addAll(Iterables.asList(field.value().asPath().nodes()));
relationships.addAll(Iterables.asList(field.value().asPath().relationships()));
} else {
setTabularResult(field.key(), field.value(), columns, line, InternalTypeSystem.TYPE_SYSTEM);
}
}
if (!line.isEmpty()) {
lines.add(line);
}
}
if (!nodes.isEmpty()) {
return renderGraph(nodes, relationships);
} else {
return renderTable(columns, lines);
}
} catch (Exception e) {
LOGGER.error("Exception while interpreting cypher query", e);
return new InterpreterResult(Code.ERROR, e.getMessage());
}
}
Aggregations