diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index fd5b91fd46..89906454eb 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/util/clauses.c,v 1.21 1998/08/31 07:19:56 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/util/clauses.c,v 1.22 1998/08/31 07:55:47 momjian Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -199,7 +199,8 @@ bool or_clause(Node *clause) { return clause != NULL && - nodeTag(clause) == T_Expr && ((Expr *) clause)->opType == OR_EXPR); + nodeTag(clause) == T_Expr && + ((Expr *) clause)->opType == OR_EXPR; } /* diff --git a/src/backend/utils/adt/regproc.c b/src/backend/utils/adt/regproc.c index 7c29195da3..6000d2a6a3 100644 --- a/src/backend/utils/adt/regproc.c +++ b/src/backend/utils/adt/regproc.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.23 1998/08/31 07:35:44 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.24 1998/08/31 07:55:48 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -35,12 +35,12 @@ * proid of NULL signifies unknown */ int32 -regprocin(char *pro_oid_name) +regprocin(char *pro_name_and_oid) { - HeapTuple proctup; + HeapTuple proctup = NULL; RegProcedure result = (Oid) 0; - if (pro_oid_name == NULL) + if (pro_name_and_oid == NULL) return (0); @@ -48,15 +48,25 @@ regprocin(char *pro_oid_name) { /* * we need to use the oid because there can be multiple entries - * with the same name, i.e. 1323_int4eq + * with the same name. We accept 1323_int4eq and 1323. */ - proctup = SearchSysCacheTuple(PROOID, - /* atoi stops at the _ */ - ObjectIdGetDatum(atoi(pro_oid_name)), - 0, 0, 0); + if (strrchr(pro_name_and_oid,'_') != NULL) + { + proctup = SearchSysCacheTuple(PROOID, + ObjectIdGetDatum(atoi(strrchr(pro_name_and_oid,'_')+1)), + 0, 0, 0); + + } + else if (atoi(pro_name_and_oid) != InvalidOid) + { + proctup = SearchSysCacheTuple(PROOID, + /* atoi stops at the _ */ + ObjectIdGetDatum(atoi(pro_name_and_oid)), + 0, 0, 0); + } if (HeapTupleIsValid(proctup)) result = (RegProcedure) proctup->t_oid; - else result = (RegProcedure) 0; + else elog(ERROR, "regprocin: no such procedure %s", pro_name_and_oid); } else { @@ -76,7 +86,7 @@ regprocin(char *pro_oid_name) (bits16) 0, (AttrNumber) 1, (RegProcedure) F_NAMEEQ, - (Datum) pro_oid_name); + (Datum) pro_name_and_oid); procscan = heap_beginscan(proc, 0, SnapshotNow, 1, &key); if (!HeapScanIsValid(procscan)) @@ -94,7 +104,7 @@ regprocin(char *pro_oid_name) RelationGetTupleDescriptor(proc), &isnull); if (isnull) - elog(FATAL, "regprocin: null procedure %s", pro_oid_name); + elog(FATAL, "regprocin: null procedure %s", pro_name_and_oid); } else result = (RegProcedure) 0; @@ -104,13 +114,13 @@ regprocin(char *pro_oid_name) } #ifdef EBUG - elog(DEBUG, "regprocin: no such procedure %s", pro_oid_name); + elog(DEBUG, "regprocin: no such procedure %s", pro_name_and_oid); #endif /* defined(EBUG) */ return (int32) result; } /* - * regprocout - converts proid to "pro_oid_name" + * regprocout - converts proid to "pro_name_and_oid" */ char * regprocout(RegProcedure proid) @@ -131,7 +141,7 @@ regprocout(RegProcedure proid) char *s; s = ((Form_pg_proc) GETSTRUCT(proctup))->proname.data; - snprintf(result, NAMEDATALEN, "%d_%s", proid, s); + snprintf(result, NAMEDATALEN, "%s_%d", s, proid); } else { diff --git a/src/include/utils/builtins.h b/src/include/utils/builtins.h index f1de816fa1..53cda4a9a0 100644 --- a/src/include/utils/builtins.h +++ b/src/include/utils/builtins.h @@ -6,7 +6,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: builtins.h,v 1.48 1998/08/29 04:09:29 momjian Exp $ + * $Id: builtins.h,v 1.49 1998/08/31 07:55:50 momjian Exp $ * * NOTES * This should normally only be included by fmgr.h. @@ -356,7 +356,7 @@ extern bool texticregexne(struct varlena * s, struct varlena * p); /* regproc.c */ -extern int32 regprocin(char *proname); +extern int32 regprocin(char *pro_name_and_oid); extern char *regprocout(RegProcedure proid); extern text *oid8types(Oid (*oidArray)[]); extern Oid regproctooid(RegProcedure rp);