Make more use of RELKIND_HAS_STORAGE()
authorPeter Eisentraut <peter@eisentraut.org>
Fri, 12 Jun 2020 06:51:16 +0000 (08:51 +0200)
committerPeter Eisentraut <peter@eisentraut.org>
Fri, 12 Jun 2020 07:10:26 +0000 (09:10 +0200)
Make use of RELKIND_HAS_STORAGE() where appropriate, instead of
listing out the relkinds individually.  No behavior change intended.

Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://www.postgresql.org/message-id/flat/7a22bf51-2480-d999-1794-191ba67ff47c%402ndquadrant.com

src/backend/catalog/heap.c
src/backend/postmaster/pgstat.c
src/backend/utils/adt/dbsize.c

index e393c93a452148726cd6c72c1871d7af66098348..9c455448156239ba0795b35fa335be522d65e0c8 100644 (file)
@@ -1943,13 +1943,8 @@ heap_drop_with_catalog(Oid relid)
    /*
     * Schedule unlinking of the relation's physical files at commit.
     */
-   if (rel->rd_rel->relkind != RELKIND_VIEW &&
-       rel->rd_rel->relkind != RELKIND_COMPOSITE_TYPE &&
-       rel->rd_rel->relkind != RELKIND_FOREIGN_TABLE &&
-       rel->rd_rel->relkind != RELKIND_PARTITIONED_TABLE)
-   {
+   if (RELKIND_HAS_STORAGE(rel->rd_rel->relkind))
        RelationDropStorage(rel);
-   }
 
    /*
     * Close relcache entry, but *keep* AccessExclusiveLock on the relation
index 309378ae54e4e033b33f762b9b8f8fea349ad1c3..e96134dac8aaee7f544a0874e8c0771d359105ce 100644 (file)
@@ -1807,11 +1807,7 @@ pgstat_initstats(Relation rel)
    char        relkind = rel->rd_rel->relkind;
 
    /* We only count stats for things that have storage */
-   if (!(relkind == RELKIND_RELATION ||
-         relkind == RELKIND_MATVIEW ||
-         relkind == RELKIND_INDEX ||
-         relkind == RELKIND_TOASTVALUE ||
-         relkind == RELKIND_SEQUENCE))
+   if (!RELKIND_HAS_STORAGE(relkind))
    {
        rel->pgstat_info = NULL;
        return;
index 840664429eb93aa7c534876633931034b1e7e34a..2320c06a9bc730a72a32fbdc1ffbe210bf086bff 100644 (file)
@@ -874,25 +874,18 @@ pg_relation_filenode(PG_FUNCTION_ARGS)
        PG_RETURN_NULL();
    relform = (Form_pg_class) GETSTRUCT(tuple);
 
-   switch (relform->relkind)
+   if (RELKIND_HAS_STORAGE(relform->relkind))
    {
-       case RELKIND_RELATION:
-       case RELKIND_MATVIEW:
-       case RELKIND_INDEX:
-       case RELKIND_SEQUENCE:
-       case RELKIND_TOASTVALUE:
-           /* okay, these have storage */
-           if (relform->relfilenode)
-               result = relform->relfilenode;
-           else                /* Consult the relation mapper */
-               result = RelationMapOidToFilenode(relid,
-                                                 relform->relisshared);
-           break;
-
-       default:
-           /* no storage, return NULL */
-           result = InvalidOid;
-           break;
+       if (relform->relfilenode)
+           result = relform->relfilenode;
+       else                /* Consult the relation mapper */
+           result = RelationMapOidToFilenode(relid,
+                                             relform->relisshared);
+   }
+   else
+   {
+       /* no storage, return NULL */
+       result = InvalidOid;
    }
 
    ReleaseSysCache(tuple);
@@ -951,38 +944,30 @@ pg_relation_filepath(PG_FUNCTION_ARGS)
        PG_RETURN_NULL();
    relform = (Form_pg_class) GETSTRUCT(tuple);
 
-   switch (relform->relkind)
+   if (RELKIND_HAS_STORAGE(relform->relkind))
+   {
+       /* This logic should match RelationInitPhysicalAddr */
+       if (relform->reltablespace)
+           rnode.spcNode = relform->reltablespace;
+       else
+           rnode.spcNode = MyDatabaseTableSpace;
+       if (rnode.spcNode == GLOBALTABLESPACE_OID)
+           rnode.dbNode = InvalidOid;
+       else
+           rnode.dbNode = MyDatabaseId;
+       if (relform->relfilenode)
+           rnode.relNode = relform->relfilenode;
+       else                /* Consult the relation mapper */
+           rnode.relNode = RelationMapOidToFilenode(relid,
+                                                    relform->relisshared);
+   }
+   else
    {
-       case RELKIND_RELATION:
-       case RELKIND_MATVIEW:
-       case RELKIND_INDEX:
-       case RELKIND_SEQUENCE:
-       case RELKIND_TOASTVALUE:
-           /* okay, these have storage */
-
-           /* This logic should match RelationInitPhysicalAddr */
-           if (relform->reltablespace)
-               rnode.spcNode = relform->reltablespace;
-           else
-               rnode.spcNode = MyDatabaseTableSpace;
-           if (rnode.spcNode == GLOBALTABLESPACE_OID)
-               rnode.dbNode = InvalidOid;
-           else
-               rnode.dbNode = MyDatabaseId;
-           if (relform->relfilenode)
-               rnode.relNode = relform->relfilenode;
-           else                /* Consult the relation mapper */
-               rnode.relNode = RelationMapOidToFilenode(relid,
-                                                        relform->relisshared);
-           break;
-
-       default:
            /* no storage, return NULL */
            rnode.relNode = InvalidOid;
            /* some compilers generate warnings without these next two lines */
            rnode.dbNode = InvalidOid;
            rnode.spcNode = InvalidOid;
-           break;
    }
 
    if (!OidIsValid(rnode.relNode))