summaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/regproc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils/adt/regproc.c')
-rw-r--r--src/backend/utils/adt/regproc.c25
1 files changed, 4 insertions, 21 deletions
diff --git a/src/backend/utils/adt/regproc.c b/src/backend/utils/adt/regproc.c
index f5b0e2ab0c7..37bb0d929c3 100644
--- a/src/backend/utils/adt/regproc.c
+++ b/src/backend/utils/adt/regproc.c
@@ -13,7 +13,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/adt/regproc.c,v 1.97 2006/03/05 15:58:43 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/regproc.c,v 1.98 2006/05/01 23:22:43 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -598,12 +598,10 @@ Datum
regoperatorin(PG_FUNCTION_ARGS)
{
char *opr_name_or_oid = PG_GETARG_CSTRING(0);
- Oid result = InvalidOid;
+ Oid result;
List *names;
int nargs;
Oid argtypes[FUNC_MAX_ARGS];
- char oprkind;
- FuncCandidateList clist;
/* '0' ? */
if (strcmp(opr_name_or_oid, "0") == 0)
@@ -642,28 +640,13 @@ regoperatorin(PG_FUNCTION_ARGS)
errmsg("too many arguments"),
errhint("Provide two argument types for operator.")));
- if (argtypes[0] == InvalidOid)
- oprkind = 'l';
- else if (argtypes[1] == InvalidOid)
- oprkind = 'r';
- else
- oprkind = 'b';
+ result = OpernameGetOprid(names, argtypes[0], argtypes[1]);
- clist = OpernameGetCandidates(names, oprkind);
-
- for (; clist; clist = clist->next)
- {
- if (memcmp(clist->args, argtypes, 2 * sizeof(Oid)) == 0)
- break;
- }
-
- if (clist == NULL)
+ if (!OidIsValid(result))
ereport(ERROR,
(errcode(ERRCODE_UNDEFINED_FUNCTION),
errmsg("operator does not exist: %s", opr_name_or_oid)));
- result = clist->oid;
-
PG_RETURN_OID(result);
}