From 6a68f7fd3c0bae4b23c089f6680c6badc1f1fb2c Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Tue, 14 Apr 2009 22:18:47 +0000
Subject: [PATCH] Fix broken {xufailed} production that made HEAD fail on 
 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 | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/src/backend/parser/scan.l b/src/backend/parser/scan.l
index 68372919ff5..a3d4d857c89 100644
--- a/src/backend/parser/scan.l
+++ b/src/backend/parser/scan.l
@@ -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}		{
-- 
GitLab