Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Fix add_rte_to_flat_rtable() for recent feature additions.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 22 Jul 2015 00:03:58 +0000 (20:03 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 22 Jul 2015 00:03:58 +0000 (20:03 -0400)
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.

src/backend/optimizer/plan/setrefs.c

index 32c3108cabd75a1872118c7c8f6925a747ec625c..c80e8a0007ff6c187c78756133f1a6019917a1c3 100644 (file)
@@ -365,10 +365,10 @@ 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 and modifiedCols bitmaps,
- * which are needed for executor-startup permissions checking and for
- * trigger event checking.
+ * for cached plans.  We keep only the ctename, alias and eref Alias fields,
+ * which are needed by EXPLAIN, and the selectedCols and modifiedCols 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)
@@ -388,6 +388,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);