Skip to content

Commit

Permalink
Update grammar
Browse files Browse the repository at this point in the history
  • Loading branch information
costin committed Jun 4, 2024
1 parent 1bcb7dd commit 9d97583
Show file tree
Hide file tree
Showing 15 changed files with 1,197 additions and 1,168 deletions.
29 changes: 15 additions & 14 deletions x-pack/plugin/esql/src/main/antlr/EsqlBaseLexer.g4
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,15 @@ WS
: [ \r\n\t]+ -> channel(HIDDEN)
;

fragment INDEX_UNQUOTED_IDENTIFIER_PART
: ~[=`|,[\]/ \t\r\n]
// in 8.14 ` were not allowed
// this has been relaxed in 8.15 since " is used for quoting
fragment UNQUOTED_SOURCE_PART
: ~["=|,[\]/ \t\r\n]
| '/' ~[*/] // allow single / but not followed by another / or * which would start a comment
;
INDEX_UNQUOTED_IDENTIFIER
: INDEX_UNQUOTED_IDENTIFIER_PART+
UNQUOTED_SOURCE
: UNQUOTED_SOURCE_PART+
;
//
Expand Down Expand Up @@ -199,12 +201,10 @@ FROM_OPENING_BRACKET : OPENING_BRACKET -> type(OPENING_BRACKET);
FROM_CLOSING_BRACKET : CLOSING_BRACKET -> type(CLOSING_BRACKET);
FROM_COMMA : COMMA -> type(COMMA);
FROM_ASSIGN : ASSIGN -> type(ASSIGN);

METADATA : 'metadata';
FROM_INDEX_UNQUOTED_IDENTIFIER
: INDEX_UNQUOTED_IDENTIFIER -> type(INDEX_UNQUOTED_IDENTIFIER)
;
FROM_UNQUOTED_SOURCE : UNQUOTED_SOURCE -> type(UNQUOTED_SOURCE);
FROM_QUOTED_SOURCE : QUOTED_STRING -> type(QUOTED_STRING);
FROM_LINE_COMMENT
: LINE_COMMENT -> channel(HIDDEN)
Expand Down Expand Up @@ -295,6 +295,9 @@ ENRICH_POLICY_NAME
: (ENRICH_POLICY_NAME_BODY+ COLON)? ENRICH_POLICY_NAME_BODY+
;

ENRICH_UNQUOTED_SOURCE : UNQUOTED_SOURCE -> type(UNQUOTED_SOURCE);
ENRICH_QUOTED_SOURCE : QUOTED_STRING -> type(QUOTED_STRING);

ENRICH_MODE_UNQUOTED_VALUE
: ENRICH_POLICY_NAME -> type(ENRICH_POLICY_NAME)
;
Expand Down Expand Up @@ -347,9 +350,8 @@ LOOKUP_COMMA : COMMA -> type(COMMA);
LOOKUP_DOT: DOT -> type(DOT);
LOOKUP_ON : ON -> type(ON), pushMode(LOOKUP_FIELD_MODE);

LOOKUP_INDEX_UNQUOTED_IDENTIFIER
: INDEX_UNQUOTED_IDENTIFIER -> type(INDEX_UNQUOTED_IDENTIFIER)
;
LOOKUP_UNQUOTED_SOURCE: UNQUOTED_SOURCE -> type(UNQUOTED_SOURCE);
LOOKUP_QUOTED_SOURCE : QUOTED_STRING -> type(QUOTED_STRING);

LOOKUP_LINE_COMMENT
: LINE_COMMENT -> channel(HIDDEN)
Expand Down Expand Up @@ -476,9 +478,8 @@ SETTING_WS
mode METRICS_MODE;
METRICS_PIPE : PIPE -> type(PIPE), popMode;

METRICS_INDEX_UNQUOTED_IDENTIFIER
: INDEX_UNQUOTED_IDENTIFIER -> type(INDEX_UNQUOTED_IDENTIFIER), popMode, pushMode(CLOSING_METRICS_MODE)
;
METRICS_UNQUOTED_SOURCE: UNQUOTED_SOURCE -> type(UNQUOTED_SOURCE), popMode, pushMode(CLOSING_METRICS_MODE);
METRICS_QUOTED_SOURCE : QUOTED_STRING -> type(QUOTED_STRING), popMode, pushMode(CLOSING_METRICS_MODE);

METRICS_LINE_COMMENT
: LINE_COMMENT -> channel(HIDDEN)
Expand Down
2 changes: 1 addition & 1 deletion x-pack/plugin/esql/src/main/antlr/EsqlBaseLexer.tokens

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 7 additions & 6 deletions x-pack/plugin/esql/src/main/antlr/EsqlBaseParser.g4
Original file line number Diff line number Diff line change
Expand Up @@ -106,11 +106,12 @@ field
;

fromCommand
: FROM indexIdentifier (COMMA indexIdentifier)* metadata?
: FROM indexString (COMMA indexString)* metadata?
;

indexIdentifier
: INDEX_UNQUOTED_IDENTIFIER
indexString
: UNQUOTED_SOURCE
| QUOTED_STRING
;

metadata
Expand All @@ -119,15 +120,15 @@ metadata
;

metadataOption
: METADATA indexIdentifier (COMMA indexIdentifier)*
: METADATA UNQUOTED_SOURCE (COMMA UNQUOTED_SOURCE)*
;

deprecated_metadata
: OPENING_BRACKET metadataOption CLOSING_BRACKET
;

metricsCommand
: METRICS indexIdentifier (COMMA indexIdentifier)* aggregates=fields? (BY grouping=fields)?
: METRICS indexString (COMMA indexString)* aggregates=fields? (BY grouping=fields)?
;

evalCommand
Expand Down Expand Up @@ -275,5 +276,5 @@ enrichWithClause
;

lookupCommand
: LOOKUP tableName=INDEX_UNQUOTED_IDENTIFIER ON matchFields=qualifiedNamePatterns
: LOOKUP tableName=indexString ON matchFields=qualifiedNamePatterns
;
2 changes: 1 addition & 1 deletion x-pack/plugin/esql/src/main/antlr/EsqlBaseParser.tokens

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -25,23 +25,26 @@ public Source visitTerminal(TerminalNode node) {
}

static String unquoteString(Source source) {
String text = source.text();
if (text == null) {
return unquoteString(source.text());
}

static String unquoteString(String string) {
if (string == null) {
return null;
}

// unescaped strings can be interpreted directly
if (text.startsWith("\"\"\"")) {
return text.substring(3, text.length() - 3);
if (string.startsWith("\"\"\"")) {
return string.substring(3, string.length() - 3);
}

text = text.substring(1, text.length() - 1);
string = string.substring(1, string.length() - 1);
StringBuilder sb = new StringBuilder();

for (int i = 0; i < text.length();) {
if (text.charAt(i) == '\\') {
for (int i = 0; i < string.length();) {
if (string.charAt(i) == '\\') {
// ANTLR4 Grammar guarantees there is always a character after the `\`
switch (text.charAt(++i)) {
switch (string.charAt(++i)) {
case 't' -> sb.append('\t');
case 'n' -> sb.append('\n');
case 'r' -> sb.append('\r');
Expand All @@ -51,11 +54,11 @@ static String unquoteString(Source source) {
// will be interpreted as regex, so we have to escape it
default ->
// unknown escape sequence, pass through as-is, e.g: `...\w...`
sb.append('\\').append(text.charAt(i));
sb.append('\\').append(string.charAt(i));
}
i++;
} else {
sb.append(text.charAt(i++));
sb.append(string.charAt(i++));
}
}
return sb.toString();
Expand Down

Large diffs are not rendered by default.

Loading

0 comments on commit 9d97583

Please sign in to comment.