mirror of
https://github.com/postgres/postgres.git
synced 2025-04-21 12:05:57 +03:00
Fix overly-enthusiastic Assert in printing of Param reference expressions.
A NestLoopParam's value can only be a Var or Aggref, but this isn't the case in general for SubPlan parameters, so print_parameter_expr had better be prepared to cope. Brain fade in my recent patch to print the referenced expression instead of just printing $N for PARAM_EXEC Params. Per report from Pavel Stehule.
This commit is contained in:
parent
ef55e294e6
commit
c6873eac4c
@ -4368,6 +4368,7 @@ print_parameter_expr(Node *expr, ListCell *ancestor_cell,
|
|||||||
{
|
{
|
||||||
deparse_namespace save_dpns;
|
deparse_namespace save_dpns;
|
||||||
bool save_varprefix;
|
bool save_varprefix;
|
||||||
|
bool need_paren;
|
||||||
|
|
||||||
/* Switch attention to the ancestor plan node */
|
/* Switch attention to the ancestor plan node */
|
||||||
push_ancestor_plan(dpns, ancestor_cell, &save_dpns);
|
push_ancestor_plan(dpns, ancestor_cell, &save_dpns);
|
||||||
@ -4380,13 +4381,21 @@ print_parameter_expr(Node *expr, ListCell *ancestor_cell,
|
|||||||
context->varprefix = true;
|
context->varprefix = true;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We don't need to add parentheses because a Param's expansion is
|
* A Param's expansion is typically a Var, Aggref, or upper-level Param,
|
||||||
* (currently) always a Var or Aggref.
|
* which wouldn't need extra parentheses. Otherwise, insert parens to
|
||||||
|
* ensure the expression looks atomic.
|
||||||
*/
|
*/
|
||||||
Assert(IsA(expr, Var) || IsA(expr, Aggref));
|
need_paren = !(IsA(expr, Var) ||
|
||||||
|
IsA(expr, Aggref) ||
|
||||||
|
IsA(expr, Param));
|
||||||
|
if (need_paren)
|
||||||
|
appendStringInfoChar(context->buf, '(');
|
||||||
|
|
||||||
get_rule_expr(expr, context, false);
|
get_rule_expr(expr, context, false);
|
||||||
|
|
||||||
|
if (need_paren)
|
||||||
|
appendStringInfoChar(context->buf, ')');
|
||||||
|
|
||||||
context->varprefix = save_varprefix;
|
context->varprefix = save_varprefix;
|
||||||
|
|
||||||
pop_ancestor_plan(dpns, &save_dpns);
|
pop_ancestor_plan(dpns, &save_dpns);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user