mirror of
https://github.com/postgres/postgres.git
synced 2025-07-21 16:02:15 +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:
@ -365,10 +365,10 @@ flatten_rtes_walker(Node *node, PlannerGlobal *glob)
|
|||||||
*
|
*
|
||||||
* In the flat rangetable, we zero out substructure pointers that are not
|
* In the flat rangetable, we zero out substructure pointers that are not
|
||||||
* needed by the executor; this reduces the storage space and copying cost
|
* 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
|
* for cached plans. We keep only the ctename, alias and eref Alias fields,
|
||||||
* are needed by EXPLAIN, and the selectedCols and modifiedCols bitmaps,
|
* which are needed by EXPLAIN, and the selectedCols and modifiedCols bitmaps,
|
||||||
* which are needed for executor-startup permissions checking and for
|
* which are needed for executor-startup permissions checking and for trigger
|
||||||
* trigger event checking.
|
* event checking.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
add_rte_to_flat_rtable(PlannerGlobal *glob, RangeTblEntry *rte)
|
add_rte_to_flat_rtable(PlannerGlobal *glob, RangeTblEntry *rte)
|
||||||
@ -388,6 +388,7 @@ add_rte_to_flat_rtable(PlannerGlobal *glob, RangeTblEntry *rte)
|
|||||||
newrte->ctecoltypes = NIL;
|
newrte->ctecoltypes = NIL;
|
||||||
newrte->ctecoltypmods = NIL;
|
newrte->ctecoltypmods = NIL;
|
||||||
newrte->ctecolcollations = NIL;
|
newrte->ctecolcollations = NIL;
|
||||||
|
newrte->securityQuals = NIL;
|
||||||
|
|
||||||
glob->finalrtable = lappend(glob->finalrtable, newrte);
|
glob->finalrtable = lappend(glob->finalrtable, newrte);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user