From 414f94f2624849a6dce847d0eccd97df9c7932ae Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Mon, 19 Feb 2001 19:49:53 +0000
Subject: [PATCH] Change plpgsql's GET DIAGNOSTICS statement to use
 SQL99-compatible syntax.  Fix the RESULT_OID case, which never worked.  Add
 documentation.

---
 doc/src/sgml/plsql.sgml       | 30 +++++++++--
 src/backend/executor/spi.c    | 18 +++++--
 src/include/executor/spi.h    |  1 +
 src/pl/plpgsql/src/gram.y     | 98 +++++++++++++----------------------
 src/pl/plpgsql/src/pl_exec.c  | 47 +++++++++--------
 src/pl/plpgsql/src/pl_funcs.c | 29 +++++------
 src/pl/plpgsql/src/plpgsql.h  | 21 +++++---
 src/pl/plpgsql/src/scan.l     |  6 +--
 8 files changed, 130 insertions(+), 120 deletions(-)

diff --git a/doc/src/sgml/plsql.sgml b/doc/src/sgml/plsql.sgml
index 72dabd824b0..c7c7ce04f72 100644
--- a/doc/src/sgml/plsql.sgml
+++ b/doc/src/sgml/plsql.sgml
@@ -1,5 +1,5 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/Attic/plsql.sgml,v 2.19 2001/02/10 05:32:33 tgl Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/Attic/plsql.sgml,v 2.20 2001/02/19 19:49:52 tgl Exp $
 -->
 
  <chapter id="plsql">
@@ -102,7 +102,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/plsql.sgml,v 2.19 2001/02/10 05:32:33
 
     <para>
      The PL/pgSQL language is case insensitive. All keywords and
-     identifiers can be used in mixed upper- and lowercase.
+     identifiers can be used in mixed upper- and lower-case.
     </para>
     <para>
      PL/pgSQL is a block oriented language. A block is defined as
@@ -181,7 +181,7 @@ END;
 	must also have a default value specified.
        </para>
        <para>
-	The default value is evaluated every time the function is called. So
+	The default value is evaluated every time the block is entered. So
 	assigning '<replaceable>now</replaceable>' to a variable of type
 	<type>timestamp</type> causes the variable to have the
 	time of the actual function call, not when the function was
@@ -203,7 +203,7 @@ END;
 	corresponding identifier $n will be a rowtype, but it
 	must be aliased using the ALIAS command described below. Only the user
 	attributes of a table row are accessible in the row, no Oid or other
-	system attributes (hence the row could be from a view and view rows
+	system attributes (because the row could be from a view and view rows
 	don't have useful system attributes).
        </para>
        <para>
@@ -311,7 +311,7 @@ RENAME <replaceable>oldname</replaceable> TO <replaceable>newname</replaceable>;
      Using the <replaceable>table.field</replaceable>%TYPE
      causes PL/pgSQL to look up the attributes definitions at the
      first call to the function during the lifetime of a backend.
-     Have a table with a char(20) attribute and some PL/pgSQL functions
+     Suppose we have a table with a char(20) attribute and some PL/pgSQL functions
      that deal with its content in local variables. Now someone
      decides that char(20) isn't enough, dumps the table, drops it,
      recreates it now with the attribute in question defined as
@@ -553,6 +553,26 @@ EXECUTE ''UPDATE tbl SET ''
       </listitem>
      </varlistentry>
 
+     <varlistentry>
+      <term>Obtaining other results status</term>
+      <listitem>
+       <para>
+	<programlisting>
+GET DIAGNOSTICS <replaceable>variable</replaceable> = <replaceable>item</replaceable> [ , ... ]
+	</programlisting>
+	This command allows retrieval of system status indicators.  Each
+	<replaceable>item</replaceable> is a keyword identifying a state
+	value to be assigned to the specified variable (which should be of
+	the right datatype to receive it).  The currently available status
+	items are <keyword>ROW_COUNT</>, the number of rows processed by
+	the last SQL query sent down to the SQL engine; and
+	<keyword>RESULT_OID</>, the Oid of the last row inserted by the
+	most recent SQL query.  Note that <keyword>RESULT_OID</> is only
+	useful after an INSERT query.
+       </para>
+      </listitem>
+     </varlistentry>
+
      <varlistentry>
       <term>Returning from the function</term>
       <listitem>
diff --git a/src/backend/executor/spi.c b/src/backend/executor/spi.c
index f07c0fcdbae..4c4da6c3034 100644
--- a/src/backend/executor/spi.c
+++ b/src/backend/executor/spi.c
@@ -3,22 +3,23 @@
  * spi.c
  *				Server Programming Interface
  *
- * $Id: spi.c,v 1.51 2001/01/04 02:36:52 tgl Exp $
+ * $Id: spi.c,v 1.52 2001/02/19 19:49:52 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
 #include "executor/spi_priv.h"
 #include "access/printtup.h"
 
+uint32 SPI_processed = 0;
+Oid SPI_lastoid = InvalidOid;
+SPITupleTable *SPI_tuptable = NULL;
+int SPI_result;
+
 static _SPI_connection *_SPI_stack = NULL;
 static _SPI_connection *_SPI_current = NULL;
 static int	_SPI_connected = -1;
 static int	_SPI_curid = -1;
 
-DLLIMPORT uint32 SPI_processed = 0;
-DLLIMPORT SPITupleTable *SPI_tuptable = NULL;
-DLLIMPORT int SPI_result;
-
 static int	_SPI_execute(char *src, int tcount, _SPI_plan *plan);
 static int	_SPI_pquery(QueryDesc *queryDesc, EState *state, int tcount);
 
@@ -155,6 +156,7 @@ AtEOXact_SPI(void)
 	_SPI_current = _SPI_stack = NULL;
 	_SPI_connected = _SPI_curid = -1;
 	SPI_processed = 0;
+	SPI_lastoid = InvalidOid;
 	SPI_tuptable = NULL;
 }
 
@@ -623,6 +625,7 @@ _SPI_execute(char *src, int tcount, _SPI_plan *plan)
 	CommandCounterIncrement();
 
 	SPI_processed = 0;
+	SPI_lastoid = InvalidOid;
 	SPI_tuptable = NULL;
 	_SPI_current->tuptable = NULL;
 	_SPI_current->qtlist = NULL;
@@ -723,6 +726,7 @@ _SPI_execute_plan(_SPI_plan *plan, Datum *Values, char *Nulls, int tcount)
 	CommandCounterIncrement();
 
 	SPI_processed = 0;
+	SPI_lastoid = InvalidOid;
 	SPI_tuptable = NULL;
 	_SPI_current->tuptable = NULL;
 	_SPI_current->qtlist = NULL;
@@ -786,6 +790,7 @@ _SPI_pquery(QueryDesc *queryDesc, EState *state, int tcount)
 	bool		isRetrieveIntoRelation = false;
 	char	   *intoName = NULL;
 	int			res;
+	Oid			save_lastoid;
 
 	switch (operation)
 	{
@@ -840,6 +845,8 @@ _SPI_pquery(QueryDesc *queryDesc, EState *state, int tcount)
 	ExecutorRun(queryDesc, state, EXEC_FOR, (long) tcount);
 
 	_SPI_current->processed = state->es_processed;
+	save_lastoid = state->es_lastoid;
+
 	if (operation == CMD_SELECT && queryDesc->dest == SPI)
 	{
 		if (_SPI_checktuples())
@@ -859,6 +866,7 @@ _SPI_pquery(QueryDesc *queryDesc, EState *state, int tcount)
 	if (dest == SPI)
 	{
 		SPI_processed = _SPI_current->processed;
+		SPI_lastoid = save_lastoid;
 		SPI_tuptable = _SPI_current->tuptable;
 	}
 	queryDesc->dest = dest;
diff --git a/src/include/executor/spi.h b/src/include/executor/spi.h
index 4834ab4dd87..b95eaae4e9e 100644
--- a/src/include/executor/spi.h
+++ b/src/include/executor/spi.h
@@ -71,6 +71,7 @@ typedef struct
 #define SPI_OK_CURSOR			10
 
 extern DLLIMPORT uint32 SPI_processed;
+extern DLLIMPORT Oid SPI_lastoid;
 extern DLLIMPORT SPITupleTable *SPI_tuptable;
 extern DLLIMPORT int SPI_result;
 
diff --git a/src/pl/plpgsql/src/gram.y b/src/pl/plpgsql/src/gram.y
index f462680c8a1..29e2dd24bbd 100644
--- a/src/pl/plpgsql/src/gram.y
+++ b/src/pl/plpgsql/src/gram.y
@@ -4,7 +4,7 @@
  *						  procedural language
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/pl/plpgsql/src/gram.y,v 1.15 2001/02/10 22:53:40 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/pl/plpgsql/src/gram.y,v 1.16 2001/02/19 19:49:53 tgl Exp $
  *
  *	  This software is copyrighted by Jan Wieck - Hamburg.
  *
@@ -63,7 +63,13 @@ static	PLpgSQL_expr	*make_tupret_expr(PLpgSQL_row *row);
 		{
 			int  nalloc;
 			int  nused;
-			int  *dtnums;
+			int	 *nums;
+		}						intlist;
+		struct
+		{
+			int  nalloc;
+			int  nused;
+			PLpgSQL_diag_item *dtitems;
 		}						dtlist;
 		struct
 		{
@@ -119,11 +125,11 @@ static	PLpgSQL_expr	*make_tupret_expr(PLpgSQL_row *row);
 %type <stmt>	stmt_fors, stmt_select, stmt_perform
 %type <stmt>	stmt_dynexecute, stmt_dynfors, stmt_getdiag
 
-%type <dtlist>	raise_params
+%type <intlist>	raise_params
 %type <ival>	raise_level, raise_param
 %type <str>		raise_msg
 
-%type <dtlist>	getdiag_items, getdiag_targets
+%type <dtlist>	getdiag_list
 %type <ival>	getdiag_item, getdiag_target
 
 %type <ival>	lno
@@ -156,11 +162,11 @@ static	PLpgSQL_expr	*make_tupret_expr(PLpgSQL_row *row);
 %token	K_NOTICE
 %token	K_NULL
 %token	K_PERFORM
-%token	K_PROCESSED
+%token	K_ROW_COUNT
 %token	K_RAISE
 %token	K_RECORD
 %token	K_RENAME
-%token	K_RESULT
+%token	K_RESULT_OID
 %token	K_RETURN
 %token	K_REVERSE
 %token	K_SELECT
@@ -607,7 +613,7 @@ stmt_assign		: assign_var lno K_ASSIGN expr_until_semi
 					}
 				;
 
-stmt_getdiag	: K_GET K_DIAGNOSTICS lno K_SELECT getdiag_items K_INTO getdiag_targets ';'
+stmt_getdiag	: K_GET K_DIAGNOSTICS lno getdiag_list ';'
 					{
 						PLpgSQL_stmt_getdiag	 *new;
 
@@ -616,80 +622,50 @@ stmt_getdiag	: K_GET K_DIAGNOSTICS lno K_SELECT getdiag_items K_INTO getdiag_tar
 
 						new->cmd_type = PLPGSQL_STMT_GETDIAG;
 						new->lineno   = $3;
-						new->nitems   = $5.nused;
-						new->items	  = malloc(sizeof(int) * $5.nused);
-						new->ntargets = $7.nused;
-						new->targets  = malloc(sizeof(int) * $7.nused);
-						memcpy(new->items, $5.dtnums, sizeof(int) * $5.nused);
-						memcpy(new->targets, $7.dtnums, sizeof(int) * $7.nused);
-
-						if (new->nitems != new->ntargets)
-						{
-							plpgsql_error_lineno = new->lineno;
-							plpgsql_comperrinfo();
-							elog(ERROR, "number of diagnostic items does not match target list");
-						};
+						new->ndtitems = $4.nused;
+						new->dtitems  = malloc(sizeof(PLpgSQL_diag_item) * $4.nused);
+						memcpy(new->dtitems, $4.dtitems, sizeof(PLpgSQL_diag_item) * $4.nused);
 
 						$$ = (PLpgSQL_stmt *)new;
 					}
 				;
 
-getdiag_items : getdiag_items ',' getdiag_item
+getdiag_list : getdiag_list ',' getdiag_target K_ASSIGN getdiag_item
 					{
 						if ($1.nused == $1.nalloc)
 						{
 							$1.nalloc *= 2;
-							$1.dtnums = repalloc($1.dtnums, sizeof(int) * $1.nalloc);
+							$1.dtitems = repalloc($1.dtitems, sizeof(PLpgSQL_diag_item) * $1.nalloc);
 						}
-						$1.dtnums[$1.nused++] = $3;
+						$1.dtitems[$1.nused].target = $3;
+						$1.dtitems[$1.nused].item   = $5;
+						$1.nused++;
 
 						$$.nalloc = $1.nalloc;
 						$$.nused  = $1.nused;
-						$$.dtnums = $1.dtnums;
+						$$.dtitems = $1.dtitems;
 					}
-				| getdiag_item
+				| getdiag_target K_ASSIGN getdiag_item
 					{
 						$$.nalloc = 1;
 						$$.nused  = 1;
-						$$.dtnums = palloc(sizeof(int) * $$.nalloc);
-						$$.dtnums[0] = $1;
-					}
-				;
-
-getdiag_item : K_PROCESSED
-					{
-						$$ = PLPGSQL_GETDIAG_PROCESSED;
-					}
-				| K_RESULT
-					{
-						$$ = PLPGSQL_GETDIAG_RESULT;
+						$$.dtitems = palloc(sizeof(PLpgSQL_diag_item) * $$.nalloc);
+						$$.dtitems[0].target = $1;
+						$$.dtitems[0].item   = $3;
 					}
 				;
 
-getdiag_targets : getdiag_targets ',' getdiag_target
+getdiag_item : K_ROW_COUNT
 					{
-						if ($1.nused == $1.nalloc)
-						{
-							$1.nalloc *= 2;
-							$1.dtnums = repalloc($1.dtnums, sizeof(int) * $1.nalloc);
-						}
-						$1.dtnums[$1.nused++] = $3;
-
-						$$.nalloc = $1.nalloc;
-						$$.nused  = $1.nused;
-						$$.dtnums = $1.dtnums;
+						$$ = PLPGSQL_GETDIAG_ROW_COUNT;
 					}
-				| getdiag_target
+				| K_RESULT_OID
 					{
-						$$.nalloc = 1;
-						$$.nused  = 1;
-						$$.dtnums = palloc(sizeof(int) * $$.nalloc);
-						$$.dtnums[0] = $1;
+						$$ = PLPGSQL_GETDIAG_RESULT_OID;
 					}
 				;
 
-
-getdiag_target	   : T_VARIABLE
+getdiag_target	: T_VARIABLE
 					{
 						if (yylval.var->isconst)
 						{
@@ -1070,7 +1046,7 @@ stmt_raise		: K_RAISE lno raise_level raise_msg raise_params ';'
 						new->message	= $4;
 						new->nparams	= $5.nused;
 						new->params		= malloc(sizeof(int) * $5.nused);
-						memcpy(new->params, $5.dtnums, sizeof(int) * $5.nused);
+						memcpy(new->params, $5.nums, sizeof(int) * $5.nused);
 
 						$$ = (PLpgSQL_stmt *)new;
 					}
@@ -1116,20 +1092,20 @@ raise_params	: raise_params raise_param
 						if ($1.nused == $1.nalloc)
 						{
 							$1.nalloc *= 2;
-							$1.dtnums = repalloc($1.dtnums, sizeof(int) * $1.nalloc);
+							$1.nums = repalloc($1.nums, sizeof(int) * $1.nalloc);
 						}
-						$1.dtnums[$1.nused++] = $2;
+						$1.nums[$1.nused++] = $2;
 
 						$$.nalloc = $1.nalloc;
 						$$.nused  = $1.nused;
-						$$.dtnums = $1.dtnums;
+						$$.nums   = $1.nums;
 					}
 				| raise_param
 					{
 						$$.nalloc = 1;
 						$$.nused  = 1;
-						$$.dtnums = palloc(sizeof(int) * $$.nalloc);
-						$$.dtnums[0] = $1;
+						$$.nums   = palloc(sizeof(int) * $$.nalloc);
+						$$.nums[0] = $1;
 					}
 				;
 
diff --git a/src/pl/plpgsql/src/pl_exec.c b/src/pl/plpgsql/src/pl_exec.c
index 92787ec270b..94dc0be45de 100644
--- a/src/pl/plpgsql/src/pl_exec.c
+++ b/src/pl/plpgsql/src/pl_exec.c
@@ -3,7 +3,7 @@
  *			  procedural language
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.37 2001/02/09 00:14:26 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.38 2001/02/19 19:49:53 tgl Exp $
  *
  *	  This software is copyrighted by Jan Wieck - Hamburg.
  *
@@ -82,7 +82,7 @@ static int exec_stmt(PLpgSQL_execstate * estate,
 static int exec_stmt_assign(PLpgSQL_execstate * estate,
 				 PLpgSQL_stmt_assign * stmt);
 static int exec_stmt_getdiag(PLpgSQL_execstate * estate,
-                                 PLpgSQL_stmt_getdiag * stmt);
+							 PLpgSQL_stmt_getdiag * stmt);
 static int exec_stmt_if(PLpgSQL_execstate * estate,
 			 PLpgSQL_stmt_if * stmt);
 static int exec_stmt_loop(PLpgSQL_execstate * estate,
@@ -507,9 +507,9 @@ plpgsql_exec_trigger(PLpgSQL_function * func,
 					case PLPGSQL_STMT_ASSIGN:
 						stmttype = "assignment";
 						break;
-                                        case PLPGSQL_STMT_GETDIAG:
-                                                stmttype = "get diagnostics";
-                                                break;
+					case PLPGSQL_STMT_GETDIAG:
+						stmttype = "get diagnostics";
+						break;
 					case PLPGSQL_STMT_IF:
 						stmttype = "if";
 						break;
@@ -1071,35 +1071,40 @@ exec_stmt_getdiag(PLpgSQL_execstate * estate, PLpgSQL_stmt_getdiag * stmt)
 	PLpgSQL_datum 	*var;
 	bool            isnull = false;
 
-	for ( i=0 ; i < stmt->nitems ; i++) 
+	for ( i=0 ; i < stmt->ndtitems ; i++) 
 	{
-		if ((stmt->targets[i] <= 0))
-			break;
+		PLpgSQL_diag_item *dtitem = & stmt->dtitems[i];
+
+		if (dtitem->target <= 0)
+			continue;
 	
-		var = (estate->datums[stmt->targets[i]]);
+		var = (estate->datums[dtitem->target]);
 
 		if (var == NULL)
-			break;
+			continue;
 
-		switch (stmt->items[i])
+		switch (dtitem->item)
 		{
-			case PLPGSQL_GETDIAG_PROCESSED: 
+			case PLPGSQL_GETDIAG_ROW_COUNT:
 
-				exec_assign_value(estate, var, (Datum)SPI_processed, INT4OID, &isnull);
-        			break;
+				exec_assign_value(estate, var, UInt32GetDatum(SPI_processed),
+								  INT4OID, &isnull);
+				break;
 
-			case PLPGSQL_GETDIAG_RESULT:
+			case PLPGSQL_GETDIAG_RESULT_OID:
 
-				exec_assign_value(estate, var, (Datum)SPI_result, INT4OID, &isnull);
-                                break;
+				exec_assign_value(estate, var, ObjectIdGetDatum(SPI_lastoid),
+								  OIDOID, &isnull);
+				break;
 
 			default:
 			
-				elog(ERROR, "unknown attribute request %d in get_diagnostic", stmt->items[i]);
-		};
-	};
+				elog(ERROR, "unknown attribute request %d in get_diagnostic",
+					 dtitem->item);
+		}
+	}
 	
-        return PLPGSQL_RC_OK;
+	return PLPGSQL_RC_OK;
 }
 
 /* ----------
diff --git a/src/pl/plpgsql/src/pl_funcs.c b/src/pl/plpgsql/src/pl_funcs.c
index d3bc9d315be..2b3605d2a10 100644
--- a/src/pl/plpgsql/src/pl_funcs.c
+++ b/src/pl/plpgsql/src/pl_funcs.c
@@ -3,7 +3,7 @@
  *			  procedural language
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_funcs.c,v 1.9 2000/12/03 20:45:40 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_funcs.c,v 1.10 2001/02/19 19:49:53 tgl Exp $
  *
  *	  This software is copyrighted by Jan Wieck - Hamburg.
  *
@@ -708,20 +708,24 @@ dump_getdiag(PLpgSQL_stmt_getdiag * stmt)
 	int			i;
 
 	dump_ind();
-	printf("GET DIAGNOSTICS SELECT ");
-	for (i = 0; i < stmt->nitems; i++)
+	printf("GET DIAGNOSTICS ");
+	for (i = 0; i < stmt->ndtitems; i++)
 	{
+		PLpgSQL_diag_item *dtitem = & stmt->dtitems[i];
+
 		if (i != 0)
 			printf(", ");
 
-	    switch (stmt->items[i])
+		printf("{var %d} = ", dtitem->target);
+
+	    switch (dtitem->item)
 		{
-		    case PLPGSQL_GETDIAG_PROCESSED:
-				printf("PROCESSED");
+		    case PLPGSQL_GETDIAG_ROW_COUNT:
+				printf("ROW_COUNT");
 				break;
 
-			case PLPGSQL_GETDIAG_RESULT:
-				printf("RESULT");
+			case PLPGSQL_GETDIAG_RESULT_OID:
+				printf("RESULT_OID");
 				break;
 
 			default:
@@ -729,15 +733,6 @@ dump_getdiag(PLpgSQL_stmt_getdiag * stmt)
 				break;
 		}
 	}
-	printf(" INTO ");
-	for (i = 0; i < stmt->ntargets; i++)
-	{
-		if (i != 0)
-			printf(", ");
-
-		printf("{var %d}", stmt->targets[i]);
-	}
-
 	printf("\n");
 }
 
diff --git a/src/pl/plpgsql/src/plpgsql.h b/src/pl/plpgsql/src/plpgsql.h
index e03fed063c0..727035bbb61 100644
--- a/src/pl/plpgsql/src/plpgsql.h
+++ b/src/pl/plpgsql/src/plpgsql.h
@@ -3,7 +3,7 @@
  *			  procedural language
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/pl/plpgsql/src/plpgsql.h,v 1.11 2000/09/05 09:02:18 wieck Exp $
+ *	  $Header: /cvsroot/pgsql/src/pl/plpgsql/src/plpgsql.h,v 1.12 2001/02/19 19:49:53 tgl Exp $
  *
  *	  This software is copyrighted by Jan Wieck - Hamburg.
  *
@@ -115,8 +115,8 @@ enum
  */
 enum
 {
-        PLPGSQL_GETDIAG_PROCESSED,
-        PLPGSQL_GETDIAG_RESULT
+        PLPGSQL_GETDIAG_ROW_COUNT,
+        PLPGSQL_GETDIAG_RESULT_OID
 };
 
 
@@ -277,14 +277,19 @@ typedef struct
 	PLpgSQL_expr *expr;
 }			PLpgSQL_stmt_assign;
 
+
+typedef struct
+{								/* Get Diagnostics item		*/
+	int			item;			/* id for diagnostic value desired */
+	int			target;			/* where to assign it */
+}			PLpgSQL_diag_item;
+
 typedef struct
-{								/* Get Disgnostics statement		*/
+{								/* Get Diagnostics statement		*/
 	int			cmd_type;
 	int			lineno;
-	int			nitems;
-	int			*items;
-	int			ntargets;
-	int			*targets;
+	int			ndtitems;
+	PLpgSQL_diag_item *dtitems;
 }			PLpgSQL_stmt_getdiag;
 
 
diff --git a/src/pl/plpgsql/src/scan.l b/src/pl/plpgsql/src/scan.l
index 2b19039ef07..5872a4eddb8 100644
--- a/src/pl/plpgsql/src/scan.l
+++ b/src/pl/plpgsql/src/scan.l
@@ -4,7 +4,7 @@
  *			  procedural language
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/pl/plpgsql/src/Attic/scan.l,v 1.8 2000/09/15 11:59:40 ishii Exp $
+ *    $Header: /cvsroot/pgsql/src/pl/plpgsql/src/Attic/scan.l,v 1.9 2001/02/19 19:49:53 tgl Exp $
  *
  *    This software is copyrighted by Jan Wieck - Hamburg.
  *
@@ -114,13 +114,13 @@ not				{ return K_NOT;				}
 notice			{ return K_NOTICE;			}
 null			{ return K_NULL;			}
 perform			{ return K_PERFORM;			}
-processed		{ return K_PROCESSED;			}
 raise			{ return K_RAISE;			}
 record			{ return K_RECORD;			}
 rename			{ return K_RENAME;			}
-result			{ return K_RESULT;			}
+result_oid		{ return K_RESULT_OID;		}
 return			{ return K_RETURN;			}
 reverse			{ return K_REVERSE;			}
+row_count		{ return K_ROW_COUNT;		}
 select			{ return K_SELECT;			}
 then			{ return K_THEN;			}
 to				{ return K_TO;				}
-- 
GitLab