Skip to content

Commit aaea48d

Browse files
committed
SQL: Allow whitespaces in escape patterns (#47577)
Previously, we supported only the format `{fn <FUNCTION_NAME>()}` but other DBs like MSSQL, DB2, MariaDB/MySQL alos allow whitespaces between `{` and `fn`. Furhermore, also some applications - like PowerBI - generate escape sequences with spaces: `select { fn name(params) } etc.` Add support for white spaces between `{` and the escape pattern definition like `fn`, `ts`, `d`, `guid` etc. Closes: #47401 (cherry picked from commit 08a22d0)
1 parent e86b2da commit aaea48d

File tree

6 files changed

+605
-584
lines changed

6 files changed

+605
-584
lines changed

x-pack/plugin/sql/src/main/antlr/SqlBase.g4

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ pattern
201201

202202
patternEscape
203203
: ESCAPE escape=string
204-
| ESCAPE_ESC escape=string '}'
204+
| ESCAPE_ESC escape=string ESC_END
205205
;
206206

207207
valueExpression
@@ -258,7 +258,7 @@ extractTemplate
258258

259259
functionExpression
260260
: functionTemplate
261-
| FUNCTION_ESC functionTemplate '}'
261+
| FUNCTION_ESC functionTemplate ESC_END
262262
;
263263

264264
functionTemplate
@@ -461,15 +461,16 @@ YEAR: 'YEAR';
461461
YEARS: 'YEARS';
462462

463463
// Escaped Sequence
464-
ESCAPE_ESC: '{ESCAPE';
465-
FUNCTION_ESC: '{FN';
466-
LIMIT_ESC:'{LIMIT';
467-
DATE_ESC: '{D';
468-
TIME_ESC: '{T';
469-
TIMESTAMP_ESC: '{TS';
464+
ESCAPE_ESC: ESC_START 'ESCAPE';
465+
FUNCTION_ESC: ESC_START 'FN';
466+
LIMIT_ESC: ESC_START 'LIMIT';
467+
DATE_ESC: ESC_START 'D';
468+
TIME_ESC: ESC_START 'T';
469+
TIMESTAMP_ESC: ESC_START 'TS';
470470
// mapped to string literal
471-
GUID_ESC: '{GUID';
471+
GUID_ESC: ESC_START 'GUID';
472472

473+
ESC_START: '{' (WS)*;
473474
ESC_END: '}';
474475

475476
// Operators

x-pack/plugin/sql/src/main/antlr/SqlBase.tokens

Lines changed: 47 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -104,36 +104,37 @@ DATE_ESC=103
104104
TIME_ESC=104
105105
TIMESTAMP_ESC=105
106106
GUID_ESC=106
107-
ESC_END=107
108-
EQ=108
109-
NULLEQ=109
110-
NEQ=110
111-
LT=111
112-
LTE=112
113-
GT=113
114-
GTE=114
115-
PLUS=115
116-
MINUS=116
117-
ASTERISK=117
118-
SLASH=118
119-
PERCENT=119
120-
CAST_OP=120
121-
CONCAT=121
122-
DOT=122
123-
PARAM=123
124-
STRING=124
125-
INTEGER_VALUE=125
126-
DECIMAL_VALUE=126
127-
IDENTIFIER=127
128-
DIGIT_IDENTIFIER=128
129-
TABLE_IDENTIFIER=129
130-
QUOTED_IDENTIFIER=130
131-
BACKQUOTED_IDENTIFIER=131
132-
SIMPLE_COMMENT=132
133-
BRACKETED_COMMENT=133
134-
WS=134
135-
UNRECOGNIZED=135
136-
DELIMITER=136
107+
ESC_START=107
108+
ESC_END=108
109+
EQ=109
110+
NULLEQ=110
111+
NEQ=111
112+
LT=112
113+
LTE=113
114+
GT=114
115+
GTE=115
116+
PLUS=116
117+
MINUS=117
118+
ASTERISK=118
119+
SLASH=119
120+
PERCENT=120
121+
CAST_OP=121
122+
CONCAT=122
123+
DOT=123
124+
PARAM=124
125+
STRING=125
126+
INTEGER_VALUE=126
127+
DECIMAL_VALUE=127
128+
IDENTIFIER=128
129+
DIGIT_IDENTIFIER=129
130+
TABLE_IDENTIFIER=130
131+
QUOTED_IDENTIFIER=131
132+
BACKQUOTED_IDENTIFIER=132
133+
SIMPLE_COMMENT=133
134+
BRACKETED_COMMENT=134
135+
WS=135
136+
UNRECOGNIZED=136
137+
DELIMITER=137
137138
'('=1
138139
')'=2
139140
','=3
@@ -233,26 +234,19 @@ DELIMITER=136
233234
'WITH'=97
234235
'YEAR'=98
235236
'YEARS'=99
236-
'{ESCAPE'=100
237-
'{FN'=101
238-
'{LIMIT'=102
239-
'{D'=103
240-
'{T'=104
241-
'{TS'=105
242-
'{GUID'=106
243-
'}'=107
244-
'='=108
245-
'<=>'=109
246-
'<'=111
247-
'<='=112
248-
'>'=113
249-
'>='=114
250-
'+'=115
251-
'-'=116
252-
'*'=117
253-
'/'=118
254-
'%'=119
255-
'::'=120
256-
'||'=121
257-
'.'=122
258-
'?'=123
237+
'}'=108
238+
'='=109
239+
'<=>'=110
240+
'<'=112
241+
'<='=113
242+
'>'=114
243+
'>='=115
244+
'+'=116
245+
'-'=117
246+
'*'=118
247+
'/'=119
248+
'%'=120
249+
'::'=121
250+
'||'=122
251+
'.'=123
252+
'?'=124

x-pack/plugin/sql/src/main/antlr/SqlBaseLexer.tokens

Lines changed: 46 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -104,35 +104,36 @@ DATE_ESC=103
104104
TIME_ESC=104
105105
TIMESTAMP_ESC=105
106106
GUID_ESC=106
107-
ESC_END=107
108-
EQ=108
109-
NULLEQ=109
110-
NEQ=110
111-
LT=111
112-
LTE=112
113-
GT=113
114-
GTE=114
115-
PLUS=115
116-
MINUS=116
117-
ASTERISK=117
118-
SLASH=118
119-
PERCENT=119
120-
CAST_OP=120
121-
CONCAT=121
122-
DOT=122
123-
PARAM=123
124-
STRING=124
125-
INTEGER_VALUE=125
126-
DECIMAL_VALUE=126
127-
IDENTIFIER=127
128-
DIGIT_IDENTIFIER=128
129-
TABLE_IDENTIFIER=129
130-
QUOTED_IDENTIFIER=130
131-
BACKQUOTED_IDENTIFIER=131
132-
SIMPLE_COMMENT=132
133-
BRACKETED_COMMENT=133
134-
WS=134
135-
UNRECOGNIZED=135
107+
ESC_START=107
108+
ESC_END=108
109+
EQ=109
110+
NULLEQ=110
111+
NEQ=111
112+
LT=112
113+
LTE=113
114+
GT=114
115+
GTE=115
116+
PLUS=116
117+
MINUS=117
118+
ASTERISK=118
119+
SLASH=119
120+
PERCENT=120
121+
CAST_OP=121
122+
CONCAT=122
123+
DOT=123
124+
PARAM=124
125+
STRING=125
126+
INTEGER_VALUE=126
127+
DECIMAL_VALUE=127
128+
IDENTIFIER=128
129+
DIGIT_IDENTIFIER=129
130+
TABLE_IDENTIFIER=130
131+
QUOTED_IDENTIFIER=131
132+
BACKQUOTED_IDENTIFIER=132
133+
SIMPLE_COMMENT=133
134+
BRACKETED_COMMENT=134
135+
WS=135
136+
UNRECOGNIZED=136
136137
'('=1
137138
')'=2
138139
','=3
@@ -232,26 +233,19 @@ UNRECOGNIZED=135
232233
'WITH'=97
233234
'YEAR'=98
234235
'YEARS'=99
235-
'{ESCAPE'=100
236-
'{FN'=101
237-
'{LIMIT'=102
238-
'{D'=103
239-
'{T'=104
240-
'{TS'=105
241-
'{GUID'=106
242-
'}'=107
243-
'='=108
244-
'<=>'=109
245-
'<'=111
246-
'<='=112
247-
'>'=113
248-
'>='=114
249-
'+'=115
250-
'-'=116
251-
'*'=117
252-
'/'=118
253-
'%'=119
254-
'::'=120
255-
'||'=121
256-
'.'=122
257-
'?'=123
236+
'}'=108
237+
'='=109
238+
'<=>'=110
239+
'<'=112
240+
'<='=113
241+
'>'=114
242+
'>='=115
243+
'+'=116
244+
'-'=117
245+
'*'=118
246+
'/'=119
247+
'%'=120
248+
'::'=121
249+
'||'=122
250+
'.'=123
251+
'?'=124

0 commit comments

Comments
 (0)