112{
114 int cur_token;
116 int cur_token_length;
118
119
121 {
122 cur_token =
yyextra->lookahead_token;
123 lvalp->core_yystype =
yyextra->lookahead_yylval;
124 *llocp =
yyextra->lookahead_yylloc;
127 yyextra->have_lookahead =
false;
128 }
129 else
130 cur_token =
core_yylex(&(lvalp->core_yystype), llocp, yyscanner);
131
132
133
134
135
136
137
138 switch (cur_token)
139 {
140 case FORMAT:
141 cur_token_length = 6;
142 break;
143 case NOT:
144 cur_token_length = 3;
145 break;
146 case NULLS_P:
147 cur_token_length = 5;
148 break;
149 case WITH:
150 cur_token_length = 4;
151 break;
152 case UIDENT:
153 case USCONST:
154 cur_token_length = strlen(
yyextra->core_yy_extra.scanbuf + *llocp);
155 break;
156 case WITHOUT:
157 cur_token_length = 7;
158 break;
159 default:
160 return cur_token;
161 }
162
163
164
165
166
167
169 *llocp + cur_token_length;
171
172
173
174
175
176
177
178
179 cur_yylloc = *llocp;
180
181
184 yyextra->lookahead_yylloc = *llocp;
185
186 *llocp = cur_yylloc;
187
188
190 *(
yyextra->lookahead_end) =
'\0';
191
192 yyextra->have_lookahead =
true;
193
194
195 switch (cur_token)
196 {
197 case FORMAT:
198
200 {
201 case JSON:
202 cur_token = FORMAT_LA;
203 break;
204 }
205 break;
206
207 case NOT:
208
210 {
211 case BETWEEN:
212 case IN_P:
213 case LIKE:
214 case ILIKE:
215 case SIMILAR:
216 cur_token = NOT_LA;
217 break;
218 }
219 break;
220
221 case NULLS_P:
222
224 {
225 case FIRST_P:
226 case LAST_P:
227 cur_token = NULLS_LA;
228 break;
229 }
230 break;
231
232 case WITH:
233
235 {
236 case TIME:
237 case ORDINALITY:
238 cur_token = WITH_LA;
239 break;
240 }
241 break;
242
243 case WITHOUT:
244
246 {
247 case TIME:
248 cur_token = WITHOUT_LA;
249 break;
250 }
251 break;
252
253 case UIDENT:
254 case USCONST:
255
257 {
258
259 const char *escstr;
260
261
262 cur_yylloc = *llocp;
263
264
266
267
269 llocp, yyscanner);
270
271
274 yyscanner);
275
276 escstr =
yyextra->lookahead_yylval.str;
279 yyscanner);
280
281
282 *llocp = cur_yylloc;
283
284
285 lvalp->core_yystype.str =
287 escstr[0],
288 *llocp,
289 yyscanner);
290
291
292
293
294
295
296 yyextra->have_lookahead =
false;
297 }
298 else
299 {
300
301 lvalp->core_yystype.str =
303 '\\',
304 *llocp,
305 yyscanner);
306 }
307
308 if (cur_token == UIDENT)
309 {
310
312 strlen(lvalp->core_yystype.str),
313 true);
314 cur_token = IDENT;
315 }
316 else if (cur_token == USCONST)
317 {
318 cur_token = SCONST;
319 }
320 break;
321 }
322
323 return cur_token;
324}
static char * str_udeescape(const char *str, char escape, int position, core_yyscan_t yyscanner)
static bool check_uescapechar(unsigned char escape)
#define Assert(condition)
#define pg_yyget_extra(yyscanner)
static bool next_token(char **lineptr, StringInfo buf, bool *initial_quote, bool *terminating_comma)
void scanner_yyerror(const char *message, core_yyscan_t yyscanner)
int core_yylex(core_YYSTYPE *yylval_param, YYLTYPE *yylloc_param, core_yyscan_t yyscanner)
void truncate_identifier(char *ident, int len, bool warn)