SQL: Teach the CLI to ignore empty commands (#30265)

Cause the CLI to ignore commands that are empty or consist only of
newlines. This is a fairly standard thing for SQL CLIs to do.

It looks like:
```
sql> ;
sql>
   |
   | ;
sql> exit;
Bye!
```

I think I *could* have implemented this with a `CliCommand` that throws
out empty string but it felt simpler to bake it in to the `CliRepl`.

Closes #30000
This commit is contained in:
Nik Everett 2018-05-01 13:17:24 -04:00 committed by GitHub
parent 7933f5e28e
commit abe797bd42
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 0 deletions

View File

@ -56,6 +56,11 @@ public class CliRepl {
multiLine.setLength(0);
}
// Skip empty commands
if (line.isEmpty()) {
continue;
}
// special case to handle exit
if (isExit(line)) {
cliTerminal.line().em("Bye!").ln();

View File

@ -38,6 +38,28 @@ public class CliReplTests extends ESTestCase {
verifyNoMoreInteractions(mockCommand, mockSession);
}
/**
* Test that empty commands are skipped. This includes commands that are
* just new lines.
*/
public void testEmptyNotSent() {
CliTerminal cliTerminal = new TestTerminal(
";",
"",
"",
";",
"exit;"
);
CliSession mockSession = mock(CliSession.class);
CliCommand mockCommand = mock(CliCommand.class);
CliRepl cli = new CliRepl(cliTerminal, mockSession, mockCommand);
cli.execute();
verify(mockCommand, times(1)).handle(cliTerminal, mockSession, "logo");
verifyNoMoreInteractions(mockSession, mockCommand);
}
public void testFatalCliExceptionHandling() throws Exception {
CliTerminal cliTerminal = new TestTerminal(