mirror of
https://github.com/postgres/postgres.git
synced 2025-11-09 06:21:09 +03:00
Some early work on error message editing. Operator-not-found and
function-not-found messages now distinguish the cases no-match and ambiguous-match, and they follow the style guidelines too.
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/aggregatecmds.c,v 1.9 2003/07/01 19:10:52 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/aggregatecmds.c,v 1.10 2003/07/04 02:51:33 tgl Exp $
|
||||
*
|
||||
* DESCRIPTION
|
||||
* The "DefineFoo" routines take the parse tree and pick out the
|
||||
@@ -165,7 +165,7 @@ RemoveAggregate(RemoveAggrStmt *stmt)
|
||||
else
|
||||
basetypeID = ANYOID;
|
||||
|
||||
procOid = find_aggregate_func("RemoveAggregate", aggName, basetypeID);
|
||||
procOid = find_aggregate_func(aggName, basetypeID, false);
|
||||
|
||||
/*
|
||||
* Find the function tuple, do permissions and validity checks
|
||||
@@ -223,7 +223,7 @@ RenameAggregate(List *name, TypeName *basetype, const char *newname)
|
||||
|
||||
rel = heap_openr(ProcedureRelationName, RowExclusiveLock);
|
||||
|
||||
procOid = find_aggregate_func("RenameAggregate", name, basetypeOid);
|
||||
procOid = find_aggregate_func(name, basetypeOid, false);
|
||||
|
||||
tup = SearchSysCacheCopy(PROCOID,
|
||||
ObjectIdGetDatum(procOid),
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
* Copyright (c) 1996-2001, PostgreSQL Global Development Group
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/comment.c,v 1.63 2003/06/27 14:45:27 petere Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/comment.c,v 1.64 2003/07/04 02:51:33 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -629,7 +629,7 @@ CommentAggregate(List *aggregate, List *arguments, char *comment)
|
||||
|
||||
/* Now, attempt to find the actual tuple in pg_proc */
|
||||
|
||||
oid = find_aggregate_func("CommentAggregate", aggregate, baseoid);
|
||||
oid = find_aggregate_func(aggregate, baseoid, false);
|
||||
|
||||
/* Next, validate the user's attempt to comment */
|
||||
|
||||
@@ -657,8 +657,7 @@ CommentProc(List *function, List *arguments, char *comment)
|
||||
|
||||
/* Look up the procedure */
|
||||
|
||||
oid = LookupFuncNameTypeNames(function, arguments,
|
||||
"CommentProc");
|
||||
oid = LookupFuncNameTypeNames(function, arguments, false);
|
||||
|
||||
/* Now, validate the user's ability to comment on this function */
|
||||
|
||||
@@ -689,8 +688,7 @@ CommentOperator(List *opername, List *arguments, char *comment)
|
||||
Oid classoid;
|
||||
|
||||
/* Look up the operator */
|
||||
oid = LookupOperNameTypeNames(opername, typenode1, typenode2,
|
||||
"CommentOperator");
|
||||
oid = LookupOperNameTypeNames(opername, typenode1, typenode2, false);
|
||||
|
||||
/* Valid user's ability to comment on this operator */
|
||||
if (!pg_oper_ownercheck(oid, GetUserId()))
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/conversioncmds.c,v 1.6 2003/06/27 14:45:27 petere Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/conversioncmds.c,v 1.7 2003/07/04 02:51:33 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -70,10 +70,8 @@ CreateConversionCommand(CreateConversionStmt *stmt)
|
||||
* Check the existence of the conversion function. Function name could
|
||||
* be a qualified name.
|
||||
*/
|
||||
funcoid = LookupFuncName(func_name, sizeof(funcargs) / sizeof(Oid), funcargs);
|
||||
if (!OidIsValid(funcoid))
|
||||
func_error("CreateConversion", func_name,
|
||||
sizeof(funcargs) / sizeof(Oid), funcargs, NULL);
|
||||
funcoid = LookupFuncName(func_name, sizeof(funcargs) / sizeof(Oid),
|
||||
funcargs, false);
|
||||
|
||||
/* Check we have EXECUTE rights for the function */
|
||||
aclresult = pg_proc_aclcheck(funcoid, GetUserId(), ACL_EXECUTE);
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/functioncmds.c,v 1.26 2003/06/27 14:45:27 petere Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/functioncmds.c,v 1.27 2003/07/04 02:51:33 tgl Exp $
|
||||
*
|
||||
* DESCRIPTION
|
||||
* These routines take the parse tree and pick out the
|
||||
@@ -495,8 +495,7 @@ RemoveFunction(RemoveFuncStmt *stmt)
|
||||
/*
|
||||
* Find the function, do permissions and validity checks
|
||||
*/
|
||||
funcOid = LookupFuncNameTypeNames(functionName, argTypes,
|
||||
"RemoveFunction");
|
||||
funcOid = LookupFuncNameTypeNames(functionName, argTypes, false);
|
||||
|
||||
tup = SearchSysCache(PROCOID,
|
||||
ObjectIdGetDatum(funcOid),
|
||||
@@ -607,7 +606,7 @@ RenameFunction(List *name, List *argtypes, const char *newname)
|
||||
|
||||
rel = heap_openr(ProcedureRelationName, RowExclusiveLock);
|
||||
|
||||
procOid = LookupFuncNameTypeNames(name, argtypes, "RenameFunction");
|
||||
procOid = LookupFuncNameTypeNames(name, argtypes, false);
|
||||
|
||||
tup = SearchSysCacheCopy(PROCOID,
|
||||
ObjectIdGetDatum(procOid),
|
||||
@@ -796,7 +795,7 @@ CreateCast(CreateCastStmt *stmt)
|
||||
|
||||
funcid = LookupFuncNameTypeNames(stmt->func->funcname,
|
||||
stmt->func->funcargs,
|
||||
"CreateCast");
|
||||
false);
|
||||
|
||||
tuple = SearchSysCache(PROCOID,
|
||||
ObjectIdGetDatum(funcid),
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/opclasscmds.c,v 1.10 2003/06/27 14:45:27 petere Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/opclasscmds.c,v 1.11 2003/07/04 02:51:33 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -155,19 +155,15 @@ DefineOpClass(CreateOpClassStmt *stmt)
|
||||
TypeName *typeName2 = (TypeName *) lsecond(item->args);
|
||||
|
||||
operOid = LookupOperNameTypeNames(item->name,
|
||||
typeName1, typeName2,
|
||||
"DefineOpClass");
|
||||
/* No need to check for error */
|
||||
typeName1,
|
||||
typeName2,
|
||||
false);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Default to binary op on input datatype */
|
||||
operOid = LookupOperName(item->name, typeoid, typeoid);
|
||||
if (!OidIsValid(operOid))
|
||||
elog(ERROR, "DefineOpClass: Operator '%s' for types '%s' and '%s' does not exist",
|
||||
NameListToString(item->name),
|
||||
format_type_be(typeoid),
|
||||
format_type_be(typeoid));
|
||||
operOid = LookupOperName(item->name, typeoid, typeoid,
|
||||
false);
|
||||
}
|
||||
/* Caller must have execute permission on operators */
|
||||
funcOid = get_opcode(operOid);
|
||||
@@ -187,7 +183,7 @@ DefineOpClass(CreateOpClassStmt *stmt)
|
||||
elog(ERROR, "DefineOpClass: procedure number %d appears more than once",
|
||||
item->number);
|
||||
funcOid = LookupFuncNameTypeNames(item->name, item->args,
|
||||
"DefineOpClass");
|
||||
false);
|
||||
/* Caller must have execute permission on functions */
|
||||
aclresult = pg_proc_aclcheck(funcOid, GetUserId(),
|
||||
ACL_EXECUTE);
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/operatorcmds.c,v 1.7 2002/09/04 20:31:15 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/operatorcmds.c,v 1.8 2003/07/04 02:51:33 tgl Exp $
|
||||
*
|
||||
* DESCRIPTION
|
||||
* The "DefineFoo" routines take the parse tree and pick out the
|
||||
@@ -206,14 +206,13 @@ RemoveOperator(RemoveOperStmt *stmt)
|
||||
ObjectAddress object;
|
||||
|
||||
operOid = LookupOperNameTypeNames(operatorName, typeName1, typeName2,
|
||||
"RemoveOperator");
|
||||
false);
|
||||
|
||||
tup = SearchSysCache(OPEROID,
|
||||
ObjectIdGetDatum(operOid),
|
||||
0, 0, 0);
|
||||
if (!HeapTupleIsValid(tup)) /* should not happen */
|
||||
elog(ERROR, "RemoveOperator: failed to find tuple for operator '%s'",
|
||||
NameListToString(operatorName));
|
||||
elog(ERROR, "cache lookup of operator %u failed", operOid);
|
||||
|
||||
/* Permission check: must own operator or its namespace */
|
||||
if (!pg_oper_ownercheck(operOid, GetUserId()) &&
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/proclang.c,v 1.44 2003/06/27 14:45:27 petere Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/proclang.c,v 1.45 2003/07/04 02:51:33 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -77,10 +77,7 @@ CreateProceduralLanguage(CreatePLangStmt *stmt)
|
||||
* return type
|
||||
*/
|
||||
MemSet(typev, 0, sizeof(typev));
|
||||
procOid = LookupFuncName(stmt->plhandler, 0, typev);
|
||||
if (!OidIsValid(procOid))
|
||||
elog(ERROR, "function %s() doesn't exist",
|
||||
NameListToString(stmt->plhandler));
|
||||
procOid = LookupFuncName(stmt->plhandler, 0, typev, false);
|
||||
funcrettype = get_func_rettype(procOid);
|
||||
if (funcrettype != LANGUAGE_HANDLEROID)
|
||||
{
|
||||
@@ -104,10 +101,7 @@ CreateProceduralLanguage(CreatePLangStmt *stmt)
|
||||
if (stmt->plvalidator)
|
||||
{
|
||||
typev[0] = OIDOID;
|
||||
valProcOid = LookupFuncName(stmt->plvalidator, 1, typev);
|
||||
if (!OidIsValid(valProcOid))
|
||||
elog(ERROR, "function %s(oid) doesn't exist",
|
||||
NameListToString(stmt->plvalidator));
|
||||
valProcOid = LookupFuncName(stmt->plvalidator, 1, typev, false);
|
||||
/* return value is ignored, so we don't check the type */
|
||||
}
|
||||
else
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.149 2003/06/24 23:25:44 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.150 2003/07/04 02:51:33 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -257,10 +257,7 @@ CreateTrigger(CreateTrigStmt *stmt, bool forConstraint)
|
||||
* Find and validate the trigger function.
|
||||
*/
|
||||
MemSet(fargtypes, 0, FUNC_MAX_ARGS * sizeof(Oid));
|
||||
funcoid = LookupFuncName(stmt->funcname, 0, fargtypes);
|
||||
if (!OidIsValid(funcoid))
|
||||
elog(ERROR, "CreateTrigger: function %s() does not exist",
|
||||
NameListToString(stmt->funcname));
|
||||
funcoid = LookupFuncName(stmt->funcname, 0, fargtypes, false);
|
||||
funcrettype = get_func_rettype(funcoid);
|
||||
if (funcrettype != TRIGGEROID)
|
||||
{
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/typecmds.c,v 1.37 2003/06/06 15:04:01 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/typecmds.c,v 1.38 2003/07/04 02:51:33 tgl Exp $
|
||||
*
|
||||
* DESCRIPTION
|
||||
* The "DefineFoo" routines take the parse tree and pick out the
|
||||
@@ -789,14 +789,14 @@ findTypeInputFunction(List *procname, Oid typeOid)
|
||||
|
||||
argList[0] = CSTRINGOID;
|
||||
|
||||
procOid = LookupFuncName(procname, 1, argList);
|
||||
procOid = LookupFuncName(procname, 1, argList, true);
|
||||
if (OidIsValid(procOid))
|
||||
return procOid;
|
||||
|
||||
argList[1] = OIDOID;
|
||||
argList[2] = INT4OID;
|
||||
|
||||
procOid = LookupFuncName(procname, 3, argList);
|
||||
procOid = LookupFuncName(procname, 3, argList, true);
|
||||
if (OidIsValid(procOid))
|
||||
return procOid;
|
||||
|
||||
@@ -805,14 +805,14 @@ findTypeInputFunction(List *procname, Oid typeOid)
|
||||
|
||||
argList[0] = OPAQUEOID;
|
||||
|
||||
procOid = LookupFuncName(procname, 1, argList);
|
||||
procOid = LookupFuncName(procname, 1, argList, true);
|
||||
|
||||
if (!OidIsValid(procOid))
|
||||
{
|
||||
argList[1] = OIDOID;
|
||||
argList[2] = INT4OID;
|
||||
|
||||
procOid = LookupFuncName(procname, 3, argList);
|
||||
procOid = LookupFuncName(procname, 3, argList, true);
|
||||
}
|
||||
|
||||
if (OidIsValid(procOid))
|
||||
@@ -834,7 +834,8 @@ findTypeInputFunction(List *procname, Oid typeOid)
|
||||
/* Use CSTRING (preferred) in the error message */
|
||||
argList[0] = CSTRINGOID;
|
||||
|
||||
func_error("TypeCreate", procname, 1, argList, NULL);
|
||||
elog(ERROR, "function %s does not exist",
|
||||
func_signature_string(procname, 1, argList));
|
||||
|
||||
return InvalidOid; /* keep compiler quiet */
|
||||
}
|
||||
@@ -857,13 +858,13 @@ findTypeOutputFunction(List *procname, Oid typeOid)
|
||||
|
||||
argList[0] = typeOid;
|
||||
|
||||
procOid = LookupFuncName(procname, 1, argList);
|
||||
procOid = LookupFuncName(procname, 1, argList, true);
|
||||
if (OidIsValid(procOid))
|
||||
return procOid;
|
||||
|
||||
argList[1] = OIDOID;
|
||||
|
||||
procOid = LookupFuncName(procname, 2, argList);
|
||||
procOid = LookupFuncName(procname, 2, argList, true);
|
||||
if (OidIsValid(procOid))
|
||||
return procOid;
|
||||
|
||||
@@ -872,13 +873,13 @@ findTypeOutputFunction(List *procname, Oid typeOid)
|
||||
|
||||
argList[0] = OPAQUEOID;
|
||||
|
||||
procOid = LookupFuncName(procname, 1, argList);
|
||||
procOid = LookupFuncName(procname, 1, argList, true);
|
||||
|
||||
if (!OidIsValid(procOid))
|
||||
{
|
||||
argList[1] = OIDOID;
|
||||
|
||||
procOid = LookupFuncName(procname, 2, argList);
|
||||
procOid = LookupFuncName(procname, 2, argList, true);
|
||||
}
|
||||
|
||||
if (OidIsValid(procOid))
|
||||
@@ -899,7 +900,8 @@ findTypeOutputFunction(List *procname, Oid typeOid)
|
||||
/* Use type name, not OPAQUE, in the failure message. */
|
||||
argList[0] = typeOid;
|
||||
|
||||
func_error("TypeCreate", procname, 1, argList, NULL);
|
||||
elog(ERROR, "function %s does not exist",
|
||||
func_signature_string(procname, 1, argList));
|
||||
|
||||
return InvalidOid; /* keep compiler quiet */
|
||||
}
|
||||
@@ -918,17 +920,18 @@ findTypeReceiveFunction(List *procname, Oid typeOid)
|
||||
|
||||
argList[0] = INTERNALOID;
|
||||
|
||||
procOid = LookupFuncName(procname, 1, argList);
|
||||
procOid = LookupFuncName(procname, 1, argList, true);
|
||||
if (OidIsValid(procOid))
|
||||
return procOid;
|
||||
|
||||
argList[1] = OIDOID;
|
||||
|
||||
procOid = LookupFuncName(procname, 2, argList);
|
||||
procOid = LookupFuncName(procname, 2, argList, true);
|
||||
if (OidIsValid(procOid))
|
||||
return procOid;
|
||||
|
||||
func_error("TypeCreate", procname, 1, argList, NULL);
|
||||
elog(ERROR, "function %s does not exist",
|
||||
func_signature_string(procname, 1, argList));
|
||||
|
||||
return InvalidOid; /* keep compiler quiet */
|
||||
}
|
||||
@@ -947,17 +950,18 @@ findTypeSendFunction(List *procname, Oid typeOid)
|
||||
|
||||
argList[0] = typeOid;
|
||||
|
||||
procOid = LookupFuncName(procname, 1, argList);
|
||||
procOid = LookupFuncName(procname, 1, argList, true);
|
||||
if (OidIsValid(procOid))
|
||||
return procOid;
|
||||
|
||||
argList[1] = OIDOID;
|
||||
|
||||
procOid = LookupFuncName(procname, 2, argList);
|
||||
procOid = LookupFuncName(procname, 2, argList, true);
|
||||
if (OidIsValid(procOid))
|
||||
return procOid;
|
||||
|
||||
func_error("TypeCreate", procname, 1, argList, NULL);
|
||||
elog(ERROR, "function %s does not exist",
|
||||
func_signature_string(procname, 1, argList));
|
||||
|
||||
return InvalidOid; /* keep compiler quiet */
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user