Rename Temp to Noname for noname tables.
This commit is contained in:
parent
78511d8fe9
commit
318e593f03
|
@ -7,7 +7,7 @@
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.72 1999/02/03 21:15:54 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.73 1999/02/09 17:02:42 momjian Exp $
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* INTERFACE ROUTINES
|
* INTERFACE ROUTINES
|
||||||
|
@ -149,7 +149,7 @@ typedef struct tempRelList
|
||||||
* array */
|
* array */
|
||||||
} TempRelList;
|
} TempRelList;
|
||||||
|
|
||||||
#define TEMP_REL_LIST_SIZE 32
|
#define NONAME_REL_LIST_SIZE 32
|
||||||
|
|
||||||
static TempRelList *tempRels = NULL;
|
static TempRelList *tempRels = NULL;
|
||||||
|
|
||||||
|
@ -1392,7 +1392,7 @@ InitNoNameRelList(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
tempRels = (TempRelList *) malloc(sizeof(TempRelList));
|
tempRels = (TempRelList *) malloc(sizeof(TempRelList));
|
||||||
tempRels->size = TEMP_REL_LIST_SIZE;
|
tempRels->size = NONAME_REL_LIST_SIZE;
|
||||||
tempRels->rels = (Relation *) malloc(sizeof(Relation) * tempRels->size);
|
tempRels->rels = (Relation *) malloc(sizeof(Relation) * tempRels->size);
|
||||||
MemSet(tempRels->rels, 0, sizeof(Relation) * tempRels->size);
|
MemSet(tempRels->rels, 0, sizeof(Relation) * tempRels->size);
|
||||||
tempRels->num = 0;
|
tempRels->num = 0;
|
||||||
|
@ -1436,7 +1436,7 @@ AddToNoNameRelList(Relation r)
|
||||||
|
|
||||||
if (tempRels->num == tempRels->size)
|
if (tempRels->num == tempRels->size)
|
||||||
{
|
{
|
||||||
tempRels->size += TEMP_REL_LIST_SIZE;
|
tempRels->size += NONAME_REL_LIST_SIZE;
|
||||||
tempRels->rels = realloc(tempRels->rels,
|
tempRels->rels = realloc(tempRels->rels,
|
||||||
sizeof(Relation) * tempRels->size);
|
sizeof(Relation) * tempRels->size);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
*
|
*
|
||||||
* Copyright (c) 1994-5, Regents of the University of California
|
* Copyright (c) 1994-5, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Id: explain.c,v 1.30 1998/12/18 14:45:07 wieck Exp $
|
* $Id: explain.c,v 1.31 1999/02/09 17:02:43 momjian Exp $
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -176,8 +176,8 @@ explain_outNode(StringInfo str, Plan *plan, int indent, ExplainState *es)
|
||||||
case T_IndexScan:
|
case T_IndexScan:
|
||||||
pname = "Index Scan";
|
pname = "Index Scan";
|
||||||
break;
|
break;
|
||||||
case T_Temp:
|
case T_Noname:
|
||||||
pname = "Temp Scan";
|
pname = "Noname Scan";
|
||||||
break;
|
break;
|
||||||
case T_Sort:
|
case T_Sort:
|
||||||
pname = "Sort";
|
pname = "Sort";
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
*
|
*
|
||||||
* Copyright (c) 1994, Regents of the University of California
|
* Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Id: execAmi.c,v 1.30 1999/02/02 03:44:23 momjian Exp $
|
* $Id: execAmi.c,v 1.31 1999/02/09 17:02:44 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -50,7 +50,7 @@
|
||||||
#include "executor/nodeAppend.h"
|
#include "executor/nodeAppend.h"
|
||||||
#include "executor/nodeSubplan.h"
|
#include "executor/nodeSubplan.h"
|
||||||
#include "executor/execdebug.h"
|
#include "executor/execdebug.h"
|
||||||
#include "optimizer/internal.h" /* for _TEMP_RELATION_ID_ */
|
#include "optimizer/internal.h" /* for _NONAME_RELATION_ID_ */
|
||||||
#include "access/genam.h"
|
#include "access/genam.h"
|
||||||
#include "access/heapam.h"
|
#include "access/heapam.h"
|
||||||
#include "catalog/heap.h"
|
#include "catalog/heap.h"
|
||||||
|
@ -509,11 +509,11 @@ ExecCreatR(TupleDesc tupType,
|
||||||
|
|
||||||
relDesc = NULL;
|
relDesc = NULL;
|
||||||
|
|
||||||
if (relationOid == _TEMP_RELATION_ID_)
|
if (relationOid == _NONAME_RELATION_ID_)
|
||||||
{
|
{
|
||||||
/* ----------------
|
/* ----------------
|
||||||
* create a temporary relation
|
* create a temporary relation
|
||||||
* (currently the planner always puts a _TEMP_RELATION_ID
|
* (currently the planner always puts a _NONAME_RELATION_ID
|
||||||
* in the relation argument so we expect this to be the case although
|
* in the relation argument so we expect this to be the case although
|
||||||
* it's possible that someday we'll get the name from
|
* it's possible that someday we'll get the name from
|
||||||
* from the range table.. -cim 10/12/89)
|
* from the range table.. -cim 10/12/89)
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/executor/nodeMaterial.c,v 1.19 1999/02/03 21:16:14 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/executor/nodeMaterial.c,v 1.20 1999/02/09 17:02:44 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -25,7 +25,7 @@
|
||||||
#include "executor/nodeMaterial.h"
|
#include "executor/nodeMaterial.h"
|
||||||
#include "catalog/catalog.h"
|
#include "catalog/catalog.h"
|
||||||
#include "catalog/heap.h"
|
#include "catalog/heap.h"
|
||||||
#include "optimizer/internal.h" /* for _TEMP_RELATION_ID_ */
|
#include "optimizer/internal.h" /* for _NONAME_RELATION_ID_ */
|
||||||
#include "access/heapam.h"
|
#include "access/heapam.h"
|
||||||
|
|
||||||
/* ----------------------------------------------------------------
|
/* ----------------------------------------------------------------
|
||||||
|
@ -265,7 +265,7 @@ ExecInitMaterial(Material *node, EState *estate, Plan *parent)
|
||||||
|
|
||||||
/* ----------------
|
/* ----------------
|
||||||
* ExecCreatR wants it's second argument to be an object id of
|
* ExecCreatR wants it's second argument to be an object id of
|
||||||
* a relation in the range table or a _TEMP_RELATION_ID
|
* a relation in the range table or a _NONAME_RELATION_ID
|
||||||
* indicating that the relation is not in the range table.
|
* indicating that the relation is not in the range table.
|
||||||
*
|
*
|
||||||
* In the second case ExecCreatR creates a temp relation.
|
* In the second case ExecCreatR creates a temp relation.
|
||||||
|
@ -277,7 +277,7 @@ ExecInitMaterial(Material *node, EState *estate, Plan *parent)
|
||||||
* ----------------
|
* ----------------
|
||||||
*/
|
*/
|
||||||
/* len = ExecTargetListLength(node->plan.targetlist); */
|
/* len = ExecTargetListLength(node->plan.targetlist); */
|
||||||
tempDesc = ExecCreatR(tupType, _TEMP_RELATION_ID_);
|
tempDesc = ExecCreatR(tupType, _NONAME_RELATION_ID_);
|
||||||
|
|
||||||
/* ----------------
|
/* ----------------
|
||||||
* save the relation descriptor in the sortstate
|
* save the relation descriptor in the sortstate
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/executor/nodeSort.c,v 1.16 1998/09/01 03:22:30 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/executor/nodeSort.c,v 1.17 1999/02/09 17:02:45 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -22,7 +22,7 @@
|
||||||
#include "catalog/catalog.h"
|
#include "catalog/catalog.h"
|
||||||
#include "catalog/heap.h"
|
#include "catalog/heap.h"
|
||||||
#include "storage/bufmgr.h"
|
#include "storage/bufmgr.h"
|
||||||
#include "optimizer/internal.h" /* for _TEMP_RELATION_ID_ */
|
#include "optimizer/internal.h" /* for _NONAME_RELATION_ID_ */
|
||||||
|
|
||||||
/* ----------------------------------------------------------------
|
/* ----------------------------------------------------------------
|
||||||
* FormSortKeys(node)
|
* FormSortKeys(node)
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.64 1999/02/09 03:51:12 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.65 1999/02/09 17:02:46 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -372,36 +372,36 @@ _copyHashJoin(HashJoin *from)
|
||||||
|
|
||||||
|
|
||||||
/* ----------------
|
/* ----------------
|
||||||
* CopyTempFields
|
* CopyNonameFields
|
||||||
*
|
*
|
||||||
* This function copies the fields of the Temp node. It is used by
|
* This function copies the fields of the Noname node. It is used by
|
||||||
* all the copy functions for classes which inherit from Temp.
|
* all the copy functions for classes which inherit from Noname.
|
||||||
* ----------------
|
* ----------------
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
CopyTempFields(Temp *from, Temp *newnode)
|
CopyNonameFields(Noname *from, Noname *newnode)
|
||||||
{
|
{
|
||||||
newnode->tempid = from->tempid;
|
newnode->nonameid = from->nonameid;
|
||||||
newnode->keycount = from->keycount;
|
newnode->keycount = from->keycount;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ----------------
|
/* ----------------
|
||||||
* _copyTemp
|
* _copyNoname
|
||||||
* ----------------
|
* ----------------
|
||||||
*/
|
*/
|
||||||
static Temp *
|
static Noname *
|
||||||
_copyTemp(Temp *from)
|
_copyNoname(Noname *from)
|
||||||
{
|
{
|
||||||
Temp *newnode = makeNode(Temp);
|
Noname *newnode = makeNode(Noname);
|
||||||
|
|
||||||
/* ----------------
|
/* ----------------
|
||||||
* copy node superclass fields
|
* copy node superclass fields
|
||||||
* ----------------
|
* ----------------
|
||||||
*/
|
*/
|
||||||
CopyPlanFields((Plan *) from, (Plan *) newnode);
|
CopyPlanFields((Plan *) from, (Plan *) newnode);
|
||||||
CopyTempFields(from, newnode);
|
CopyNonameFields(from, newnode);
|
||||||
|
|
||||||
return newnode;
|
return newnode;
|
||||||
}
|
}
|
||||||
|
@ -420,7 +420,7 @@ _copyMaterial(Material *from)
|
||||||
* ----------------
|
* ----------------
|
||||||
*/
|
*/
|
||||||
CopyPlanFields((Plan *) from, (Plan *) newnode);
|
CopyPlanFields((Plan *) from, (Plan *) newnode);
|
||||||
CopyTempFields((Temp *) from, (Temp *) newnode);
|
CopyNonameFields((Noname *) from, (Noname *) newnode);
|
||||||
|
|
||||||
return newnode;
|
return newnode;
|
||||||
}
|
}
|
||||||
|
@ -440,7 +440,7 @@ _copySort(Sort *from)
|
||||||
* ----------------
|
* ----------------
|
||||||
*/
|
*/
|
||||||
CopyPlanFields((Plan *) from, (Plan *) newnode);
|
CopyPlanFields((Plan *) from, (Plan *) newnode);
|
||||||
CopyTempFields((Temp *) from, (Temp *) newnode);
|
CopyNonameFields((Noname *) from, (Noname *) newnode);
|
||||||
|
|
||||||
return newnode;
|
return newnode;
|
||||||
}
|
}
|
||||||
|
@ -511,7 +511,7 @@ _copyUnique(Unique *from)
|
||||||
* ----------------
|
* ----------------
|
||||||
*/
|
*/
|
||||||
CopyPlanFields((Plan *) from, (Plan *) newnode);
|
CopyPlanFields((Plan *) from, (Plan *) newnode);
|
||||||
CopyTempFields((Temp *) from, (Temp *) newnode);
|
CopyNonameFields((Noname *) from, (Noname *) newnode);
|
||||||
|
|
||||||
/* ----------------
|
/* ----------------
|
||||||
* copy remainder of node
|
* copy remainder of node
|
||||||
|
@ -1688,8 +1688,8 @@ copyObject(void *from)
|
||||||
case T_HashJoin:
|
case T_HashJoin:
|
||||||
retval = _copyHashJoin(from);
|
retval = _copyHashJoin(from);
|
||||||
break;
|
break;
|
||||||
case T_Temp:
|
case T_Noname:
|
||||||
retval = _copyTemp(from);
|
retval = _copyNoname(from);
|
||||||
break;
|
break;
|
||||||
case T_Material:
|
case T_Material:
|
||||||
retval = _copyMaterial(from);
|
retval = _copyMaterial(from);
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/nodes/Attic/freefuncs.c,v 1.3 1999/02/09 03:51:12 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/nodes/Attic/freefuncs.c,v 1.4 1999/02/09 17:02:49 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -298,32 +298,32 @@ _freeHashJoin(HashJoin *node)
|
||||||
|
|
||||||
|
|
||||||
/* ----------------
|
/* ----------------
|
||||||
* FreeTempFields
|
* FreeNonameFields
|
||||||
*
|
*
|
||||||
* This function frees the fields of the Temp node. It is used by
|
* This function frees the fields of the Noname node. It is used by
|
||||||
* all the free functions for classes which inherit node Temp.
|
* all the free functions for classes which inherit node Noname.
|
||||||
* ----------------
|
* ----------------
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
FreeTempFields(Temp *node)
|
FreeNonameFields(Noname *node)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ----------------
|
/* ----------------
|
||||||
* _freeTemp
|
* _freeNoname
|
||||||
* ----------------
|
* ----------------
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
_freeTemp(Temp *node)
|
_freeNoname(Noname *node)
|
||||||
{
|
{
|
||||||
/* ----------------
|
/* ----------------
|
||||||
* free node superclass fields
|
* free node superclass fields
|
||||||
* ----------------
|
* ----------------
|
||||||
*/
|
*/
|
||||||
FreePlanFields((Plan *) node);
|
FreePlanFields((Plan *) node);
|
||||||
FreeTempFields(node);
|
FreeNonameFields(node);
|
||||||
|
|
||||||
pfree(node);
|
pfree(node);
|
||||||
}
|
}
|
||||||
|
@ -340,7 +340,7 @@ _freeMaterial(Material *node)
|
||||||
* ----------------
|
* ----------------
|
||||||
*/
|
*/
|
||||||
FreePlanFields((Plan *) node);
|
FreePlanFields((Plan *) node);
|
||||||
FreeTempFields((Temp *) node);
|
FreeNonameFields((Noname *) node);
|
||||||
|
|
||||||
pfree(node);
|
pfree(node);
|
||||||
}
|
}
|
||||||
|
@ -358,7 +358,7 @@ _freeSort(Sort *node)
|
||||||
* ----------------
|
* ----------------
|
||||||
*/
|
*/
|
||||||
FreePlanFields((Plan *) node);
|
FreePlanFields((Plan *) node);
|
||||||
FreeTempFields((Temp *) node);
|
FreeNonameFields((Noname *) node);
|
||||||
|
|
||||||
pfree(node);
|
pfree(node);
|
||||||
}
|
}
|
||||||
|
@ -417,7 +417,7 @@ _freeUnique(Unique *node)
|
||||||
* ----------------
|
* ----------------
|
||||||
*/
|
*/
|
||||||
FreePlanFields((Plan *) node);
|
FreePlanFields((Plan *) node);
|
||||||
FreeTempFields((Temp *) node);
|
FreeNonameFields((Noname *) node);
|
||||||
|
|
||||||
/* ----------------
|
/* ----------------
|
||||||
* free remainder of node
|
* free remainder of node
|
||||||
|
@ -1207,8 +1207,8 @@ freeObject(void *node)
|
||||||
case T_HashJoin:
|
case T_HashJoin:
|
||||||
_freeHashJoin(node);
|
_freeHashJoin(node);
|
||||||
break;
|
break;
|
||||||
case T_Temp:
|
case T_Noname:
|
||||||
_freeTemp(node);
|
_freeNoname(node);
|
||||||
break;
|
break;
|
||||||
case T_Material:
|
case T_Material:
|
||||||
_freeMaterial(node);
|
_freeMaterial(node);
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
*
|
*
|
||||||
* Copyright (c) 1994, Regents of the University of California
|
* Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Id: outfuncs.c,v 1.66 1999/02/09 03:51:13 momjian Exp $
|
* $Id: outfuncs.c,v 1.67 1999/02/09 17:02:49 momjian Exp $
|
||||||
*
|
*
|
||||||
* NOTES
|
* NOTES
|
||||||
* Every (plan) node in POSTGRES has an associated "out" routine which
|
* Every (plan) node in POSTGRES has an associated "out" routine which
|
||||||
|
@ -472,21 +472,21 @@ _outIndexScan(StringInfo str, IndexScan *node)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Temp is a subclass of Plan
|
* Noname is a subclass of Plan
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
_outTemp(StringInfo str, Temp *node)
|
_outNoname(StringInfo str, Noname *node)
|
||||||
{
|
{
|
||||||
appendStringInfo(str, " TEMP ");
|
appendStringInfo(str, " NONAME ");
|
||||||
_outPlanInfo(str, (Plan *) node);
|
_outPlanInfo(str, (Plan *) node);
|
||||||
|
|
||||||
appendStringInfo(str, " :tempid %u :keycount %d ",
|
appendStringInfo(str, " :nonameid %u :keycount %d ",
|
||||||
node->tempid,
|
node->nonameid,
|
||||||
node->keycount);
|
node->keycount);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Sort is a subclass of Temp
|
* Sort is a subclass of Noname
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
_outSort(StringInfo str, Sort *node)
|
_outSort(StringInfo str, Sort *node)
|
||||||
|
@ -494,8 +494,8 @@ _outSort(StringInfo str, Sort *node)
|
||||||
appendStringInfo(str, " SORT ");
|
appendStringInfo(str, " SORT ");
|
||||||
_outPlanInfo(str, (Plan *) node);
|
_outPlanInfo(str, (Plan *) node);
|
||||||
|
|
||||||
appendStringInfo(str, " :tempid %u :keycount %d ",
|
appendStringInfo(str, " :nonameid %u :keycount %d ",
|
||||||
node->tempid,
|
node->nonameid,
|
||||||
node->keycount);
|
node->keycount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -523,7 +523,7 @@ _outGroup(StringInfo str, Group *node)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For some reason, unique is a subclass of Temp.
|
* For some reason, unique is a subclass of Noname.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
_outUnique(StringInfo str, Unique *node)
|
_outUnique(StringInfo str, Unique *node)
|
||||||
|
@ -531,14 +531,14 @@ _outUnique(StringInfo str, Unique *node)
|
||||||
appendStringInfo(str, " UNIQUE ");
|
appendStringInfo(str, " UNIQUE ");
|
||||||
_outPlanInfo(str, (Plan *) node);
|
_outPlanInfo(str, (Plan *) node);
|
||||||
|
|
||||||
appendStringInfo(str, " :tempid %u :keycount %d ",
|
appendStringInfo(str, " :nonameid %u :keycount %d ",
|
||||||
node->tempid,
|
node->nonameid,
|
||||||
node->keycount);
|
node->keycount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Hash is a subclass of Temp
|
* Hash is a subclass of Noname
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
_outHash(StringInfo str, Hash *node)
|
_outHash(StringInfo str, Hash *node)
|
||||||
|
@ -1517,8 +1517,8 @@ _outNode(StringInfo str, void *obj)
|
||||||
case T_IndexScan:
|
case T_IndexScan:
|
||||||
_outIndexScan(str, obj);
|
_outIndexScan(str, obj);
|
||||||
break;
|
break;
|
||||||
case T_Temp:
|
case T_Noname:
|
||||||
_outTemp(str, obj);
|
_outNoname(str, obj);
|
||||||
break;
|
break;
|
||||||
case T_Sort:
|
case T_Sort:
|
||||||
_outSort(str, obj);
|
_outSort(str, obj);
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/nodes/print.c,v 1.19 1999/01/27 00:36:28 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/nodes/print.c,v 1.20 1999/02/09 17:02:49 momjian Exp $
|
||||||
*
|
*
|
||||||
* HISTORY
|
* HISTORY
|
||||||
* AUTHOR DATE MAJOR EVENT
|
* AUTHOR DATE MAJOR EVENT
|
||||||
|
@ -313,8 +313,8 @@ plannode_type(Plan *p)
|
||||||
case T_HashJoin:
|
case T_HashJoin:
|
||||||
return "HASHJOIN";
|
return "HASHJOIN";
|
||||||
break;
|
break;
|
||||||
case T_Temp:
|
case T_Noname:
|
||||||
return "TEMP";
|
return "NONAME";
|
||||||
break;
|
break;
|
||||||
case T_Material:
|
case T_Material:
|
||||||
return "MATERIAL";
|
return "MATERIAL";
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.51 1999/02/09 03:51:13 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.52 1999/02/09 17:02:50 momjian Exp $
|
||||||
*
|
*
|
||||||
* NOTES
|
* NOTES
|
||||||
* Most of the read functions for plan nodes are tested. (In fact, they
|
* Most of the read functions for plan nodes are tested. (In fact, they
|
||||||
|
@ -565,25 +565,25 @@ _readIndexScan()
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------
|
/* ----------------
|
||||||
* _readTemp
|
* _readNoname
|
||||||
*
|
*
|
||||||
* Temp is a subclass of Plan
|
* Noname is a subclass of Plan
|
||||||
* ----------------
|
* ----------------
|
||||||
*/
|
*/
|
||||||
static Temp *
|
static Noname *
|
||||||
_readTemp()
|
_readNoname()
|
||||||
{
|
{
|
||||||
Temp *local_node;
|
Noname *local_node;
|
||||||
char *token;
|
char *token;
|
||||||
int length;
|
int length;
|
||||||
|
|
||||||
local_node = makeNode(Temp);
|
local_node = makeNode(Noname);
|
||||||
|
|
||||||
_getPlan((Plan *) local_node);
|
_getPlan((Plan *) local_node);
|
||||||
|
|
||||||
token = lsptok(NULL, &length); /* eat :tempid */
|
token = lsptok(NULL, &length); /* eat :nonameid */
|
||||||
token = lsptok(NULL, &length); /* get tempid */
|
token = lsptok(NULL, &length); /* get nonameid */
|
||||||
local_node->tempid = atol(token);
|
local_node->nonameid = atol(token);
|
||||||
|
|
||||||
token = lsptok(NULL, &length); /* eat :keycount */
|
token = lsptok(NULL, &length); /* eat :keycount */
|
||||||
token = lsptok(NULL, &length); /* get keycount */
|
token = lsptok(NULL, &length); /* get keycount */
|
||||||
|
@ -595,7 +595,7 @@ _readTemp()
|
||||||
/* ----------------
|
/* ----------------
|
||||||
* _readSort
|
* _readSort
|
||||||
*
|
*
|
||||||
* Sort is a subclass of Temp
|
* Sort is a subclass of Noname
|
||||||
* ----------------
|
* ----------------
|
||||||
*/
|
*/
|
||||||
static Sort *
|
static Sort *
|
||||||
|
@ -609,9 +609,9 @@ _readSort()
|
||||||
|
|
||||||
_getPlan((Plan *) local_node);
|
_getPlan((Plan *) local_node);
|
||||||
|
|
||||||
token = lsptok(NULL, &length); /* eat :tempid */
|
token = lsptok(NULL, &length); /* eat :nonameid */
|
||||||
token = lsptok(NULL, &length); /* get tempid */
|
token = lsptok(NULL, &length); /* get nonameid */
|
||||||
local_node->tempid = atol(token);
|
local_node->nonameid = atol(token);
|
||||||
|
|
||||||
token = lsptok(NULL, &length); /* eat :keycount */
|
token = lsptok(NULL, &length); /* eat :keycount */
|
||||||
token = lsptok(NULL, &length); /* get keycount */
|
token = lsptok(NULL, &length); /* get keycount */
|
||||||
|
@ -639,7 +639,7 @@ _readAgg()
|
||||||
/* ----------------
|
/* ----------------
|
||||||
* _readUnique
|
* _readUnique
|
||||||
*
|
*
|
||||||
* For some reason, unique is a subclass of Temp.
|
* For some reason, unique is a subclass of Noname.
|
||||||
*/
|
*/
|
||||||
static Unique *
|
static Unique *
|
||||||
_readUnique()
|
_readUnique()
|
||||||
|
@ -652,9 +652,9 @@ _readUnique()
|
||||||
|
|
||||||
_getPlan((Plan *) local_node);
|
_getPlan((Plan *) local_node);
|
||||||
|
|
||||||
token = lsptok(NULL, &length); /* eat :tempid */
|
token = lsptok(NULL, &length); /* eat :nonameid */
|
||||||
token = lsptok(NULL, &length); /* get :tempid */
|
token = lsptok(NULL, &length); /* get :nonameid */
|
||||||
local_node->tempid = atol(token);
|
local_node->nonameid = atol(token);
|
||||||
|
|
||||||
token = lsptok(NULL, &length); /* eat :keycount */
|
token = lsptok(NULL, &length); /* eat :keycount */
|
||||||
token = lsptok(NULL, &length); /* get :keycount */
|
token = lsptok(NULL, &length); /* get :keycount */
|
||||||
|
@ -666,7 +666,7 @@ _readUnique()
|
||||||
/* ----------------
|
/* ----------------
|
||||||
* _readHash
|
* _readHash
|
||||||
*
|
*
|
||||||
* Hash is a subclass of Temp
|
* Hash is a subclass of Noname
|
||||||
* ----------------
|
* ----------------
|
||||||
*/
|
*/
|
||||||
static Hash *
|
static Hash *
|
||||||
|
@ -2070,8 +2070,8 @@ parsePlanString(void)
|
||||||
return_value = _readSeqScan();
|
return_value = _readSeqScan();
|
||||||
else if (!strncmp(token, "INDEXSCAN", length))
|
else if (!strncmp(token, "INDEXSCAN", length))
|
||||||
return_value = _readIndexScan();
|
return_value = _readIndexScan();
|
||||||
else if (!strncmp(token, "TEMP", length))
|
else if (!strncmp(token, "NONAME", length))
|
||||||
return_value = _readTemp();
|
return_value = _readNoname();
|
||||||
else if (!strncmp(token, "SORT", length))
|
else if (!strncmp(token, "SORT", length))
|
||||||
return_value = _readSort();
|
return_value = _readSort();
|
||||||
else if (!strncmp(token, "AGGREG", length))
|
else if (!strncmp(token, "AGGREG", length))
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/costsize.c,v 1.26 1999/02/03 20:15:32 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/costsize.c,v 1.27 1999/02/09 17:02:52 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -87,7 +87,7 @@ cost_seqscan(int relid, int relpages, int reltuples)
|
||||||
/*
|
/*
|
||||||
* cost of sequentially scanning a materialized temporary relation
|
* cost of sequentially scanning a materialized temporary relation
|
||||||
*/
|
*/
|
||||||
temp += _TEMP_SCAN_COST_;
|
temp += _NONAME_SCAN_COST_;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -198,7 +198,7 @@ cost_sort(List *keys, int tuples, int width, bool noread)
|
||||||
numTuples * base_log((double) pages, (double) 2.0);
|
numTuples * base_log((double) pages, (double) 2.0);
|
||||||
|
|
||||||
if (!noread)
|
if (!noread)
|
||||||
temp = temp + cost_seqscan(_TEMP_RELATION_ID_, npages, tuples);
|
temp = temp + cost_seqscan(_NONAME_RELATION_ID_, npages, tuples);
|
||||||
Assert(temp >= 0);
|
Assert(temp >= 0);
|
||||||
|
|
||||||
return temp;
|
return temp;
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/joinutils.c,v 1.12 1999/02/09 03:51:20 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/joinutils.c,v 1.13 1999/02/09 17:02:55 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -325,8 +325,7 @@ new_join_pathkeys(List *outer_pathkeys,
|
||||||
foreach(i, outer_pathkeys)
|
foreach(i, outer_pathkeys)
|
||||||
{
|
{
|
||||||
outer_pathkey = lfirst(i);
|
outer_pathkey = lfirst(i);
|
||||||
x = new_join_pathkey(outer_pathkey, NIL,
|
x = new_join_pathkey(outer_pathkey, NIL, join_rel_tlist, joinclauses);
|
||||||
join_rel_tlist, joinclauses);
|
|
||||||
if (x != NIL)
|
if (x != NIL)
|
||||||
t_list = lappend(t_list, x);
|
t_list = lappend(t_list, x);
|
||||||
}
|
}
|
||||||
|
@ -421,7 +420,8 @@ new_matching_subkeys(Var *subkey,
|
||||||
foreach(i, joinclauses)
|
foreach(i, joinclauses)
|
||||||
{
|
{
|
||||||
joinclause = lfirst(i);
|
joinclause = lfirst(i);
|
||||||
tlist_other_var = matching_tlvar(other_join_clause_var(subkey, joinclause),
|
tlist_other_var = matching_tlvar(
|
||||||
|
other_join_clause_var(subkey, joinclause),
|
||||||
join_rel_tlist);
|
join_rel_tlist);
|
||||||
|
|
||||||
if (tlist_other_var &&
|
if (tlist_other_var &&
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.39 1999/02/09 03:51:21 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.40 1999/02/09 17:02:55 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -40,8 +40,8 @@
|
||||||
#include "optimizer/internal.h"
|
#include "optimizer/internal.h"
|
||||||
|
|
||||||
|
|
||||||
#define TEMP_SORT 1
|
#define NONAME_SORT 1
|
||||||
#define TEMP_MATERIAL 2
|
#define NONAME_MATERIAL 2
|
||||||
|
|
||||||
static List *switch_outer(List *clauses);
|
static List *switch_outer(List *clauses);
|
||||||
static Scan *create_scan_node(Path *best_path, List *tlist);
|
static Scan *create_scan_node(Path *best_path, List *tlist);
|
||||||
|
@ -60,8 +60,8 @@ static HashJoin *create_hashjoin_node(HashPath *best_path, List *tlist,
|
||||||
List *clauses, Plan *outer_node, List *outer_tlist,
|
List *clauses, Plan *outer_node, List *outer_tlist,
|
||||||
Plan *inner_node, List *inner_tlist);
|
Plan *inner_node, List *inner_tlist);
|
||||||
static Node *fix_indxqual_references(Node *clause, Path *index_path);
|
static Node *fix_indxqual_references(Node *clause, Path *index_path);
|
||||||
static Temp *make_temp(List *tlist, List *keys, Oid *operators,
|
static Noname *make_noname(List *tlist, List *keys, Oid *operators,
|
||||||
Plan *plan_node, int temptype);
|
Plan *plan_node, int nonametype);
|
||||||
static IndexScan *make_indexscan(List *qptlist, List *qpqual, Index scanrelid,
|
static IndexScan *make_indexscan(List *qptlist, List *qpqual, Index scanrelid,
|
||||||
List *indxid, List *indxqual, List *indxqualorig, Cost cost);
|
List *indxid, List *indxqual, List *indxqualorig, Cost cost);
|
||||||
static NestLoop *make_nestloop(List *qptlist, List *qpqual, Plan *lefttree,
|
static NestLoop *make_nestloop(List *qptlist, List *qpqual, Plan *lefttree,
|
||||||
|
@ -72,7 +72,7 @@ static Hash *make_hash(List *tlist, Var *hashkey, Plan *lefttree);
|
||||||
static MergeJoin *make_mergejoin(List *tlist, List *qpqual,
|
static MergeJoin *make_mergejoin(List *tlist, List *qpqual,
|
||||||
List *mergeclauses, Oid opcode, Oid *rightorder,
|
List *mergeclauses, Oid opcode, Oid *rightorder,
|
||||||
Oid *leftorder, Plan *righttree, Plan *lefttree);
|
Oid *leftorder, Plan *righttree, Plan *lefttree);
|
||||||
static Material *make_material(List *tlist, Oid tempid, Plan *lefttree,
|
static Material *make_material(List *tlist, Oid nonameid, Plan *lefttree,
|
||||||
int keycount);
|
int keycount);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -476,11 +476,11 @@ create_nestloop_node(JoinPath *best_path,
|
||||||
}
|
}
|
||||||
else if (IsA_Join(inner_node))
|
else if (IsA_Join(inner_node))
|
||||||
{
|
{
|
||||||
inner_node = (Plan *) make_temp(inner_tlist,
|
inner_node = (Plan *) make_noname(inner_tlist,
|
||||||
NIL,
|
NIL,
|
||||||
NULL,
|
NULL,
|
||||||
inner_node,
|
inner_node,
|
||||||
TEMP_MATERIAL);
|
NONAME_MATERIAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
join_node = make_nestloop(tlist,
|
join_node = make_nestloop(tlist,
|
||||||
|
@ -545,11 +545,11 @@ create_mergejoin_node(MergePath *best_path,
|
||||||
*/
|
*/
|
||||||
if (best_path->outersortkeys)
|
if (best_path->outersortkeys)
|
||||||
{
|
{
|
||||||
Temp *sorted_outer_node = make_temp(outer_tlist,
|
Noname *sorted_outer_node = make_noname(outer_tlist,
|
||||||
best_path->outersortkeys,
|
best_path->outersortkeys,
|
||||||
outer_order,
|
outer_order,
|
||||||
outer_node,
|
outer_node,
|
||||||
TEMP_SORT);
|
NONAME_SORT);
|
||||||
|
|
||||||
sorted_outer_node->plan.cost = outer_node->cost;
|
sorted_outer_node->plan.cost = outer_node->cost;
|
||||||
outer_node = (Plan *) sorted_outer_node;
|
outer_node = (Plan *) sorted_outer_node;
|
||||||
|
@ -557,11 +557,11 @@ create_mergejoin_node(MergePath *best_path,
|
||||||
|
|
||||||
if (best_path->innersortkeys)
|
if (best_path->innersortkeys)
|
||||||
{
|
{
|
||||||
Temp *sorted_inner_node = make_temp(inner_tlist,
|
Noname *sorted_inner_node = make_noname(inner_tlist,
|
||||||
best_path->innersortkeys,
|
best_path->innersortkeys,
|
||||||
inner_order,
|
inner_order,
|
||||||
inner_node,
|
inner_node,
|
||||||
TEMP_SORT);
|
NONAME_SORT);
|
||||||
|
|
||||||
sorted_inner_node->plan.cost = outer_node->cost;
|
sorted_inner_node->plan.cost = outer_node->cost;
|
||||||
inner_node = (Plan *) sorted_inner_node;
|
inner_node = (Plan *) sorted_inner_node;
|
||||||
|
@ -798,7 +798,7 @@ switch_outer(List *clauses)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* set-temp-tlist-operators--
|
* set-noname-tlist-operators--
|
||||||
* Sets the key and keyop fields of resdom nodes in a target list.
|
* Sets the key and keyop fields of resdom nodes in a target list.
|
||||||
*
|
*
|
||||||
* 'tlist' is the target list
|
* 'tlist' is the target list
|
||||||
|
@ -812,7 +812,7 @@ switch_outer(List *clauses)
|
||||||
* Returns the modified target list.
|
* Returns the modified target list.
|
||||||
*/
|
*/
|
||||||
static List *
|
static List *
|
||||||
set_temp_tlist_operators(List *tlist, List *pathkeys, Oid *operators)
|
set_noname_tlist_operators(List *tlist, List *pathkeys, Oid *operators)
|
||||||
{
|
{
|
||||||
Node *keys = NULL;
|
Node *keys = NULL;
|
||||||
int keyno = 1;
|
int keyno = 1;
|
||||||
|
@ -846,8 +846,8 @@ set_temp_tlist_operators(List *tlist, List *pathkeys, Oid *operators)
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* make_temp--
|
* make_noname--
|
||||||
* Create plan nodes to sort or materialize relations into temporaries. The
|
* Create plan nodes to sort or materialize relations into noname. The
|
||||||
* result returned for a sort will look like (SEQSCAN(SORT(plan-node)))
|
* result returned for a sort will look like (SEQSCAN(SORT(plan-node)))
|
||||||
* or (SEQSCAN(MATERIAL(plan-node)))
|
* or (SEQSCAN(MATERIAL(plan-node)))
|
||||||
*
|
*
|
||||||
|
@ -856,46 +856,46 @@ set_temp_tlist_operators(List *tlist, List *pathkeys, Oid *operators)
|
||||||
* 'operators' is the operators with which the sort or hash is to be done
|
* 'operators' is the operators with which the sort or hash is to be done
|
||||||
* (a list of operator OIDs)
|
* (a list of operator OIDs)
|
||||||
* 'plan-node' is the node which yields tuples for the sort
|
* 'plan-node' is the node which yields tuples for the sort
|
||||||
* 'temptype' indicates which operation(sort or hash) to perform
|
* 'nonametype' indicates which operation(sort or hash) to perform
|
||||||
*/
|
*/
|
||||||
static Temp *
|
static Noname *
|
||||||
make_temp(List *tlist,
|
make_noname(List *tlist,
|
||||||
List *keys,
|
List *keys,
|
||||||
Oid *operators,
|
Oid *operators,
|
||||||
Plan *plan_node,
|
Plan *plan_node,
|
||||||
int temptype)
|
int nonametype)
|
||||||
{
|
{
|
||||||
List *temp_tlist;
|
List *noname_tlist;
|
||||||
Temp *retval = NULL;
|
Noname *retval = NULL;
|
||||||
|
|
||||||
/* Create a new target list for the temporary, with keys set. */
|
/* Create a new target list for the noname, with keys set. */
|
||||||
temp_tlist = set_temp_tlist_operators(new_unsorted_tlist(tlist),
|
noname_tlist = set_noname_tlist_operators(new_unsorted_tlist(tlist),
|
||||||
keys,
|
keys,
|
||||||
operators);
|
operators);
|
||||||
switch (temptype)
|
switch (nonametype)
|
||||||
{
|
{
|
||||||
case TEMP_SORT:
|
case NONAME_SORT:
|
||||||
retval = (Temp *) make_seqscan(tlist,
|
retval = (Noname *) make_seqscan(tlist,
|
||||||
NIL,
|
NIL,
|
||||||
_TEMP_RELATION_ID_,
|
_NONAME_RELATION_ID_,
|
||||||
(Plan *) make_sort(temp_tlist,
|
(Plan *) make_sort(noname_tlist,
|
||||||
_TEMP_RELATION_ID_,
|
_NONAME_RELATION_ID_,
|
||||||
plan_node,
|
plan_node,
|
||||||
length(keys)));
|
length(keys)));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TEMP_MATERIAL:
|
case NONAME_MATERIAL:
|
||||||
retval = (Temp *) make_seqscan(tlist,
|
retval = (Noname *) make_seqscan(tlist,
|
||||||
NIL,
|
NIL,
|
||||||
_TEMP_RELATION_ID_,
|
_NONAME_RELATION_ID_,
|
||||||
(Plan *) make_material(temp_tlist,
|
(Plan *) make_material(noname_tlist,
|
||||||
_TEMP_RELATION_ID_,
|
_NONAME_RELATION_ID_,
|
||||||
plan_node,
|
plan_node,
|
||||||
length(keys)));
|
length(keys)));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
elog(ERROR, "make_temp: unknown temp type %d", temptype);
|
elog(ERROR, "make_noname: unknown noname type %d", nonametype);
|
||||||
|
|
||||||
}
|
}
|
||||||
return retval;
|
return retval;
|
||||||
|
@ -1049,7 +1049,7 @@ make_mergejoin(List *tlist,
|
||||||
}
|
}
|
||||||
|
|
||||||
Sort *
|
Sort *
|
||||||
make_sort(List *tlist, Oid tempid, Plan *lefttree, int keycount)
|
make_sort(List *tlist, Oid nonameid, Plan *lefttree, int keycount)
|
||||||
{
|
{
|
||||||
Sort *node = makeNode(Sort);
|
Sort *node = makeNode(Sort);
|
||||||
Plan *plan = &node->plan;
|
Plan *plan = &node->plan;
|
||||||
|
@ -1060,7 +1060,7 @@ make_sort(List *tlist, Oid tempid, Plan *lefttree, int keycount)
|
||||||
plan->qual = NIL;
|
plan->qual = NIL;
|
||||||
plan->lefttree = lefttree;
|
plan->lefttree = lefttree;
|
||||||
plan->righttree = NULL;
|
plan->righttree = NULL;
|
||||||
node->tempid = tempid;
|
node->nonameid = nonameid;
|
||||||
node->keycount = keycount;
|
node->keycount = keycount;
|
||||||
|
|
||||||
return node;
|
return node;
|
||||||
|
@ -1068,7 +1068,7 @@ make_sort(List *tlist, Oid tempid, Plan *lefttree, int keycount)
|
||||||
|
|
||||||
static Material *
|
static Material *
|
||||||
make_material(List *tlist,
|
make_material(List *tlist,
|
||||||
Oid tempid,
|
Oid nonameid,
|
||||||
Plan *lefttree,
|
Plan *lefttree,
|
||||||
int keycount)
|
int keycount)
|
||||||
{
|
{
|
||||||
|
@ -1081,7 +1081,7 @@ make_material(List *tlist,
|
||||||
plan->qual = NIL;
|
plan->qual = NIL;
|
||||||
plan->lefttree = lefttree;
|
plan->lefttree = lefttree;
|
||||||
plan->righttree = NULL;
|
plan->righttree = NULL;
|
||||||
node->tempid = tempid;
|
node->nonameid = nonameid;
|
||||||
node->keycount = keycount;
|
node->keycount = keycount;
|
||||||
|
|
||||||
return node;
|
return node;
|
||||||
|
@ -1145,7 +1145,7 @@ make_unique(List *tlist, Plan *lefttree, char *uniqueAttr)
|
||||||
plan->qual = NIL;
|
plan->qual = NIL;
|
||||||
plan->lefttree = lefttree;
|
plan->lefttree = lefttree;
|
||||||
plan->righttree = NULL;
|
plan->righttree = NULL;
|
||||||
node->tempid = _TEMP_RELATION_ID_;
|
node->nonameid = _NONAME_RELATION_ID_;
|
||||||
node->keycount = 0;
|
node->keycount = 0;
|
||||||
if (strcmp(uniqueAttr, "*") == 0)
|
if (strcmp(uniqueAttr, "*") == 0)
|
||||||
node->uniqueAttr = NULL;
|
node->uniqueAttr = NULL;
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.29 1998/10/01 02:03:59 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.30 1999/02/09 17:03:00 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -478,7 +478,7 @@ make_groupPlan(List **tlist,
|
||||||
}
|
}
|
||||||
|
|
||||||
sortplan = make_sort(sort_tlist,
|
sortplan = make_sort(sort_tlist,
|
||||||
_TEMP_RELATION_ID_,
|
_NONAME_RELATION_ID_,
|
||||||
subplan,
|
subplan,
|
||||||
numCols);
|
numCols);
|
||||||
sortplan->plan.cost = subplan->cost; /* XXX assume no cost */
|
sortplan->plan.cost = subplan->cost; /* XXX assume no cost */
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.42 1999/02/03 21:16:36 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.43 1999/02/09 17:03:01 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -399,7 +399,7 @@ make_sortplan(List *tlist, List *sortcls, Plan *plannode)
|
||||||
}
|
}
|
||||||
|
|
||||||
sortplan = (Plan *) make_sort(temp_tlist,
|
sortplan = (Plan *) make_sort(temp_tlist,
|
||||||
_TEMP_RELATION_ID_,
|
_NONAME_RELATION_ID_,
|
||||||
(Plan *) plannode,
|
(Plan *) plannode,
|
||||||
length(sortcls));
|
length(sortcls));
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v 1.37 1999/02/03 21:16:38 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v 1.38 1999/02/09 17:03:01 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -34,14 +34,14 @@
|
||||||
#include "optimizer/tlist.h"
|
#include "optimizer/tlist.h"
|
||||||
|
|
||||||
static void set_join_tlist_references(Join *join);
|
static void set_join_tlist_references(Join *join);
|
||||||
static void set_tempscan_tlist_references(SeqScan *tempscan);
|
static void set_nonamescan_tlist_references(SeqScan *nonamescan);
|
||||||
static void set_temp_tlist_references(Temp *temp);
|
static void set_noname_tlist_references(Noname *noname);
|
||||||
static List *replace_clause_joinvar_refs(Expr *clause,
|
static List *replace_clause_joinvar_refs(Expr *clause,
|
||||||
List *outer_tlist, List *inner_tlist);
|
List *outer_tlist, List *inner_tlist);
|
||||||
static List *replace_subclause_joinvar_refs(List *clauses,
|
static List *replace_subclause_joinvar_refs(List *clauses,
|
||||||
List *outer_tlist, List *inner_tlist);
|
List *outer_tlist, List *inner_tlist);
|
||||||
static Var *replace_joinvar_refs(Var *var, List *outer_tlist, List *inner_tlist);
|
static Var *replace_joinvar_refs(Var *var, List *outer_tlist, List *inner_tlist);
|
||||||
static List *tlist_temp_references(Oid tempid, List *tlist);
|
static List *tlist_noname_references(Oid nonameid, List *tlist);
|
||||||
static void replace_result_clause(Node *clause, List *subplanTargetList);
|
static void replace_result_clause(Node *clause, List *subplanTargetList);
|
||||||
static bool OperandIsInner(Node *opnd, int inner_relid);
|
static bool OperandIsInner(Node *opnd, int inner_relid);
|
||||||
static List *replace_agg_clause(Node *expr, List *targetlist);
|
static List *replace_agg_clause(Node *expr, List *targetlist);
|
||||||
|
@ -74,10 +74,10 @@ set_tlist_references(Plan *plan)
|
||||||
if (IsA_Join(plan))
|
if (IsA_Join(plan))
|
||||||
set_join_tlist_references((Join *) plan);
|
set_join_tlist_references((Join *) plan);
|
||||||
else if (IsA(plan, SeqScan) &&plan->lefttree &&
|
else if (IsA(plan, SeqScan) &&plan->lefttree &&
|
||||||
IsA_Temp(plan->lefttree))
|
IsA_Noname(plan->lefttree))
|
||||||
set_tempscan_tlist_references((SeqScan *) plan);
|
set_nonamescan_tlist_references((SeqScan *) plan);
|
||||||
else if (IsA(plan, Sort))
|
else if (IsA(plan, Sort))
|
||||||
set_temp_tlist_references((Temp *) plan);
|
set_noname_tlist_references((Noname *) plan);
|
||||||
else if (IsA(plan, Result))
|
else if (IsA(plan, Result))
|
||||||
set_result_tlist_references((Result *) plan);
|
set_result_tlist_references((Result *) plan);
|
||||||
else if (IsA(plan, Hash))
|
else if (IsA(plan, Hash))
|
||||||
|
@ -136,49 +136,49 @@ set_join_tlist_references(Join *join)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* set-tempscan-tlist-references--
|
* set-nonamescan-tlist-references--
|
||||||
* Modifies the target list of a node that scans a temp relation (i.e., a
|
* Modifies the target list of a node that scans a noname relation (i.e., a
|
||||||
* sort or hash node) so that the varnos refer to the child temporary.
|
* sort or hash node) so that the varnos refer to the child noname.
|
||||||
*
|
*
|
||||||
* 'tempscan' is a seqscan node
|
* 'nonamescan' is a seqscan node
|
||||||
*
|
*
|
||||||
* Returns nothing of interest, but modifies internal fields of nodes.
|
* Returns nothing of interest, but modifies internal fields of nodes.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
set_tempscan_tlist_references(SeqScan *tempscan)
|
set_nonamescan_tlist_references(SeqScan *nonamescan)
|
||||||
{
|
{
|
||||||
Temp *temp = (Temp *) ((Plan *) tempscan)->lefttree;
|
Noname *noname = (Noname *) ((Plan *) nonamescan)->lefttree;
|
||||||
|
|
||||||
((Plan *) tempscan)->targetlist = tlist_temp_references(temp->tempid,
|
((Plan *) nonamescan)->targetlist = tlist_noname_references(noname->nonameid,
|
||||||
((Plan *) tempscan)->targetlist);
|
((Plan *) nonamescan)->targetlist);
|
||||||
set_temp_tlist_references(temp);
|
set_noname_tlist_references(noname);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* set-temp-tlist-references--
|
* set-noname-tlist-references--
|
||||||
* The temp's vars are made consistent with (actually, identical to) the
|
* The noname's vars are made consistent with (actually, identical to) the
|
||||||
* modified version of the target list of the node from which temp node
|
* modified version of the target list of the node from which noname node
|
||||||
* receives its tuples.
|
* receives its tuples.
|
||||||
*
|
*
|
||||||
* 'temp' is a temp (e.g., sort, hash) plan node
|
* 'noname' is a noname (e.g., sort, hash) plan node
|
||||||
*
|
*
|
||||||
* Returns nothing of interest, but modifies internal fields of nodes.
|
* Returns nothing of interest, but modifies internal fields of nodes.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
set_temp_tlist_references(Temp *temp)
|
set_noname_tlist_references(Noname *noname)
|
||||||
{
|
{
|
||||||
Plan *source = ((Plan *) temp)->lefttree;
|
Plan *source = ((Plan *) noname)->lefttree;
|
||||||
|
|
||||||
if (source != NULL)
|
if (source != NULL)
|
||||||
{
|
{
|
||||||
set_tlist_references(source);
|
set_tlist_references(source);
|
||||||
((Plan *) temp)->targetlist = copy_vars(((Plan *) temp)->targetlist,
|
((Plan *) noname)->targetlist = copy_vars(((Plan *) noname)->targetlist,
|
||||||
(source)->targetlist);
|
(source)->targetlist);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
elog(ERROR, "calling set_temp_tlist_references with empty lefttree");
|
elog(ERROR, "calling set_noname_tlist_references with empty lefttree");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -475,25 +475,25 @@ replace_joinvar_refs(Var *var, List *outer_tlist, List *inner_tlist)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* tlist-temp-references--
|
* tlist-noname-references--
|
||||||
* Creates a new target list for a node that scans a temp relation,
|
* Creates a new target list for a node that scans a noname relation,
|
||||||
* setting the varnos to the id of the temp relation and setting varids
|
* setting the varnos to the id of the noname relation and setting varids
|
||||||
* if necessary (varids are only needed if this is a targetlist internal
|
* if necessary (varids are only needed if this is a targetlist internal
|
||||||
* to the tree, in which case the targetlist entry always contains a var
|
* to the tree, in which case the targetlist entry always contains a var
|
||||||
* node, so we can just copy it from the temp).
|
* node, so we can just copy it from the noname).
|
||||||
*
|
*
|
||||||
* 'tempid' is the id of the temp relation
|
* 'nonameid' is the id of the noname relation
|
||||||
* 'tlist' is the target list to be modified
|
* 'tlist' is the target list to be modified
|
||||||
*
|
*
|
||||||
* Returns new target list
|
* Returns new target list
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static List *
|
static List *
|
||||||
tlist_temp_references(Oid tempid,
|
tlist_noname_references(Oid nonameid,
|
||||||
List *tlist)
|
List *tlist)
|
||||||
{
|
{
|
||||||
List *t_list = NIL;
|
List *t_list = NIL;
|
||||||
TargetEntry *temp = (TargetEntry *) NULL;
|
TargetEntry *noname = (TargetEntry *) NULL;
|
||||||
TargetEntry *xtl = NULL;
|
TargetEntry *xtl = NULL;
|
||||||
List *entry;
|
List *entry;
|
||||||
|
|
||||||
|
@ -507,16 +507,16 @@ tlist_temp_references(Oid tempid,
|
||||||
else
|
else
|
||||||
oattno = 0;
|
oattno = 0;
|
||||||
|
|
||||||
temp = makeTargetEntry(xtl->resdom,
|
noname = makeTargetEntry(xtl->resdom,
|
||||||
(Node *) makeVar(tempid,
|
(Node *) makeVar(nonameid,
|
||||||
xtl->resdom->resno,
|
xtl->resdom->resno,
|
||||||
xtl->resdom->restype,
|
xtl->resdom->restype,
|
||||||
xtl->resdom->restypmod,
|
xtl->resdom->restypmod,
|
||||||
0,
|
0,
|
||||||
tempid,
|
nonameid,
|
||||||
oattno));
|
oattno));
|
||||||
|
|
||||||
t_list = lappend(t_list, temp);
|
t_list = lappend(t_list, noname);
|
||||||
}
|
}
|
||||||
return t_list;
|
return t_list;
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/optimizer/util/relnode.c,v 1.10 1999/02/03 20:15:43 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/optimizer/util/relnode.c,v 1.11 1999/02/09 17:03:01 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -70,8 +70,8 @@ get_base_rel(Query *root, int relid)
|
||||||
* If the relation is a materialized relation, assume
|
* If the relation is a materialized relation, assume
|
||||||
* constants for sizes.
|
* constants for sizes.
|
||||||
*/
|
*/
|
||||||
rel->pages = _TEMP_RELATION_PAGES_;
|
rel->pages = _NONAME_RELATION_PAGES_;
|
||||||
rel->tuples = _TEMP_RELATION_TUPLES_;
|
rel->tuples = _NONAME_RELATION_TUPLES_;
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
*
|
*
|
||||||
* Copyright (c) 1994, Regents of the University of California
|
* Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Id: nodes.h,v 1.40 1999/02/09 03:51:41 momjian Exp $
|
* $Id: nodes.h,v 1.41 1999/02/09 17:03:11 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -38,7 +38,7 @@ typedef enum NodeTag
|
||||||
T_NestLoop,
|
T_NestLoop,
|
||||||
T_MergeJoin,
|
T_MergeJoin,
|
||||||
T_HashJoin,
|
T_HashJoin,
|
||||||
T_Temp,
|
T_Noname,
|
||||||
T_Material,
|
T_Material,
|
||||||
T_Sort,
|
T_Sort,
|
||||||
T_Agg,
|
T_Agg,
|
||||||
|
@ -251,8 +251,8 @@ typedef struct Node
|
||||||
(nodeTag(j)==T_Join || nodeTag(j)==T_NestLoop || \
|
(nodeTag(j)==T_Join || nodeTag(j)==T_NestLoop || \
|
||||||
nodeTag(j)==T_MergeJoin || nodeTag(j)==T_HashJoin)
|
nodeTag(j)==T_MergeJoin || nodeTag(j)==T_HashJoin)
|
||||||
|
|
||||||
#define IsA_Temp(t) \
|
#define IsA_Noname(t) \
|
||||||
(nodeTag(t)==T_Temp || nodeTag(t)==T_Material || nodeTag(t)==T_Sort || \
|
(nodeTag(t)==T_Noname || nodeTag(t)==T_Material || nodeTag(t)==T_Sort || \
|
||||||
nodeTag(t)==T_Unique)
|
nodeTag(t)==T_Unique)
|
||||||
|
|
||||||
/* ----------------------------------------------------------------
|
/* ----------------------------------------------------------------
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
*
|
*
|
||||||
* Copyright (c) 1994, Regents of the University of California
|
* Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Id: plannodes.h,v 1.20 1999/01/23 23:28:09 momjian Exp $
|
* $Id: plannodes.h,v 1.21 1999/02/09 17:03:12 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -262,15 +262,15 @@ typedef struct Group
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ==========
|
* ==========
|
||||||
* Temp nodes
|
* Noname nodes
|
||||||
* ==========
|
* ==========
|
||||||
*/
|
*/
|
||||||
typedef struct Temp
|
typedef struct Noname
|
||||||
{
|
{
|
||||||
Plan plan;
|
Plan plan;
|
||||||
Oid tempid;
|
Oid nonameid;
|
||||||
int keycount;
|
int keycount;
|
||||||
} Temp;
|
} Noname;
|
||||||
|
|
||||||
/* ----------------
|
/* ----------------
|
||||||
* materialization node
|
* materialization node
|
||||||
|
@ -278,8 +278,8 @@ typedef struct Temp
|
||||||
*/
|
*/
|
||||||
typedef struct Material
|
typedef struct Material
|
||||||
{
|
{
|
||||||
Plan plan; /* temp node flattened out */
|
Plan plan; /* noname node flattened out */
|
||||||
Oid tempid;
|
Oid nonameid;
|
||||||
int keycount;
|
int keycount;
|
||||||
MaterialState *matstate;
|
MaterialState *matstate;
|
||||||
} Material;
|
} Material;
|
||||||
|
@ -290,8 +290,8 @@ typedef struct Material
|
||||||
*/
|
*/
|
||||||
typedef struct Sort
|
typedef struct Sort
|
||||||
{
|
{
|
||||||
Plan plan; /* temp node flattened out */
|
Plan plan; /* noname node flattened out */
|
||||||
Oid tempid;
|
Oid nonameid;
|
||||||
int keycount;
|
int keycount;
|
||||||
SortState *sortstate;
|
SortState *sortstate;
|
||||||
void *psortstate;
|
void *psortstate;
|
||||||
|
@ -304,8 +304,8 @@ typedef struct Sort
|
||||||
*/
|
*/
|
||||||
typedef struct Unique
|
typedef struct Unique
|
||||||
{
|
{
|
||||||
Plan plan; /* temp node flattened out */
|
Plan plan; /* noname node flattened out */
|
||||||
Oid tempid;
|
Oid nonameid;
|
||||||
int keycount;
|
int keycount;
|
||||||
char *uniqueAttr; /* NULL if all attrs, or unique attribute
|
char *uniqueAttr; /* NULL if all attrs, or unique attribute
|
||||||
* name */
|
* name */
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
*
|
*
|
||||||
* Copyright (c) 1994, Regents of the University of California
|
* Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Id: internal.h,v 1.12 1999/02/02 03:45:24 momjian Exp $
|
* $Id: internal.h,v 1.13 1999/02/09 17:03:14 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -41,12 +41,12 @@
|
||||||
|
|
||||||
/* The cost of sequentially scanning a materialized temporary relation
|
/* The cost of sequentially scanning a materialized temporary relation
|
||||||
*/
|
*/
|
||||||
#define _TEMP_SCAN_COST_ 10
|
#define _NONAME_SCAN_COST_ 10
|
||||||
|
|
||||||
/* The number of pages and tuples in a materialized relation
|
/* The number of pages and tuples in a materialized relation
|
||||||
*/
|
*/
|
||||||
#define _TEMP_RELATION_PAGES_ 1
|
#define _NONAME_RELATION_PAGES_ 1
|
||||||
#define _TEMP_RELATION_TUPLES_ 10
|
#define _NONAME_RELATION_TUPLES_ 10
|
||||||
|
|
||||||
/* The length of a variable-length field in bytes
|
/* The length of a variable-length field in bytes
|
||||||
*/
|
*/
|
||||||
|
@ -59,7 +59,7 @@
|
||||||
|
|
||||||
/* Identifier for (sort) temp relations */
|
/* Identifier for (sort) temp relations */
|
||||||
/* used to be -1 */
|
/* used to be -1 */
|
||||||
#define _TEMP_RELATION_ID_ InvalidOid
|
#define _NONAME_RELATION_ID_ InvalidOid
|
||||||
|
|
||||||
/* Identifier for invalid relation OIDs and attribute numbers for use by
|
/* Identifier for invalid relation OIDs and attribute numbers for use by
|
||||||
* selectivity functions
|
* selectivity functions
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
*
|
*
|
||||||
* Copyright (c) 1994, Regents of the University of California
|
* Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Id: planmain.h,v 1.19 1999/02/02 17:46:16 momjian Exp $
|
* $Id: planmain.h,v 1.20 1999/02/09 17:03:14 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -31,7 +31,7 @@ extern Plan *query_planner(Query *root,
|
||||||
extern Plan *create_plan(Path *best_path);
|
extern Plan *create_plan(Path *best_path);
|
||||||
extern SeqScan *make_seqscan(List *qptlist, List *qpqual, Index scanrelid,
|
extern SeqScan *make_seqscan(List *qptlist, List *qpqual, Index scanrelid,
|
||||||
Plan *lefttree);
|
Plan *lefttree);
|
||||||
extern Sort *make_sort(List *tlist, Oid tempid, Plan *lefttree,
|
extern Sort *make_sort(List *tlist, Oid nonameid, Plan *lefttree,
|
||||||
int keycount);
|
int keycount);
|
||||||
extern Agg *make_agg(List *tlist, Plan *lefttree);
|
extern Agg *make_agg(List *tlist, Plan *lefttree);
|
||||||
extern Group *make_group(List *tlist, bool tuplePerGroup, int ngrp,
|
extern Group *make_group(List *tlist, bool tuplePerGroup, int ngrp,
|
||||||
|
|
Loading…
Reference in New Issue