diff --git a/build.gradle b/build.gradle index 4a9a152c..d2fac085 100644 --- a/build.gradle +++ b/build.gradle @@ -70,7 +70,7 @@ ext { argparse4jVersion = '0.7.0' junitVersion = '4.12' evaluatorVersion = '3.5.4' - neo4jJavaDriverVersion = '4.0.0-beta03' + neo4jJavaDriverVersion = '4.0.0-rc1' findbugsVersion = '3.0.0' jansiVersion = '1.13' jlineVersion = '2.14.6' diff --git a/cypher-shell/src/main/java/org/neo4j/shell/prettyprint/OutputFormatter.java b/cypher-shell/src/main/java/org/neo4j/shell/prettyprint/OutputFormatter.java index d41e6a89..5d86a0f0 100644 --- a/cypher-shell/src/main/java/org/neo4j/shell/prettyprint/OutputFormatter.java +++ b/cypher-shell/src/main/java/org/neo4j/shell/prettyprint/OutputFormatter.java @@ -1,8 +1,17 @@ package org.neo4j.shell.prettyprint; -import org.neo4j.driver.internal.types.TypeRepresentation; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; +import javax.annotation.Nonnull; + import org.neo4j.driver.Value; import org.neo4j.driver.Values; +import org.neo4j.driver.internal.types.TypeRepresentation; import org.neo4j.driver.summary.Plan; import org.neo4j.driver.summary.ProfiledPlan; import org.neo4j.driver.summary.ResultSummary; @@ -12,10 +21,6 @@ import org.neo4j.driver.types.Relationship; import org.neo4j.shell.state.BoltResult; -import javax.annotation.Nonnull; -import java.util.*; -import java.util.stream.Collectors; - import static java.util.Arrays.asList; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static org.neo4j.shell.prettyprint.CypherVariablesFormatter.escape; @@ -197,7 +202,7 @@ static Map info(@Nonnull ResultSummary summary) { Plan plan = summary.plan(); result.put("Plan", Values.value(summary.hasProfile() ? "PROFILE" : "EXPLAIN")); - result.put("Statement", Values.value(summary.statementType().name())); + result.put("Statement", Values.value(summary.queryType().name())); Map arguments = plan.arguments(); Value defaultValue = Values.value(""); diff --git a/cypher-shell/src/main/java/org/neo4j/shell/state/BoltStateHandler.java b/cypher-shell/src/main/java/org/neo4j/shell/state/BoltStateHandler.java index 091804fe..67d43f8b 100644 --- a/cypher-shell/src/main/java/org/neo4j/shell/state/BoltStateHandler.java +++ b/cypher-shell/src/main/java/org/neo4j/shell/state/BoltStateHandler.java @@ -9,7 +9,21 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; -import org.neo4j.driver.*; +import org.neo4j.driver.AccessMode; +import org.neo4j.driver.AuthToken; +import org.neo4j.driver.AuthTokens; +import org.neo4j.driver.Bookmark; +import org.neo4j.driver.Config; +import org.neo4j.driver.Driver; +import org.neo4j.driver.GraphDatabase; +import org.neo4j.driver.Query; +import org.neo4j.driver.Record; +import org.neo4j.driver.Result; +import org.neo4j.driver.Session; +import org.neo4j.driver.SessionConfig; +import org.neo4j.driver.Transaction; +import org.neo4j.driver.Value; +import org.neo4j.driver.Values; import org.neo4j.driver.exceptions.ClientException; import org.neo4j.driver.exceptions.SessionExpiredException; import org.neo4j.driver.summary.DatabaseInfo; @@ -32,7 +46,7 @@ public class BoltStateHandler implements TransactionHandler, Connector, Database protected Driver driver; Session session; private String version; - private List transactionStatements; + private List transactionStatements; private String activeDatabaseNameAsSetByUser; private String actualDatabaseNameAsReportedByServer; private final boolean isInteractive; @@ -182,7 +196,7 @@ private void reconnect(boolean keepBookmark) { String query = activeDatabaseNameAsSetByUser.compareToIgnoreCase(SYSTEM_DB_NAME) == 0 ? "SHOW DEFAULT DATABASE" : "RETURN 1"; resetActualDbName(); // Set this to null first in case run throws an exception - StatementResult run = session.run(query); + Result run = session.run(query); ResultSummary summary = null; try { summary = run.consume(); @@ -220,7 +234,7 @@ public Optional runCypher(@Nonnull String cypher, throw new CommandException("Not connected to Neo4j"); } if (this.transactionStatements != null) { - transactionStatements.add(new Statement(cypher, queryParams)); + transactionStatements.add(new Query(cypher, queryParams)); return Optional.empty(); } else { try { @@ -272,7 +286,7 @@ public void changePassword(@Nonnull ConnectionConfig connectionConfig) { parameters = Values.parameters("n", connectionConfig.newPassword()); } - StatementResult run = session.run(command, parameters); + Result run = session.run(command, parameters); run.consume(); // If successful, use the new password when reconnecting @@ -298,7 +312,7 @@ public void changePassword(@Nonnull ConnectionConfig connectionConfig) { */ @Nonnull private Optional getBoltResult(@Nonnull String cypher, @Nonnull Map queryParams) throws SessionExpiredException { - StatementResult statementResult = session.run(new Statement(cypher, queryParams)); + Result statementResult = session.run(new Query(cypher, queryParams)); if (statementResult == null) { return Optional.empty(); @@ -358,7 +372,7 @@ public void disconnect() { silentDisconnect(); } - List getTransactionStatements() { + List getTransactionStatements() { return this.transactionStatements; } @@ -376,10 +390,10 @@ private Driver getDriver(@Nonnull ConnectionConfig connectionConfig, @Nullable A return driverProvider.apply(connectionConfig.driverUrl(), authToken, configBuilder.build()); } - private Optional> captureResults(@Nonnull List transactionStatements) { + private Optional> captureResults(@Nonnull List transactionStatements) { List results = executeWithRetry(transactionStatements, (statement, transaction) -> { // calling list() is what actually executes cypher on the server - StatementResult sr = transaction.run(statement); + Result sr = transaction.run(statement); List list = sr.list(); List keys = sr.keys(); ResultSummary summary = sr.consume(); @@ -395,7 +409,7 @@ private Optional> captureResults(@Nonnull List trans return Optional.of(results); } - private List executeWithRetry(List transactionStatements, BiFunction biFunction) { + private List executeWithRetry(List transactionStatements, BiFunction biFunction) { return session.writeTransaction(tx -> transactionStatements.stream() .map(transactionStatement -> biFunction.apply(transactionStatement, tx)) diff --git a/cypher-shell/src/main/java/org/neo4j/shell/state/StatementBoltResult.java b/cypher-shell/src/main/java/org/neo4j/shell/state/StatementBoltResult.java index 999102b4..5507d00a 100644 --- a/cypher-shell/src/main/java/org/neo4j/shell/state/StatementBoltResult.java +++ b/cypher-shell/src/main/java/org/neo4j/shell/state/StatementBoltResult.java @@ -1,21 +1,21 @@ package org.neo4j.shell.state; -import org.neo4j.driver.Record; -import org.neo4j.driver.StatementResult; -import org.neo4j.driver.summary.ResultSummary; - -import javax.annotation.Nonnull; import java.util.Iterator; import java.util.List; +import javax.annotation.Nonnull; + +import org.neo4j.driver.Record; +import org.neo4j.driver.Result; +import org.neo4j.driver.summary.ResultSummary; /** - * Wrapper around {@link StatementResult}. Might or might not be materialized. + * Wrapper around {@link Result}. Might or might not be materialized. */ public class StatementBoltResult implements BoltResult { - private final StatementResult result; + private final Result result; - public StatementBoltResult(StatementResult result) { + public StatementBoltResult(Result result) { this.result = result; } diff --git a/cypher-shell/src/test/java/org/neo4j/shell/prettyprint/OutputFormatterTest.java b/cypher-shell/src/test/java/org/neo4j/shell/prettyprint/OutputFormatterTest.java index 38b596cb..f73c162c 100644 --- a/cypher-shell/src/test/java/org/neo4j/shell/prettyprint/OutputFormatterTest.java +++ b/cypher-shell/src/test/java/org/neo4j/shell/prettyprint/OutputFormatterTest.java @@ -6,6 +6,9 @@ import java.util.HashMap; import java.util.Map; +import org.neo4j.driver.Query; +import org.neo4j.driver.Value; +import org.neo4j.driver.Values; import org.neo4j.driver.internal.BoltServerAddress; import org.neo4j.driver.internal.summary.InternalDatabaseInfo; import org.neo4j.driver.internal.summary.InternalResultSummary; @@ -13,12 +16,9 @@ import org.neo4j.driver.internal.util.ServerVersion; import org.neo4j.driver.internal.value.ListValue; import org.neo4j.driver.internal.value.MapValue; -import org.neo4j.driver.Statement; -import org.neo4j.driver.Value; -import org.neo4j.driver.Values; import org.neo4j.driver.summary.ProfiledPlan; +import org.neo4j.driver.summary.QueryType; import org.neo4j.driver.summary.ResultSummary; -import org.neo4j.driver.summary.StatementType; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.MatcherAssert.assertThat; @@ -34,10 +34,10 @@ public void shouldReportTotalDBHits() { ProfiledPlan plan = PROFILED_PLAN_FROM_VALUE.apply( planMap ); ResultSummary summary = new InternalResultSummary( - new Statement( "PROFILE MATCH (n:LABEL) WHERE 20 < n.age < 35 return n" ), + new Query( "PROFILE MATCH (n:LABEL) WHERE 20 < n.age < 35 return n" ), new InternalServerInfo( new BoltServerAddress( "localhost:7687" ), ServerVersion.vInDev ), new InternalDatabaseInfo("neo4j"), - StatementType.READ_ONLY, + QueryType.READ_ONLY, null, plan, plan, diff --git a/cypher-shell/src/test/java/org/neo4j/shell/prettyprint/PrettyPrinterTest.java b/cypher-shell/src/test/java/org/neo4j/shell/prettyprint/PrettyPrinterTest.java index 1ae6b941..10a835fe 100644 --- a/cypher-shell/src/test/java/org/neo4j/shell/prettyprint/PrettyPrinterTest.java +++ b/cypher-shell/src/test/java/org/neo4j/shell/prettyprint/PrettyPrinterTest.java @@ -2,13 +2,19 @@ import org.junit.Test; -import org.neo4j.driver.internal.types.InternalTypeSystem; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Stream; + import org.neo4j.driver.Record; import org.neo4j.driver.Value; import org.neo4j.driver.Values; +import org.neo4j.driver.internal.types.InternalTypeSystem; import org.neo4j.driver.summary.ProfiledPlan; +import org.neo4j.driver.summary.QueryType; import org.neo4j.driver.summary.ResultSummary; -import org.neo4j.driver.summary.StatementType; import org.neo4j.driver.summary.SummaryCounters; import org.neo4j.driver.types.Node; import org.neo4j.driver.types.Path; @@ -17,12 +23,6 @@ import org.neo4j.shell.state.BoltResult; import org.neo4j.shell.state.ListBoltResult; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.function.Function; -import java.util.stream.Stream; - import static java.util.Arrays.asList; import static java.util.Collections.singletonList; import static java.util.Collections.unmodifiableMap; @@ -73,7 +73,7 @@ public void prettyPrintProfileInformation() { when(resultSummary.profile()).thenReturn(plan); when(resultSummary.resultAvailableAfter(anyObject())).thenReturn(5L); when(resultSummary.resultConsumedAfter(anyObject())).thenReturn(7L); - when(resultSummary.statementType()).thenReturn(StatementType.READ_ONLY); + when(resultSummary.queryType()).thenReturn(QueryType.READ_ONLY); Map argumentMap = Values.parameters("Version", "3.1", "Planner", "COST", "Runtime", "INTERPRETED").asMap(v -> v); when(plan.arguments()).thenReturn(argumentMap); @@ -108,7 +108,7 @@ public void prettyPrintExplainInformation() { when(resultSummary.plan()).thenReturn(plan); when(resultSummary.resultAvailableAfter(anyObject())).thenReturn(5L); when(resultSummary.resultConsumedAfter(anyObject())).thenReturn(7L); - when(resultSummary.statementType()).thenReturn(StatementType.READ_ONLY); + when(resultSummary.queryType()).thenReturn(QueryType.READ_ONLY); Map argumentMap = Values.parameters("Version", "3.1", "Planner", "COST", "Runtime", "INTERPRETED").asMap(v -> v); when(plan.arguments()).thenReturn(argumentMap); diff --git a/cypher-shell/src/test/java/org/neo4j/shell/prettyprint/TableOutputFormatterTest.java b/cypher-shell/src/test/java/org/neo4j/shell/prettyprint/TableOutputFormatterTest.java index e3b74e8d..c8984ba8 100644 --- a/cypher-shell/src/test/java/org/neo4j/shell/prettyprint/TableOutputFormatterTest.java +++ b/cypher-shell/src/test/java/org/neo4j/shell/prettyprint/TableOutputFormatterTest.java @@ -2,6 +2,19 @@ import org.hamcrest.CoreMatchers; import org.junit.Test; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import org.neo4j.driver.Query; +import org.neo4j.driver.Record; +import org.neo4j.driver.Result; +import org.neo4j.driver.Value; +import org.neo4j.driver.Values; import org.neo4j.driver.internal.InternalIsoDuration; import org.neo4j.driver.internal.InternalNode; import org.neo4j.driver.internal.InternalPath; @@ -14,24 +27,16 @@ import org.neo4j.driver.internal.value.PathValue; import org.neo4j.driver.internal.value.PointValue; import org.neo4j.driver.internal.value.RelationshipValue; -import org.neo4j.driver.Record; -import org.neo4j.driver.Statement; -import org.neo4j.driver.StatementResult; -import org.neo4j.driver.Value; -import org.neo4j.driver.Values; import org.neo4j.driver.summary.ProfiledPlan; +import org.neo4j.driver.summary.QueryType; import org.neo4j.driver.summary.ResultSummary; -import org.neo4j.driver.summary.StatementType; import org.neo4j.driver.types.Node; import org.neo4j.driver.types.Path; import org.neo4j.driver.types.Relationship; - import org.neo4j.shell.cli.Format; import org.neo4j.shell.state.BoltResult; import org.neo4j.shell.state.ListBoltResult; -import java.util.*; - import static java.util.Arrays.asList; import static java.util.Collections.singletonMap; import static org.hamcrest.CoreMatchers.is; @@ -62,7 +67,7 @@ public void prettyPrintPlanInformation() { when(resultSummary.profile()).thenReturn(plan); when(resultSummary.resultAvailableAfter(anyObject())).thenReturn(5L); when(resultSummary.resultConsumedAfter(anyObject())).thenReturn(7L); - when(resultSummary.statementType()).thenReturn(StatementType.READ_ONLY); + when(resultSummary.queryType()).thenReturn(QueryType.READ_ONLY); Map argumentMap = Values.parameters("Version", "3.1", "Planner", "COST", "Runtime", "INTERPRETED").asMap(v -> v); when(plan.arguments()).thenReturn(argumentMap); @@ -89,7 +94,7 @@ public void prettyPrintPlanInformationWithNewlines() { when(resultSummary.plan()).thenReturn(plan); when(resultSummary.resultAvailableAfter(anyObject())).thenReturn(5L); when(resultSummary.resultConsumedAfter(anyObject())).thenReturn(7L); - when(resultSummary.statementType()).thenReturn(StatementType.READ_ONLY); + when(resultSummary.queryType()).thenReturn(QueryType.READ_ONLY); Map argumentMap = Values.parameters("Version", "3.1", "Planner", "COST", "Runtime", "INTERPRETED").asMap(v -> v); when(plan.arguments()).thenReturn(argumentMap); @@ -294,7 +299,7 @@ public void printRelationshipsAndNodesWithEscapingForSpecialCharacters() { @Test public void basicTable() { // GIVEN - StatementResult result = mockResult(asList("c1", "c2"), "a", 42); + Result result = mockResult(asList("c1", "c2"), "a", 42); // WHEN String table = formatResult(result); // THEN @@ -305,7 +310,7 @@ public void basicTable() { @Test public void twoRows() { // GIVEN - StatementResult result = mockResult(asList("c1", "c2"), "a", 42, "b", 43); + Result result = mockResult(asList("c1", "c2"), "a", 42, "b", 43); // WHEN String table = formatResult(result); // THEN @@ -317,7 +322,7 @@ public void twoRows() { public void wrapContent() { // GIVEN - StatementResult result = mockResult( asList( "c1"), "a", "bb","ccc","dddd","eeeee" ); + Result result = mockResult( asList( "c1"), "a", "bb","ccc","dddd","eeeee" ); // WHEN ToStringLinePrinter printer = new ToStringLinePrinter(); new TableOutputFormatter(true, 2).formatAndCount(new ListBoltResult(result.list(), result.consume()), printer); @@ -343,7 +348,7 @@ public void wrapContent() public void truncateContent() { // GIVEN - StatementResult result = mockResult( asList( "c1"), "a", "bb","ccc","dddd","eeeee" ); + Result result = mockResult( asList( "c1"), "a", "bb","ccc","dddd","eeeee" ); // WHEN ToStringLinePrinter printer = new ToStringLinePrinter(); new TableOutputFormatter(false, 2).formatAndCount(new ListBoltResult(result.list(), result.consume()), printer); @@ -365,7 +370,7 @@ public void truncateContent() @Test public void formatCollections() { // GIVEN - StatementResult result = mockResult(asList("a", "b", "c"), singletonMap("a", 42), asList(12, 13), + Result result = mockResult(asList("a", "b", "c"), singletonMap("a", 42), asList(12, 13), singletonMap("a", asList(14, 15))); // WHEN String table = formatResult(result); @@ -380,7 +385,7 @@ public void formatEntities() { Map relProperties = singletonMap("since", Values.value(2016)); InternalNode node = new InternalNode(12, asList("Person"), properties); InternalRelationship relationship = new InternalRelationship(24, 12, 12, "TEST", relProperties); - StatementResult result = + Result result = mockResult(asList("a", "b", "c"), node, relationship, new InternalPath(node, relationship, node)); // WHEN String table = formatResult(result); @@ -390,17 +395,17 @@ public void formatEntities() { "| (:Person {name: \"Mark\"})-[:TEST {since: 2016}]->(:Person {name: \"Mark\"}) |")); } - private String formatResult(StatementResult result) { + private String formatResult(Result result) { ToStringLinePrinter printer = new ToStringLinePrinter(); new TableOutputFormatter(true, 1000).formatAndCount(new ListBoltResult(result.list(), result.consume()), printer); return printer.result(); } - private StatementResult mockResult(List cols, Object... data) { - StatementResult result = mock(StatementResult.class); - Statement statement = mock(Statement.class); + private Result mockResult(List cols, Object... data) { + Result result = mock(Result.class); + Query query = mock(Query.class); ResultSummary summary = mock(ResultSummary.class); - when(summary.statement()).thenReturn(statement); + when(summary.query()).thenReturn(query); when(result.keys()).thenReturn(cols); List records = new ArrayList<>(); List input = asList(data); diff --git a/cypher-shell/src/test/java/org/neo4j/shell/state/BoltStateHandlerTest.java b/cypher-shell/src/test/java/org/neo4j/shell/state/BoltStateHandlerTest.java index a65292d5..6112b2ae 100644 --- a/cypher-shell/src/test/java/org/neo4j/shell/state/BoltStateHandlerTest.java +++ b/cypher-shell/src/test/java/org/neo4j/shell/state/BoltStateHandlerTest.java @@ -4,13 +4,19 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; + +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Optional; + import org.neo4j.driver.AuthToken; import org.neo4j.driver.Config; import org.neo4j.driver.Driver; +import org.neo4j.driver.Query; import org.neo4j.driver.Record; +import org.neo4j.driver.Result; import org.neo4j.driver.Session; -import org.neo4j.driver.Statement; -import org.neo4j.driver.StatementResult; import org.neo4j.driver.Value; import org.neo4j.driver.exceptions.ClientException; import org.neo4j.driver.exceptions.SessionExpiredException; @@ -24,11 +30,6 @@ import org.neo4j.shell.test.bolt.FakeDriver; import org.neo4j.shell.test.bolt.FakeSession; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Optional; - import static java.util.Arrays.asList; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertEquals; @@ -87,7 +88,7 @@ public Driver apply(String uri, AuthToken authToken, Config config) { @Test public void versionIsNotEmptyAfterConnect() throws CommandException { - Driver driverMock = stubResultSummaryInAnOpenSession(mock(StatementResult.class), mock(Session.class), "Neo4j/9.4.1-ALPHA"); + Driver driverMock = stubResultSummaryInAnOpenSession(mock(Result.class), mock(Session.class), "Neo4j/9.4.1-ALPHA"); BoltStateHandler handler = new BoltStateHandler((s, authToken, config) -> driverMock, false); ConnectionConfig config = new ConnectionConfig("bolt://", "", -1, "", "", false, ABSENT_DB_NAME); @@ -99,7 +100,7 @@ public void versionIsNotEmptyAfterConnect() throws CommandException { @Test public void actualDatabaseNameIsNotEmptyAfterConnect() throws CommandException { Driver driverMock = - stubResultSummaryInAnOpenSession(mock(StatementResult.class), mock(Session.class), "Neo4j/9.4.1-ALPHA", "my_default_db"); + stubResultSummaryInAnOpenSession(mock(Result.class), mock(Session.class), "Neo4j/9.4.1-ALPHA", "my_default_db"); BoltStateHandler handler = new BoltStateHandler((s, authToken, config) -> driverMock, false); ConnectionConfig config = new ConnectionConfig("bolt://", "", -1, "", "", false, ABSENT_DB_NAME); @@ -111,13 +112,13 @@ public void actualDatabaseNameIsNotEmptyAfterConnect() throws CommandException { @Test public void exceptionFromRunQueryDoesNotResetActualDatabaseNameToUnresolved() throws CommandException { Session sessionMock = mock(Session.class); - StatementResult resultMock = mock(StatementResult.class); + Result resultMock = mock(Result.class); Driver driverMock = stubResultSummaryInAnOpenSession(resultMock, sessionMock, "Neo4j/9.4.1-ALPHA", "my_default_db"); ClientException databaseNotFound = new ClientException("Neo.ClientError.Database.DatabaseNotFound", "blah"); - when(sessionMock.run(any(Statement.class))) + when(sessionMock.run(any(Query.class))) .thenThrow(databaseNotFound) .thenReturn(resultMock); @@ -149,7 +150,7 @@ public void closeTransactionAfterRollback() throws CommandException { @Test public void exceptionsFromSilentDisconnectAreSuppressedToReportOriginalErrors() throws CommandException { Session session = mock(Session.class); - StatementResult resultMock = mock(StatementResult.class); + Result resultMock = mock(Result.class); RuntimeException originalException = new RuntimeException("original exception"); RuntimeException thrownFromSilentDisconnect = new RuntimeException("exception from silent disconnect"); @@ -211,7 +212,7 @@ public void beginNeedsToInitialiseTransactionStatements() throws CommandExceptio @Test public void commitPurgesTheTransactionStatementsAndCollectsResults() throws CommandException { Session sessionMock = mock(Session.class); - Driver driverMock = stubResultSummaryInAnOpenSession(mock(StatementResult.class), sessionMock, "neo4j-version"); + Driver driverMock = stubResultSummaryInAnOpenSession(mock(Result.class), sessionMock, "neo4j-version"); Record record1 = mock(Record.class); Record record2 = mock(Record.class); @@ -287,7 +288,7 @@ public void shouldExecuteInTransactionIfOpen() throws CommandException { @Test public void shouldRunCypherQuery() throws CommandException { Session sessionMock = mock(Session.class); - StatementResult resultMock = mock(StatementResult.class); + Result resultMock = mock(Result.class); Record recordMock = mock(Record.class); Value valueMock = mock(Value.class); @@ -297,7 +298,7 @@ public void shouldRunCypherQuery() throws CommandException { when(valueMock.toString()).thenReturn("999"); when(recordMock.get(0)).thenReturn(valueMock); - when(sessionMock.run(any(Statement.class))).thenReturn(resultMock); + when(sessionMock.run(any(Query.class))).thenReturn(resultMock); OfflineBoltStateHandler boltStateHandler = new OfflineBoltStateHandler(driverMock); @@ -305,7 +306,7 @@ public void shouldRunCypherQuery() throws CommandException { BoltResult boltResult = boltStateHandler.runCypher("RETURN 999", new HashMap<>()).get(); - verify(sessionMock).run(any(Statement.class)); + verify(sessionMock).run(any(Query.class)); assertEquals("999", boltResult.getRecords().get(0).get(0).toString()); } @@ -313,7 +314,7 @@ public void shouldRunCypherQuery() throws CommandException { @Test public void triesAgainOnSessionExpired() throws Exception { Session sessionMock = mock(Session.class); - StatementResult resultMock = mock(StatementResult.class); + Result resultMock = mock(Result.class); Record recordMock = mock(Record.class); Value valueMock = mock(Value.class); @@ -323,7 +324,7 @@ public void triesAgainOnSessionExpired() throws Exception { when(valueMock.toString()).thenReturn("999"); when(recordMock.get(0)).thenReturn(valueMock); - when(sessionMock.run(any(Statement.class))) + when(sessionMock.run(any(Query.class))) .thenThrow(new SessionExpiredException("leaderswitch")) .thenReturn(resultMock); @@ -334,7 +335,7 @@ public void triesAgainOnSessionExpired() throws Exception { new HashMap<>()).get(); verify(driverMock, times(2)).session(any()); - verify(sessionMock, times(2)).run(any(Statement.class)); + verify(sessionMock, times(2)).run(any(Query.class)); assertEquals("999", boltResult.getRecords().get(0).get(0).toString()); } @@ -364,7 +365,7 @@ public void canOnlyConnectOnce() throws CommandException { public void resetSessionOnReset() throws Exception { // given Session sessionMock = mock(Session.class); - Driver driverMock = stubResultSummaryInAnOpenSession(mock(StatementResult.class), sessionMock, "neo4j-version"); + Driver driverMock = stubResultSummaryInAnOpenSession(mock(Result.class), sessionMock, "neo4j-version"); OfflineBoltStateHandler boltStateHandler = new OfflineBoltStateHandler(driverMock); @@ -415,11 +416,11 @@ public void turnOnEncryptionIfRequested() throws CommandException { assertTrue(provider.config.encrypted()); } - private Driver stubResultSummaryInAnOpenSession(StatementResult resultMock, Session sessionMock, String version) { + private Driver stubResultSummaryInAnOpenSession(Result resultMock, Session sessionMock, String version) { return stubResultSummaryInAnOpenSession(resultMock, sessionMock, version, DEFAULT_DEFAULT_DB_NAME); } - private Driver stubResultSummaryInAnOpenSession(StatementResult resultMock, Session sessionMock, String version, String databaseName) { + private Driver stubResultSummaryInAnOpenSession(Result resultMock, Session sessionMock, String version, String databaseName) { Driver driverMock = mock(Driver.class); ResultSummary resultSummary = mock(ResultSummary.class); ServerInfo serverInfo = mock(ServerInfo.class); diff --git a/cypher-shell/src/test/java/org/neo4j/shell/test/bolt/FakeStatementResult.java b/cypher-shell/src/test/java/org/neo4j/shell/test/bolt/FakeResult.java similarity index 88% rename from cypher-shell/src/test/java/org/neo4j/shell/test/bolt/FakeStatementResult.java rename to cypher-shell/src/test/java/org/neo4j/shell/test/bolt/FakeResult.java index a7af7c2b..6c13f9ea 100644 --- a/cypher-shell/src/test/java/org/neo4j/shell/test/bolt/FakeStatementResult.java +++ b/cypher-shell/src/test/java/org/neo4j/shell/test/bolt/FakeResult.java @@ -1,12 +1,5 @@ package org.neo4j.shell.test.bolt; -import org.neo4j.driver.Record; -import org.neo4j.driver.StatementResult; -import org.neo4j.driver.exceptions.NoSuchRecordException; -import org.neo4j.driver.summary.ResultSummary; -import org.neo4j.shell.test.Util; - -import javax.annotation.Nonnull; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -15,16 +8,24 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.Stream; +import javax.annotation.Nonnull; + +import org.neo4j.driver.Record; +import org.neo4j.driver.Result; +import org.neo4j.driver.exceptions.NoSuchRecordException; +import org.neo4j.driver.summary.ResultSummary; +import org.neo4j.shell.test.Util; /** - * A fake StatementResult with fake records and fake values + * A fake Result with fake records and fake values */ -class FakeStatementResult implements StatementResult { +class FakeResult implements Result +{ private final List records; private int currentRecord = -1; - FakeStatementResult() { + FakeResult() { records = new ArrayList<>(); } @@ -81,7 +82,7 @@ public ResultSummary consume() { /** * Supports fake parsing of very limited cypher statements, only for basic test purposes */ - static FakeStatementResult parseStatement(@Nonnull final String statement) { + static FakeResult parseStatement(@Nonnull final String statement) { Pattern returnAsPattern = Pattern.compile("^return (.*) as (.*)$", Pattern.CASE_INSENSITIVE); Pattern returnPattern = Pattern.compile("^return (.*)$", Pattern.CASE_INSENSITIVE); @@ -95,7 +96,7 @@ static FakeStatementResult parseStatement(@Nonnull final String statement) { if (m.groupCount() > 1) { key = m.group(2); } - FakeStatementResult statementResult = new FakeStatementResult(); + FakeResult statementResult = new FakeResult(); statementResult.records.add(FakeRecord.of(key, value)); return statementResult; } diff --git a/cypher-shell/src/test/java/org/neo4j/shell/test/bolt/FakeResultSummary.java b/cypher-shell/src/test/java/org/neo4j/shell/test/bolt/FakeResultSummary.java index e15cebfd..6e89b3f4 100644 --- a/cypher-shell/src/test/java/org/neo4j/shell/test/bolt/FakeResultSummary.java +++ b/cypher-shell/src/test/java/org/neo4j/shell/test/bolt/FakeResultSummary.java @@ -1,19 +1,26 @@ package org.neo4j.shell.test.bolt; -import org.neo4j.driver.internal.summary.InternalSummaryCounters; -import org.neo4j.driver.Statement; -import org.neo4j.driver.summary.*; -import org.neo4j.shell.test.Util; - import java.util.List; import java.util.concurrent.TimeUnit; +import org.neo4j.driver.Query; +import org.neo4j.driver.internal.summary.InternalSummaryCounters; +import org.neo4j.driver.summary.DatabaseInfo; +import org.neo4j.driver.summary.Notification; +import org.neo4j.driver.summary.Plan; +import org.neo4j.driver.summary.ProfiledPlan; +import org.neo4j.driver.summary.QueryType; +import org.neo4j.driver.summary.ResultSummary; +import org.neo4j.driver.summary.ServerInfo; +import org.neo4j.driver.summary.SummaryCounters; +import org.neo4j.shell.test.Util; + /** * A fake result summary */ class FakeResultSummary implements ResultSummary { @Override - public Statement statement() { + public Query query() { throw new Util.NotImplementedYetException("Not implemented yet"); } @@ -23,7 +30,7 @@ public SummaryCounters counters() { } @Override - public StatementType statementType() { + public QueryType queryType() { throw new Util.NotImplementedYetException("Not implemented yet"); } diff --git a/cypher-shell/src/test/java/org/neo4j/shell/test/bolt/FakeSession.java b/cypher-shell/src/test/java/org/neo4j/shell/test/bolt/FakeSession.java index b60fdae8..91fde861 100644 --- a/cypher-shell/src/test/java/org/neo4j/shell/test/bolt/FakeSession.java +++ b/cypher-shell/src/test/java/org/neo4j/shell/test/bolt/FakeSession.java @@ -1,10 +1,17 @@ package org.neo4j.shell.test.bolt; -import org.neo4j.driver.*; -import org.neo4j.driver.Bookmark; - import java.util.Map; +import org.neo4j.driver.Bookmark; +import org.neo4j.driver.Query; +import org.neo4j.driver.Record; +import org.neo4j.driver.Result; +import org.neo4j.driver.Session; +import org.neo4j.driver.Transaction; +import org.neo4j.driver.TransactionConfig; +import org.neo4j.driver.TransactionWork; +import org.neo4j.driver.Value; + /** * A fake session which returns fake StatementResults */ @@ -42,18 +49,18 @@ public T writeTransaction(TransactionWork work, TransactionConfig config) } @Override - public StatementResult run(String statement, TransactionConfig config) { - return FakeStatementResult.parseStatement(statement); + public Result run(String statement, TransactionConfig config) { + return FakeResult.parseStatement(statement); } @Override - public StatementResult run(String statement, Map parameters, TransactionConfig config) { - return FakeStatementResult.parseStatement(statement); + public Result run(String statement, Map parameters, TransactionConfig config) { + return FakeResult.parseStatement(statement); } @Override - public StatementResult run(Statement statement, TransactionConfig config) { - return new FakeStatementResult(); + public Result run(Query statement, TransactionConfig config) { + return new FakeResult(); } @Override @@ -76,27 +83,27 @@ public void close() { } @Override - public StatementResult run(String statementTemplate, Value parameters) { - return FakeStatementResult.parseStatement(statementTemplate); + public Result run(String statementTemplate, Value parameters) { + return FakeResult.parseStatement(statementTemplate); } @Override - public StatementResult run(String statementTemplate, Map statementParameters) { - return FakeStatementResult.parseStatement(statementTemplate); + public Result run(String statementTemplate, Map statementParameters) { + return FakeResult.parseStatement(statementTemplate); } @Override - public StatementResult run(String statementTemplate, Record statementParameters) { - return FakeStatementResult.parseStatement(statementTemplate); + public Result run(String statementTemplate, Record statementParameters) { + return FakeResult.parseStatement(statementTemplate); } @Override - public StatementResult run(String statementTemplate) { - return FakeStatementResult.parseStatement(statementTemplate); + public Result run(String statementTemplate) { + return FakeResult.parseStatement(statementTemplate); } @Override - public StatementResult run(Statement statement) { - return new FakeStatementResult(); + public Result run(Query statement) { + return new FakeResult(); } }