Hi, On Sat, Sep 18, 2021 at 3:06 AM Andres Freund <and...@anarazel.de> wrote: > On 2021-09-18 02:51:09 +0300, Alexander Korotkov wrote: > > On Tue, Sep 14, 2021 at 6:53 AM Tom Lane <t...@sss.pgh.pa.us> wrote: > > > Without having looked at the details, I think using a forward-declare > > > to avoid including relcache.h in visibilitymap.h might be a reasonably > > > non-painful fix. > > > > I like that idea, but I didn't find an appropriate existing header for > > forward-declaration of Relation. relation.h isn't suitable, because > > it includes primnodes.h. A separate header for just > > forward-definition of Relation seems too much. > > I was just thinking of doing something like the attached.
I see now. I think I'm rather favoring splitting visibilitymap.h. > > > TOH, in the long run it might be worth the effort > > > to split visibilitymap.h to separate useful file-contents knowledge > > > from backend function declarations. > > > > I've drafted a patch splitting visibilitymap_maros.h from > > visibilitymap.h. What do you think? > > I'd name it visibilitymapdefs.h or such, mostly because that's what other > headers are named like... Good point. The revised patch is attached. ------ Regards, Alexander Korotkov
From 798431948da5374ad947fc5f00ef3c87b1bb03ba Mon Sep 17 00:00:00 2001 From: Alexander Korotkov <akorotkov@postgresql.org> Date: Sat, 18 Sep 2021 02:45:41 +0300 Subject: [PATCH] Split macros from visibilitymap.h into a separate header That allows to include just visibilitymapdefs.h from file.c, and in turn remove include of postgres.h from relcache.h. --- src/bin/pg_upgrade/file.c | 2 +- src/include/access/visibilitymap.h | 16 +------------ src/include/access/visibilitymapdefs.h | 31 ++++++++++++++++++++++++++ src/include/utils/relcache.h | 1 - 4 files changed, 33 insertions(+), 17 deletions(-) create mode 100644 src/include/access/visibilitymapdefs.h diff --git a/src/bin/pg_upgrade/file.c b/src/bin/pg_upgrade/file.c index 9b0cc16e452..1b34ee09fa6 100644 --- a/src/bin/pg_upgrade/file.c +++ b/src/bin/pg_upgrade/file.c @@ -19,7 +19,7 @@ #include <linux/fs.h> #endif -#include "access/visibilitymap.h" +#include "access/visibilitymapdefs.h" #include "common/file_perm.h" #include "pg_upgrade.h" #include "storage/bufpage.h" diff --git a/src/include/access/visibilitymap.h b/src/include/access/visibilitymap.h index 57362c36876..3f546667337 100644 --- a/src/include/access/visibilitymap.h +++ b/src/include/access/visibilitymap.h @@ -14,26 +14,12 @@ #ifndef VISIBILITYMAP_H #define VISIBILITYMAP_H +#include "access/visibilitymapdefs.h" #include "access/xlogdefs.h" #include "storage/block.h" #include "storage/buf.h" #include "utils/relcache.h" -/* Number of bits for one heap page */ -#define BITS_PER_HEAPBLOCK 2 - -/* Flags for bit map */ -#define VISIBILITYMAP_ALL_VISIBLE 0x01 -#define VISIBILITYMAP_ALL_FROZEN 0x02 -#define VISIBILITYMAP_VALID_BITS 0x03 /* OR of all valid visibilitymap - * flags bits */ - -/* Macros for visibilitymap test */ -#define VM_ALL_VISIBLE(r, b, v) \ - ((visibilitymap_get_status((r), (b), (v)) & VISIBILITYMAP_ALL_VISIBLE) != 0) -#define VM_ALL_FROZEN(r, b, v) \ - ((visibilitymap_get_status((r), (b), (v)) & VISIBILITYMAP_ALL_FROZEN) != 0) - extern bool visibilitymap_clear(Relation rel, BlockNumber heapBlk, Buffer vmbuf, uint8 flags); extern void visibilitymap_pin(Relation rel, BlockNumber heapBlk, diff --git a/src/include/access/visibilitymapdefs.h b/src/include/access/visibilitymapdefs.h new file mode 100644 index 00000000000..01d0611bb6b --- /dev/null +++ b/src/include/access/visibilitymapdefs.h @@ -0,0 +1,31 @@ +/*------------------------------------------------------------------------- + * + * visibilitymapdefs.h + * maros for accessing contents of visibility map pages + * + * + * Portions Copyright (c) 2021, PostgreSQL Global Development Group + * + * src/include/access/visibilitymapdefs.h + * + *------------------------------------------------------------------------- + */ +#ifndef VISIBILITYMAPDEFS_H +#define VISIBILITYMAPDEFS_H + +/* Number of bits for one heap page */ +#define BITS_PER_HEAPBLOCK 2 + +/* Flags for bit map */ +#define VISIBILITYMAP_ALL_VISIBLE 0x01 +#define VISIBILITYMAP_ALL_FROZEN 0x02 +#define VISIBILITYMAP_VALID_BITS 0x03 /* OR of all valid visibilitymap + * flags bits */ + +/* Macros for visibilitymap test */ +#define VM_ALL_VISIBLE(r, b, v) \ + ((visibilitymap_get_status((r), (b), (v)) & VISIBILITYMAP_ALL_VISIBLE) != 0) +#define VM_ALL_FROZEN(r, b, v) \ + ((visibilitymap_get_status((r), (b), (v)) & VISIBILITYMAP_ALL_FROZEN) != 0) + +#endif /* VISIBILITYMAPDEFS_H */ diff --git a/src/include/utils/relcache.h b/src/include/utils/relcache.h index f772855ac69..d2c17575f65 100644 --- a/src/include/utils/relcache.h +++ b/src/include/utils/relcache.h @@ -14,7 +14,6 @@ #ifndef RELCACHE_H #define RELCACHE_H -#include "postgres.h" #include "access/tupdesc.h" #include "nodes/bitmapset.h" -- 2.24.3 (Apple Git-128)