diff options
| author | Tom Lane | 2002-03-21 16:02:16 +0000 |
|---|---|---|
| committer | Tom Lane | 2002-03-21 16:02:16 +0000 |
| commit | 95ef6a344821655ce4d0a74999ac49dd6af6d342 (patch) | |
| tree | df484a4c9dde9827894ab707917c001a1f376749 /src/backend/tcop | |
| parent | 8c9c8ca2b57e4edef218245ccdc9eef7c06425d8 (diff) | |
First phase of SCHEMA changes, concentrating on fixing the grammar and
the parsetree representation. As yet we don't *do* anything with schema
names, just drop 'em on the floor; but you can enter schema-compatible
command syntax, and there's even a primitive CREATE SCHEMA command.
No doc updates yet, except to note that you can now extract a field
from a function-returning-row's result with (foo(...)).fieldname.
Diffstat (limited to 'src/backend/tcop')
| -rw-r--r-- | src/backend/tcop/postgres.c | 8 | ||||
| -rw-r--r-- | src/backend/tcop/pquery.c | 6 | ||||
| -rw-r--r-- | src/backend/tcop/utility.c | 82 |
3 files changed, 53 insertions, 43 deletions
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 9542170d340..8443fe6591b 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.257 2002/03/19 16:10:48 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.258 2002/03/21 16:01:25 tgl Exp $ * * NOTES * this is the "main" module of the postgres backend and @@ -1722,7 +1722,7 @@ PostgresMain(int argc, char *argv[], const char *username) if (!IsUnderPostmaster) { puts("\nPOSTGRES backend interactive interface "); - puts("$Revision: 1.257 $ $Date: 2002/03/19 16:10:48 $\n"); + puts("$Revision: 1.258 $ $Date: 2002/03/21 16:01:25 $\n"); } /* @@ -2216,6 +2216,10 @@ CreateCommandTag(Node *parsetree) tag = "CREATE DOMAIN"; break; + case T_CreateSchemaStmt: + tag = "CREATE"; + break; + case T_CreateStmt: tag = "CREATE"; break; diff --git a/src/backend/tcop/pquery.c b/src/backend/tcop/pquery.c index ef4b4edd40f..4599a27a642 100644 --- a/src/backend/tcop/pquery.c +++ b/src/backend/tcop/pquery.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/tcop/pquery.c,v 1.50 2002/03/06 06:10:10 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/tcop/pquery.c,v 1.51 2002/03/21 16:01:27 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -181,12 +181,12 @@ ProcessQuery(Query *parsetree, */ if (isRetrieveIntoPortal) { - intoName = parsetree->into; + intoName = parsetree->into->relname; portal = PreparePortal(intoName); oldContext = MemoryContextSwitchTo(PortalGetHeapMemory(portal)); parsetree = copyObject(parsetree); plan = copyObject(plan); - intoName = parsetree->into; /* use copied name in QueryDesc */ + intoName = parsetree->into->relname; /* use copied name in QueryDesc */ /* * We stay in portal's memory context for now, so that query desc, diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c index db8d440034f..9a6813635ca 100644 --- a/src/backend/tcop/utility.c +++ b/src/backend/tcop/utility.c @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.135 2002/03/20 19:44:35 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.136 2002/03/21 16:01:30 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -218,6 +218,14 @@ ProcessUtility(Node *parsetree, /* * relation and attribute manipulation */ + case T_CreateSchemaStmt: + { + CreateSchemaStmt *stmt = (CreateSchemaStmt *) parsetree; + + CreateSchemaCommand(stmt); + } + break; + case T_CreateStmt: DefineRelation((CreateStmt *) parsetree, RELKIND_RELATION); @@ -226,19 +234,19 @@ ProcessUtility(Node *parsetree, * secondary relation too. */ CommandCounterIncrement(); - AlterTableCreateToastTable(((CreateStmt *) parsetree)->relname, + AlterTableCreateToastTable(((CreateStmt *) parsetree)->relation->relname, true); break; case T_DropStmt: { DropStmt *stmt = (DropStmt *) parsetree; - List *args = stmt->names; + List *args = stmt->objects; List *arg; foreach(arg, args) { - relname = strVal(lfirst(arg)); + relname = ((RangeVar *) lfirst(arg))->relname; switch (stmt->removeType) { @@ -299,7 +307,8 @@ ProcessUtility(Node *parsetree, case T_TruncateStmt: { - TruncateRelation(((TruncateStmt *) parsetree)->relName); + relname = ((TruncateStmt *) parsetree)->relation->relname; + TruncateRelation(relname); } break; @@ -322,7 +331,7 @@ ProcessUtility(Node *parsetree, if (stmt->direction != FROM) SetQuerySnapshot(); - DoCopy(stmt->relname, + DoCopy(stmt->relation->relname, stmt->binary, stmt->oids, (bool) (stmt->direction == FROM), @@ -345,7 +354,7 @@ ProcessUtility(Node *parsetree, { RenameStmt *stmt = (RenameStmt *) parsetree; - relname = stmt->relname; + relname = stmt->relation->relname; if (!allowSystemTableMods && IsSystemRelationName(relname)) elog(ERROR, "ALTER TABLE: relation \"%s\" is a system catalog", relname); @@ -380,7 +389,7 @@ ProcessUtility(Node *parsetree, renameatt(relname, /* relname */ stmt->column, /* old att name */ stmt->newname, /* new att name */ - interpretInhOption(stmt->inhOpt)); /* recursive? */ + interpretInhOption(stmt->relation->inhOpt)); /* recursive? */ } } break; @@ -398,47 +407,47 @@ ProcessUtility(Node *parsetree, switch (stmt->subtype) { case 'A': /* ADD COLUMN */ - AlterTableAddColumn(stmt->relname, - interpretInhOption(stmt->inhOpt), + AlterTableAddColumn(stmt->relation->relname, + interpretInhOption((stmt->relation)->inhOpt), (ColumnDef *) stmt->def); break; case 'T': /* ALTER COLUMN DEFAULT */ - AlterTableAlterColumnDefault(stmt->relname, - interpretInhOption(stmt->inhOpt), + AlterTableAlterColumnDefault(stmt->relation->relname, + interpretInhOption((stmt->relation)->inhOpt), stmt->name, stmt->def); break; case 'S': /* ALTER COLUMN STATISTICS */ case 'M': /* ALTER COLUMN STORAGE */ - AlterTableAlterColumnFlags(stmt->relname, - interpretInhOption(stmt->inhOpt), + AlterTableAlterColumnFlags(stmt->relation->relname, + interpretInhOption(stmt->relation->inhOpt), stmt->name, stmt->def, &(stmt->subtype)); break; case 'D': /* DROP COLUMN */ - AlterTableDropColumn(stmt->relname, - interpretInhOption(stmt->inhOpt), + AlterTableDropColumn(stmt->relation->relname, + interpretInhOption(stmt->relation->inhOpt), stmt->name, stmt->behavior); break; case 'C': /* ADD CONSTRAINT */ - AlterTableAddConstraint(stmt->relname, - interpretInhOption(stmt->inhOpt), + AlterTableAddConstraint(stmt->relation->relname, + interpretInhOption(stmt->relation->inhOpt), (List *) stmt->def); break; case 'X': /* DROP CONSTRAINT */ - AlterTableDropConstraint(stmt->relname, - interpretInhOption(stmt->inhOpt), + AlterTableDropConstraint(stmt->relation->relname, + interpretInhOption(stmt->relation->inhOpt), stmt->name, stmt->behavior); break; case 'E': /* CREATE TOAST TABLE */ - AlterTableCreateToastTable(stmt->relname, + AlterTableCreateToastTable(stmt->relation->relname, false); break; case 'U': /* ALTER OWNER */ - AlterTableOwner(stmt->relname, + AlterTableOwner(stmt->relation->relname, stmt->name); break; default: /* oops */ @@ -487,7 +496,7 @@ ProcessUtility(Node *parsetree, { ViewStmt *stmt = (ViewStmt *) parsetree; - DefineView(stmt->viewname, stmt->query); /* retrieve parsetree */ + DefineView(stmt->view->relname, stmt->query); /* retrieve parsetree */ } break; @@ -499,17 +508,17 @@ ProcessUtility(Node *parsetree, { IndexStmt *stmt = (IndexStmt *) parsetree; - relname = stmt->relname; + relname = stmt->relation->relname; if (!allowSystemTableMods && IsSystemRelationName(relname)) elog(ERROR, "CREATE INDEX: relation \"%s\" is a system catalog", relname); if (!pg_ownercheck(GetUserId(), relname, RELNAME)) elog(ERROR, "permission denied"); - DefineIndex(stmt->relname, /* relation name */ - stmt->idxname, /* index name */ - stmt->accessMethod, /* am name */ - stmt->indexParams, /* parameters */ + DefineIndex(stmt->relation->relname, /* relation */ + stmt->idxname, /* index name */ + stmt->accessMethod, /* am name */ + stmt->indexParams, /* parameters */ stmt->unique, stmt->primary, (Expr *) stmt->whereClause, @@ -522,7 +531,7 @@ ProcessUtility(Node *parsetree, RuleStmt *stmt = (RuleStmt *) parsetree; int aclcheck_result; - relname = stmt->object->relname; + relname = stmt->relation->relname; aclcheck_result = pg_aclcheck(relname, GetUserId(), ACL_RULE); if (aclcheck_result != ACLCHECK_OK) elog(ERROR, "%s: %s", relname, aclcheck_error_strings[aclcheck_result]); @@ -603,7 +612,7 @@ ProcessUtility(Node *parsetree, { NotifyStmt *stmt = (NotifyStmt *) parsetree; - Async_Notify(stmt->relname); + Async_Notify(stmt->relation->relname); } break; @@ -611,7 +620,7 @@ ProcessUtility(Node *parsetree, { ListenStmt *stmt = (ListenStmt *) parsetree; - Async_Listen(stmt->relname, MyProcPid); + Async_Listen(stmt->relation->relname, MyProcPid); } break; @@ -619,7 +628,7 @@ ProcessUtility(Node *parsetree, { UnlistenStmt *stmt = (UnlistenStmt *) parsetree; - Async_Unlisten(stmt->relname, MyProcPid); + Async_Unlisten(stmt->relation->relname, MyProcPid); } break; @@ -636,7 +645,7 @@ ProcessUtility(Node *parsetree, { ClusterStmt *stmt = (ClusterStmt *) parsetree; - relname = stmt->relname; + relname = stmt->relation->relname; if (IsSystemRelationName(relname)) elog(ERROR, "CLUSTER: relation \"%s\" is a system catalog", relname); @@ -712,7 +721,6 @@ ProcessUtility(Node *parsetree, /* * ******************************** DOMAIN statements **** - * */ case T_CreateDomainStmt: DefineDomain((CreateDomainStmt *) parsetree); @@ -720,9 +728,7 @@ ProcessUtility(Node *parsetree, /* * ******************************** USER statements **** - * */ - case T_CreateUserStmt: CreateUser((CreateUserStmt *) parsetree); break; @@ -774,7 +780,7 @@ ProcessUtility(Node *parsetree, switch (stmt->reindexType) { case INDEX: - relname = (char *) stmt->name; + relname = (char *) stmt->relation->relname; if (IsSystemRelationName(relname)) { if (!allowSystemTableMods) @@ -789,7 +795,7 @@ ProcessUtility(Node *parsetree, ReindexIndex(relname, stmt->force); break; case TABLE: - relname = (char *) stmt->name; + relname = (char *) stmt->relation->relname; if (!pg_ownercheck(GetUserId(), relname, RELNAME)) elog(ERROR, "%s: %s", relname, aclcheck_error_strings[ACLCHECK_NOT_OWNER]); ReindexTable(relname, stmt->force); |
