@Procedure() @Description("apoc.bolt.load(url-or-key, kernelTransaction, params, config) - access to other databases via bolt for read") public Stream<RowResult> load(@Name("url") String url, @Name("kernelTransaction") String statement, @Name(value = "params", defaultValue = "{}") Map<String, Object> params, @Name(value = "config", defaultValue = "{}") Map<String, Object> config) throws URISyntaxException { if (params == null) params = Collections.emptyMap(); if (config == null) config = Collections.emptyMap(); boolean virtual = (boolean) config.getOrDefault("virtual", false); boolean addStatistics = (boolean) config.getOrDefault("statistics", false); boolean readOnly = (boolean) config.getOrDefault("readOnly", true); Config driverConfig = toDriverConfig(config.getOrDefault("driverConfig", map())); UriResolver uri = new UriResolver(url, "bolt"); uri.initialize(); try (Driver driver = GraphDatabase.driver(uri.getConfiguredUri(), uri.getToken(), driverConfig); Session session = driver.session()) { if (addStatistics) return Stream.of(new RowResult(toMap(runStatement(statement, session, params, readOnly).summary().counters()))); else return getRowResultStream(virtual, session, params, statement, readOnly); } catch (Exception e) { throw new RuntimeException("It's not possible to create a connection due to: " + e.getMessage()); } }
private int updatesCount(ResultSummary summary) { int updates = 0; if ( summary.counters().containsUpdates() ) { updates += summary.counters().constraintsAdded(); updates += summary.counters().constraintsRemoved(); updates += summary.counters().nodesCreated(); updates += summary.counters().nodesDeleted(); updates += summary.counters().relationshipsCreated(); updates += summary.counters().relationshipsDeleted(); updates += summary.counters().labelsAdded(); updates += summary.counters().labelsRemoved(); updates += summary.counters().indexesAdded(); updates += summary.counters().indexesRemoved(); updates += summary.counters().propertiesSet(); } return updates; }
@Test public void returnStatisticsForDefaultFormatting() throws Exception { // given ResultSummary resultSummary = mock(ResultSummary.class); SummaryCounters summaryCounters = mock(SummaryCounters.class); when(resultSummary.counters()).thenReturn(summaryCounters); when(summaryCounters.labelsAdded()).thenReturn(1); when(summaryCounters.nodesCreated()).thenReturn(10); // when String actual = new StatisticsCollector(Format.VERBOSE).collect(resultSummary); // then assertThat(actual, is("Added 10 nodes, Added 1 labels")); }
private String collectStatistics(@Nonnull ResultSummary summary) { List<String> statistics = new ArrayList<>(); SummaryCounters counters = summary.counters(); if (counters == null) return ""; if (counters.nodesCreated() != 0) {
@Test public void returnStatisticsForEmptyRecords() throws Exception { // given ResultSummary resultSummary = mock(ResultSummary.class); SummaryCounters summaryCounters = mock(SummaryCounters.class); BoltResult result = mock(BoltResult.class); when(result.getRecords()).thenReturn(Collections.emptyList()); when(result.getSummary()).thenReturn(resultSummary); when(resultSummary.counters()).thenReturn(summaryCounters); when(summaryCounters.labelsAdded()).thenReturn(1); when(summaryCounters.nodesCreated()).thenReturn(10); // when String actual = verbosePrinter.format(result); // then assertThat(actual, containsString("Added 10 nodes, Added 1 labels")); }
@Override public String getResultSummary() { ResultSummary summary = buffer.getResultSummary(); SummaryCounters counters = summary.counters();
@Override public QueryStatisticsModel adapt(StatementResult result) { QueryStatisticsModel queryStatisticsModel = new QueryStatisticsModel(); SummaryCounters stats = result.consume().counters(); queryStatisticsModel.setContains_updates(stats.containsUpdates()); queryStatisticsModel.setNodes_created(stats.nodesCreated()); queryStatisticsModel.setNodes_deleted(stats.nodesDeleted()); queryStatisticsModel.setProperties_set(stats.propertiesSet()); queryStatisticsModel.setRelationships_created(stats.relationshipsCreated()); queryStatisticsModel.setRelationship_deleted(stats.relationshipsDeleted()); queryStatisticsModel.setLabels_added(stats.labelsAdded()); queryStatisticsModel.setLabels_removed(stats.labelsRemoved()); queryStatisticsModel.setIndexes_added(stats.indexesAdded()); queryStatisticsModel.setIndexes_removed(stats.indexesRemoved()); queryStatisticsModel.setConstraints_added(stats.constraintsAdded()); queryStatisticsModel.setConstraints_removed(stats.constraintsRemoved()); return queryStatisticsModel; } }
@Override public QueryStatisticsModel adapt(StatementResult result) { QueryStatisticsModel queryStatisticsModel = new QueryStatisticsModel(); SummaryCounters stats = result.consume().counters(); queryStatisticsModel.setContains_updates(stats.containsUpdates()); queryStatisticsModel.setNodes_created(stats.nodesCreated()); queryStatisticsModel.setNodes_deleted(stats.nodesDeleted()); queryStatisticsModel.setProperties_set(stats.propertiesSet()); queryStatisticsModel.setRelationships_created(stats.relationshipsCreated()); queryStatisticsModel.setRelationship_deleted(stats.relationshipsDeleted()); queryStatisticsModel.setLabels_added(stats.labelsAdded()); queryStatisticsModel.setLabels_removed(stats.labelsRemoved()); queryStatisticsModel.setIndexes_added(stats.indexesAdded()); queryStatisticsModel.setIndexes_removed(stats.indexesRemoved()); queryStatisticsModel.setConstraints_added(stats.constraintsAdded()); queryStatisticsModel.setConstraints_removed(stats.constraintsRemoved()); return queryStatisticsModel; } }