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.c58
1 files changed, 39 insertions, 19 deletions
diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c
index 250e30ef4b4..ead435b09cd 100644
--- a/src/backend/tcop/utility.c
+++ b/src/backend/tcop/utility.c
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.79 2000/01/15 18:30:30 petere Exp $
+ * $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.80 2000/01/16 20:04:56 petere Exp $
*
*-------------------------------------------------------------------------
*/
@@ -270,24 +270,6 @@ ProcessUtility(Node *parsetree,
}
break;
- case T_AddAttrStmt:
- {
- AddAttrStmt *stmt = (AddAttrStmt *) parsetree;
-
- PS_SET_STATUS(commandTag = "ADD");
- CHECK_IF_ABORTED();
-
- /*
- * owner checking done in PerformAddAttribute (now
- * recursive)
- */
- PerformAddAttribute(stmt->relname,
- userName,
- stmt->inh,
- (ColumnDef *) stmt->colDef);
- }
- break;
-
/*
* schema
*/
@@ -346,6 +328,44 @@ ProcessUtility(Node *parsetree,
}
break;
+ /* various Alter Table forms */
+
+ case T_AlterTableStmt:
+ {
+ AlterTableStmt *stmt = (AlterTableStmt *) parsetree;
+
+ PS_SET_STATUS(commandTag = "ALTER TABLE");
+ CHECK_IF_ABORTED();
+
+ /*
+ * Some or all of these functions are recursive to cover inherited things,
+ * so permission checks are done there.
+ */
+ switch(stmt->subtype)
+ {
+ case 'A': /* ADD COLUMN */
+ AlterTableAddColumn(stmt->relname, stmt->inh, (ColumnDef *) stmt->def);
+ break;
+ case 'T': /* ALTER COLUMN */
+ AlterTableAlterColumn(stmt->relname, stmt->inh, stmt->name, stmt->def);
+ break;
+ case 'D': /* ALTER DROP */
+ AlterTableDropColumn(stmt->relname, stmt->inh, stmt->name, stmt->behavior);
+ break;
+ case 'C': /* ADD CONSTRAINT */
+ AlterTableAddConstraint(stmt->relname, stmt->inh, stmt->def);
+ break;
+ case 'X': /* DROP CONSTRAINT */
+ AlterTableDropConstraint(stmt->relname, stmt->inh, stmt->name, stmt->behavior);
+ break;
+ default: /* oops */
+ elog(ERROR, "T_AlterTableStmt: unknown subtype");
+ break;
+ }
+ }
+ break;
+
+
case T_ChangeACLStmt:
{
ChangeACLStmt *stmt = (ChangeACLStmt *) parsetree;