aboutsummaryrefslogtreecommitdiff
path: root/src/backend/parser/parse_relation.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/parser/parse_relation.c')
-rw-r--r--src/backend/parser/parse_relation.c38
1 files changed, 17 insertions, 21 deletions
diff --git a/src/backend/parser/parse_relation.c b/src/backend/parser/parse_relation.c
index 9b386cb6366..b822a2378ba 100644
--- a/src/backend/parser/parse_relation.c
+++ b/src/backend/parser/parse_relation.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/parse_relation.c,v 1.67 2002/04/02 08:51:51 inoue Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/parse_relation.c,v 1.68 2002/04/28 19:54:28 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -681,10 +681,7 @@ RangeTblEntry *
addRangeTableEntryForJoin(ParseState *pstate,
List *colnames,
JoinType jointype,
- List *coltypes,
- List *coltypmods,
- List *leftcols,
- List *rightcols,
+ List *aliasvars,
Alias *alias,
bool inFromCl)
{
@@ -696,10 +693,7 @@ addRangeTableEntryForJoin(ParseState *pstate,
rte->relid = InvalidOid;
rte->subquery = NULL;
rte->jointype = jointype;
- rte->joincoltypes = coltypes;
- rte->joincoltypmods = coltypmods;
- rte->joinleftcols = leftcols;
- rte->joinrightcols = rightcols;
+ rte->joinaliasvars = aliasvars;
rte->alias = alias;
eref = alias ? (Alias *) copyObject(alias) : makeAlias("unnamed_join", NIL);
@@ -922,13 +916,12 @@ expandRTE(ParseState *pstate, RangeTblEntry *rte,
{
/* Join RTE */
List *aliasp = rte->eref->colnames;
- List *coltypes = rte->joincoltypes;
- List *coltypmods = rte->joincoltypmods;
+ List *aliasvars = rte->joinaliasvars;
varattno = 0;
while (aliasp)
{
- Assert(coltypes && coltypmods);
+ Assert(aliasvars);
varattno++;
if (colnames)
@@ -940,21 +933,21 @@ expandRTE(ParseState *pstate, RangeTblEntry *rte,
if (colvars)
{
+ Node *aliasvar = (Node *) lfirst(aliasvars);
Var *varnode;
varnode = makeVar(rtindex, varattno,
- (Oid) lfirsti(coltypes),
- (int32) lfirsti(coltypmods),
+ exprType(aliasvar),
+ exprTypmod(aliasvar),
sublevels_up);
*colvars = lappend(*colvars, varnode);
}
aliasp = lnext(aliasp);
- coltypes = lnext(coltypes);
- coltypmods = lnext(coltypmods);
+ aliasvars = lnext(aliasvars);
}
- Assert(coltypes == NIL && coltypmods == NIL);
+ Assert(aliasvars == NIL);
}
else
elog(ERROR, "expandRTE: unsupported RTE kind %d",
@@ -1091,10 +1084,13 @@ get_rte_attribute_type(RangeTblEntry *rte, AttrNumber attnum,
}
else if (rte->rtekind == RTE_JOIN)
{
- /* Join RTE --- get type info directly from join RTE */
- Assert(attnum > 0 && attnum <= length(rte->joincoltypes));
- *vartype = (Oid) nthi(attnum-1, rte->joincoltypes);
- *vartypmod = nthi(attnum-1, rte->joincoltypmods);
+ /* Join RTE --- get type info from join RTE's alias variable */
+ Node *aliasvar;
+
+ Assert(attnum > 0 && attnum <= length(rte->joinaliasvars));
+ aliasvar = (Node *) nth(attnum-1, rte->joinaliasvars);
+ *vartype = exprType(aliasvar);
+ *vartypmod = exprTypmod(aliasvar);
}
else
elog(ERROR, "get_rte_attribute_type: unsupported RTE kind %d",