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

📄 utility.c

📁 关系型数据库 Postgresql 6.5.2
💻 C
📖 第 1 页 / 共 2 页
字号:
		case T_IndexStmt:		/* CREATE INDEX */			{				IndexStmt  *stmt = (IndexStmt *) parsetree;				PS_SET_STATUS(commandTag = "CREATE");				CHECK_IF_ABORTED();				DefineIndex(stmt->relname,		/* relation name */							stmt->idxname,		/* index name */							stmt->accessMethod, /* am name */							stmt->indexParams,	/* parameters */							stmt->withClause,							stmt->unique,							stmt->primary,							(Expr *) stmt->whereClause,							stmt->rangetable);			}			break;		case T_RuleStmt:		/* CREATE RULE */			{				RuleStmt   *stmt = (RuleStmt *) parsetree;				int			aclcheck_result;#ifndef NO_SECURITY				relname = stmt->object->relname;				aclcheck_result = pg_aclcheck(relname, userName, ACL_RU);				if (aclcheck_result != ACLCHECK_OK)					elog(ERROR, "%s: %s", relname, aclcheck_error_strings[aclcheck_result]);#endif				PS_SET_STATUS(commandTag = "CREATE");				CHECK_IF_ABORTED();				DefineQueryRewrite(stmt);			}			break;		case T_CreateSeqStmt:			PS_SET_STATUS(commandTag = "CREATE");			CHECK_IF_ABORTED();			DefineSequence((CreateSeqStmt *) parsetree);			break;		case T_ExtendStmt:			{				ExtendStmt *stmt = (ExtendStmt *) parsetree;				PS_SET_STATUS(commandTag = "EXTEND");				CHECK_IF_ABORTED();				ExtendIndex(stmt->idxname,		/* index name */							(Expr *) stmt->whereClause, /* where */							stmt->rangetable);			}			break;		case T_RemoveStmt:			{				RemoveStmt *stmt = (RemoveStmt *) parsetree;				PS_SET_STATUS(commandTag = "DROP");				CHECK_IF_ABORTED();				switch (stmt->removeType)				{					case INDEX:						relname = stmt->name;						if (!allowSystemTableMods && IsSystemRelationName(relname))							elog(ERROR, "class \"%s\" is a system catalog index",								 relname);#ifndef NO_SECURITY						if (!pg_ownercheck(userName, relname, RELNAME))							elog(ERROR, "%s: %s", relname, aclcheck_error_strings[ACLCHECK_NOT_OWNER]);#endif						RemoveIndex(relname);						break;					case RULE:						{							char	   *rulename = stmt->name;							int			aclcheck_result;#ifndef NO_SECURITY							relationName = RewriteGetRuleEventRel(rulename);							aclcheck_result = pg_aclcheck(relationName, userName, ACL_RU);							if (aclcheck_result != ACLCHECK_OK)								elog(ERROR, "%s: %s", relationName, aclcheck_error_strings[aclcheck_result]);#endif							RemoveRewriteRule(rulename);						}						break;					case TYPE_P:#ifndef NO_SECURITY						/* XXX moved to remove.c */#endif						RemoveType(stmt->name);						break;					case VIEW:						{							char	   *viewName = stmt->name;							char	   *ruleName;#ifndef NO_SECURITY							ruleName = MakeRetrieveViewRuleName(viewName);							relationName = RewriteGetRuleEventRel(ruleName);							if (!pg_ownercheck(userName, relationName, RELNAME))								elog(ERROR, "%s: %s", relationName, aclcheck_error_strings[ACLCHECK_NOT_OWNER]);							pfree(ruleName);#endif							RemoveView(viewName);						}						break;				}				break;			}			break;		case T_RemoveAggrStmt:			{				RemoveAggrStmt *stmt = (RemoveAggrStmt *) parsetree;				PS_SET_STATUS(commandTag = "DROP");				CHECK_IF_ABORTED();				RemoveAggregate(stmt->aggname, stmt->aggtype);			}			break;		case T_RemoveFuncStmt:			{				RemoveFuncStmt *stmt = (RemoveFuncStmt *) parsetree;				PS_SET_STATUS(commandTag = "DROP");				CHECK_IF_ABORTED();				RemoveFunction(stmt->funcname,							   length(stmt->args),							   stmt->args);			}			break;		case T_RemoveOperStmt:			{				RemoveOperStmt *stmt = (RemoveOperStmt *) parsetree;				char	   *type1 = (char *) NULL;				char	   *type2 = (char *) NULL;				PS_SET_STATUS(commandTag = "DROP");				CHECK_IF_ABORTED();				if (lfirst(stmt->args) != NULL)					type1 = strVal(lfirst(stmt->args));				if (lsecond(stmt->args) != NULL)					type2 = strVal(lsecond(stmt->args));				RemoveOperator(stmt->opname, type1, type2);			}			break;		case T_VersionStmt:			elog(ERROR, "CREATE VERSION is not currently implemented");			break;		case T_CreatedbStmt:			{				CreatedbStmt *stmt = (CreatedbStmt *) parsetree;				PS_SET_STATUS(commandTag = "CREATEDB");				CHECK_IF_ABORTED();				createdb(stmt->dbname, stmt->dbpath, stmt->encoding, dest);			}			break;		case T_DestroydbStmt:			{				DestroydbStmt *stmt = (DestroydbStmt *) parsetree;				PS_SET_STATUS(commandTag = "DESTROYDB");				CHECK_IF_ABORTED();				destroydb(stmt->dbname, dest);			}			break;			/* Query-level asynchronous notification */		case T_NotifyStmt:			{				NotifyStmt *stmt = (NotifyStmt *) parsetree;				PS_SET_STATUS(commandTag = "NOTIFY");				CHECK_IF_ABORTED();				Async_Notify(stmt->relname);			}			break;		case T_ListenStmt:			{				ListenStmt *stmt = (ListenStmt *) parsetree;				PS_SET_STATUS(commandTag = "LISTEN");				CHECK_IF_ABORTED();				Async_Listen(stmt->relname, MyProcPid);			}			break;		case T_UnlistenStmt:			{				UnlistenStmt *stmt = (UnlistenStmt *) parsetree;				PS_SET_STATUS(commandTag = "UNLISTEN");				CHECK_IF_ABORTED();				Async_Unlisten(stmt->relname, MyProcPid);			}			break;			/*			 * ******************************** dynamic loader ********************************			 *			 */		case T_LoadStmt:			{				LoadStmt   *stmt = (LoadStmt *) parsetree;				PS_SET_STATUS(commandTag = "LOAD");				CHECK_IF_ABORTED();				closeAllVfds(); /* probably not necessary... */				load_file(stmt->filename);			}			break;		case T_ClusterStmt:			{				ClusterStmt *stmt = (ClusterStmt *) parsetree;				PS_SET_STATUS(commandTag = "CLUSTER");				CHECK_IF_ABORTED();				cluster(stmt->relname, stmt->indexname);			}			break;		case T_VacuumStmt:			PS_SET_STATUS(commandTag = "VACUUM");			CHECK_IF_ABORTED();			vacuum(((VacuumStmt *) parsetree)->vacrel,				   ((VacuumStmt *) parsetree)->verbose,				   ((VacuumStmt *) parsetree)->analyze,				   ((VacuumStmt *) parsetree)->va_spec);			break;		case T_ExplainStmt:			{				ExplainStmt *stmt = (ExplainStmt *) parsetree;				PS_SET_STATUS(commandTag = "EXPLAIN");				CHECK_IF_ABORTED();				ExplainQuery(stmt->query, stmt->verbose, dest);			}			break;#ifdef NOT_USED			/*			 * ******************************** Tioga-related statements *******************************			 */		case T_RecipeStmt:			{				RecipeStmt *stmt = (RecipeStmt *) parsetree;				PS_SET_STATUS(commandTag = "EXECUTE RECIPE");				CHECK_IF_ABORTED();				beginRecipe(stmt);			}			break;#endif			/*			 * ******************************** set variable statements *******************************			 */		case T_VariableSetStmt:			{				VariableSetStmt *n = (VariableSetStmt *) parsetree;				SetPGVariable(n->name, n->value);				PS_SET_STATUS(commandTag = "SET VARIABLE");			}			break;		case T_VariableShowStmt:			{				VariableShowStmt *n = (VariableShowStmt *) parsetree;				GetPGVariable(n->name);				PS_SET_STATUS(commandTag = "SHOW VARIABLE");			}			break;		case T_VariableResetStmt:			{				VariableResetStmt *n = (VariableResetStmt *) parsetree;				ResetPGVariable(n->name);				PS_SET_STATUS(commandTag = "RESET VARIABLE");			}			break;			/*			 * ******************************** TRIGGER statements *******************************			 */		case T_CreateTrigStmt:			PS_SET_STATUS(commandTag = "CREATE");			CHECK_IF_ABORTED();			CreateTrigger((CreateTrigStmt *) parsetree);			break;		case T_DropTrigStmt:			PS_SET_STATUS(commandTag = "DROP");			CHECK_IF_ABORTED();			DropTrigger((DropTrigStmt *) parsetree);			break;			/*			 * ************* PROCEDURAL LANGUAGE statements *****************			 */		case T_CreatePLangStmt:			PS_SET_STATUS(commandTag = "CREATE");			CHECK_IF_ABORTED();			CreateProceduralLanguage((CreatePLangStmt *) parsetree);			break;		case T_DropPLangStmt:			PS_SET_STATUS(commandTag = "DROP");			CHECK_IF_ABORTED();			DropProceduralLanguage((DropPLangStmt *) parsetree);			break;			/*			 * ******************************** USER statements ****			 *			 */		case T_CreateUserStmt:			PS_SET_STATUS(commandTag = "CREATE USER");			CHECK_IF_ABORTED();			DefineUser((CreateUserStmt *) parsetree, dest);			break;		case T_AlterUserStmt:			PS_SET_STATUS(commandTag = "ALTER USER");			CHECK_IF_ABORTED();			AlterUser((AlterUserStmt *) parsetree, dest);			break;		case T_DropUserStmt:			PS_SET_STATUS(commandTag = "DROP USER");			CHECK_IF_ABORTED();			RemoveUser(((DropUserStmt *) parsetree)->user, dest);			break;		case T_LockStmt:			PS_SET_STATUS(commandTag = "LOCK TABLE");			CHECK_IF_ABORTED();			LockTableCommand((LockStmt *) parsetree);			break;			/*			 * ******************************** default ********************************			 *			 */		default:			elog(ERROR, "ProcessUtility: command #%d unsupported",				 nodeTag(parsetree));			break;	}	/* ----------------	 *	tell fe/be or whatever that we're done.	 * ----------------	 */	EndCommand(commandTag, dest);}

⌨️ 快捷键说明

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