aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlexander Korotkov <akorotkov@postgresql.org>2025-04-28 11:20:22 +0300
committerAlexander Korotkov <akorotkov@postgresql.org>2025-04-28 11:20:22 +0300
commit73e736137616b86d8bc21ec3cba098e187d883d5 (patch)
treef64e746a9a5acbe61803c17530c13b4a59072a5f /src
parentaaf9e95e8764093ab55baf27c35705f406f592f9 (diff)
downloadpostgresql-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.c14
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;