Skip to content

Commit c2583e5

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 5575c96 commit c2583e5

File tree

6 files changed

+561
-557
lines changed

6 files changed

+561
-557
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
@@ -255,7 +255,7 @@ extractTemplate
255255

256256
functionExpression
257257
: functionTemplate
258-
| FUNCTION_ESC functionTemplate '}'
258+
| FUNCTION_ESC functionTemplate ESC_END
259259
;
260260

261261
functionTemplate
@@ -446,15 +446,16 @@ YEAR: 'YEAR';
446446
YEARS: 'YEARS';
447447

448448
// Escaped Sequence
449-
ESCAPE_ESC: '{ESCAPE';
450-
FUNCTION_ESC: '{FN';
451-
LIMIT_ESC:'{LIMIT';
452-
DATE_ESC: '{D';
453-
TIME_ESC: '{T';
454-
TIMESTAMP_ESC: '{TS';
449+
ESCAPE_ESC: ESC_START 'ESCAPE';
450+
FUNCTION_ESC: ESC_START 'FN';
451+
LIMIT_ESC: ESC_START 'LIMIT';
452+
DATE_ESC: ESC_START 'D';
453+
TIME_ESC: ESC_START 'T';
454+
TIMESTAMP_ESC: ESC_START 'TS';
455455
// mapped to string literal
456-
GUID_ESC: '{GUID';
456+
GUID_ESC: ESC_START 'GUID';
457457

458+
ESC_START: '{' (WS)*;
458459
ESC_END: '}';
459460

460461
EQ : '=';

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

Lines changed: 45 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -96,35 +96,36 @@ DATE_ESC=95
9696
TIME_ESC=96
9797
TIMESTAMP_ESC=97
9898
GUID_ESC=98
99-
ESC_END=99
100-
EQ=100
101-
NULLEQ=101
102-
NEQ=102
103-
LT=103
104-
LTE=104
105-
GT=105
106-
GTE=106
107-
PLUS=107
108-
MINUS=108
109-
ASTERISK=109
110-
SLASH=110
111-
PERCENT=111
112-
CONCAT=112
113-
DOT=113
114-
PARAM=114
115-
STRING=115
116-
INTEGER_VALUE=116
117-
DECIMAL_VALUE=117
118-
IDENTIFIER=118
119-
DIGIT_IDENTIFIER=119
120-
TABLE_IDENTIFIER=120
121-
QUOTED_IDENTIFIER=121
122-
BACKQUOTED_IDENTIFIER=122
123-
SIMPLE_COMMENT=123
124-
BRACKETED_COMMENT=124
125-
WS=125
126-
UNRECOGNIZED=126
127-
DELIMITER=127
99+
ESC_START=99
100+
ESC_END=100
101+
EQ=101
102+
NULLEQ=102
103+
NEQ=103
104+
LT=104
105+
LTE=105
106+
GT=106
107+
GTE=107
108+
PLUS=108
109+
MINUS=109
110+
ASTERISK=110
111+
SLASH=111
112+
PERCENT=112
113+
CONCAT=113
114+
DOT=114
115+
PARAM=115
116+
STRING=116
117+
INTEGER_VALUE=117
118+
DECIMAL_VALUE=118
119+
IDENTIFIER=119
120+
DIGIT_IDENTIFIER=120
121+
TABLE_IDENTIFIER=121
122+
QUOTED_IDENTIFIER=122
123+
BACKQUOTED_IDENTIFIER=123
124+
SIMPLE_COMMENT=124
125+
BRACKETED_COMMENT=125
126+
WS=126
127+
UNRECOGNIZED=127
128+
DELIMITER=128
128129
'('=1
129130
')'=2
130131
','=3
@@ -216,25 +217,18 @@ DELIMITER=127
216217
'WITH'=89
217218
'YEAR'=90
218219
'YEARS'=91
219-
'{ESCAPE'=92
220-
'{FN'=93
221-
'{LIMIT'=94
222-
'{D'=95
223-
'{T'=96
224-
'{TS'=97
225-
'{GUID'=98
226-
'}'=99
227-
'='=100
228-
'<=>'=101
229-
'<'=103
230-
'<='=104
231-
'>'=105
232-
'>='=106
233-
'+'=107
234-
'-'=108
235-
'*'=109
236-
'/'=110
237-
'%'=111
238-
'||'=112
239-
'.'=113
240-
'?'=114
220+
'}'=100
221+
'='=101
222+
'<=>'=102
223+
'<'=104
224+
'<='=105
225+
'>'=106
226+
'>='=107
227+
'+'=108
228+
'-'=109
229+
'*'=110
230+
'/'=111
231+
'%'=112
232+
'||'=113
233+
'.'=114
234+
'?'=115

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

Lines changed: 44 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -96,34 +96,35 @@ DATE_ESC=95
9696
TIME_ESC=96
9797
TIMESTAMP_ESC=97
9898
GUID_ESC=98
99-
ESC_END=99
100-
EQ=100
101-
NULLEQ=101
102-
NEQ=102
103-
LT=103
104-
LTE=104
105-
GT=105
106-
GTE=106
107-
PLUS=107
108-
MINUS=108
109-
ASTERISK=109
110-
SLASH=110
111-
PERCENT=111
112-
CONCAT=112
113-
DOT=113
114-
PARAM=114
115-
STRING=115
116-
INTEGER_VALUE=116
117-
DECIMAL_VALUE=117
118-
IDENTIFIER=118
119-
DIGIT_IDENTIFIER=119
120-
TABLE_IDENTIFIER=120
121-
QUOTED_IDENTIFIER=121
122-
BACKQUOTED_IDENTIFIER=122
123-
SIMPLE_COMMENT=123
124-
BRACKETED_COMMENT=124
125-
WS=125
126-
UNRECOGNIZED=126
99+
ESC_START=99
100+
ESC_END=100
101+
EQ=101
102+
NULLEQ=102
103+
NEQ=103
104+
LT=104
105+
LTE=105
106+
GT=106
107+
GTE=107
108+
PLUS=108
109+
MINUS=109
110+
ASTERISK=110
111+
SLASH=111
112+
PERCENT=112
113+
CONCAT=113
114+
DOT=114
115+
PARAM=115
116+
STRING=116
117+
INTEGER_VALUE=117
118+
DECIMAL_VALUE=118
119+
IDENTIFIER=119
120+
DIGIT_IDENTIFIER=120
121+
TABLE_IDENTIFIER=121
122+
QUOTED_IDENTIFIER=122
123+
BACKQUOTED_IDENTIFIER=123
124+
SIMPLE_COMMENT=124
125+
BRACKETED_COMMENT=125
126+
WS=126
127+
UNRECOGNIZED=127
127128
'('=1
128129
')'=2
129130
','=3
@@ -215,25 +216,18 @@ UNRECOGNIZED=126
215216
'WITH'=89
216217
'YEAR'=90
217218
'YEARS'=91
218-
'{ESCAPE'=92
219-
'{FN'=93
220-
'{LIMIT'=94
221-
'{D'=95
222-
'{T'=96
223-
'{TS'=97
224-
'{GUID'=98
225-
'}'=99
226-
'='=100
227-
'<=>'=101
228-
'<'=103
229-
'<='=104
230-
'>'=105
231-
'>='=106
232-
'+'=107
233-
'-'=108
234-
'*'=109
235-
'/'=110
236-
'%'=111
237-
'||'=112
238-
'.'=113
239-
'?'=114
219+
'}'=100
220+
'='=101
221+
'<=>'=102
222+
'<'=104
223+
'<='=105
224+
'>'=106
225+
'>='=107
226+
'+'=108
227+
'-'=109
228+
'*'=110
229+
'/'=111
230+
'%'=112
231+
'||'=113
232+
'.'=114
233+
'?'=115

0 commit comments

Comments
 (0)