📄 utility.c
字号:
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 + -