use of org.neo4j.driver.summary.Plan in project neo4j by neo4j.
the class TablePlanFormatterTest method withEmptyDetails.
@Test
public void withEmptyDetails() {
Plan plan = mock(Plan.class);
Map<String, Value> args = new HashMap<String, Value>(2) {
{
put("EstimatedRows", new FloatValue(55));
put("Details", new StringValue(""));
}
};
when(plan.arguments()).thenReturn(args);
when(plan.operatorType()).thenReturn("Projection");
assertThat(tablePlanFormatter.formatPlan(plan), is(String.join(NEWLINE, "+-------------+---------+----------------+", "| Operator | Details | Estimated Rows |", "+-------------+---------+----------------+", "| +Projection | | 55 |", "+-------------+---------+----------------+", "")));
}
use of org.neo4j.driver.summary.Plan in project neo4j by neo4j.
the class TablePlanFormatterTest method renderShortDetails.
@Test
public void renderShortDetails() {
Plan plan = mock(Plan.class);
Map<String, Value> args = Collections.singletonMap("Details", new StringValue("x.prop AS prop"));
when(plan.arguments()).thenReturn(args);
when(plan.operatorType()).thenReturn("Projection");
assertThat(tablePlanFormatter.formatPlan(plan), is(String.join(NEWLINE, "+-------------+----------------+", "| Operator | Details |", "+-------------+----------------+", "| +Projection | x.prop AS prop |", "+-------------+----------------+", "")));
}
use of org.neo4j.driver.summary.Plan in project neo4j by neo4j.
the class TablePlanFormatterTest method renderExactMaxLengthDetails.
@Test
public void renderExactMaxLengthDetails() {
Plan plan = mock(Plan.class);
String details = stringOfLength(TablePlanFormatter.MAX_DETAILS_COLUMN_WIDTH);
Map<String, Value> args = Collections.singletonMap("Details", new StringValue(details));
when(plan.arguments()).thenReturn(args);
when(plan.operatorType()).thenReturn("Projection");
assertThat(tablePlanFormatter.formatPlan(plan), containsString("| +Projection | " + details + " |"));
}
use of org.neo4j.driver.summary.Plan 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.summary.Plan in project neo4j by neo4j.
the class TablePlanFormatterTest method multiLineDetails.
@Test
public void multiLineDetails() {
Plan argumentPlan = mock(Plan.class);
when(argumentPlan.arguments()).thenReturn(Collections.emptyMap());
when(argumentPlan.operatorType()).thenReturn("Argument");
Plan childPlan = mock(Plan.class);
Map<String, Value> args = Collections.singletonMap("Details", new StringValue(stringOfLength(TablePlanFormatter.MAX_DETAILS_COLUMN_WIDTH + 5)));
when(childPlan.arguments()).thenReturn(args);
when(childPlan.operatorType()).thenReturn("Expand");
doReturn(new ArrayList<Plan>() {
{
add(argumentPlan);
add(argumentPlan);
}
}).when(childPlan).children();
Plan plan = mock(Plan.class);
String details = stringOfLength(TablePlanFormatter.MAX_DETAILS_COLUMN_WIDTH + 1);
args = Collections.singletonMap("Details", new StringValue(details));
when(plan.arguments()).thenReturn(args);
when(plan.operatorType()).thenReturn("Projection");
doReturn(new ArrayList<Plan>() {
{
add(childPlan);
add(childPlan);
}
}).when(plan).children();
assertThat(tablePlanFormatter.formatPlan(plan), is(String.join(NEWLINE, "+---------------+------------------------------------------------------------------------------------------------------+", "| Operator | Details |", "+---------------+------------------------------------------------------------------------------------------------------+", "| +Projection | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |", "| | | a |", "| |\\ +------------------------------------------------------------------------------------------------------+", "| | +Expand | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |", "| | | | aaaaa |", "| | |\\ +------------------------------------------------------------------------------------------------------+", "| | | +Argument | |", "| | | +------------------------------------------------------------------------------------------------------+", "| | +Argument | |", "| | +------------------------------------------------------------------------------------------------------+", "| +Expand | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |", "| | | aaaaa |", "| |\\ +------------------------------------------------------------------------------------------------------+", "| | +Argument | |", "| | +------------------------------------------------------------------------------------------------------+", "| +Argument | |", "+---------------+------------------------------------------------------------------------------------------------------+", "")));
}
Aggregations