use of org.neo4j.values.virtual.MapValue in project neo4j by neo4j.
the class AbstractCypherAdapterStreamTest method shouldIncludePlanIfPresent.
@Test
void shouldIncludePlanIfPresent() throws Throwable {
// Given
QueryStatistics queryStatistics = mock(QueryStatistics.class);
when(queryStatistics.containsUpdates()).thenReturn(false);
QueryExecution result = mock(QueryExecution.class);
BoltAdapterSubscriber subscriber = new BoltAdapterSubscriber();
when(result.fieldNames()).thenReturn(new String[0]);
when(result.executionType()).thenReturn(explained(READ_ONLY));
subscriber.onResultCompleted(queryStatistics);
when(result.getNotifications()).thenReturn(Collections.emptyList());
when(result.executionPlanDescription()).thenReturn(plan("Join", map("arg1", 1), singletonList("id1"), plan("Scan", map("arg2", 1), singletonList("id2"))));
var stream = new TestAbstractCypherAdapterStream(result, subscriber, Clock.systemUTC());
// When
MapValue meta = metadataOf(stream);
// Then
MapValue expectedChild = mapValues("args", mapValues("arg2", intValue(1)), "identifiers", list(stringValue("id2")), "operatorType", stringValue("Scan"), "children", VirtualValues.EMPTY_LIST);
MapValue expectedPlan = mapValues("args", mapValues("arg1", intValue(1)), "identifiers", list(stringValue("id1")), "operatorType", stringValue("Join"), "children", list(expectedChild));
assertThat(meta.get("plan")).isEqualTo(expectedPlan);
}
use of org.neo4j.values.virtual.MapValue in project neo4j by neo4j.
the class AbstractCypherAdapterStreamTest method shouldIncludeNotificationsIfPresent.
@Test
void shouldIncludeNotificationsIfPresent() throws Throwable {
// Given
QueryExecution result = mock(QueryExecution.class);
BoltAdapterSubscriber subscriber = new BoltAdapterSubscriber();
when(result.fieldNames()).thenReturn(new String[0]);
QueryStatistics queryStatistics = mock(QueryStatistics.class);
when(queryStatistics.containsUpdates()).thenReturn(false);
subscriber.onResultCompleted(queryStatistics);
when(result.executionType()).thenReturn(query(READ_WRITE));
when(result.getNotifications()).thenReturn(Arrays.asList(NotificationCode.INDEX_HINT_UNFULFILLABLE.notification(InputPosition.empty), NotificationCode.RUNTIME_UNSUPPORTED.notification(new InputPosition(4, 5, 6))));
var stream = new TestAbstractCypherAdapterStream(result, subscriber, Clock.systemUTC());
// When
MapValue meta = metadataOf(stream);
// Then
MapValue msg1 = mapValues("severity", stringValue("WARNING"), "code", stringValue("Neo.ClientError.Schema.IndexNotFound"), "title", stringValue("The request (directly or indirectly) referred to an index that does not exist."), "description", stringValue("The hinted index does not exist, please check the schema"));
MapValue msg2 = mapValues("severity", stringValue("WARNING"), "code", stringValue("Neo.ClientNotification.Statement.RuntimeUnsupportedWarning"), "title", stringValue("This query is not supported by the chosen runtime."), "description", stringValue("Selected runtime is unsupported for this query, please use a different runtime instead or fallback to default."), "position", mapValues("offset", intValue(4), "column", intValue(6), "line", intValue(5)));
assertThat(meta.get("notifications")).isEqualTo(list(msg1, msg2));
}
use of org.neo4j.values.virtual.MapValue in project neo4j by neo4j.
the class AbstractCypherAdapterStreamTest method shouldIncludeBasicMetadata.
@Test
void shouldIncludeBasicMetadata() throws Throwable {
// Given
QueryStatistics queryStatistics = mock(QueryStatistics.class);
when(queryStatistics.containsUpdates()).thenReturn(true);
when(queryStatistics.getNodesCreated()).thenReturn(1);
when(queryStatistics.getNodesDeleted()).thenReturn(2);
when(queryStatistics.getRelationshipsCreated()).thenReturn(3);
when(queryStatistics.getRelationshipsDeleted()).thenReturn(4);
when(queryStatistics.getPropertiesSet()).thenReturn(5);
when(queryStatistics.getIndexesAdded()).thenReturn(6);
when(queryStatistics.getIndexesRemoved()).thenReturn(7);
when(queryStatistics.getConstraintsAdded()).thenReturn(8);
when(queryStatistics.getConstraintsRemoved()).thenReturn(9);
when(queryStatistics.getLabelsAdded()).thenReturn(10);
when(queryStatistics.getLabelsRemoved()).thenReturn(11);
QueryExecution result = mock(QueryExecution.class);
BoltAdapterSubscriber subscriber = new BoltAdapterSubscriber();
when(result.fieldNames()).thenReturn(new String[0]);
when(result.executionType()).thenReturn(query(READ_WRITE));
subscriber.onResultCompleted(queryStatistics);
when(result.getNotifications()).thenReturn(Collections.emptyList());
Clock clock = mock(Clock.class);
when(clock.millis()).thenReturn(0L, 1337L);
var stream = new TestAbstractCypherAdapterStream(result, subscriber, clock);
// When
MapValue meta = metadataOf(stream);
// Then
assertThat(meta.get("type")).isEqualTo(stringValue("rw"));
assertThat(meta.get("stats")).isEqualTo(mapValues("nodes-created", intValue(1), "nodes-deleted", intValue(2), "relationships-created", intValue(3), "relationships-deleted", intValue(4), "properties-set", intValue(5), "indexes-added", intValue(6), "indexes-removed", intValue(7), "constraints-added", intValue(8), "constraints-removed", intValue(9), "labels-added", intValue(10), "labels-removed", intValue(11)));
}
use of org.neo4j.values.virtual.MapValue in project neo4j by neo4j.
the class ExecutionPlanConverterTest method partialProfileStatisticConversion.
@Test
void partialProfileStatisticConversion() {
MapValue convertedMap = ExecutionPlanConverter.convert(new TestExecutionPlanDescription("description", getPartialProfilerStatistics(), getIdentifiers(), getArguments()));
assertEquals(convertedMap.get("operatorType"), stringValue("description"));
assertEquals(convertedMap.get("args"), ValueUtils.asMapValue(getArguments()));
assertEquals(convertedMap.get("identifiers"), ValueUtils.asListValue(getIdentifiers()));
assertEquals(convertedMap.get("children"), VirtualValues.EMPTY_LIST);
assertEquals(convertedMap.get("rows"), longValue(1L));
assertEquals(convertedMap.get("pageCacheHits"), longValue(3L));
assertEquals(convertedMap.get("pageCacheMisses"), longValue(2L));
assertEquals(((DoubleValue) convertedMap.get("pageCacheHitRatio")).doubleValue(), 3.0 / 5, 0.0001);
assertEquals(convertedMap.size(), 8);
}
use of org.neo4j.values.virtual.MapValue in project neo4j by neo4j.
the class AbstractCypherAdapterStream method addQueryStatistics.
private void addQueryStatistics(QueryStatistics statistics, RecordConsumer recordConsumer) {
if (statistics.containsUpdates()) {
MapValue stats = queryStats(statistics);
recordConsumer.addMetadata(STATS, stats);
} else if (statistics.containsSystemUpdates()) {
MapValue stats = systemQueryStats(statistics);
recordConsumer.addMetadata(STATS, stats);
}
}
Aggregations