Fix notice message from DROP FUNCTION IF EXISTS, and improve message
for DROP AGGREGATE IF EXISTS. Per report from Teodor.
This commit is contained in:
parent
0c858bd69e
commit
c232c8afa8
@ -9,7 +9,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/commands/aggregatecmds.c,v 1.38 2006/07/27 19:52:04 tgl Exp $
|
* $PostgreSQL: pgsql/src/backend/commands/aggregatecmds.c,v 1.39 2006/09/25 15:17:34 tgl Exp $
|
||||||
*
|
*
|
||||||
* DESCRIPTION
|
* DESCRIPTION
|
||||||
* The "DefineFoo" routines take the parse tree and pick out the
|
* The "DefineFoo" routines take the parse tree and pick out the
|
||||||
@ -219,8 +219,9 @@ RemoveAggregate(RemoveFuncStmt *stmt)
|
|||||||
{
|
{
|
||||||
/* we only get here if stmt->missing_ok is true */
|
/* we only get here if stmt->missing_ok is true */
|
||||||
ereport(NOTICE,
|
ereport(NOTICE,
|
||||||
(errmsg("aggregate %s does not exist ... skipping",
|
(errmsg("aggregate %s(%s) does not exist ... skipping",
|
||||||
NameListToString(stmt->name))));
|
NameListToString(aggName),
|
||||||
|
TypeNameListToString(aggArgs))));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/commands/functioncmds.c,v 1.76 2006/07/14 14:52:18 momjian Exp $
|
* $PostgreSQL: pgsql/src/backend/commands/functioncmds.c,v 1.77 2006/09/25 15:17:34 tgl Exp $
|
||||||
*
|
*
|
||||||
* DESCRIPTION
|
* DESCRIPTION
|
||||||
* These routines take the parse tree and pick out the
|
* These routines take the parse tree and pick out the
|
||||||
@ -686,16 +686,16 @@ RemoveFunction(RemoveFuncStmt *stmt)
|
|||||||
* Find the function, do permissions and validity checks
|
* Find the function, do permissions and validity checks
|
||||||
*/
|
*/
|
||||||
funcOid = LookupFuncNameTypeNames(functionName, argTypes, stmt->missing_ok);
|
funcOid = LookupFuncNameTypeNames(functionName, argTypes, stmt->missing_ok);
|
||||||
if (stmt->missing_ok &&!OidIsValid(funcOid))
|
if (!OidIsValid(funcOid))
|
||||||
{
|
{
|
||||||
|
/* can only get here if stmt->missing_ok */
|
||||||
ereport(NOTICE,
|
ereport(NOTICE,
|
||||||
(errmsg("function %s(%s) does not exist ... skipping",
|
(errmsg("function %s(%s) does not exist ... skipping",
|
||||||
NameListToString(functionName),
|
NameListToString(functionName),
|
||||||
NameListToString(argTypes))));
|
TypeNameListToString(argTypes))));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
tup = SearchSysCache(PROCOID,
|
tup = SearchSysCache(PROCOID,
|
||||||
ObjectIdGetDatum(funcOid),
|
ObjectIdGetDatum(funcOid),
|
||||||
0, 0, 0);
|
0, 0, 0);
|
||||||
@ -1409,8 +1409,6 @@ DropCast(DropCastStmt *stmt)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Permission check */
|
/* Permission check */
|
||||||
if (!pg_type_ownercheck(sourcetypeid, GetUserId())
|
if (!pg_type_ownercheck(sourcetypeid, GetUserId())
|
||||||
&& !pg_type_ownercheck(targettypeid, GetUserId()))
|
&& !pg_type_ownercheck(targettypeid, GetUserId()))
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/parser/parse_type.c,v 1.83 2006/08/02 01:59:47 joe Exp $
|
* $PostgreSQL: pgsql/src/backend/parser/parse_type.c,v 1.84 2006/09/25 15:17:34 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -140,6 +140,46 @@ LookupTypeName(ParseState *pstate, const TypeName *typename)
|
|||||||
return restype;
|
return restype;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* appendTypeNameToBuffer
|
||||||
|
* Append a string representing the name of a TypeName to a StringInfo.
|
||||||
|
* This is the shared guts of TypeNameToString and TypeNameListToString.
|
||||||
|
*
|
||||||
|
* NB: this must work on TypeNames that do not describe any actual type;
|
||||||
|
* it is mostly used for reporting lookup errors.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
appendTypeNameToBuffer(const TypeName *typename, StringInfo string)
|
||||||
|
{
|
||||||
|
if (typename->names != NIL)
|
||||||
|
{
|
||||||
|
/* Emit possibly-qualified name as-is */
|
||||||
|
ListCell *l;
|
||||||
|
|
||||||
|
foreach(l, typename->names)
|
||||||
|
{
|
||||||
|
if (l != list_head(typename->names))
|
||||||
|
appendStringInfoChar(string, '.');
|
||||||
|
appendStringInfoString(string, strVal(lfirst(l)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Look up internally-specified type */
|
||||||
|
appendStringInfoString(string, format_type_be(typename->typeid));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Add decoration as needed, but only for fields considered by
|
||||||
|
* LookupTypeName
|
||||||
|
*/
|
||||||
|
if (typename->pct_type)
|
||||||
|
appendStringInfoString(string, "%TYPE");
|
||||||
|
|
||||||
|
if (typename->arrayBounds != NIL)
|
||||||
|
appendStringInfoString(string, "[]");
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TypeNameToString
|
* TypeNameToString
|
||||||
* Produce a string representing the name of a TypeName.
|
* Produce a string representing the name of a TypeName.
|
||||||
@ -153,35 +193,30 @@ TypeNameToString(const TypeName *typename)
|
|||||||
StringInfoData string;
|
StringInfoData string;
|
||||||
|
|
||||||
initStringInfo(&string);
|
initStringInfo(&string);
|
||||||
|
appendTypeNameToBuffer(typename, &string);
|
||||||
|
return string.data;
|
||||||
|
}
|
||||||
|
|
||||||
if (typename->names != NIL)
|
/*
|
||||||
|
* TypeNameListToString
|
||||||
|
* Produce a string representing the name(s) of a List of TypeNames
|
||||||
|
*/
|
||||||
|
char *
|
||||||
|
TypeNameListToString(List *typenames)
|
||||||
|
{
|
||||||
|
StringInfoData string;
|
||||||
|
ListCell *l;
|
||||||
|
|
||||||
|
initStringInfo(&string);
|
||||||
|
foreach(l, typenames)
|
||||||
{
|
{
|
||||||
/* Emit possibly-qualified name as-is */
|
TypeName *typename = (TypeName *) lfirst(l);
|
||||||
ListCell *l;
|
|
||||||
|
|
||||||
foreach(l, typename->names)
|
Assert(IsA(typename, TypeName));
|
||||||
{
|
if (l != list_head(typenames))
|
||||||
if (l != list_head(typename->names))
|
appendStringInfoChar(&string, ',');
|
||||||
appendStringInfoChar(&string, '.');
|
appendTypeNameToBuffer(typename, &string);
|
||||||
appendStringInfoString(&string, strVal(lfirst(l)));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Look up internally-specified type */
|
|
||||||
appendStringInfoString(&string, format_type_be(typename->typeid));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Add decoration as needed, but only for fields considered by
|
|
||||||
* LookupTypeName
|
|
||||||
*/
|
|
||||||
if (typename->pct_type)
|
|
||||||
appendStringInfoString(&string, "%TYPE");
|
|
||||||
|
|
||||||
if (typename->arrayBounds != NIL)
|
|
||||||
appendStringInfoString(&string, "[]");
|
|
||||||
|
|
||||||
return string.data;
|
return string.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $PostgreSQL: pgsql/src/include/parser/parse_type.h,v 1.32 2006/03/14 22:48:22 tgl Exp $
|
* $PostgreSQL: pgsql/src/include/parser/parse_type.h,v 1.33 2006/09/25 15:17:34 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -22,6 +22,7 @@ typedef HeapTuple Type;
|
|||||||
|
|
||||||
extern Oid LookupTypeName(ParseState *pstate, const TypeName *typename);
|
extern Oid LookupTypeName(ParseState *pstate, const TypeName *typename);
|
||||||
extern char *TypeNameToString(const TypeName *typename);
|
extern char *TypeNameToString(const TypeName *typename);
|
||||||
|
extern char *TypeNameListToString(List *typenames);
|
||||||
extern Oid typenameTypeId(ParseState *pstate, const TypeName *typename);
|
extern Oid typenameTypeId(ParseState *pstate, const TypeName *typename);
|
||||||
extern Type typenameType(ParseState *pstate, const TypeName *typename);
|
extern Type typenameType(ParseState *pstate, const TypeName *typename);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user