...
Page properties |
---|
...
|
...
|
...
...
|
...
|
POC Demo: https://asciinema.org/a/446247?speed=3.0jira/browse/FLINK-XXXX)
Released: <Flink Version>
Please keep the discussion on the mailing list rather than commenting on the wiki (wiki discussions get unwieldy fast).
...
- line numbers + editing query consuming more than screen space
- autopairing[6] for single quote, sql identifier quote, square and round brackets could be turn on/off via property
(requires update at least till 3.13.3) - Enabling/Disabling description for completion candidates via property. An example how it looks like is here [7]
Prompts
Prompts should be configured via property: both left and right prompts.
Implementation Implementation Details
Parsing
The main idea is to extend existing org.apache.flink.table.client.cli.SqlMultiLineParser . => No need to use Flink SQL parser
It should check the input if all quotes, comments, hints, brackets (square and round) are closed otherwise it throws new EOFError - normal behavior in jline in case input should be continued on a new line.
During parsing need to keep track of cursor states if it is a comment, keyword, quoted string.
...
Code Block | ||||
---|---|---|---|---|
| ||||
public enum BuiltInDialect { DEFAULT("FlinkSQLDefaultDialect", () -> SqlAbstractParserImpl.getSql92ReservedWordskeywords(), '`', '\'', "\"", Pair.of("/*", "*/"), Pair.of("/*+", "*/"), "--"); private final Supplier<Set<String>> keywords; private final char quote; private final char sqlIdentifierQuote; private final Pair<String, String> blockComments; private final Pair<String, String> hints; private final String lineComments; ... } |
So that means that adding a new dialect should be relatively simple.
Prompts
LineReader#readLine among other arguments has prompt and right prompt value.
Widgets
Jline allows to define widgets implementing org.jline.reader.Widget and bind them to key strokes.
...
Option | Default | Type | Description |
---|---|---|---|
sql-client.color-schema |
| Enum | Determine the color schema for syntax highlighting. Will contain names of available color schemas |
sql-client.autopairing | `true` | boolean | Determine whether autopairing is enabled or not. |
sql-client.completion-description | `false` | boolean | Determine whether description for completion candidates is enabled or not. |
sql-client.prompt.show-hint | `false` | boolean | Determine whether prompt shows hints about current input issue. For more detailed about prompt values see Supported prompt hint values in sql client |
sql-client.prompt.show-line-numbers | `false` | boolean | Determine whether prompt shows line numbers for multiline query. |
...
sql-client.prompt.mask |
`default` | String | Determine a mask to build left prompt | |
sql-client.rightprompt.mask | `default` | String | Determine a mask to build right prompt |
Supported prompt hint values in sql client
Prompt | Meaning | |||
---|---|---|---|---|
;> | Waiting for | Meaning | ;> | Waiting for the next line of multi-line query, waiting for completion of query with semicolon (;) |
'> | Waiting for the next line, waiting for a completion of string that began with a single quote (') | |||
`> | Waiting for the next line, waiting for a completion of string that began with a back tick (`) | |||
*\> | Waiting for the next line, waiting for completion of a multi-line comment that began with (/*) | |||
)> | Waiting for the next line, waiting for completion of a string that began with a round bracket ( | |||
]> | Waiting for the next line, waiting for completion of a string that began with a square bracket [ | |||
extra )> | There is an extra round bracket ), that is not opened with ( | |||
extra ]> | There is an extra square bracket ], that is not opened with [ | |||
extra *\> | There is an extra closing of multi-line comment *\, that is not opened with \* |
Supported prompt options (both for left and right prompts)
Option | Description |
---|---|
\c | Current catalog |
\d | Current database |
\:property_name : | The value of Flink property_name property |
\[ ... \] | Prompts can contain terminal control characters which, for example, change the color, background, or style of the prompt text. These non-printing control characters must be designated as invisible by surrounding them with \[ and \]. Multiple pairs of these can occur within the prompt. |
\{...\} | Datetime pattern to convert current datetime. Compatible with Java’s SimpleDateFormat. |
\D | The full current date (yyyy-MM-dd HH:mm:ss.SSS) |
\m | Minutes of the current time |
\O | The current month in three-letter format (Jan, Feb, …) |
\o | The current month in numeric format |
\P | am/pm |
\R | The current time, in 24-hour military time (0–23) |
\r | The current time, standard 12-hour time (1–12) |
\s | Seconds of the current time |
\w | The current day of the week in three-letter format (Mon, Tue, …) |
\Y | The current year, four digits |
\y | The current year, two digits |
\\ | A literal \ backslash character |
\x |
|
Compatibility, Deprecation, and Migration Plan
...