OSDN Git Service

Guard against transaction control statements in SQL functions. This
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 6 Sep 2004 18:10:38 +0000 (18:10 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 6 Sep 2004 18:10:38 +0000 (18:10 +0000)
never worked, but it particularly doesn't work now.

src/backend/executor/functions.c

index ea3b12b..2a9e5d8 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/executor/functions.c,v 1.86 2004/08/29 05:06:42 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/executor/functions.c,v 1.87 2004/09/06 18:10:38 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -285,6 +285,11 @@ postquel_getnext(execution_state *es)
 
        if (es->qd->operation == CMD_UTILITY)
        {
+               /* Can't handle starting or committing a transaction */
+               if (IsA(es->qd->parsetree->utilityStmt, TransactionStmt))
+                       ereport(ERROR,
+                                       (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+                                        errmsg("cannot begin/end transactions in SQL functions")));
                ProcessUtility(es->qd->parsetree->utilityStmt, es->qd->params,
                                           es->qd->dest, NULL);
                return NULL;