aboutsummaryrefslogtreecommitdiff
path: root/src/backend/nodes
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2002-03-22 02:56:37 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2002-03-22 02:56:37 +0000
commit108a0ec87d41393c362c5b8d8aa17d9a734e4f1a (patch)
treef437cf9d8bb1db8fdacf1c1022eac0f11e146069 /src/backend/nodes
parent56c9b73c1d426c79a604df6d6f36293dd9f18754 (diff)
downloadpostgresql-108a0ec87d41393c362c5b8d8aa17d9a734e4f1a.tar.gz
postgresql-108a0ec87d41393c362c5b8d8aa17d9a734e4f1a.zip
A little further progress on schemas: push down RangeVars into
addRangeTableEntry calls. Remove relname field from RTEs, since it will no longer be a useful unique identifier of relations; we want to encourage people to rely on the relation OID instead. Further work on dumping qual expressions in EXPLAIN, too.
Diffstat (limited to 'src/backend/nodes')
-rw-r--r--src/backend/nodes/copyfuncs.c20
-rw-r--r--src/backend/nodes/equalfuncs.c22
-rw-r--r--src/backend/nodes/makefuncs.c21
-rw-r--r--src/backend/nodes/outfuncs.c47
-rw-r--r--src/backend/nodes/print.c21
-rw-r--r--src/backend/nodes/readfuncs.c74
6 files changed, 105 insertions, 100 deletions
diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c
index fb68866c53e..2c1e5b675f9 100644
--- a/src/backend/nodes/copyfuncs.c
+++ b/src/backend/nodes/copyfuncs.c
@@ -15,7 +15,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.172 2002/03/21 16:00:39 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.173 2002/03/22 02:56:31 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -1476,8 +1476,6 @@ _copyRangeTblEntry(RangeTblEntry *from)
RangeTblEntry *newnode = makeNode(RangeTblEntry);
newnode->rtekind = from->rtekind;
- if (from->relname)
- newnode->relname = pstrdup(from->relname);
newnode->relid = from->relid;
Node_Copy(from, newnode, subquery);
newnode->jointype = from->jointype;
@@ -2004,19 +2002,6 @@ _copyCreateStmt(CreateStmt *from)
return newnode;
}
-static VersionStmt *
-_copyVersionStmt(VersionStmt *from)
-{
- VersionStmt *newnode = makeNode(VersionStmt);
-
- newnode->relname = pstrdup(from->relname);
- newnode->direction = from->direction;
- newnode->fromRelname = pstrdup(from->fromRelname);
- newnode->date = pstrdup(from->date);
-
- return newnode;
-}
-
static DefineStmt *
_copyDefineStmt(DefineStmt *from)
{
@@ -2847,9 +2832,6 @@ copyObject(void *from)
case T_CreateStmt:
retval = _copyCreateStmt(from);
break;
- case T_VersionStmt:
- retval = _copyVersionStmt(from);
- break;
case T_DefineStmt:
retval = _copyDefineStmt(from);
break;
diff --git a/src/backend/nodes/equalfuncs.c b/src/backend/nodes/equalfuncs.c
index 9788fd2f526..6adc87c4040 100644
--- a/src/backend/nodes/equalfuncs.c
+++ b/src/backend/nodes/equalfuncs.c
@@ -20,7 +20,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/nodes/equalfuncs.c,v 1.120 2002/03/21 16:00:39 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/nodes/equalfuncs.c,v 1.121 2002/03/22 02:56:31 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -832,21 +832,6 @@ _equalCreateStmt(CreateStmt *a, CreateStmt *b)
}
static bool
-_equalVersionStmt(VersionStmt *a, VersionStmt *b)
-{
- if (!equalstr(a->relname, b->relname))
- return false;
- if (a->direction != b->direction)
- return false;
- if (!equalstr(a->fromRelname, b->fromRelname))
- return false;
- if (!equalstr(a->date, b->date))
- return false;
-
- return true;
-}
-
-static bool
_equalDefineStmt(DefineStmt *a, DefineStmt *b)
{
if (a->defType != b->defType)
@@ -1679,8 +1664,6 @@ _equalRangeTblEntry(RangeTblEntry *a, RangeTblEntry *b)
{
if (a->rtekind != b->rtekind)
return false;
- if (!equalstr(a->relname, b->relname))
- return false;
if (a->relid != b->relid)
return false;
if (!equal(a->subquery, b->subquery))
@@ -2004,9 +1987,6 @@ equal(void *a, void *b)
case T_CreateStmt:
retval = _equalCreateStmt(a, b);
break;
- case T_VersionStmt:
- retval = _equalVersionStmt(a, b);
- break;
case T_DefineStmt:
retval = _equalDefineStmt(a, b);
break;
diff --git a/src/backend/nodes/makefuncs.c b/src/backend/nodes/makefuncs.c
index d8bf80a52ef..649fb38c111 100644
--- a/src/backend/nodes/makefuncs.c
+++ b/src/backend/nodes/makefuncs.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/nodes/makefuncs.c,v 1.28 2002/03/21 16:00:40 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/nodes/makefuncs.c,v 1.29 2002/03/22 02:56:32 tgl Exp $
*/
#include "postgres.h"
@@ -190,3 +190,22 @@ makeRelabelType(Node *arg, Oid rtype, int32 rtypmod)
return r;
}
+
+/*
+ * makeRangeVar -
+ * creates a RangeVar node (rather oversimplified case)
+ */
+RangeVar *
+makeRangeVar(char *schemaname, char *relname)
+{
+ RangeVar *r = makeNode(RangeVar);
+
+ r->catalogname = NULL;
+ r->schemaname = schemaname;
+ r->relname = relname;
+ r->inhOpt = INH_DEFAULT;
+ r->istemp = false;
+ r->alias = NULL;
+
+ return r;
+}
diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c
index aff46e6ba33..195db0165db 100644
--- a/src/backend/nodes/outfuncs.c
+++ b/src/backend/nodes/outfuncs.c
@@ -5,7 +5,7 @@
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Header: /cvsroot/pgsql/src/backend/nodes/outfuncs.c,v 1.150 2002/03/21 16:00:40 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/nodes/outfuncs.c,v 1.151 2002/03/22 02:56:32 tgl Exp $
*
* NOTES
* Every (plan) node in POSTGRES has an associated "out" routine which
@@ -968,25 +968,38 @@ _outAlias(StringInfo str, Alias *node)
static void
_outRangeTblEntry(StringInfo str, RangeTblEntry *node)
{
- appendStringInfo(str, " RTE :rtekind %d :relname ",
- (int) node->rtekind);
- _outToken(str, node->relname);
- appendStringInfo(str, " :relid %u :subquery ",
- node->relid);
- _outNode(str, node->subquery);
- appendStringInfo(str, " :jointype %d :joincoltypes ",
- (int) node->jointype);
- _outOidList(str, node->joincoltypes);
- appendStringInfo(str, " :joincoltypmods ");
- _outIntList(str, node->joincoltypmods);
- appendStringInfo(str, " :joinleftcols ");
- _outIntList(str, node->joinleftcols);
- appendStringInfo(str, " :joinrightcols ");
- _outIntList(str, node->joinrightcols);
- appendStringInfo(str, " :alias ");
+ /* put alias + eref first to make dump more legible */
+ appendStringInfo(str, " RTE :alias ");
_outNode(str, node->alias);
appendStringInfo(str, " :eref ");
_outNode(str, node->eref);
+ appendStringInfo(str, " :rtekind %d ",
+ (int) node->rtekind);
+ switch (node->rtekind)
+ {
+ case RTE_RELATION:
+ case RTE_SPECIAL:
+ appendStringInfo(str, ":relid %u ", node->relid);
+ break;
+ case RTE_SUBQUERY:
+ appendStringInfo(str, ":subquery ");
+ _outNode(str, node->subquery);
+ break;
+ case RTE_JOIN:
+ appendStringInfo(str, ":jointype %d :joincoltypes ",
+ (int) node->jointype);
+ _outOidList(str, node->joincoltypes);
+ appendStringInfo(str, " :joincoltypmods ");
+ _outIntList(str, node->joincoltypmods);
+ appendStringInfo(str, " :joinleftcols ");
+ _outIntList(str, node->joinleftcols);
+ appendStringInfo(str, " :joinrightcols ");
+ _outIntList(str, node->joinrightcols);
+ break;
+ default:
+ elog(ERROR, "bogus rte kind %d", (int) node->rtekind);
+ break;
+ }
appendStringInfo(str, " :inh %s :inFromCl %s :checkForRead %s"
" :checkForWrite %s :checkAsUser %u",
booltostr(node->inh),
diff --git a/src/backend/nodes/print.c b/src/backend/nodes/print.c
index ebc5d536e7d..7254d46c178 100644
--- a/src/backend/nodes/print.c
+++ b/src/backend/nodes/print.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/nodes/print.c,v 1.52 2002/03/21 16:00:41 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/nodes/print.c,v 1.53 2002/03/22 02:56:32 tgl Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
@@ -146,17 +146,17 @@ print_rt(List *rtable)
List *l;
int i = 1;
- printf("resno\trelname(refname)\trelid\tinFromCl\n");
- printf("-----\t----------------\t-----\t--------\n");
+ printf("resno\trefname \trelid\tinFromCl\n");
+ printf("-----\t---------\t-----\t--------\n");
foreach(l, rtable)
{
RangeTblEntry *rte = lfirst(l);
- if (rte->relname)
- printf("%d\t%s (%s)\t%u",
- i, rte->relname, rte->eref->aliasname, rte->relid);
+ if (rte->rtekind == RTE_RELATION)
+ printf("%d\t%s\t%u",
+ i, rte->eref->aliasname, rte->relid);
else
- printf("%d\t[subquery] (%s)\t",
+ printf("%d\t%s\t[subquery]",
i, rte->eref->aliasname);
printf("\t%s\t%s\n",
(rte->inh ? "inh" : ""),
@@ -406,19 +406,20 @@ print_plan_recursive(Plan *p, Query *parsetree, int indentLevel, char *label)
printf("%s%s :c=%.2f..%.2f :r=%.0f :w=%d ", label, plannode_type(p),
p->startup_cost, p->total_cost,
p->plan_rows, p->plan_width);
- if (IsA(p, Scan) ||IsA(p, SeqScan))
+ if (IsA(p, Scan) ||
+ IsA(p, SeqScan))
{
RangeTblEntry *rte;
rte = rt_fetch(((Scan *) p)->scanrelid, parsetree->rtable);
- StrNCpy(extraInfo, rte->relname, NAMEDATALEN);
+ StrNCpy(extraInfo, rte->eref->aliasname, NAMEDATALEN);
}
else if (IsA(p, IndexScan))
{
RangeTblEntry *rte;
rte = rt_fetch(((IndexScan *) p)->scan.scanrelid, parsetree->rtable);
- StrNCpy(extraInfo, rte->relname, NAMEDATALEN);
+ StrNCpy(extraInfo, rte->eref->aliasname, NAMEDATALEN);
}
else
extraInfo[0] = '\0';
diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c
index 66dd317f394..150e98d6e49 100644
--- a/src/backend/nodes/readfuncs.c
+++ b/src/backend/nodes/readfuncs.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.117 2002/03/21 16:00:42 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.118 2002/03/22 02:56:32 tgl Exp $
*
* NOTES
* Most of the read functions for plan nodes are tested. (In fact, they
@@ -1498,43 +1498,53 @@ _readRangeTblEntry(void)
local_node = makeNode(RangeTblEntry);
- token = pg_strtok(&length); /* eat :rtekind */
- token = pg_strtok(&length); /* get :rtekind */
- local_node->rtekind = (RTEKind) atoi(token);
-
- token = pg_strtok(&length); /* eat :relname */
- token = pg_strtok(&length); /* get :relname */
- local_node->relname = nullable_string(token, length);
-
- token = pg_strtok(&length); /* eat :relid */
- token = pg_strtok(&length); /* get :relid */
- local_node->relid = atooid(token);
-
- token = pg_strtok(&length); /* eat :subquery */
- local_node->subquery = nodeRead(true); /* now read it */
-
- token = pg_strtok(&length); /* eat :jointype */
- token = pg_strtok(&length); /* get jointype */
- local_node->jointype = (JoinType) atoi(token);
-
- token = pg_strtok(&length); /* eat :joincoltypes */
- local_node->joincoltypes = toOidList(nodeRead(true));
-
- token = pg_strtok(&length); /* eat :joincoltypmods */
- local_node->joincoltypmods = toIntList(nodeRead(true));
-
- token = pg_strtok(&length); /* eat :joinleftcols */
- local_node->joinleftcols = toIntList(nodeRead(true));
-
- token = pg_strtok(&length); /* eat :joinrightcols */
- local_node->joinrightcols = toIntList(nodeRead(true));
-
token = pg_strtok(&length); /* eat :alias */
local_node->alias = nodeRead(true); /* now read it */
token = pg_strtok(&length); /* eat :eref */
local_node->eref = nodeRead(true); /* now read it */
+ token = pg_strtok(&length); /* eat :rtekind */
+ token = pg_strtok(&length); /* get rtekind */
+ local_node->rtekind = (RTEKind) atoi(token);
+
+ switch (local_node->rtekind)
+ {
+ case RTE_RELATION:
+ case RTE_SPECIAL:
+ token = pg_strtok(&length); /* eat :relid */
+ token = pg_strtok(&length); /* get :relid */
+ local_node->relid = atooid(token);
+ break;
+
+ case RTE_SUBQUERY:
+ token = pg_strtok(&length); /* eat :subquery */
+ local_node->subquery = nodeRead(true); /* now read it */
+ break;
+
+ case RTE_JOIN:
+ token = pg_strtok(&length); /* eat :jointype */
+ token = pg_strtok(&length); /* get jointype */
+ local_node->jointype = (JoinType) atoi(token);
+
+ token = pg_strtok(&length); /* eat :joincoltypes */
+ local_node->joincoltypes = toOidList(nodeRead(true));
+
+ token = pg_strtok(&length); /* eat :joincoltypmods */
+ local_node->joincoltypmods = toIntList(nodeRead(true));
+
+ token = pg_strtok(&length); /* eat :joinleftcols */
+ local_node->joinleftcols = toIntList(nodeRead(true));
+
+ token = pg_strtok(&length); /* eat :joinrightcols */
+ local_node->joinrightcols = toIntList(nodeRead(true));
+ break;
+
+ default:
+ elog(ERROR, "bogus rte kind %d", (int) local_node->rtekind);
+ break;
+ }
+
token = pg_strtok(&length); /* eat :inh */
token = pg_strtok(&length); /* get :inh */
local_node->inh = strtobool(token);