summaryrefslogtreecommitdiff
path: root/src/backend/tcop/utility.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/tcop/utility.c')
-rw-r--r--src/backend/tcop/utility.c173
1 files changed, 78 insertions, 95 deletions
diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c
index 5f015f4636..be47708d4b 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.200 2003/05/06 21:51:41 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.201 2003/06/27 14:45:30 petere Exp $
*
*-------------------------------------------------------------------------
*/
@@ -20,6 +20,7 @@
#include "catalog/catalog.h"
#include "catalog/namespace.h"
#include "catalog/pg_shadow.h"
+#include "commands/alter.h"
#include "commands/async.h"
#include "commands/cluster.h"
#include "commands/comment.h"
@@ -362,56 +363,51 @@ ProcessUtility(Node *parsetree,
switch (stmt->removeType)
{
- case DROP_TABLE:
+ case OBJECT_TABLE:
rel = makeRangeVarFromNameList(names);
CheckDropPermissions(rel, RELKIND_RELATION);
RemoveRelation(rel, stmt->behavior);
break;
- case DROP_SEQUENCE:
+ case OBJECT_SEQUENCE:
rel = makeRangeVarFromNameList(names);
CheckDropPermissions(rel, RELKIND_SEQUENCE);
RemoveRelation(rel, stmt->behavior);
break;
- case DROP_VIEW:
+ case OBJECT_VIEW:
rel = makeRangeVarFromNameList(names);
CheckDropPermissions(rel, RELKIND_VIEW);
RemoveView(rel, stmt->behavior);
break;
- case DROP_INDEX:
+ case OBJECT_INDEX:
rel = makeRangeVarFromNameList(names);
CheckDropPermissions(rel, RELKIND_INDEX);
RemoveIndex(rel, stmt->behavior);
break;
- case DROP_TYPE:
+ case OBJECT_TYPE:
/* RemoveType does its own permissions checks */
RemoveType(names, stmt->behavior);
break;
- case DROP_DOMAIN:
-
- /*
- * RemoveDomain does its own permissions
- * checks
- */
+ case OBJECT_DOMAIN:
+ /* RemoveDomain does its own permissions checks */
RemoveDomain(names, stmt->behavior);
break;
- case DROP_CONVERSION:
+ case OBJECT_CONVERSION:
DropConversionCommand(names, stmt->behavior);
break;
- case DROP_SCHEMA:
-
- /*
- * RemoveSchema does its own permissions
- * checks
- */
+ case OBJECT_SCHEMA:
+ /* RemoveSchema does its own permissions checks */
RemoveSchema(names, stmt->behavior);
break;
+
+ default:
+ elog(ERROR, "invalid object type for DropStmt: %d", stmt->removeType);
}
/*
@@ -454,57 +450,7 @@ ProcessUtility(Node *parsetree,
* schema
*/
case T_RenameStmt:
- {
- RenameStmt *stmt = (RenameStmt *) parsetree;
- Oid relid;
-
- CheckOwnership(stmt->relation, true);
-
- relid = RangeVarGetRelid(stmt->relation, false);
-
- switch (stmt->renameType)
- {
- case RENAME_TABLE:
- {
- /*
- * RENAME TABLE requires that we (still) hold
- * CREATE rights on the containing namespace,
- * as well as ownership of the table.
- */
- Oid namespaceId = get_rel_namespace(relid);
- AclResult aclresult;
-
- aclresult = pg_namespace_aclcheck(namespaceId,
- GetUserId(),
- ACL_CREATE);
- if (aclresult != ACLCHECK_OK)
- aclcheck_error(aclresult,
- get_namespace_name(namespaceId));
-
- renamerel(relid, stmt->newname);
- break;
- }
- case RENAME_COLUMN:
- renameatt(relid,
- stmt->oldname, /* old att name */
- stmt->newname, /* new att name */
- interpretInhOption(stmt->relation->inhOpt), /* recursive? */
- false); /* recursing already? */
- break;
- case RENAME_TRIGGER:
- renametrig(relid,
- stmt->oldname, /* old att name */
- stmt->newname); /* new att name */
- break;
- case RENAME_RULE:
- elog(ERROR, "ProcessUtility: Invalid type for RENAME: %d",
- stmt->renameType);
- break;
- default:
- elog(ERROR, "ProcessUtility: Invalid type for RENAME: %d",
- stmt->renameType);
- }
- }
+ ExecRenameStmt((RenameStmt *) parsetree);
break;
/* various Alter Table forms */
@@ -694,15 +640,17 @@ ProcessUtility(Node *parsetree,
switch (stmt->kind)
{
- case DEFINE_STMT_AGGREGATE:
+ case OBJECT_AGGREGATE:
DefineAggregate(stmt->defnames, stmt->definition);
break;
- case DEFINE_STMT_OPERATOR:
+ case OBJECT_OPERATOR:
DefineOperator(stmt->defnames, stmt->definition);
break;
- case DEFINE_STMT_TYPE:
+ case OBJECT_TYPE:
DefineType(stmt->defnames, stmt->definition);
break;
+ default:
+ elog(ERROR, "invalid object type for DefineStmt: %d", stmt->kind);
}
}
break;
@@ -906,16 +854,18 @@ ProcessUtility(Node *parsetree,
switch (stmt->removeType)
{
- case DROP_RULE:
+ case OBJECT_RULE:
/* RemoveRewriteRule checks permissions */
RemoveRewriteRule(relId, stmt->property,
stmt->behavior);
break;
- case DROP_TRIGGER:
+ case OBJECT_TRIGGER:
/* DropTrigger checks permissions */
DropTrigger(relId, stmt->property,
stmt->behavior);
break;
+ default:
+ elog(ERROR, "invalid object type for DropPropertyStmt: %d", stmt->removeType);
}
}
break;
@@ -986,17 +936,19 @@ ProcessUtility(Node *parsetree,
switch (stmt->kind)
{
- case REINDEX_INDEX:
+ case OBJECT_INDEX:
CheckOwnership(stmt->relation, false);
ReindexIndex(stmt->relation, stmt->force);
break;
- case REINDEX_TABLE:
+ case OBJECT_TABLE:
CheckOwnership(stmt->relation, false);
ReindexTable(stmt->relation, stmt->force);
break;
- case REINDEX_DATABASE:
+ case OBJECT_DATABASE:
ReindexDatabase(stmt->name, stmt->force, false);
break;
+ default:
+ elog(ERROR, "invalid object type for ReindexStmt: %d", stmt->kind);
}
break;
}
@@ -1238,28 +1190,28 @@ CreateCommandTag(Node *parsetree)
case T_DropStmt:
switch (((DropStmt *) parsetree)->removeType)
{
- case DROP_TABLE:
+ case OBJECT_TABLE:
tag = "DROP TABLE";
break;
- case DROP_SEQUENCE:
+ case OBJECT_SEQUENCE:
tag = "DROP SEQUENCE";
break;
- case DROP_VIEW:
+ case OBJECT_VIEW:
tag = "DROP VIEW";
break;
- case DROP_INDEX:
+ case OBJECT_INDEX:
tag = "DROP INDEX";
break;
- case DROP_TYPE:
+ case OBJECT_TYPE:
tag = "DROP TYPE";
break;
- case DROP_DOMAIN:
+ case OBJECT_DOMAIN:
tag = "DROP DOMAIN";
break;
- case DROP_CONVERSION:
+ case OBJECT_CONVERSION:
tag = "DROP CONVERSION";
break;
- case DROP_SCHEMA:
+ case OBJECT_SCHEMA:
tag = "DROP SCHEMA";
break;
default:
@@ -1280,10 +1232,41 @@ CreateCommandTag(Node *parsetree)
break;
case T_RenameStmt:
- if (((RenameStmt *) parsetree)->renameType == RENAME_TRIGGER)
- tag = "ALTER TRIGGER";
- else
- tag = "ALTER TABLE";
+ switch (((RenameStmt *) parsetree)->renameType)
+ {
+ case OBJECT_AGGREGATE:
+ tag = "ALTER AGGREGATE";
+ break;
+ case OBJECT_CONVERSION:
+ tag = "ALTER CONVERSION";
+ break;
+ case OBJECT_DATABASE:
+ tag = "ALTER DATABASE";
+ break;
+ case OBJECT_FUNCTION:
+ tag = "ALTER FUNCTION";
+ break;
+ case OBJECT_GROUP:
+ tag = "ALTER GROUP";
+ break;
+ case OBJECT_LANGUAGE:
+ tag = "ALTER LANGUAGE";
+ break;
+ case OBJECT_OPCLASS:
+ tag = "ALTER OPERATOR CLASS";
+ break;
+ case OBJECT_SCHEMA:
+ tag = "ALTER SCHEMA";
+ break;
+ case OBJECT_TRIGGER:
+ tag = "ALTER TRIGGER";
+ break;
+ case OBJECT_USER:
+ tag = "ALTER USER";
+ break;
+ default:
+ tag = "ALTER TABLE";
+ }
break;
case T_AlterTableStmt:
@@ -1305,13 +1288,13 @@ CreateCommandTag(Node *parsetree)
case T_DefineStmt:
switch (((DefineStmt *) parsetree)->kind)
{
- case DEFINE_STMT_AGGREGATE:
+ case OBJECT_AGGREGATE:
tag = "CREATE AGGREGATE";
break;
- case DEFINE_STMT_OPERATOR:
+ case OBJECT_OPERATOR:
tag = "CREATE OPERATOR";
break;
- case DEFINE_STMT_TYPE:
+ case OBJECT_TYPE:
tag = "CREATE TYPE";
break;
default:
@@ -1421,10 +1404,10 @@ CreateCommandTag(Node *parsetree)
case T_DropPropertyStmt:
switch (((DropPropertyStmt *) parsetree)->removeType)
{
- case DROP_TRIGGER:
+ case OBJECT_TRIGGER:
tag = "DROP TRIGGER";
break;
- case DROP_RULE:
+ case OBJECT_RULE:
tag = "DROP RULE";
break;
default: