mirror of
https://github.com/postgres/postgres.git
synced 2025-08-27 07:42:10 +03:00
Don't bother to attach column name lists to RowExprs of named types.
If a RowExpr is marked as returning a named composite type, we aren't going to consult its colnames list; we'll use the attribute names shown for the type in pg_attribute. Hence, skip storing that list, to save a few nanoseconds when copying the expression tree around. Discussion: https://postgr.es/m/2950001.1638729947@sss.pgh.pa.us
This commit is contained in:
@@ -2279,8 +2279,8 @@ pullup_replace_vars_callback(Var *var,
|
||||
* If generating an expansion for a var of a named rowtype (ie, this
|
||||
* is a plain relation RTE), then we must include dummy items for
|
||||
* dropped columns. If the var is RECORD (ie, this is a JOIN), then
|
||||
* omit dropped columns. Either way, attach column names to the
|
||||
* RowExpr for use of ruleutils.c.
|
||||
* omit dropped columns. In the latter case, attach column names to
|
||||
* the RowExpr for use of the executor and ruleutils.c.
|
||||
*
|
||||
* In order to be able to cache the results, we always generate the
|
||||
* expansion with varlevelsup = 0, and then adjust if needed.
|
||||
@@ -2301,7 +2301,7 @@ pullup_replace_vars_callback(Var *var,
|
||||
rowexpr->args = fields;
|
||||
rowexpr->row_typeid = var->vartype;
|
||||
rowexpr->row_format = COERCE_IMPLICIT_CAST;
|
||||
rowexpr->colnames = colnames;
|
||||
rowexpr->colnames = (var->vartype == RECORDOID) ? colnames : NIL;
|
||||
rowexpr->location = var->location;
|
||||
newnode = (Node *) rowexpr;
|
||||
|
||||
|
@@ -809,6 +809,7 @@ flatten_join_alias_vars_mutator(Node *node,
|
||||
rowexpr->args = fields;
|
||||
rowexpr->row_typeid = var->vartype;
|
||||
rowexpr->row_format = COERCE_IMPLICIT_CAST;
|
||||
/* vartype will always be RECORDOID, so we always need colnames */
|
||||
rowexpr->colnames = colnames;
|
||||
rowexpr->location = var->location;
|
||||
|
||||
|
Reference in New Issue
Block a user