mirror of
https://github.com/postgres/postgres.git
synced 2025-06-29 10:41:53 +03:00
First cut at full support for OUTER JOINs. There are still a few loose
ends to clean up (see my message of same date to pghackers), but mostly it works. INITDB REQUIRED!
This commit is contained in:
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.65 2000/08/22 04:06:19 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.66 2000/09/12 21:06:48 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -275,53 +275,17 @@ void
|
||||
ExecAssignResultTypeFromTL(Plan *node, CommonState *commonstate)
|
||||
{
|
||||
List *targetList;
|
||||
int i;
|
||||
TupleDesc tupDesc;
|
||||
int len;
|
||||
List *tl;
|
||||
TargetEntry *tle;
|
||||
List *fjtl;
|
||||
TupleDesc origTupDesc;
|
||||
|
||||
targetList = node->targetlist;
|
||||
origTupDesc = ExecTypeFromTL(targetList);
|
||||
tupDesc = ExecTypeFromTL(targetList);
|
||||
len = ExecTargetListLength(targetList);
|
||||
|
||||
fjtl = NIL;
|
||||
tl = targetList;
|
||||
i = 0;
|
||||
while (tl != NIL || fjtl != NIL)
|
||||
{
|
||||
if (fjtl != NIL)
|
||||
{
|
||||
tle = lfirst(fjtl);
|
||||
fjtl = lnext(fjtl);
|
||||
}
|
||||
else
|
||||
{
|
||||
tle = lfirst(tl);
|
||||
tl = lnext(tl);
|
||||
}
|
||||
#ifdef SETS_FIXED
|
||||
if (!tl_is_resdom(tle))
|
||||
{
|
||||
Fjoin *fj = (Fjoin *) lfirst(tle);
|
||||
|
||||
/* it is a FJoin */
|
||||
fjtl = lnext(tle);
|
||||
tle = fj->fj_innerNode;
|
||||
}
|
||||
#endif
|
||||
i++;
|
||||
}
|
||||
|
||||
if (len > 0)
|
||||
{
|
||||
ExecAssignResultType(commonstate,
|
||||
origTupDesc);
|
||||
}
|
||||
ExecAssignResultType(commonstate, tupDesc);
|
||||
else
|
||||
ExecAssignResultType(commonstate,
|
||||
(TupleDesc) NULL);
|
||||
ExecAssignResultType(commonstate, (TupleDesc) NULL);
|
||||
}
|
||||
|
||||
/* ----------------
|
||||
|
Reference in New Issue
Block a user