]> granicus.if.org Git - postgresql/commitdiff
Fix broken {xufailed} production that made HEAD fail on
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 14 Apr 2009 22:18:47 +0000 (22:18 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 14 Apr 2009 22:18:47 +0000 (22:18 +0000)
select u&42 from table-with-a-u-column;
Also fix missing SET_YYLLOC() in the {dolqfailed} production that I suppose
this was based on.  The latter is a pre-existing bug, but the only effect
is to misplace the error cursor by one token, so probably not worth
backpatching.

src/backend/parser/scan.l

index 68372919ff5a03fa03c7c47f3e04228881e73e1b..a3d4d857c89b5b3c42eddd4bcbddd1fa61317e1e 100644 (file)
@@ -24,7 +24,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/parser/scan.l,v 1.149 2009/03/04 13:02:32 petere Exp $
+ *       $PostgreSQL: pgsql/src/backend/parser/scan.l,v 1.150 2009/04/14 22:18:47 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -553,6 +553,7 @@ other                       .
                                        startlit();
                                }
 {dolqfailed}   {
+                                       SET_YYLLOC();
                                        /* throw back all but the initial "$" */
                                        yyless(1);
                                        /* and treat it as {other} */
@@ -646,10 +647,15 @@ other                     .
 <xd,xui><<EOF>>                { yyerror("unterminated quoted identifier"); }
 
 {xufailed}     {
+                                       char               *ident;
+
+                                       SET_YYLLOC();
                                        /* throw back all but the initial u/U */
                                        yyless(1);
-                                       /* and treat it as {other} */
-                                       return yytext[0];
+                                       /* and treat it as {identifier} */
+                                       ident = downcase_truncate_identifier(yytext, yyleng, true);
+                                       yylval.str = ident;
+                                       return IDENT;
                                }
 
 {typecast}             {