⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 utility.c

📁 PostgreSQL 8.1.4的源码 适用于Linux下的开源数据库系统
💻 C
📖 第 1 页 / 共 3 页
字号:
 *		utility to get a string representation of the *		command operation, given a raw (un-analyzed) parsetree. * * This must handle all raw command types, but since the vast majority * of 'em are utility commands, it seems sensible to keep it here. * * NB: all result strings must be shorter than COMPLETION_TAG_BUFSIZE. * Also, the result must point at a true constant (permanent storage). */const char *CreateCommandTag(Node *parsetree){	const char *tag;	switch (nodeTag(parsetree))	{		case T_InsertStmt:			tag = "INSERT";			break;		case T_DeleteStmt:			tag = "DELETE";			break;		case T_UpdateStmt:			tag = "UPDATE";			break;		case T_SelectStmt:			tag = "SELECT";			break;		case T_TransactionStmt:			{				TransactionStmt *stmt = (TransactionStmt *) parsetree;				switch (stmt->kind)				{					case TRANS_STMT_BEGIN:						tag = "BEGIN";						break;					case TRANS_STMT_START:						tag = "START TRANSACTION";						break;					case TRANS_STMT_COMMIT:						tag = "COMMIT";						break;					case TRANS_STMT_ROLLBACK:					case TRANS_STMT_ROLLBACK_TO:						tag = "ROLLBACK";						break;					case TRANS_STMT_SAVEPOINT:						tag = "SAVEPOINT";						break;					case TRANS_STMT_RELEASE:						tag = "RELEASE";						break;					case TRANS_STMT_PREPARE:						tag = "PREPARE TRANSACTION";						break;					case TRANS_STMT_COMMIT_PREPARED:						tag = "COMMIT PREPARED";						break;					case TRANS_STMT_ROLLBACK_PREPARED:						tag = "ROLLBACK PREPARED";						break;					default:						tag = "???";						break;				}			}			break;		case T_DeclareCursorStmt:			tag = "DECLARE CURSOR";			break;		case T_ClosePortalStmt:			tag = "CLOSE CURSOR";			break;		case T_FetchStmt:			{				FetchStmt  *stmt = (FetchStmt *) parsetree;				tag = (stmt->ismove) ? "MOVE" : "FETCH";			}			break;		case T_CreateDomainStmt:			tag = "CREATE DOMAIN";			break;		case T_CreateSchemaStmt:			tag = "CREATE SCHEMA";			break;		case T_CreateStmt:			tag = "CREATE TABLE";			break;		case T_CreateTableSpaceStmt:			tag = "CREATE TABLESPACE";			break;		case T_DropTableSpaceStmt:			tag = "DROP TABLESPACE";			break;		case T_DropStmt:			switch (((DropStmt *) parsetree)->removeType)			{				case OBJECT_TABLE:					tag = "DROP TABLE";					break;				case OBJECT_SEQUENCE:					tag = "DROP SEQUENCE";					break;				case OBJECT_VIEW:					tag = "DROP VIEW";					break;				case OBJECT_INDEX:					tag = "DROP INDEX";					break;				case OBJECT_TYPE:					tag = "DROP TYPE";					break;				case OBJECT_DOMAIN:					tag = "DROP DOMAIN";					break;				case OBJECT_CONVERSION:					tag = "DROP CONVERSION";					break;				case OBJECT_SCHEMA:					tag = "DROP SCHEMA";					break;				default:					tag = "???";			}			break;		case T_TruncateStmt:			tag = "TRUNCATE TABLE";			break;		case T_CommentStmt:			tag = "COMMENT";			break;		case T_CopyStmt:			tag = "COPY";			break;		case T_RenameStmt:			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_INDEX:					tag = "ALTER INDEX";					break;				case OBJECT_LANGUAGE:					tag = "ALTER LANGUAGE";					break;				case OBJECT_OPCLASS:					tag = "ALTER OPERATOR CLASS";					break;				case OBJECT_ROLE:					tag = "ALTER ROLE";					break;				case OBJECT_SCHEMA:					tag = "ALTER SCHEMA";					break;				case OBJECT_COLUMN:				case OBJECT_TABLE:					tag = "ALTER TABLE";					break;				case OBJECT_TABLESPACE:					tag = "ALTER TABLESPACE";					break;				case OBJECT_TRIGGER:					tag = "ALTER TRIGGER";					break;				default:					tag = "???";					break;			}			break;		case T_AlterObjectSchemaStmt:			switch (((AlterObjectSchemaStmt *) parsetree)->objectType)			{				case OBJECT_AGGREGATE:					tag = "ALTER AGGREGATE";					break;				case OBJECT_DOMAIN:					tag = "ALTER DOMAIN";					break;				case OBJECT_FUNCTION:					tag = "ALTER FUNCTION";					break;				case OBJECT_SEQUENCE:					tag = "ALTER SEQUENCE";					break;				case OBJECT_TABLE:					tag = "ALTER TABLE";					break;				case OBJECT_TYPE:					tag = "ALTER TYPE";					break;				default:					tag = "???";					break;			}			break;		case T_AlterOwnerStmt:			switch (((AlterOwnerStmt *) parsetree)->objectType)			{				case OBJECT_AGGREGATE:					tag = "ALTER AGGREGATE";					break;				case OBJECT_CONVERSION:					tag = "ALTER CONVERSION";					break;				case OBJECT_DATABASE:					tag = "ALTER DATABASE";					break;				case OBJECT_DOMAIN:					tag = "ALTER DOMAIN";					break;				case OBJECT_FUNCTION:					tag = "ALTER FUNCTION";					break;				case OBJECT_OPERATOR:					tag = "ALTER OPERATOR";					break;				case OBJECT_OPCLASS:					tag = "ALTER OPERATOR CLASS";					break;				case OBJECT_SCHEMA:					tag = "ALTER SCHEMA";					break;				case OBJECT_TABLESPACE:					tag = "ALTER TABLESPACE";					break;				case OBJECT_TYPE:					tag = "ALTER TYPE";					break;				default:					tag = "???";					break;			}			break;		case T_AlterTableStmt:			{				AlterTableStmt *stmt = (AlterTableStmt *) parsetree;				/*				 * We might be supporting ALTER INDEX here, so set the				 * completion table appropriately. Catch all other				 * possibilities with ALTER TABLE				 */				if (stmt->relkind == OBJECT_INDEX)					tag = "ALTER INDEX";				else					tag = "ALTER TABLE";			}			break;		case T_AlterDomainStmt:			tag = "ALTER DOMAIN";			break;		case T_AlterFunctionStmt:			tag = "ALTER FUNCTION";			break;		case T_GrantStmt:			{				GrantStmt  *stmt = (GrantStmt *) parsetree;				tag = (stmt->is_grant) ? "GRANT" : "REVOKE";			}			break;		case T_GrantRoleStmt:			{				GrantRoleStmt *stmt = (GrantRoleStmt *) parsetree;				tag = (stmt->is_grant) ? "GRANT ROLE" : "REVOKE ROLE";			}			break;		case T_DefineStmt:			switch (((DefineStmt *) parsetree)->kind)			{				case OBJECT_AGGREGATE:					tag = "CREATE AGGREGATE";					break;				case OBJECT_OPERATOR:					tag = "CREATE OPERATOR";					break;				case OBJECT_TYPE:					tag = "CREATE TYPE";					break;				default:					tag = "???";			}			break;		case T_CompositeTypeStmt:			tag = "CREATE TYPE";			break;		case T_ViewStmt:			tag = "CREATE VIEW";			break;		case T_CreateFunctionStmt:			tag = "CREATE FUNCTION";			break;		case T_IndexStmt:			tag = "CREATE INDEX";			break;		case T_RuleStmt:			tag = "CREATE RULE";			break;		case T_CreateSeqStmt:			tag = "CREATE SEQUENCE";			break;		case T_AlterSeqStmt:			tag = "ALTER SEQUENCE";			break;		case T_RemoveAggrStmt:			tag = "DROP AGGREGATE";			break;		case T_RemoveFuncStmt:			tag = "DROP FUNCTION";			break;		case T_RemoveOperStmt:			tag = "DROP OPERATOR";			break;		case T_CreatedbStmt:			tag = "CREATE DATABASE";			break;		case T_AlterDatabaseStmt:			tag = "ALTER DATABASE";			break;		case T_AlterDatabaseSetStmt:			tag = "ALTER DATABASE";			break;		case T_DropdbStmt:			tag = "DROP DATABASE";			break;		case T_NotifyStmt:			tag = "NOTIFY";			break;		case T_ListenStmt:			tag = "LISTEN";			break;		case T_UnlistenStmt:			tag = "UNLISTEN";			break;		case T_LoadStmt:			tag = "LOAD";			break;		case T_ClusterStmt:			tag = "CLUSTER";			break;		case T_VacuumStmt:			if (((VacuumStmt *) parsetree)->vacuum)				tag = "VACUUM";			else				tag = "ANALYZE";			break;		case T_ExplainStmt:			tag = "EXPLAIN";			break;		case T_VariableSetStmt:			tag = "SET";			break;		case T_VariableShowStmt:			tag = "SHOW";			break;		case T_VariableResetStmt:			tag = "RESET";			break;		case T_CreateTrigStmt:			tag = "CREATE TRIGGER";			break;		case T_DropPropertyStmt:			switch (((DropPropertyStmt *) parsetree)->removeType)			{				case OBJECT_TRIGGER:					tag = "DROP TRIGGER";					break;				case OBJECT_RULE:					tag = "DROP RULE";					break;				default:					tag = "???";			}			break;		case T_CreatePLangStmt:			tag = "CREATE LANGUAGE";			break;		case T_DropPLangStmt:			tag = "DROP LANGUAGE";			break;		case T_CreateRoleStmt:			tag = "CREATE ROLE";			break;		case T_AlterRoleStmt:			tag = "ALTER ROLE";			break;		case T_AlterRoleSetStmt:			tag = "ALTER ROLE";			break;		case T_DropRoleStmt:			tag = "DROP ROLE";			break;		case T_LockStmt:			tag = "LOCK TABLE";			break;		case T_ConstraintsSetStmt:			tag = "SET CONSTRAINTS";			break;		case T_CheckPointStmt:			tag = "CHECKPOINT";			break;		case T_ReindexStmt:			tag = "REINDEX";			break;		case T_CreateConversionStmt:			tag = "CREATE CONVERSION";			break;		case T_CreateCastStmt:			tag = "CREATE CAST";			break;		case T_DropCastStmt:			tag = "DROP CAST";			break;		case T_CreateOpClassStmt:			tag = "CREATE OPERATOR CLASS";			break;		case T_RemoveOpClassStmt:			tag = "DROP OPERATOR CLASS";			break;		case T_PrepareStmt:			tag = "PREPARE";			break;		case T_ExecuteStmt:			tag = "EXECUTE";			break;		case T_DeallocateStmt:			tag = "DEALLOCATE";			break;		default:			elog(WARNING, "unrecognized node type: %d",				 (int) nodeTag(parsetree));			tag = "???";			break;	}	return tag;}/* * CreateQueryTag *		utility to get a string representation of a Query operation. * * This is exactly like CreateCommandTag, except it works on a Query * that has already been through parse analysis (and possibly further). */const char *CreateQueryTag(Query *parsetree){	const char *tag;	switch (parsetree->commandType)	{		case CMD_SELECT:			/*			 * We take a little extra care here so that the result will be			 * useful for complaints about read-only statements			 */			if (parsetree->into != NULL)				tag = "SELECT INTO";			else if (parsetree->rowMarks != NIL)			{				if (parsetree->forUpdate)					tag = "SELECT FOR UPDATE";				else					tag = "SELECT FOR SHARE";			}			else				tag = "SELECT";			break;		case CMD_UPDATE:			tag = "UPDATE";			break;		case CMD_INSERT:			tag = "INSERT";			break;		case CMD_DELETE:			tag = "DELETE";			break;		case CMD_UTILITY:			tag = CreateCommandTag(parsetree->utilityStmt);			break;		default:			elog(WARNING, "unrecognized commandType: %d",				 (int) parsetree->commandType);			tag = "???";			break;	}	return tag;}

⌨️ 快捷键说明

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