]> granicus.if.org Git - postgresql/commitdiff
Recognize RETURN QUERY via a textual test, so that QUERY doesn't need to be
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 9 Nov 2007 23:58:32 +0000 (23:58 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 9 Nov 2007 23:58:32 +0000 (23:58 +0000)
a plpgsql keyword.  This avoids springing a new reserved word on plpgsql
programmers.
For consistency, handle RETURN NEXT the same way.

src/pl/plpgsql/src/gram.y
src/pl/plpgsql/src/scan.l

index b0bc0ea304c60434d9edc194b7123d7f65424b5a..ffb16bea1c07ad51485a82feb19c7bbf83a37661 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/pl/plpgsql/src/gram.y,v 1.105 2007/07/25 04:19:08 neilc Exp $
+ *       $PostgreSQL: pgsql/src/pl/plpgsql/src/gram.y,v 1.106 2007/11/09 23:58:32 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -181,14 +181,12 @@ static    void                     check_labels(const char *start_label,
 %token K_LOG
 %token K_LOOP
 %token K_MOVE
-%token K_NEXT
 %token K_NOSCROLL
 %token K_NOT
 %token K_NOTICE
 %token K_NULL
 %token K_OPEN
 %token K_OR
-%token K_QUERY
 %token K_PERFORM
 %token K_ROW_COUNT
 %token K_RAISE
@@ -1169,11 +1167,19 @@ stmt_return             : K_RETURN lno
                                                int     tok;
 
                                                tok = yylex();
-                                               if (tok == K_NEXT)
+                                               if (tok == 0)
+                                                       yyerror("unexpected end of function definition");
+
+                                               /*
+                                                * To avoid making NEXT and QUERY effectively be
+                                                * reserved words within plpgsql, recognize them
+                                                * via yytext.
+                                                */
+                                               if (pg_strcasecmp(yytext, "next") == 0)
                                                {
                                                        $$ = make_return_next_stmt($2);
                                                }
-                                               else if (tok == K_QUERY)
+                                               else if (pg_strcasecmp(yytext, "query") == 0)
                                                {
                                                        $$ = make_return_query_stmt($2);
                                                }
index b322a4045e6545b9beed024ca4ba258e144e22ae..3c52f117d7f1c5aafacd875dceaa524501a7b8ac 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/pl/plpgsql/src/scan.l,v 1.58 2007/07/25 04:19:09 neilc Exp $
+ *       $PostgreSQL: pgsql/src/pl/plpgsql/src/scan.l,v 1.59 2007/11/09 23:58:32 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -143,7 +143,6 @@ is                          { return K_IS;                          }
 log                            { return K_LOG;                         }
 loop                   { return K_LOOP;                        }
 move                   { return K_MOVE;                        }
-next                   { return K_NEXT;                        }
 no{space}+scroll { return K_NOSCROLL;          }
 not                            { return K_NOT;                         }
 notice                 { return K_NOTICE;                      }
@@ -151,7 +150,6 @@ null                        { return K_NULL;                        }
 open                   { return K_OPEN;                        }
 or                             { return K_OR;                          }
 perform                        { return K_PERFORM;                     }
-query                  { return K_QUERY;                       }
 raise                  { return K_RAISE;                       }
 rename                 { return K_RENAME;                      }
 result_oid             { return K_RESULT_OID;          }