diff options
author | Peter Eisentraut <peter@eisentraut.org> | 2021-12-03 13:38:26 +0100 |
---|---|---|
committer | Peter Eisentraut <peter@eisentraut.org> | 2021-12-03 14:08:19 +0100 |
commit | 37b2764593c073ca61c2baebd7d85666e553928b (patch) | |
tree | 56de3f4f9040011f6dd6886adcb5b12a7ae692f8 /src/backend/optimizer | |
parent | 49422ad0cc88c91a38522b2a7b222c2f2c939f82 (diff) |
Some RELKIND macro refactoring
Add more macros to group some RELKIND_* macros:
- RELKIND_HAS_PARTITIONS()
- RELKIND_HAS_TABLESPACE()
- RELKIND_HAS_TABLE_AM()
Reviewed-by: Michael Paquier <michael@paquier.xyz>
Reviewed-by: Alvaro Herrera <alvherre@alvh.no-ip.org>
Discussion: https://www.postgresql.org/message-id/flat/a574c8f1-9c84-93ad-a9e5-65233d6fc00f%40enterprisedb.com
Diffstat (limited to 'src/backend/optimizer')
-rw-r--r-- | src/backend/optimizer/util/plancat.c | 41 |
1 files changed, 14 insertions, 27 deletions
diff --git a/src/backend/optimizer/util/plancat.c b/src/backend/optimizer/util/plancat.c index c5194fdbbf2..564a38a13e9 100644 --- a/src/backend/optimizer/util/plancat.c +++ b/src/backend/optimizer/util/plancat.c @@ -965,17 +965,13 @@ estimate_rel_size(Relation rel, int32 *attr_widths, BlockNumber relallvisible; double density; - switch (rel->rd_rel->relkind) + if (RELKIND_HAS_TABLE_AM(rel->rd_rel->relkind)) { - case RELKIND_RELATION: - case RELKIND_MATVIEW: - case RELKIND_TOASTVALUE: table_relation_estimate_size(rel, attr_widths, pages, tuples, allvisfrac); - break; - - case RELKIND_INDEX: - + } + else if (rel->rd_rel->relkind == RELKIND_INDEX) + { /* * XXX: It'd probably be good to move this into a callback, * individual index types e.g. know if they have a metapage. @@ -991,7 +987,7 @@ estimate_rel_size(Relation rel, int32 *attr_widths, { *tuples = 0; *allvisfrac = 0; - break; + return; } /* coerce values in pg_class to more desirable types */ @@ -1055,27 +1051,18 @@ estimate_rel_size(Relation rel, int32 *attr_widths, *allvisfrac = 1; else *allvisfrac = (double) relallvisible / curpages; - break; - - case RELKIND_SEQUENCE: - /* Sequences always have a known size */ - *pages = 1; - *tuples = 1; - *allvisfrac = 0; - break; - case RELKIND_FOREIGN_TABLE: - /* Just use whatever's in pg_class */ - /* Note that FDW must cope if reltuples is -1! */ + } + else + { + /* + * Just use whatever's in pg_class. This covers foreign tables, + * sequences, and also relkinds without storage (shouldn't get + * here?); see initializations in AddNewRelationTuple(). Note + * that FDW must cope if reltuples is -1! + */ *pages = rel->rd_rel->relpages; *tuples = rel->rd_rel->reltuples; *allvisfrac = 0; - break; - default: - /* else it has no disk storage; probably shouldn't get here? */ - *pages = 0; - *tuples = 0; - *allvisfrac = 0; - break; } } |