Skip to content

Commit 16a3ae5

Browse files
committed
Revert inappropriate weakening of an Assert in plpgsql.
Commit 682ce91 modified exec_save_simple_expr to accept a Param in the tlist of a Gather node, rather than the normal case of a Var referencing the Gather's input. It turns out that this was a kluge to work around the bug later fixed in 0f7ec8d, namely that setrefs.c was failing to replace Params in upper plan nodes with Var references to the same Params appearing in the child tlists. With that fixed, there seems no reason to continue to allow a Param here. (Moreover, even if we did expect a Param here, the semantically correct thing to do would be to take the Param as the expression being sought. Whatever it may represent, it is *not* a reference to the child.) Hence, revert that part of 682ce91. That all happened a long time ago. However, since the net effect here is just to tighten an Assert condition, I'm content to change it only in master. Discussion: https://postgr.es/m/1565347.1742572349@sss.pgh.pa.us
1 parent 04ff636 commit 16a3ae5

File tree

1 file changed

+4
-5
lines changed

1 file changed

+4
-5
lines changed

src/pl/plpgsql/src/pl_exec.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8306,8 +8306,7 @@ exec_save_simple_expr(PLpgSQL_expr *expr, CachedPlan *cplan)
83068306
* might've stuck a Material node atop it. The simplest way to deal with
83078307
* this is to look through the Gather and/or Material nodes. The upper
83088308
* node's tlist would normally contain a Var referencing the child node's
8309-
* output, but it could also be a Param, or it could be a Const that
8310-
* setrefs.c copied as-is.
8309+
* output ... but setrefs.c might also have copied a Const as-is.
83118310
*/
83128311
plan = stmt->planTree;
83138312
for (;;)
@@ -8334,9 +8333,9 @@ exec_save_simple_expr(PLpgSQL_expr *expr, CachedPlan *cplan)
83348333
/* If setrefs.c copied up a Const, no need to look further */
83358334
if (IsA(tle_expr, Const))
83368335
break;
8337-
/* Otherwise, it had better be a Param or an outer Var */
8338-
Assert(IsA(tle_expr, Param) || (IsA(tle_expr, Var) &&
8339-
((Var *) tle_expr)->varno == OUTER_VAR));
8336+
/* Otherwise, it better be an outer Var */
8337+
Assert(IsA(tle_expr, Var));
8338+
Assert(((Var *) tle_expr)->varno == OUTER_VAR);
83408339
/* Descend to the child node */
83418340
plan = plan->lefttree;
83428341
}

0 commit comments

Comments
 (0)