From 6918df16a5483600fb0466b96f813ed5b6927fd8 Mon Sep 17 00:00:00 2001 From: Tom Lane <tgl@sss.pgh.pa.us> Date: Mon, 24 Jun 2002 23:12:06 +0000 Subject: [PATCH] plpgsql's PERFORM statement now sets FOUND depending on whether any rows were returned by the performed query. Per recent pgsql-general discussion. --- doc/src/sgml/plsql.sgml | 12 +++++------- src/pl/plpgsql/src/pl_exec.c | 12 ++++++++---- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/doc/src/sgml/plsql.sgml b/doc/src/sgml/plsql.sgml index 91e96c77f06..082b77fc5b2 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.59 2002/06/15 19:34:51 momjian Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/Attic/plsql.sgml,v 2.60 2002/06/24 23:12:06 tgl Exp $ --> <chapter id="plpgsql"> @@ -903,7 +903,9 @@ PERFORM <replaceable>query</replaceable>; This executes a <literal>SELECT</literal> <replaceable>query</replaceable> and discards the result. <application>PL/pgSQL</application> variables are substituted - in the query as usual. + in the query as usual. Also, the special variable FOUND is set to + true if the query produced at least one row, or false if it produced + no rows. </para> <note> @@ -916,11 +918,7 @@ PERFORM <replaceable>query</replaceable>; <para> An example: <programlisting> -PERFORM create_mv(''cs_session_page_requests_mv'','' - SELECT session_id, page_id, count(*) AS n_hits, - sum(dwell_time) AS dwell_time, count(dwell_time) AS dwell_count - FROM cs_fact_table - GROUP BY session_id, page_id ''); +PERFORM create_mv(''cs_session_page_requests_mv'', my_query); </programlisting> </para> </sect2> diff --git a/src/pl/plpgsql/src/pl_exec.c b/src/pl/plpgsql/src/pl_exec.c index ab539dc928a..abfce9b8bd2 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.55 2002/03/25 07:41:10 tgl Exp $ + * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.56 2002/06/24 23:12:06 tgl Exp $ * * This software is copyrighted by Jan Wieck - Hamburg. * @@ -969,9 +969,11 @@ exec_stmt_assign(PLpgSQL_execstate * estate, PLpgSQL_stmt_assign * stmt) else { /* - * PERFORM: evaluate query and discard result. This cannot share - * code with the assignment case since we do not wish to - * constraint the discarded result to be only one row/column. + * PERFORM: evaluate query and discard result (but set FOUND + * depending on whether at least one row was returned). + * + * This cannot share code with the assignment case since we do not + * wish to constrain the discarded result to be only one row/column. */ int rc; @@ -985,6 +987,8 @@ exec_stmt_assign(PLpgSQL_execstate * estate, PLpgSQL_stmt_assign * stmt) if (rc != SPI_OK_SELECT) elog(ERROR, "query \"%s\" didn't return data", expr->query); + exec_set_found(estate, (estate->eval_processed != 0)); + exec_eval_cleanup(estate); } -- GitLab