diff options
author | Alexander Korotkov <akorotkov@postgresql.org> | 2025-04-28 11:20:22 +0300 |
---|---|---|
committer | Alexander Korotkov <akorotkov@postgresql.org> | 2025-04-28 11:20:22 +0300 |
commit | 73e736137616b86d8bc21ec3cba098e187d883d5 (patch) | |
tree | f64e746a9a5acbe61803c17530c13b4a59072a5f /src | |
parent | aaf9e95e8764093ab55baf27c35705f406f592f9 (diff) | |
download | postgresql-73e736137616b86d8bc21ec3cba098e187d883d5.tar.gz postgresql-73e736137616b86d8bc21ec3cba098e187d883d5.zip |
Restore comments in ChangeVarNodesExtended()
This commit restores comments in ChangeVarNodesExtended(), which were
accidentally removed by fc069a3a6319.
Reported-by: Richard Guo <guofenglinux@gmail.com>
Discussion: https://postgr.es/m/CAMbWs49PE3CvnV8vrQ0Dr%3DHqgZZmX0tdNbzVNJxqc8yg-8kDQQ%40mail.gmail.com
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/rewrite/rewriteManip.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/backend/rewrite/rewriteManip.c b/src/backend/rewrite/rewriteManip.c index 1c61085a0a7..e190f169fb3 100644 --- a/src/backend/rewrite/rewriteManip.c +++ b/src/backend/rewrite/rewriteManip.c @@ -758,10 +758,23 @@ ChangeVarNodesExtended(Node *node, int rt_index, int new_index, context.sublevels_up = sublevels_up; context.change_RangeTblRef = change_RangeTblRef; + /* + * Must be prepared to start with a Query or a bare expression tree; if + * it's a Query, go straight to query_tree_walker to make sure that + * sublevels_up doesn't get incremented prematurely. + */ if (node && IsA(node, Query)) { Query *qry = (Query *) node; + /* + * If we are starting at a Query, and sublevels_up is zero, then we + * must also fix rangetable indexes in the Query itself --- namely + * resultRelation, mergeTargetRelation, exclRelIndex and rowMarks + * entries. sublevels_up cannot be zero when recursing into a + * subquery, so there's no need to have the same logic inside + * ChangeVarNodes_walker. + */ if (sublevels_up == 0) { ListCell *l; @@ -772,6 +785,7 @@ ChangeVarNodesExtended(Node *node, int rt_index, int new_index, if (qry->mergeTargetRelation == rt_index) qry->mergeTargetRelation = new_index; + /* this is unlikely to ever be used, but ... */ if (qry->onConflict && qry->onConflict->exclRelIndex == rt_index) qry->onConflict->exclRelIndex = new_index; |