Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 0a9be2d

Browse files
author
Thomas G. Lockhart
committed
Add support for delimited identifiers. Include new exclusive state "xd".
Remove unused ScanString variable and code.
1 parent 0175759 commit 0a9be2d

File tree

1 file changed

+31
-10
lines changed

1 file changed

+31
-10
lines changed

src/backend/parser/scan.l

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/parser/scan.l,v 1.26 1997/10/30 15:28:25 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/parser/scan.l,v 1.27 1997/10/30 16:36:39 thomas Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -57,7 +57,6 @@ void unput(char);
5757
extern YYSTYPE yylval;
5858

5959
int llen;
60-
char *ScanString;
6160
char literal[MAX_PARSE_BUFFER];
6261

6362
%}
@@ -74,6 +73,7 @@ char literal[MAX_PARSE_BUFFER];
7473
* <xc> extended C-style comments - tgl 1997-07-12
7574
* <xq> quoted strings - tgl 1997-07-30
7675
* <xm> numeric strings with embedded minus sign - tgl 1997-09-05
76+
* <xd> delimited identifiers (double-quoted identifiers) - tgl 1997-10-27
7777
*
7878
* The "extended comment" syntax closely resembles allowable operator syntax.
7979
* So, when in condition <xc>, only strings which would terminate the
@@ -83,10 +83,10 @@ char literal[MAX_PARSE_BUFFER];
8383
*/
8484

8585
%x xc
86+
%x xd
8687
%x xq
8788
%x xm
8889

89-
/* We used to allow double-quoted strings, but SQL doesn't so we won't either */
9090
quote '
9191
xqstart {quote}
9292
xqstop {quote}
@@ -96,6 +96,11 @@ xqembedded "\\'"
9696
xqliteral [\\](.|\n)
9797
xqcat {quote}{space}*\n{space}*{quote}
9898

99+
dquote \"
100+
xdstart {dquote}
101+
xdstop {dquote}
102+
xdinside [^"]*
103+
99104
xcline [\/][\*].*[\*][\/]{space}*\n*
100105
xcstart [\/][\*]{op_and_self}*
101106
xcstop {op_and_self}*[\*][\/]({space}*|\n)
@@ -190,12 +195,32 @@ other .
190195
<xq>{xqcat} {
191196
}
192197

198+
199+
{xdstart} {
200+
BEGIN(xd);
201+
llen = 0;
202+
*literal = '\0';
203+
}
204+
<xd>{xdstop} {
205+
BEGIN(INITIAL);
206+
yylval.str = pstrdup(literal);
207+
return (IDENT);
208+
}
209+
<xd>{xdinside} {
210+
if ((llen+yyleng) > (MAX_PARSE_BUFFER - 1))
211+
elog(WARN,"quoted string parse buffer of %d chars exceeded",MAX_PARSE_BUFFER);
212+
memcpy(literal+llen, yytext, yyleng+1);
213+
llen += yyleng;
214+
}
215+
216+
193217
<xm>{space}* { /* ignore */ }
194218
<xm>{xmstop} {
195219
BEGIN(INITIAL);
196220
return (yytext[0]);
197221
}
198222

223+
199224
{sysfunc} {
200225
yylval.str = pstrdup(SystemFunctionHandler((char *)yytext));
201226
return (SCONST);
@@ -225,39 +250,35 @@ other .
225250

226251
{integer}/{space}*-{number} {
227252
BEGIN(xm);
228-
ScanString = pstrdup((char*)yytext);
229253
yylval.ival = atoi((char*)yytext);
230254
return (ICONST);
231255
}
232256
{real}/{space}*-{number} {
233257
char* endptr;
234258
BEGIN(xm);
235259
errno = 0;
236-
ScanString = pstrdup((char*)yytext);
237260
yylval.dval = strtod(((char *)yytext),&endptr);
238261
if (*endptr != '\0' || errno == ERANGE)
239-
elog(WARN,"\tBad float8 input format\n");
262+
elog(WARN,"Bad float8 input '%s'",yytext);
240263
CheckFloat8Val(yylval.dval);
241264
return (FCONST);
242265
}
243266
{integer} {
244267
char* endptr;
245268

246269
errno = 0;
247-
ScanString = pstrdup((char*)yytext);
248270
yylval.ival = strtol((char *)yytext,&endptr,10);
249271
if (*endptr != '\0' || errno == ERANGE)
250-
elog(WARN,"\tBad integer input format\n");
272+
elog(WARN,"Bad integer input '%s'",yytext);
251273
return (ICONST);
252274
}
253275
{real} {
254276
char* endptr;
255277

256278
errno = 0;
257-
ScanString = pstrdup((char*)yytext);
258279
yylval.dval = strtod((char *)yytext,&endptr);
259280
if (*endptr != '\0' || errno == ERANGE)
260-
elog(WARN,"\tBad float input format\n");
281+
elog(WARN,"Bad float input '%s'",yytext);
261282
CheckFloat8Val(yylval.dval);
262283
return (FCONST);
263284
}

0 commit comments

Comments
 (0)