|
25 | 25 | import java.nio.file.Paths; |
26 | 26 | import java.text.MessageFormat; |
27 | 27 | import java.util.ArrayList; |
| 28 | +import java.util.Arrays; |
28 | 29 | import java.util.LinkedList; |
29 | 30 | import java.util.List; |
30 | 31 | import java.util.ListIterator; |
|
53 | 54 | import org.jline.reader.impl.completer.ArgumentCompleter; |
54 | 55 | import org.jline.reader.impl.completer.StringsCompleter; |
55 | 56 | import org.jline.reader.impl.history.DefaultHistory; |
| 57 | +import org.jline.reader.EOFError; |
| 58 | +import org.jline.reader.ParsedLine; |
56 | 59 | import org.jline.terminal.Size; |
57 | 60 | import org.jline.terminal.Terminal; |
58 | 61 | import org.jline.terminal.TerminalBuilder; |
@@ -186,7 +189,7 @@ public Object eval(Reader reader, ScriptContext context) throws ScriptException |
186 | 189 | .terminal(terminal) |
187 | 190 | .option(Option.BRACKETED_PASTE, false) |
188 | 191 | .option(Option.HISTORY_IGNORE_SPACE, false) |
189 | | - .parser(new DefaultParser()) |
| 192 | + .parser(new CustomParser()) |
190 | 193 | .history(new DefaultHistory()) |
191 | 194 | .completer(new ArgumentCompleter(completors)) |
192 | 195 | .build(); |
@@ -297,6 +300,39 @@ public Object eval(Reader reader, ScriptContext context) throws ScriptException |
297 | 300 | } |
298 | 301 | } |
299 | 302 |
|
| 303 | + // multi input support |
| 304 | + private class CustomParser extends DefaultParser { |
| 305 | + |
| 306 | + @Override |
| 307 | + public ParsedLine parse(String line, int cursor, ParseContext context) { |
| 308 | + String[] needEndList = { |
| 309 | + "tql", |
| 310 | + "sql", |
| 311 | + "select", |
| 312 | + "insert", |
| 313 | + "update", |
| 314 | + "delete", |
| 315 | + "create", |
| 316 | + "alter", |
| 317 | + "set password", |
| 318 | + "drop", |
| 319 | + "grant", |
| 320 | + "revoke", |
| 321 | + "tqlexplain", |
| 322 | + "tqlanlyze" |
| 323 | + }; |
| 324 | + if (context == ParseContext.ACCEPT_LINE) { |
| 325 | + String[] checkCommand = line.trim().split(" "); |
| 326 | + if (Arrays.asList(needEndList).contains(checkCommand[0].toLowerCase())) { |
| 327 | + if (!line.trim().endsWith(";")) { |
| 328 | + throw new EOFError(-1, -1, "not end of statement"); |
| 329 | + } |
| 330 | + } |
| 331 | + } |
| 332 | + return super.parse(line, cursor, context); |
| 333 | + } |
| 334 | + } |
| 335 | + |
300 | 336 | private String readAdditionalLines(BufferedReader bufferedReader, String firstLine) |
301 | 337 | throws IOException { |
302 | 338 | StringBuilder builder = new StringBuilder(firstLine); |
|
0 commit comments