aboutsummaryrefslogtreecommitdiff
path: root/src/backend/parser/parse_coerce.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/parser/parse_coerce.c')
-rw-r--r--src/backend/parser/parse_coerce.c29
1 files changed, 6 insertions, 23 deletions
diff --git a/src/backend/parser/parse_coerce.c b/src/backend/parser/parse_coerce.c
index 8065b261beb..8d892fcffe1 100644
--- a/src/backend/parser/parse_coerce.c
+++ b/src/backend/parser/parse_coerce.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/parser/parse_coerce.c,v 2.120 2004/08/17 18:47:08 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/parser/parse_coerce.c,v 2.121 2004/08/19 20:57:40 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -662,29 +662,12 @@ coerce_record_to_complex(ParseState *pstate, Node *node,
else if (node && IsA(node, Var) &&
((Var *) node)->varattno == InvalidAttrNumber)
{
- RangeTblEntry *rte;
- AttrNumber nfields;
- AttrNumber nf;
-
- rte = GetRTEByRangeTablePosn(pstate,
- ((Var *) node)->varno,
- ((Var *) node)->varlevelsup);
- nfields = list_length(rte->eref->colnames);
- for (nf = 1; nf <= nfields; nf++)
- {
- Oid vartype;
- int32 vartypmod;
+ int rtindex = ((Var *) node)->varno;
+ int sublevels_up = ((Var *) node)->varlevelsup;
+ List *rtable;
- if (get_rte_attribute_is_dropped(rte, nf))
- continue;
- get_rte_attribute_type(rte, nf, &vartype, &vartypmod);
- args = lappend(args,
- makeVar(((Var *) node)->varno,
- nf,
- vartype,
- vartypmod,
- ((Var *) node)->varlevelsup));
- }
+ rtable = GetLevelNRangeTable(pstate, sublevels_up);
+ expandRTE(rtable, rtindex, sublevels_up, false, NULL, &args);
}
else
ereport(ERROR,