diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2002-03-22 02:56:37 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2002-03-22 02:56:37 +0000 |
commit | 108a0ec87d41393c362c5b8d8aa17d9a734e4f1a (patch) | |
tree | f437cf9d8bb1db8fdacf1c1022eac0f11e146069 /src/backend/nodes | |
parent | 56c9b73c1d426c79a604df6d6f36293dd9f18754 (diff) | |
download | postgresql-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.c | 20 | ||||
-rw-r--r-- | src/backend/nodes/equalfuncs.c | 22 | ||||
-rw-r--r-- | src/backend/nodes/makefuncs.c | 21 | ||||
-rw-r--r-- | src/backend/nodes/outfuncs.c | 47 | ||||
-rw-r--r-- | src/backend/nodes/print.c | 21 | ||||
-rw-r--r-- | src/backend/nodes/readfuncs.c | 74 |
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); |