]> granicus.if.org Git - postgresql/commitdiff
Keep exec_simple_check_plan() from thinking "SELECT foo INTO bar" is simple.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 19 Aug 2010 18:10:56 +0000 (18:10 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 19 Aug 2010 18:10:56 +0000 (18:10 +0000)
It's not clear if this situation can occur in plpgsql other than via the
EXECUTE USING case Heikki illustrated, which I will shortly close off.
However, ignoring the intoClause if it's there is surely wrong, so let's
patch it for safety.

Backpatch to 8.3, which is as far back as this code has a PlannedStmt
to deal with.  There might be another way to make an equivalent test
before that, but since this is just preventing hypothetical bugs,
I'm not going to obsess about it.

src/pl/plpgsql/src/pl_exec.c

index 4a14b0c01afdb31352c39894b50a3d060b6b22c6..a4a327a9062f6c18de977e5f274f89294729b0dc 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.261.2.3 2010/08/19 17:31:50 tgl Exp $
+ *       $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.261.2.4 2010/08/19 18:10:56 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -5272,6 +5272,8 @@ exec_simple_check_plan(PLpgSQL_expr *expr)
         */
        if (!IsA(stmt, PlannedStmt))
                return;
+       if (stmt->commandType != CMD_SELECT || stmt->intoClause)
+               return;
        plan = stmt->planTree;
        if (!IsA(plan, Result))
                return;