From 85f3322d21230060885d626dbc5892dce90631cd Mon Sep 17 00:00:00 2001 From: Aleksander Alekseev Date: Fri, 19 Apr 2024 12:33:52 +0300 Subject: [PATCH v1] Use macro to define the number of enum values Refactoring in the interest of code consistency, a follow-up to 2e068db56e31. The argument against inserting a special enum value at the end of the enum definition is that a switch statement might generate a compiler warning unless it has a default clause. Aleksander Alekseev, reviewed by TODO FIXME Discussion: https://postgr.es/m/CAJ7c6TMsiaV5urU_Pq6zJ2tXPDwk69-NKVh4AMN5XrRiM7N%2BGA%40mail.gmail.com --- contrib/pg_stat_statements/pg_stat_statements.c | 6 +++--- src/backend/postmaster/autovacuum.c | 5 +++-- src/bin/pg_dump/pg_backup.h | 5 +++-- src/include/storage/pmsignal.h | 6 +++--- src/include/storage/procsignal.h | 6 +++--- 5 files changed, 15 insertions(+), 13 deletions(-) diff --git a/contrib/pg_stat_statements/pg_stat_statements.c b/contrib/pg_stat_statements/pg_stat_statements.c index 67cec865ba..4fd65ce82d 100644 --- a/contrib/pg_stat_statements/pg_stat_statements.c +++ b/contrib/pg_stat_statements/pg_stat_statements.c @@ -125,11 +125,11 @@ typedef enum pgssStoreKind * and this order is required in pg_stat_statements_internal(). */ PGSS_PLAN = 0, - PGSS_EXEC, - - PGSS_NUMKIND /* Must be last value of this enum */ + PGSS_EXEC } pgssStoreKind; +#define PGSS_NUMKIND (PGSS_EXEC+1) + /* * Hashtable key that defines the identity of a hashtable entry. We separate * queries by user and by database even if they are otherwise identical. diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c index c367ede6f8..48dd1b61b9 100644 --- a/src/backend/postmaster/autovacuum.c +++ b/src/backend/postmaster/autovacuum.c @@ -245,10 +245,11 @@ typedef struct WorkerInfoData *WorkerInfo; typedef enum { AutoVacForkFailed, /* failed trying to start a worker */ - AutoVacRebalance, /* rebalance the cost limits */ - AutoVacNumSignals, /* must be last */ + AutoVacRebalance /* rebalance the cost limits */ } AutoVacuumSignal; +#define AutoVacNumSignals (AutoVacRebalance+1) + /* * Autovacuum workitem array, stored in AutoVacuumShmem->av_workItems. This * list is mostly protected by AutovacuumLock, except that if an item is diff --git a/src/bin/pg_dump/pg_backup.h b/src/bin/pg_dump/pg_backup.h index fbf5f1c515..1a03a8a27e 100644 --- a/src/bin/pg_dump/pg_backup.h +++ b/src/bin/pg_dump/pg_backup.h @@ -73,10 +73,11 @@ enum _dumpPreparedQueries PREPQUERY_DUMPRANGETYPE, PREPQUERY_DUMPTABLEATTACH, PREPQUERY_GETCOLUMNACLS, - PREPQUERY_GETDOMAINCONSTRAINTS, - NUM_PREP_QUERIES /* must be last */ + PREPQUERY_GETDOMAINCONSTRAINTS }; +#define NUM_PREP_QUERIES (PREPQUERY_GETDOMAINCONSTRAINTS+1) + /* Parameters needed by ConnectDatabase; same for dump and restore */ typedef struct _connParams { diff --git a/src/include/storage/pmsignal.h b/src/include/storage/pmsignal.h index 029b720109..8189a39205 100644 --- a/src/include/storage/pmsignal.h +++ b/src/include/storage/pmsignal.h @@ -39,11 +39,11 @@ typedef enum PMSIGNAL_START_AUTOVAC_WORKER, /* start an autovacuum worker */ PMSIGNAL_BACKGROUND_WORKER_CHANGE, /* background worker state change */ PMSIGNAL_START_WALRECEIVER, /* start a walreceiver */ - PMSIGNAL_ADVANCE_STATE_MACHINE, /* advance postmaster's state machine */ - - NUM_PMSIGNALS /* Must be last value of enum! */ + PMSIGNAL_ADVANCE_STATE_MACHINE /* advance postmaster's state machine */ } PMSignalReason; +#define NUM_PMSIGNALS (PMSIGNAL_ADVANCE_STATE_MACHINE+1) + /* * Reasons why the postmaster would send SIGQUIT to its children. */ diff --git a/src/include/storage/procsignal.h b/src/include/storage/procsignal.h index 7d290ea7d0..553aec66d3 100644 --- a/src/include/storage/procsignal.h +++ b/src/include/storage/procsignal.h @@ -46,11 +46,11 @@ typedef enum PROCSIG_RECOVERY_CONFLICT_LOGICALSLOT, PROCSIG_RECOVERY_CONFLICT_BUFFERPIN, PROCSIG_RECOVERY_CONFLICT_STARTUP_DEADLOCK, - PROCSIG_RECOVERY_CONFLICT_LAST = PROCSIG_RECOVERY_CONFLICT_STARTUP_DEADLOCK, - - NUM_PROCSIGNALS /* Must be last! */ + PROCSIG_RECOVERY_CONFLICT_LAST = PROCSIG_RECOVERY_CONFLICT_STARTUP_DEADLOCK } ProcSignalReason; +#define NUM_PROCSIGNALS (PROCSIG_RECOVERY_CONFLICT_LAST+1) + typedef enum { PROCSIGNAL_BARRIER_SMGRRELEASE, /* ask smgr to close files */ -- 2.44.0