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))