Skip to content
This repository was archived by the owner on Jul 6, 2023. It is now read-only.

Commit 95a41dd

Browse files
committed
update params display to show new params setting
1 parent 16202b5 commit 95a41dd

File tree

5 files changed

+57
-32
lines changed

5 files changed

+57
-32
lines changed

cypher-shell/src/integration-test/java/org/neo4j/shell/commands/CypherShellVerboseIntegrationTest.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,19 +170,22 @@ public void paramsAndListVariables() throws CommandException {
170170
assertTrue(shell.getAll().isEmpty());
171171

172172
long randomLong = System.currentTimeMillis();
173+
String stringInput = "\"randomString\"";
174+
shell.set("string", stringInput);
173175
Optional result = shell.set("bob", String.valueOf(randomLong));
174176
assertTrue(result.isPresent());
175177
assertEquals(randomLong, result.get());
176178

177-
shell.execute("RETURN { bob }");
179+
shell.execute("RETURN { bob }, $string");
178180

179181
ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class);
180182
verify(logger).printOut(captor.capture());
181183

182184
List<String> queryResult = captor.getAllValues();
183185
assertThat(queryResult.get(0), containsString("| { bob }"));
184-
assertThat(queryResult.get(0), containsString("\n| " + randomLong+ " |\n"));
186+
assertThat(queryResult.get(0), containsString("| " + randomLong + " | " + stringInput + " |"));
185187
assertEquals(randomLong, shell.getAll().get("bob"));
188+
assertEquals("randomString", shell.getAll().get("string"));
186189
}
187190

188191
@Test

cypher-shell/src/main/java/org/neo4j/shell/CypherShell.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,22 @@
1212
import org.neo4j.shell.state.BoltStateHandler;
1313

1414
import javax.annotation.Nonnull;
15+
import java.util.AbstractMap;
1516
import java.util.HashMap;
1617
import java.util.List;
1718
import java.util.Map;
1819
import java.util.Optional;
1920
import java.util.regex.Matcher;
2021
import java.util.regex.Pattern;
22+
import java.util.stream.Collectors;
2123

2224
/**
2325
* A possibly interactive shell for evaluating cypher statements.
2426
*/
2527
public class CypherShell implements StatementExecuter, Connector, TransactionHandler, VariableHolder {
2628
// Final space to catch newline
2729
protected static final Pattern cmdNamePattern = Pattern.compile("^\\s*(?<name>[^\\s]+)\\b(?<args>.*)\\s*$");
28-
protected final Map<String, Object> queryParams = new HashMap<>();
30+
protected final Map<String, AbstractMap.SimpleEntry<String, Object>> queryParams = new HashMap<>();
2931
private final Logger logger;
3032
private final BoltStateHandler boltStateHandler;
3133
private final PrettyPrinter prettyPrinter;
@@ -80,7 +82,7 @@ public void execute(@Nonnull final String cmdString) throws ExitException, Comma
8082
* @param cypher non-empty cypher text to executeLine
8183
*/
8284
protected void executeCypher(@Nonnull final String cypher) throws CommandException {
83-
final Optional<BoltResult> result = boltStateHandler.runCypher(cypher, queryParams);
85+
final Optional<BoltResult> result = boltStateHandler.runCypher(cypher, getAll());
8486
result.ifPresent(boltResult -> logger.printOut(prettyPrinter.format(boltResult)));
8587
}
8688

@@ -156,13 +158,13 @@ public Optional set(@Nonnull String name, @Nonnull String valueString) throws Co
156158
final BoltResult result = setParamsAndValidate(name, valueString);
157159
String parameterName = CypherVariablesFormatter.unescapedCypherVariable(name);
158160
final Object value = result.getRecords().get(0).get(parameterName).asObject();
159-
queryParams.put(parameterName, value);
161+
queryParams.put(parameterName, new AbstractMap.SimpleEntry<>(valueString, value));
160162
return Optional.ofNullable(value);
161163
}
162164

163165
private BoltResult setParamsAndValidate(@Nonnull String name, @Nonnull String valueString) throws CommandException {
164166
String cypher = "RETURN " + valueString + " as " + name;
165-
final Optional<BoltResult> result = boltStateHandler.runCypher(cypher, queryParams);
167+
final Optional<BoltResult> result = boltStateHandler.runCypher(cypher, getAll());
166168
if (!result.isPresent() || result.get().getRecords().isEmpty()) {
167169
throw new CommandException("Failed to set value of parameter");
168170
}
@@ -172,6 +174,16 @@ private BoltResult setParamsAndValidate(@Nonnull String name, @Nonnull String va
172174
@Override
173175
@Nonnull
174176
public Map<String, Object> getAll() {
177+
return queryParams.entrySet()
178+
.stream()
179+
.collect(Collectors.toMap(
180+
Map.Entry::getKey,
181+
value -> value.getValue().getValue()));
182+
}
183+
184+
@Nonnull
185+
@Override
186+
public Map<String, AbstractMap.SimpleEntry<String, Object>> getAllAsUserInput() {
175187
return queryParams;
176188
}
177189

cypher-shell/src/main/java/org/neo4j/shell/VariableHolder.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import org.neo4j.shell.exception.CommandException;
44

55
import javax.annotation.Nonnull;
6+
import java.util.AbstractMap;
67
import java.util.Map;
78
import java.util.Optional;
89

@@ -22,4 +23,10 @@ public interface VariableHolder {
2223
*/
2324
@Nonnull
2425
Map<String, Object> getAll();
26+
27+
/**
28+
* @return map of all currently set variables and their values corresponding to the user valueString
29+
*/
30+
@Nonnull
31+
Map<String, AbstractMap.SimpleEntry<String, Object>> getAllAsUserInput();
2532
}

cypher-shell/src/main/java/org/neo4j/shell/commands/Params.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,21 +78,21 @@ public void execute(@Nonnull final String argString) throws ExitException, Comma
7878

7979
private void listParam(@Nonnull String name) throws CommandException {
8080
String parameterName = CypherVariablesFormatter.unescapedCypherVariable(name);
81-
if (!variableHolder.getAll().containsKey(parameterName)) {
81+
if (!this.variableHolder.getAllAsUserInput().containsKey(parameterName)) {
8282
throw new CommandException("Unknown parameter: " + name);
8383
}
84-
listParam(name.length(), name, variableHolder.getAll().get(parameterName));
84+
listParam(name.length(), name, this.variableHolder.getAllAsUserInput().get(parameterName).getKey());
8585
}
8686

8787
private void listParam(int leftColWidth, @Nonnull String key, @Nonnull Object value) {
88-
logger.printOut(String.format("%-" + leftColWidth + "s => %s", key, value));
88+
logger.printOut(String.format(":param %-" + leftColWidth + "s => %s", key, value));
8989
}
9090

9191
private void listAllParams() {
92-
List<String> keys = variableHolder.getAll().keySet().stream().sorted().collect(Collectors.toList());
92+
List<String> keys = variableHolder.getAllAsUserInput().keySet().stream().sorted().collect(Collectors.toList());
9393

9494
int leftColWidth = keys.stream().map((s) -> escape(s).length()).reduce(0, Math::max);
9595

96-
keys.stream().forEach(k -> listParam(leftColWidth, escape(k), variableHolder.getAll().get(k)));
96+
keys.forEach(key -> listParam(leftColWidth, escape(key), variableHolder.getAllAsUserInput().get(key).getKey()));
9797
}
9898
}

cypher-shell/src/test/java/org/neo4j/shell/commands/ParamsTest.java

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.neo4j.shell.exception.CommandException;
99
import org.neo4j.shell.log.Logger;
1010

11+
import java.util.AbstractMap;
1112
import java.util.HashMap;
1213

1314
import static org.hamcrest.CoreMatchers.containsString;
@@ -21,7 +22,7 @@ public class ParamsTest {
2122
@Rule
2223
public final ExpectedException thrown = ExpectedException.none();
2324

24-
private HashMap<String, Object> vars;
25+
private HashMap<String, AbstractMap.SimpleEntry<String, Object>> vars;
2526
private Logger logger;
2627
private Params cmd;
2728

@@ -30,7 +31,7 @@ public void setup() throws CommandException {
3031
vars = new HashMap<>();
3132
logger = mock(Logger.class);
3233
VariableHolder shell = mock(VariableHolder.class);
33-
when(shell.getAll()).thenReturn(vars);
34+
when(shell.getAllAsUserInput()).thenReturn(vars);
3435
cmd = new Params(logger, shell);
3536
}
3637

@@ -52,72 +53,74 @@ public void helpNotNull() {
5253
@Test
5354
public void runCommand() throws CommandException {
5455
// given
55-
vars.put("var", 9);
56+
String var = "var";
57+
int value = 9;
58+
vars.put(var, new AbstractMap.SimpleEntry<>(String.valueOf(value), value));
5659
// when
5760
cmd.execute("");
5861
// then
59-
verify(logger).printOut("var => 9");
62+
verify(logger).printOut(":param var => 9");
6063
verifyNoMoreInteractions(logger);
6164
}
6265

6366
@Test
6467
public void runCommandAlignment() throws CommandException {
6568
// given
66-
vars.put("var", 9);
67-
vars.put("param", 99999);
69+
vars.put("var", new AbstractMap.SimpleEntry<>(String.valueOf(9), 9));
70+
vars.put("param", new AbstractMap.SimpleEntry<>(String.valueOf(99999), 99999));
6871
// when
6972
cmd.execute("");
7073
// then
71-
verify(logger).printOut("param => 99999");
72-
verify(logger).printOut("var => 9");
74+
verify(logger).printOut(":param param => 99999");
75+
verify(logger).printOut(":param var => 9");
7376
verifyNoMoreInteractions(logger);
7477
}
7578

7679
@Test
7780
public void runCommandWithArg() throws CommandException {
7881
// given
79-
vars.put("var", 9);
80-
vars.put("param", 9999);
82+
vars.put("var", new AbstractMap.SimpleEntry<>(String.valueOf(9), 9));
83+
vars.put("param", new AbstractMap.SimpleEntry<>(String.valueOf(9999), 9999));
8184
// when
8285
cmd.execute("var");
8386
// then
84-
verify(logger).printOut("var => 9");
87+
verify(logger).printOut(":param var => 9");
8588
verifyNoMoreInteractions(logger);
8689
}
8790

8891
@Test
8992
public void runCommandWithArgWithExtraSpace() throws CommandException {
9093
// given
91-
vars.put("var", 9);
92-
vars.put("param", 9999);
94+
vars.put("var", new AbstractMap.SimpleEntry<>(String.valueOf(9), 9));
95+
vars.put("param", new AbstractMap.SimpleEntry<>(String.valueOf(9999), 9999));
9396
// when
9497
cmd.execute(" var");
9598
// then
96-
verify(logger).printOut("var => 9");
99+
verify(logger).printOut(":param var => 9");
97100
verifyNoMoreInteractions(logger);
98101
}
99102

100103
@Test
101104
public void runCommandWithArgWithBackticks() throws CommandException {
102105
// given
103-
vars.put("var", 9);
104-
vars.put("param", 9999);
106+
vars.put("var", new AbstractMap.SimpleEntry<>(String.valueOf(9), 9));
107+
vars.put("param", new AbstractMap.SimpleEntry<>(String.valueOf(9999), 9999));
105108
// when
106109
cmd.execute("`var`");
107110
// then
108-
verify(logger).printOut("`var` => 9");
111+
verify(logger).printOut(":param `var` => 9");
109112
verifyNoMoreInteractions(logger);
110113
}
111114

112115
@Test
113116
public void runCommandWithSpecialCharacters() throws CommandException {
114117
// given
115-
vars.put("var `", 9);
116-
vars.put("param", 9999);
118+
vars.put("var `", new AbstractMap.SimpleEntry<>(String.valueOf(9), 9));
119+
vars.put("param", new AbstractMap.SimpleEntry<>(String.valueOf(9999), 9999));
117120
// when
118121
cmd.execute("`var ```");
119122
// then
120-
verify(logger).printOut("`var ``` => 9");
123+
verify(logger).printOut(":param `var ``` => 9");
121124
verifyNoMoreInteractions(logger);
122125
}
123126

@@ -127,7 +130,7 @@ public void runCommandWithUnknownArg() throws CommandException {
127130
thrown.expect(CommandException.class);
128131
thrown.expectMessage(containsString("Unknown parameter: bob"));
129132
// given
130-
vars.put("var", 9);
133+
vars.put("var", new AbstractMap.SimpleEntry<>(String.valueOf(9), 9));
131134
// when
132135
cmd.execute("bob");
133136
}

0 commit comments

Comments
 (0)