Commit c6873eac authored by Tom Lane's avatar Tom Lane

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.
parent ef55e294
...@@ -4368,6 +4368,7 @@ print_parameter_expr(Node *expr, ListCell *ancestor_cell, ...@@ -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, ...@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment