use of org.neo4j.driver.Record in project neo4j by neo4j.
the class BoltStateHandlerTest method triesAgainOnSessionExpired.
@Test
public void triesAgainOnSessionExpired() throws Exception {
Session sessionMock = mock(Session.class);
Result resultMock = mock(Result.class);
Record recordMock = mock(Record.class);
Value valueMock = mock(Value.class);
Driver driverMock = stubResultSummaryInAnOpenSession(resultMock, sessionMock, "neo4j-version");
when(resultMock.list()).thenReturn(singletonList(recordMock));
when(valueMock.toString()).thenReturn("999");
when(recordMock.get(0)).thenReturn(valueMock);
when(sessionMock.run(any(Query.class))).thenThrow(new SessionExpiredException("leaderswitch")).thenReturn(resultMock);
OfflineBoltStateHandler boltStateHandler = new OfflineBoltStateHandler(driverMock);
boltStateHandler.connect();
BoltResult boltResult = boltStateHandler.runCypher("RETURN 999", new HashMap<>()).get();
verify(driverMock, times(2)).session(any());
verify(sessionMock, times(2)).run(any(Query.class));
assertEquals("999", boltResult.getRecords().get(0).get(0).toString());
}
use of org.neo4j.driver.Record 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.Record 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.Record in project neo4j by neo4j.
the class SimpleOutputFormatter method formatAndCount.
@Override
public int formatAndCount(@Nonnull BoltResult result, @Nonnull LinePrinter output) {
Iterator<Record> records = result.iterate();
int numberOfRows = 0;
if (records.hasNext()) {
Record firstRow = records.next();
output.printOut(String.join(COMMA_SEPARATOR, firstRow.keys()));
output.printOut(formatRecord(firstRow));
numberOfRows++;
while (records.hasNext()) {
output.printOut(formatRecord(records.next()));
numberOfRows++;
}
}
return numberOfRows;
}
use of org.neo4j.driver.Record in project beam by apache.
the class Neo4jIOIT method testLargeWriteUnwind.
@Test
public void testLargeWriteUnwind() throws Exception {
final int startId = 5000;
final int endId = 6000;
// Create 1000 IDs
List<Integer> idList = new ArrayList<>();
for (int id = startId; id < endId; id++) {
idList.add(id);
}
PCollection<Integer> idCollection = largeWriteUnwindPipeline.apply(Create.of(idList));
// Every row is represented by a Map<String, Object> in the parameters map.
// We accumulate the rows and 'unwind' those to Neo4j for performance reasons.
//
SerializableFunction<Integer, Map<String, Object>> parametersFunction = id -> ImmutableMap.of("id", id, "name", "Casters", "firstName", "Matt");
// 1000 rows with a batch size of 123 should trigger most scenarios we can think of
// We've put a unique constraint on Something.id
//
Neo4jIO.WriteUnwind<Integer> read = Neo4jIO.<Integer>writeUnwind().withDriverConfiguration(Neo4jTestUtil.getDriverConfiguration(containerHostname, containerPort)).withSessionConfig(SessionConfig.forDatabase(Neo4jTestUtil.NEO4J_DATABASE)).withBatchSize(123).withUnwindMapName("rows").withCypher("UNWIND $rows AS row CREATE(n:Something { id : row.id })").withParametersFunction(parametersFunction).withCypherLogging();
idCollection.apply(read);
// Now run this pipeline
//
PipelineResult pipelineResult = largeWriteUnwindPipeline.run();
Assert.assertEquals(PipelineResult.State.DONE, pipelineResult.getState());
//
try (Driver driver = Neo4jTestUtil.getDriver(containerHostname, containerPort)) {
try (Session session = Neo4jTestUtil.getSession(driver, true)) {
List<Integer> values = session.readTransaction(tx -> {
List<Integer> v = null;
int nrRows = 0;
Result result = tx.run("MATCH(n:Something) RETURN count(n), min(n.id), max(n.id)");
while (result.hasNext()) {
Record record = result.next();
v = Arrays.asList(record.get(0).asInt(), record.get(1).asInt(), record.get(2).asInt(), ++nrRows);
}
return v;
});
Assert.assertNotNull(values);
assertThat(values, contains(endId - startId, startId, endId - 1, 1));
}
}
}
Aggregations