utility.c
来自「PostgreSQL7.4.6 for Linux」· C语言 代码 · 共 1,566 行 · 第 1/3 页
C
1,566 行
AlterTableAddColumn(relid, interpretInhOption(stmt->relation->inhOpt), (ColumnDef *) stmt->def); break; case 'T': /* ALTER COLUMN DEFAULT */ /* * Recursively alter column default for table and, * if requested, for descendants */ AlterTableAlterColumnDefault(relid, interpretInhOption(stmt->relation->inhOpt), stmt->name, stmt->def); break; case 'N': /* ALTER COLUMN DROP NOT NULL */ AlterTableAlterColumnDropNotNull(relid, interpretInhOption(stmt->relation->inhOpt), stmt->name); break; case 'n': /* ALTER COLUMN SET NOT NULL */ AlterTableAlterColumnSetNotNull(relid, interpretInhOption(stmt->relation->inhOpt), stmt->name); break; case 'S': /* ALTER COLUMN STATISTICS */ case 'M': /* ALTER COLUMN STORAGE */ /* * Recursively alter column statistics for table * and, if requested, for descendants */ AlterTableAlterColumnFlags(relid, interpretInhOption(stmt->relation->inhOpt), stmt->name, stmt->def, &(stmt->subtype)); break; case 'D': /* DROP COLUMN */ /* * Recursively drop column from table and, if * requested, from descendants */ AlterTableDropColumn(relid, interpretInhOption(stmt->relation->inhOpt), false, stmt->name, stmt->behavior); break; case 'C': /* ADD CONSTRAINT */ /* * Recursively add constraint to table and, if * requested, to descendants */ AlterTableAddConstraint(relid, interpretInhOption(stmt->relation->inhOpt), (List *) stmt->def); break; case 'X': /* DROP CONSTRAINT */ /* * Recursively drop constraint from table and, if * requested, from descendants */ AlterTableDropConstraint(relid, interpretInhOption(stmt->relation->inhOpt), stmt->name, stmt->behavior); break; case 'E': /* CREATE TOAST TABLE */ AlterTableCreateToastTable(relid, false); break; case 'U': /* ALTER OWNER */ /* check that we are the superuser */ if (!superuser()) ereport(ERROR, (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), errmsg("must be superuser to alter owner"))); /* get_usesysid raises an error if no such user */ AlterTableOwner(relid, get_usesysid(stmt->name)); break; case 'L': /* CLUSTER ON */ AlterTableClusterOn(relid, stmt->name); break; case 'o': /* ADD OIDS */ AlterTableAlterOids(relid, interpretInhOption(stmt->relation->inhOpt), false); break; default: /* oops */ elog(ERROR, "unrecognized alter table type: %d", (int) stmt->subtype); break; } } break; case T_AlterDomainStmt: { AlterDomainStmt *stmt = (AlterDomainStmt *) parsetree; /* * Some or all of these functions are recursive to cover * inherited things, so permission checks are done there. */ switch (stmt->subtype) { case 'T': /* ALTER DOMAIN DEFAULT */ /* * Recursively alter column default for table and, * if requested, for descendants */ AlterDomainDefault(stmt->typename, stmt->def); break; case 'N': /* ALTER DOMAIN DROP NOT NULL */ AlterDomainNotNull(stmt->typename, false); break; case 'O': /* ALTER DOMAIN SET NOT NULL */ AlterDomainNotNull(stmt->typename, true); break; case 'C': /* ADD CONSTRAINT */ AlterDomainAddConstraint(stmt->typename, stmt->def); break; case 'X': /* DROP CONSTRAINT */ AlterDomainDropConstraint(stmt->typename, stmt->name, stmt->behavior); break; case 'U': /* OWNER TO */ /* check that we are the superuser */ if (!superuser()) ereport(ERROR, (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), errmsg("must be superuser to alter owner"))); /* get_usesysid raises an error if no such user */ AlterTypeOwner(stmt->typename, get_usesysid(stmt->name)); break; default: /* oops */ elog(ERROR, "unrecognized alter domain type: %d", (int) stmt->subtype); break; } } break; case T_GrantStmt: ExecuteGrantStmt((GrantStmt *) parsetree); break; /* * ******************************** object creation / * destruction ******************************** * */ case T_DefineStmt: { DefineStmt *stmt = (DefineStmt *) parsetree; switch (stmt->kind) { case OBJECT_AGGREGATE: DefineAggregate(stmt->defnames, stmt->definition); break; case OBJECT_OPERATOR: DefineOperator(stmt->defnames, stmt->definition); break; case OBJECT_TYPE: DefineType(stmt->defnames, stmt->definition); break; default: elog(ERROR, "unrecognized define stmt type: %d", (int) stmt->kind); break; } } break; case T_CompositeTypeStmt: /* CREATE TYPE (composite) */ { CompositeTypeStmt *stmt = (CompositeTypeStmt *) parsetree; DefineCompositeType(stmt->typevar, stmt->coldeflist); } break; case T_ViewStmt: /* CREATE VIEW */ { ViewStmt *stmt = (ViewStmt *) parsetree; DefineView(stmt->view, stmt->query, stmt->replace); } break; case T_CreateFunctionStmt: /* CREATE FUNCTION */ CreateFunction((CreateFunctionStmt *) parsetree); break; case T_IndexStmt: /* CREATE INDEX */ { IndexStmt *stmt = (IndexStmt *) parsetree; CheckRelationOwnership(stmt->relation, true); DefineIndex(stmt->relation, /* relation */ stmt->idxname, /* index name */ stmt->accessMethod, /* am name */ stmt->indexParams, /* parameters */ stmt->unique, stmt->primary, stmt->isconstraint, (Expr *) stmt->whereClause, stmt->rangetable); } break; case T_RuleStmt: /* CREATE RULE */ DefineQueryRewrite((RuleStmt *) parsetree); break; case T_CreateSeqStmt: DefineSequence((CreateSeqStmt *) parsetree); break; case T_AlterSeqStmt: AlterSequence((AlterSeqStmt *) parsetree); break; case T_RemoveAggrStmt: RemoveAggregate((RemoveAggrStmt *) parsetree); break; case T_RemoveFuncStmt: RemoveFunction((RemoveFuncStmt *) parsetree); break; case T_RemoveOperStmt: RemoveOperator((RemoveOperStmt *) parsetree); break; case T_CreatedbStmt: createdb((CreatedbStmt *) parsetree); break; case T_AlterDatabaseSetStmt: AlterDatabaseSet((AlterDatabaseSetStmt *) parsetree); break; case T_DropdbStmt: { DropdbStmt *stmt = (DropdbStmt *) parsetree; dropdb(stmt->dbname); } break; /* Query-level asynchronous notification */ case T_NotifyStmt: { NotifyStmt *stmt = (NotifyStmt *) parsetree; Async_Notify(stmt->relation->relname); } break; case T_ListenStmt: { ListenStmt *stmt = (ListenStmt *) parsetree; Async_Listen(stmt->relation->relname, MyProcPid); } break; case T_UnlistenStmt: { UnlistenStmt *stmt = (UnlistenStmt *) parsetree; Async_Unlisten(stmt->relation->relname, MyProcPid); } break; case T_LoadStmt: { LoadStmt *stmt = (LoadStmt *) parsetree; closeAllVfds(); /* probably not necessary... */ load_file(stmt->filename); } break; case T_ClusterStmt: cluster((ClusterStmt *) parsetree); break; case T_VacuumStmt: vacuum((VacuumStmt *) parsetree); break; case T_ExplainStmt: ExplainQuery((ExplainStmt *) parsetree, dest); break; case T_VariableSetStmt: { VariableSetStmt *n = (VariableSetStmt *) parsetree; /* * Special cases for special SQL syntax that effectively * sets more than one variable per statement. */ if (strcmp(n->name, "TRANSACTION") == 0) { List *head; foreach(head, n->args) { DefElem *item = (DefElem *) lfirst(head); if (strcmp(item->defname, "transaction_isolation") == 0) SetPGVariable("transaction_isolation", makeList1(item->arg), n->is_local); else if (strcmp(item->defname, "transaction_read_only") == 0) SetPGVariable("transaction_read_only", makeList1(item->arg), n->is_local); } } else if (strcmp(n->name, "SESSION CHARACTERISTICS") == 0) { List *head; foreach(head, n->args) { DefElem *item = (DefElem *) lfirst(head); if (strcmp(item->defname, "transaction_isolation") == 0) SetPGVariable("default_transaction_isolation", makeList1(item->arg), n->is_local); else if (strcmp(item->defname, "transaction_read_only") == 0) SetPGVariable("default_transaction_read_only", makeList1(item->arg), n->is_local); } } else SetPGVariable(n->name, n->args, n->is_local); } break; case T_VariableShowStmt: { VariableShowStmt *n = (VariableShowStmt *) parsetree; GetPGVariable(n->name, dest); } break; case T_VariableResetStmt: { VariableResetStmt *n = (VariableResetStmt *) parsetree; ResetPGVariable(n->name); } break; case T_CreateTrigStmt: CreateTrigger((CreateTrigStmt *) parsetree, false); break; case T_DropPropertyStmt: { DropPropertyStmt *stmt = (DropPropertyStmt *) parsetree; Oid relId; relId = RangeVarGetRelid(stmt->relation, false); switch (stmt->removeType) { case OBJECT_RULE: /* RemoveRewriteRule checks permissions */ RemoveRewriteRule(relId, stmt->property, stmt->behavior); break; case OBJECT_TRIGGER: /* DropTrigger checks permissions */ DropTrigger(relId, stmt->property, stmt->behavior); break; default: elog(ERROR, "unrecognized object type: %d", (int) stmt->removeType); break; } } break; case T_CreatePLangStmt: CreateProceduralLanguage((CreatePLangStmt *) parsetree); break; case T_DropPLangStmt: DropProceduralLanguage((DropPLangStmt *) parsetree); break; /* * ******************************** DOMAIN statements **** */ case T_CreateDomainStmt: DefineDomain((CreateDomainStmt *) parsetree); break; /* * ******************************** USER statements **** */ case T_CreateUserStmt: CreateUser((CreateUserStmt *) parsetree); break; case T_AlterUserStmt: AlterUser((AlterUserStmt *) parsetree); break; case T_AlterUserSetStmt: AlterUserSet((AlterUserSetStmt *) parsetree); break; case T_DropUserStmt: DropUser((DropUserStmt *) parsetree); break; case T_LockStmt: LockTableCommand((LockStmt *) parsetree); break; case T_ConstraintsSetStmt: DeferredTriggerSetState((ConstraintsSetStmt *) parsetree); break; case T_CreateGroupStmt: CreateGroup((CreateGroupStmt *) parsetree); break; case T_AlterGroupStmt: AlterGroup((AlterGroupStmt *) parsetree, "ALTER GROUP"); break; case T_DropGroupStmt: DropGroup((DropGroupStmt *) parsetree); break; case T_CheckPointStmt: if (!superuser()) ereport(ERROR, (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), errmsg("must be superuser to do CHECKPOINT"))); CreateCheckPoint(false, false); break; case T_ReindexStmt: { ReindexStmt *stmt = (ReindexStmt *) parsetree; switch (stmt->kind) { case OBJECT_INDEX: ReindexIndex(stmt->relation, stmt->force); break; case OBJECT_TABLE: ReindexTable(stmt->relation, stmt->force); break; case OBJECT_DATABASE: ReindexDatabase(stmt->name, stmt->force, false); break; default: elog(ERROR, "unrecognized object type: %d", (int) stmt->kind); break; } break; } break; case T_CreateConversionStmt: CreateConversionCommand((CreateConversionStmt *) parsetree); break; case T_CreateCastStmt: CreateCast((CreateCastStmt *) parsetree); break; case T_DropCastStmt: DropCast((DropCastStmt *) parsetree); break; case T_CreateOpClassStmt: DefineOpClass((CreateOpClassStmt *) parsetree); break; case T_RemoveOpClassStmt: RemoveOpClass((RemoveOpClassStmt *) parsetree); break; default: elog(ERROR, "unrecognized node type: %d", (int) nodeTag(parsetree)); break; }}/* * UtilityReturnsTuples * Return "true" if this utility statement will send output to the * destination. * * Generally, there should be a case here for each case in ProcessUtility
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?