]> granicus.if.org Git - postgresql/commitdiff
Fix for regproc
authorBruce Momjian <bruce@momjian.us>
Mon, 31 Aug 1998 07:55:50 +0000 (07:55 +0000)
committerBruce Momjian <bruce@momjian.us>
Mon, 31 Aug 1998 07:55:50 +0000 (07:55 +0000)
src/backend/optimizer/util/clauses.c
src/backend/utils/adt/regproc.c
src/include/utils/builtins.h

index fd5b91fd46dbbdc116ee3c9a15201c8788cedd3d..89906454ebe55577d2a7606575f529dc646425b2 100644 (file)
@@ -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;
 }
 
 /*
index 7c29195da33f9a6fa0ad4deaf9fac6d9de7486a5..6000d2a6a383abaaabbc0dfdf2999dba612cec3d 100644 (file)
@@ -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 $
  *
  *-------------------------------------------------------------------------
  */
  *             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
                {
index f1de816fa158163687fdb93e164b64b839184968..53cda4a9a0fe59019bdca9b76b9d79a2015c3cdc 100644 (file)
@@ -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);