mirror of
https://github.com/postgres/postgres.git
synced 2025-05-03 22:24:49 +03:00
Fix add_rte_to_flat_rtable() for recent feature additions.
The TABLESAMPLE and row security patches each overlooked this function, though their errors of omission were opposite: RLS failed to zero out the securityQuals field, leading to wasteful copying of useless expression trees in finished plans, while TABLESAMPLE neglected to add a comment saying that it intentionally *isn't* deleting the tablesample subtree. There probably should be a similar comment about ctename, too. Back-patch as appropriate.
This commit is contained in:
parent
35ac618a7c
commit
41ae3b74d9
@ -372,10 +372,11 @@ flatten_rtes_walker(Node *node, PlannerGlobal *glob)
|
||||
*
|
||||
* In the flat rangetable, we zero out substructure pointers that are not
|
||||
* needed by the executor; this reduces the storage space and copying cost
|
||||
* for cached plans. We keep only the alias and eref Alias fields, which are
|
||||
* needed by EXPLAIN, and the selectedCols, insertedCols and updatedCols
|
||||
* bitmaps, which are needed for executor-startup permissions checking and for
|
||||
* trigger event checking.
|
||||
* for cached plans. We keep only the tablesample field (which we'd otherwise
|
||||
* have to put in the plan tree, anyway); the ctename, alias and eref Alias
|
||||
* fields, which are needed by EXPLAIN; and the selectedCols, insertedCols and
|
||||
* updatedCols bitmaps, which are needed for executor-startup permissions
|
||||
* checking and for trigger event checking.
|
||||
*/
|
||||
static void
|
||||
add_rte_to_flat_rtable(PlannerGlobal *glob, RangeTblEntry *rte)
|
||||
@ -395,6 +396,7 @@ add_rte_to_flat_rtable(PlannerGlobal *glob, RangeTblEntry *rte)
|
||||
newrte->ctecoltypes = NIL;
|
||||
newrte->ctecoltypmods = NIL;
|
||||
newrte->ctecolcollations = NIL;
|
||||
newrte->securityQuals = NIL;
|
||||
|
||||
glob->finalrtable = lappend(glob->finalrtable, newrte);
|
||||
|
||||
@ -1199,7 +1201,7 @@ set_customscan_references(PlannerInfo *root,
|
||||
}
|
||||
|
||||
/* Adjust child plan-nodes recursively, if needed */
|
||||
foreach (lc, cscan->custom_plans)
|
||||
foreach(lc, cscan->custom_plans)
|
||||
{
|
||||
lfirst(lc) = set_plan_refs(root, (Plan *) lfirst(lc), rtoffset);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user