Skip to content

Commit 08a22d0

Browse files
authored
SQL: Allow whitespaces in escape patterns (#47577)
* SQL: Allow whitespaces in escape patterns 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 * Fix imports
1 parent 73cd9e0 commit 08a22d0

File tree

6 files changed

+638
-618
lines changed

6 files changed

+638
-618
lines changed

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

+10-9
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ pattern
217217

218218
patternEscape
219219
: ESCAPE escape=string
220-
| ESCAPE_ESC escape=string '}'
220+
| ESCAPE_ESC escape=string ESC_END
221221
;
222222

223223
valueExpression
@@ -274,7 +274,7 @@ extractTemplate
274274

275275
functionExpression
276276
: functionTemplate
277-
| FUNCTION_ESC functionTemplate '}'
277+
| FUNCTION_ESC functionTemplate ESC_END
278278
;
279279

280280
functionTemplate
@@ -480,15 +480,16 @@ YEAR: 'YEAR';
480480
YEARS: 'YEARS';
481481

482482
// Escaped Sequence
483-
ESCAPE_ESC: '{ESCAPE';
484-
FUNCTION_ESC: '{FN';
485-
LIMIT_ESC:'{LIMIT';
486-
DATE_ESC: '{D';
487-
TIME_ESC: '{T';
488-
TIMESTAMP_ESC: '{TS';
483+
ESCAPE_ESC: ESC_START 'ESCAPE';
484+
FUNCTION_ESC: ESC_START 'FN';
485+
LIMIT_ESC: ESC_START 'LIMIT';
486+
DATE_ESC: ESC_START 'D';
487+
TIME_ESC: ESC_START 'T';
488+
TIMESTAMP_ESC: ESC_START 'TS';
489489
// mapped to string literal
490-
GUID_ESC: '{GUID';
490+
GUID_ESC: ESC_START 'GUID';
491491

492+
ESC_START: '{' (WS)*;
492493
ESC_END: '}';
493494

494495
// Operators

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

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

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

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

0 commit comments

Comments
 (0)