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 92f500e1..091804fe 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 @@ -164,9 +164,8 @@ private void reconnect(boolean keepBookmark) { driver.verifyConnectivity(); SessionConfig.Builder builder = SessionConfig.builder(); - builder.withDefaultAccessMode( AccessMode.WRITE ); - if ( !ABSENT_DB_NAME.equals( activeDatabaseNameAsSetByUser ) ) - { + builder.withDefaultAccessMode(AccessMode.WRITE); + if (!ABSENT_DB_NAME.equals(activeDatabaseNameAsSetByUser)) { builder.withDatabase( activeDatabaseNameAsSetByUser ); } if (session != null && keepBookmark) { @@ -184,9 +183,17 @@ private void reconnect(boolean keepBookmark) { resetActualDbName(); // Set this to null first in case run throws an exception StatementResult run = session.run(query); - ResultSummary summary = run.consume(); - this.version = summary.server().version(); - updateActualDbName(summary); + ResultSummary summary = null; + try { + summary = run.consume(); + } finally { + // Since run.consume() can throw the first time we have to go through this extra hoop to get the summary + if (summary == null) { + summary = run.consume(); + } + this.version = summary.server().version(); + updateActualDbName(summary); + } } @Nonnull diff --git a/cypher-shell/src/main/java/org/neo4j/shell/util/Versions.java b/cypher-shell/src/main/java/org/neo4j/shell/util/Versions.java index 3569c4a3..657a6aad 100644 --- a/cypher-shell/src/main/java/org/neo4j/shell/util/Versions.java +++ b/cypher-shell/src/main/java/org/neo4j/shell/util/Versions.java @@ -26,6 +26,9 @@ public static Version version(String version) { if (version == null) { throw new AssertionError("null is not a valid version string"); } + if (version.isEmpty()) { + return new Version(0, 0, 0); + } //remove -alpha, and -beta etc int offset = version.indexOf("-"); if (offset > 0) { diff --git a/cypher-shell/src/test/java/org/neo4j/shell/util/VersionsTest.java b/cypher-shell/src/test/java/org/neo4j/shell/util/VersionsTest.java new file mode 100644 index 00000000..6463f64c --- /dev/null +++ b/cypher-shell/src/test/java/org/neo4j/shell/util/VersionsTest.java @@ -0,0 +1,34 @@ +package org.neo4j.shell.util; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class VersionsTest +{ + @Test + public void shouldWorkForEmptyString() throws Exception { + assertEquals(0, Versions.version("").compareTo(Versions.version("0.0.0"))); + assertEquals(0, Versions.majorVersion("")); + assertEquals(0, Versions.minorVersion("")); + assertEquals(0, Versions.patch("")); + } + + @Test + public void shouldWorkForReleaseVersion() throws Exception { + String versionString = "3.4.5"; + assertEquals(0, Versions.version(versionString).compareTo(Versions.version("3.4.5"))); + assertEquals(3, Versions.majorVersion(versionString)); + assertEquals(4, Versions.minorVersion(versionString)); + assertEquals(5, Versions.patch(versionString)); + } + + @Test + public void shouldWorkForPreReleaseVersion() throws Exception { + String versionString = "3.4.55-beta99"; + assertEquals(0, Versions.version(versionString).compareTo(Versions.version("3.4.55"))); + assertEquals(3, Versions.majorVersion(versionString)); + assertEquals(4, Versions.minorVersion(versionString)); + assertEquals(55, Versions.patch(versionString)); + } +}