alter.c

来自「PostgreSQL7.4.6 for Linux」· C语言 代码 · 共 134 行

C
134
字号
/*------------------------------------------------------------------------- * * alter.c *	  Drivers for generic alter commands * * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * * IDENTIFICATION *	  $Header: /cvsroot/pgsql/src/backend/commands/alter.c,v 1.5 2003/08/04 00:43:16 momjian Exp $ * *------------------------------------------------------------------------- */#include "postgres.h"#include "access/htup.h"#include "catalog/catalog.h"#include "catalog/namespace.h"#include "catalog/pg_class.h"#include "commands/alter.h"#include "commands/conversioncmds.h"#include "commands/dbcommands.h"#include "commands/defrem.h"#include "commands/proclang.h"#include "commands/schemacmds.h"#include "commands/tablecmds.h"#include "commands/trigger.h"#include "commands/user.h"#include "miscadmin.h"#include "parser/parse_clause.h"#include "tcop/utility.h"#include "utils/acl.h"#include "utils/lsyscache.h"#include "utils/syscache.h"voidExecRenameStmt(RenameStmt *stmt){	switch (stmt->renameType)	{		case OBJECT_AGGREGATE:			RenameAggregate(stmt->object, (TypeName *) lfirst(stmt->objarg), stmt->newname);			break;		case OBJECT_CONVERSION:			RenameConversion(stmt->object, stmt->newname);			break;		case OBJECT_DATABASE:			RenameDatabase(stmt->subname, stmt->newname);			break;		case OBJECT_FUNCTION:			RenameFunction(stmt->object, stmt->objarg, stmt->newname);			break;		case OBJECT_GROUP:			RenameGroup(stmt->subname, stmt->newname);			break;		case OBJECT_LANGUAGE:			RenameLanguage(stmt->subname, stmt->newname);			break;		case OBJECT_OPCLASS:			RenameOpClass(stmt->object, stmt->subname, stmt->newname);			break;		case OBJECT_SCHEMA:			RenameSchema(stmt->subname, stmt->newname);			break;		case OBJECT_USER:			RenameUser(stmt->subname, stmt->newname);			break;		case OBJECT_TABLE:		case OBJECT_COLUMN:		case OBJECT_TRIGGER:			{				Oid			relid;				CheckRelationOwnership(stmt->relation, true);				relid = RangeVarGetRelid(stmt->relation, false);				switch (stmt->renameType)				{					case OBJECT_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, ACL_KIND_NAMESPACE,										get_namespace_name(namespaceId));							renamerel(relid, stmt->newname);							break;						}					case OBJECT_COLUMN:						renameatt(relid,								  stmt->subname,		/* old att name */								  stmt->newname,		/* new att name */							  interpretInhOption(stmt->relation->inhOpt),		/* recursive? */								  false);		/* recursing already? */						break;					case OBJECT_TRIGGER:						renametrig(relid,								   stmt->subname,		/* old att name */								   stmt->newname);		/* new att name */						break;					default:						 /* can't happen */ ;				}				break;			}		default:			elog(ERROR, "unrecognized rename stmt type: %d",				 (int) stmt->renameType);	}}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?