Fix broken {xufailed} production that made HEAD fail on
authorTom Lane
Tue, 14 Apr 2009 22:18:47 +0000 (22:18 +0000)
committerTom Lane
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         .
 <>        { 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}     {