diff options
author | Andrew Dunstan <andrew@dunslane.net> | 2006-06-16 20:23:45 +0000 |
---|---|---|
committer | Andrew Dunstan <andrew@dunslane.net> | 2006-06-16 20:23:45 +0000 |
commit | bbcd01692bff099117f5afb0fe2d1ad182621766 (patch) | |
tree | 07aebd51aac35be3e0e4471cbff7595a35350d67 /src/backend/commands/functioncmds.c | |
parent | e79cc2db00501fb29e3e0225182147192e830fa1 (diff) | |
download | postgresql-bbcd01692bff099117f5afb0fe2d1ad182621766.tar.gz postgresql-bbcd01692bff099117f5afb0fe2d1ad182621766.zip |
DROP ... IF EXISTS for the following cases:
language, tablespace, trigger, rule, opclass, function, aggregate. operator, and cast.
Diffstat (limited to 'src/backend/commands/functioncmds.c')
-rw-r--r-- | src/backend/commands/functioncmds.c | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c index 96929a0d6c4..b37e2e86324 100644 --- a/src/backend/commands/functioncmds.c +++ b/src/backend/commands/functioncmds.c @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/commands/functioncmds.c,v 1.74 2006/04/15 17:45:34 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/commands/functioncmds.c,v 1.75 2006/06/16 20:23:44 adunstan Exp $ * * DESCRIPTION * These routines take the parse tree and pick out the @@ -687,7 +687,16 @@ RemoveFunction(RemoveFuncStmt *stmt) /* * Find the function, do permissions and validity checks */ - funcOid = LookupFuncNameTypeNames(functionName, argTypes, false); + funcOid = LookupFuncNameTypeNames(functionName, argTypes, stmt->missing_ok); + if (stmt->missing_ok &&!OidIsValid(funcOid)) + { + ereport(NOTICE, + (errmsg("function %s(%s) does not exist ... skipping", + NameListToString(functionName), + NameListToString(argTypes)))); + return; + } + tup = SearchSysCache(PROCOID, ObjectIdGetDatum(funcOid), @@ -1377,6 +1386,7 @@ DropCast(DropCastStmt *stmt) HeapTuple tuple; ObjectAddress object; + /* when dropping a cast, the types must exist even if you use IF EXISTS */ sourcetypeid = typenameTypeId(NULL, stmt->sourcetype); targettypeid = typenameTypeId(NULL, stmt->targettype); @@ -1385,11 +1395,23 @@ DropCast(DropCastStmt *stmt) ObjectIdGetDatum(targettypeid), 0, 0); if (!HeapTupleIsValid(tuple)) - ereport(ERROR, - (errcode(ERRCODE_UNDEFINED_OBJECT), - errmsg("cast from type %s to type %s does not exist", - TypeNameToString(stmt->sourcetype), - TypeNameToString(stmt->targettype)))); + { + if (! stmt->missing_ok) + ereport(ERROR, + (errcode(ERRCODE_UNDEFINED_OBJECT), + errmsg("cast from type %s to type %s does not exist", + TypeNameToString(stmt->sourcetype), + TypeNameToString(stmt->targettype)))); + else + ereport(NOTICE, + (errmsg("cast from type %s to type %s does not exist ... skipping", + TypeNameToString(stmt->sourcetype), + TypeNameToString(stmt->targettype)))); + + return; + } + + /* Permission check */ if (!pg_type_ownercheck(sourcetypeid, GetUserId()) |