]> granicus.if.org Git - postgresql/commitdiff
Add support for delimited identifiers. Include new exclusive state "xd".
authorThomas G. Lockhart <lockhart@fourpalms.org>
Thu, 30 Oct 1997 16:36:39 +0000 (16:36 +0000)
committerThomas G. Lockhart <lockhart@fourpalms.org>
Thu, 30 Oct 1997 16:36:39 +0000 (16:36 +0000)
Remove unused ScanString variable and code.

src/backend/parser/scan.l

index 04de2c3f9ad6a904ffaf01ef8dcba78b9e14fd64..d2ceb795d3a244d275ee82d3724ef4c4daa6885a 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/parser/scan.l,v 1.26 1997/10/30 15:28:25 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/parser/scan.l,v 1.27 1997/10/30 16:36:39 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -57,7 +57,6 @@ void unput(char);
 extern YYSTYPE yylval;
 
 int llen;
-char *ScanString;
 char literal[MAX_PARSE_BUFFER];
 
 %}
@@ -74,6 +73,7 @@ char literal[MAX_PARSE_BUFFER];
         *  <xc> extended C-style comments - tgl 1997-07-12
         *  <xq> quoted strings - tgl 1997-07-30
         *  <xm> numeric strings with embedded minus sign - tgl 1997-09-05
+        *  <xd> delimited identifiers (double-quoted identifiers) - tgl 1997-10-27
         *
         * The "extended comment" syntax closely resembles allowable operator syntax.
         * So, when in condition <xc>, only strings which would terminate the
@@ -83,10 +83,10 @@ char literal[MAX_PARSE_BUFFER];
         */
 
 %x xc
+%x xd
 %x xq
 %x xm
 
-       /* We used to allow double-quoted strings, but SQL doesn't so we won't either */
 quote                  '
 xqstart                        {quote}
 xqstop                 {quote}
@@ -96,6 +96,11 @@ xqembedded           "\\'"
 xqliteral              [\\](.|\n)
 xqcat                  {quote}{space}*\n{space}*{quote}
 
+dquote                 \"
+xdstart                        {dquote}
+xdstop                 {dquote}
+xdinside               [^"]*
+
 xcline                 [\/][\*].*[\*][\/]{space}*\n*
 xcstart                        [\/][\*]{op_and_self}*
 xcstop                 {op_and_self}*[\*][\/]({space}*|\n)
@@ -190,12 +195,32 @@ other                     .
 <xq>{xqcat}            {
                                }
 
+
+{xdstart}              {
+                                       BEGIN(xd);
+                                       llen = 0;
+                                       *literal = '\0';
+                               }
+<xd>{xdstop}   {
+                                       BEGIN(INITIAL);
+                                       yylval.str = pstrdup(literal);
+                                       return (IDENT);
+                               }
+<xd>{xdinside} {
+                                       if ((llen+yyleng) > (MAX_PARSE_BUFFER - 1))
+                                               elog(WARN,"quoted string parse buffer of %d chars exceeded",MAX_PARSE_BUFFER);
+                                       memcpy(literal+llen, yytext, yyleng+1);
+                                       llen += yyleng;
+                               }
+
+
 <xm>{space}*   { /* ignore */ }
 <xm>{xmstop}   {
                                        BEGIN(INITIAL);
                                        return (yytext[0]);
                                }
 
+
 {sysfunc}              {
                                                yylval.str = pstrdup(SystemFunctionHandler((char *)yytext));
                                                return (SCONST);
@@ -225,7 +250,6 @@ other                       .
 
 {integer}/{space}*-{number}    {
                                        BEGIN(xm);
-                                       ScanString = pstrdup((char*)yytext);
                                        yylval.ival = atoi((char*)yytext);
                                        return (ICONST);
                                }
@@ -233,10 +257,9 @@ other                      .
                                        char* endptr;
                                        BEGIN(xm);
                                        errno = 0;
-                                       ScanString = pstrdup((char*)yytext);
                                        yylval.dval = strtod(((char *)yytext),&endptr);
                                        if (*endptr != '\0' || errno == ERANGE)
-                                       elog(WARN,"\tBad float8 input format\n");
+                                       elog(WARN,"Bad float8 input '%s'",yytext);
                                        CheckFloat8Val(yylval.dval);
                                        return (FCONST);
                                }
@@ -244,20 +267,18 @@ other                     .
                                        char* endptr;
 
                                        errno = 0;
-                                       ScanString = pstrdup((char*)yytext);
                                        yylval.ival = strtol((char *)yytext,&endptr,10);
                                        if (*endptr != '\0' || errno == ERANGE)
-                                               elog(WARN,"\tBad integer input format\n");
+                                               elog(WARN,"Bad integer input '%s'",yytext);
                                        return (ICONST);
                                }
 {real}                 {
                                        char* endptr;
 
                                        errno = 0;
-                                       ScanString = pstrdup((char*)yytext);
                                        yylval.dval = strtod((char *)yytext,&endptr);
                                        if (*endptr != '\0' || errno == ERANGE)
-                                               elog(WARN,"\tBad float input format\n");
+                                               elog(WARN,"Bad float input '%s'",yytext);
                                        CheckFloat8Val(yylval.dval);
                                        return (FCONST);
                                }