]> granicus.if.org Git - postgresql/commitdiff
Refactor CheckDropPermissions() to move some initialization code for
authorNeil Conway <neilc@samurai.com>
Fri, 7 May 2004 19:12:26 +0000 (19:12 +0000)
committerNeil Conway <neilc@samurai.com>
Fri, 7 May 2004 19:12:26 +0000 (19:12 +0000)
printing the proper error message out of the common path.

src/backend/tcop/utility.c

index 68e9f84672549231fd3f258cf39b142abd9ff3e3..bcf071ea8a0635bbd5a11aa3328a6d8d4846e9af 100644 (file)
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/tcop/utility.c,v 1.214 2004/05/05 04:48:46 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/tcop/utility.c,v 1.215 2004/05/07 19:12:26 neilc Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -99,8 +99,12 @@ static const struct msgstrings msgstringarray[] = {
 };
 
 
+/*
+ * Emit the right error message for a "DROP" command issued on a
+ * relation of the wrong type
+ */
 static void
-DropErrorMsg(char *relname, char wrongkind, char rightkind)
+DropErrorMsgWrongType(char *relname, char wrongkind, char rightkind)
 {
        const struct msgstrings *rentry;
        const struct msgstrings *wentry;
@@ -121,24 +125,37 @@ DropErrorMsg(char *relname, char wrongkind, char rightkind)
                         (wentry->kind != '\0') ? errhint(wentry->drophint_msg) : 0));
 }
 
+/*
+ * Emit the right error message for a "DROP" command issued on a
+ * non-existent relation
+ */
 static void
-CheckDropPermissions(RangeVar *rel, char rightkind)
+DropErrorMsgNonExistent(RangeVar *rel, char rightkind)
 {
        const struct msgstrings *rentry;
-       Oid                     relOid;
-       HeapTuple       tuple;
-       Form_pg_class classform;
 
        for (rentry = msgstringarray; rentry->kind != '\0'; rentry++)
+       {
                if (rentry->kind == rightkind)
-                       break;
-       Assert(rentry->kind != '\0');
+                       ereport(ERROR,
+                                       (errcode(rentry->nonexistent_code),
+                                        errmsg(rentry->nonexistent_msg, rel->relname)));
+       }
+
+       Assert(false); /* Should be impossible */
+}
+
+static void
+CheckDropPermissions(RangeVar *rel, char rightkind)
+{
+       Oid                     relOid;
+       HeapTuple       tuple;
+       Form_pg_class classform;
 
        relOid = RangeVarGetRelid(rel, true);
        if (!OidIsValid(relOid))
-               ereport(ERROR,
-                               (errcode(rentry->nonexistent_code),
-                                errmsg(rentry->nonexistent_msg, rel->relname)));
+               DropErrorMsgNonExistent(rel, rightkind);
+
        tuple = SearchSysCache(RELOID,
                                                   ObjectIdGetDatum(relOid),
                                                   0, 0, 0);
@@ -148,7 +165,8 @@ CheckDropPermissions(RangeVar *rel, char rightkind)
        classform = (Form_pg_class) GETSTRUCT(tuple);
 
        if (classform->relkind != rightkind)
-               DropErrorMsg(rel->relname, classform->relkind, rightkind);
+               DropErrorMsgWrongType(rel->relname, classform->relkind,
+                                                         rightkind);
 
        /* Allow DROP to either table owner or schema owner */
        if (!pg_class_ownercheck(relOid, GetUserId()) &&