diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2023-02-13 12:19:58 -0500 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2023-02-13 12:19:58 -0500 |
commit | c7468c73f7b6e842a53c12eaee5578a76a8fa7a6 (patch) | |
tree | b9e98e8e29c575046100e3d42c9d723319f8248e /src/backend/optimizer/plan/setrefs.c | |
parent | f50f029c497da35927491f16964f7aa993ecbae5 (diff) | |
download | postgresql-c7468c73f7b6e842a53c12eaee5578a76a8fa7a6.tar.gz postgresql-c7468c73f7b6e842a53c12eaee5578a76a8fa7a6.zip |
Fix buggy recursion in flatten_rtes_walker().
Must save-and-restore the context we are modifying.
Oversight in commit a61b1f748.
Tender Wang
Discussion: https://postgr.es/m/CAHewXNnnNySD_YcKNuFpQDV2gxWA7_YLWqHmYVcyoOYxn8kY2A@mail.gmail.com
Discussion: https://postgr.es/m/20230212233711.GA1316@telsasoft.com
Diffstat (limited to 'src/backend/optimizer/plan/setrefs.c')
-rw-r--r-- | src/backend/optimizer/plan/setrefs.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c index 186fc8014b6..5cc8366af66 100644 --- a/src/backend/optimizer/plan/setrefs.c +++ b/src/backend/optimizer/plan/setrefs.c @@ -536,11 +536,16 @@ flatten_rtes_walker(Node *node, flatten_rtes_walker_context *cxt) * Recurse into subselects. Must update cxt->query to this query so * that the rtable and rteperminfos correspond with each other. */ + Query *save_query = cxt->query; + bool result; + cxt->query = (Query *) node; - return query_tree_walker((Query *) node, - flatten_rtes_walker, - (void *) cxt, - QTW_EXAMINE_RTES_BEFORE); + result = query_tree_walker((Query *) node, + flatten_rtes_walker, + (void *) cxt, + QTW_EXAMINE_RTES_BEFORE); + cxt->query = save_query; + return result; } return expression_tree_walker(node, flatten_rtes_walker, (void *) cxt); |