Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit0a9be2d

Browse files
author
Thomas G. Lockhart
committed
Add support for delimited identifiers. Include new exclusive state "xd".
Remove unused ScanString variable and code.
1 parent0175759 commit0a9be2d

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/3015:28:25 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/parser/scan.l,v 1.27 1997/10/3016: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
%xxc
86+
%xxd
8687
%xxq
8788
%xxm
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 inputformat\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 inputformat\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 inputformat\n");
281+
elog(WARN,"Bad float input'%s'",yytext);
261282
CheckFloat8Val(yylval.dval);
262283
return (FCONST);
263284
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp