[PATCH v5 1/4] Add bool8 typedef for system catalog structs

Peter Eisentraut <peter_e@gmx.net>

From: Peter Eisentraut <peter_e@gmx.net>
To:
Date: 2017-08-16T04:22:32Z
Lists: pgsql-hackers

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Fix rare assertion failure in parallel hash join.

For system catalog structs, we require that the C bool type is 1 byte in
size, the same as the SQL type.  But if stdbool.h is used, then this is
not guaranteed.  To address that, define a separate type bool8 that is
guaranteed to be 1 byte, and use that in the system catalog structs.
Some tweaking in Catalog.pm ensures that bool is not accidentally used
where bool8 should be used.
---
 src/backend/catalog/Catalog.pm        |  2 ++
 src/include/c.h                       |  9 +++++++++
 src/include/catalog/pg_aggregate.h    |  4 ++--
 src/include/catalog/pg_attribute.h    | 10 +++++-----
 src/include/catalog/pg_auth_members.h |  2 +-
 src/include/catalog/pg_authid.h       | 14 +++++++-------
 src/include/catalog/pg_class.h        | 22 +++++++++++-----------
 src/include/catalog/pg_constraint.h   | 10 +++++-----
 src/include/catalog/pg_conversion.h   |  2 +-
 src/include/catalog/pg_database.h     |  4 ++--
 src/include/catalog/pg_extension.h    |  2 +-
 src/include/catalog/pg_index.h        | 20 ++++++++++----------
 src/include/catalog/pg_language.h     |  4 ++--
 src/include/catalog/pg_opclass.h      |  2 +-
 src/include/catalog/pg_operator.h     |  4 ++--
 src/include/catalog/pg_pltemplate.h   |  4 ++--
 src/include/catalog/pg_policy.h       |  2 +-
 src/include/catalog/pg_proc.h         | 12 ++++++------
 src/include/catalog/pg_publication.h  |  8 ++++----
 src/include/catalog/pg_rewrite.h      |  2 +-
 src/include/catalog/pg_sequence.h     |  2 +-
 src/include/catalog/pg_statistic.h    |  2 +-
 src/include/catalog/pg_subscription.h |  2 +-
 src/include/catalog/pg_trigger.h      |  6 +++---
 src/include/catalog/pg_type.h         |  8 ++++----
 src/include/commands/sequence.h       |  2 +-
 26 files changed, 86 insertions(+), 75 deletions(-)

diff --git a/src/backend/catalog/Catalog.pm b/src/backend/catalog/Catalog.pm
index 80bd9771f1..2602c68867 100644
--- a/src/backend/catalog/Catalog.pm
+++ b/src/backend/catalog/Catalog.pm
@@ -26,6 +26,8 @@ sub Catalogs
 	# There are a few types which are given one name in the C source, but a
 	# different name at the SQL level.  These are enumerated here.
 	my %RENAME_ATTTYPE = (
+		'bool'          => 'INVALID',  # use bool8 instead
+		'bool8'         => 'bool',
 		'int16'         => 'int2',
 		'int32'         => 'int4',
 		'int64'         => 'int8',
diff --git a/src/include/c.h b/src/include/c.h
index 22535a7deb..20c15a0d9d 100644
--- a/src/include/c.h
+++ b/src/include/c.h
@@ -267,6 +267,15 @@ typedef char bool;
 
 #endif							/* not C++ */
 
+/*
+ * bool8
+ *
+ * A bool type that is guaranteed to be 8 bits/1 byte, mainly for use in
+ * system catalog definitions.  (stdbool.h's bool is not 1 byte on all
+ * platforms.)
+ */
+typedef char bool8;
+
 
 /* ----------------------------------------------------------------
  *				Section 3:	standard system types
diff --git a/src/include/catalog/pg_aggregate.h b/src/include/catalog/pg_aggregate.h
index 13f1bce5af..a8894b9aad 100644
--- a/src/include/catalog/pg_aggregate.h
+++ b/src/include/catalog/pg_aggregate.h
@@ -65,8 +65,8 @@ CATALOG(pg_aggregate,2600) BKI_WITHOUT_OIDS
 	regproc		aggmtransfn;
 	regproc		aggminvtransfn;
 	regproc		aggmfinalfn;
-	bool		aggfinalextra;
-	bool		aggmfinalextra;
+	bool8		aggfinalextra;
+	bool8		aggmfinalextra;
 	char		aggfinalmodify;
 	char		aggmfinalmodify;
 	Oid			aggsortop;
diff --git a/src/include/catalog/pg_attribute.h b/src/include/catalog/pg_attribute.h
index bcf28e8f04..a2007560ae 100644
--- a/src/include/catalog/pg_attribute.h
+++ b/src/include/catalog/pg_attribute.h
@@ -104,7 +104,7 @@ CATALOG(pg_attribute,1249) BKI_BOOTSTRAP BKI_WITHOUT_OIDS BKI_ROWTYPE_OID(75) BK
 	 * attbyval is a copy of the typbyval field from pg_type for this
 	 * attribute.  See atttypid comments above.
 	 */
-	bool		attbyval;
+	bool8		attbyval;
 
 	/*----------
 	 * attstorage tells for VARLENA attributes, what the heap access
@@ -128,16 +128,16 @@ CATALOG(pg_attribute,1249) BKI_BOOTSTRAP BKI_WITHOUT_OIDS BKI_ROWTYPE_OID(75) BK
 	char		attalign;
 
 	/* This flag represents the "NOT NULL" constraint */
-	bool		attnotnull;
+	bool8		attnotnull;
 
 	/* Has DEFAULT value or not */
-	bool		atthasdef;
+	bool8		atthasdef;
 
 	/* One of the ATTRIBUTE_IDENTITY_* constants below, or '\0' */
 	char		attidentity;
 
 	/* Is dropped (ie, logically invisible) or not */
-	bool		attisdropped;
+	bool8		attisdropped;
 
 	/*
 	 * This flag specifies whether this column has ever had a local
@@ -148,7 +148,7 @@ CATALOG(pg_attribute,1249) BKI_BOOTSTRAP BKI_WITHOUT_OIDS BKI_ROWTYPE_OID(75) BK
 	 * not dropped by a parent's DROP COLUMN even if this causes the column's
 	 * attinhcount to become zero.
 	 */
-	bool		attislocal;
+	bool8		attislocal;
 
 	/* Number of times inherited from direct parent relation(s) */
 	int32		attinhcount;
diff --git a/src/include/catalog/pg_auth_members.h b/src/include/catalog/pg_auth_members.h
index 6a954fff97..43a8549659 100644
--- a/src/include/catalog/pg_auth_members.h
+++ b/src/include/catalog/pg_auth_members.h
@@ -34,7 +34,7 @@ CATALOG(pg_auth_members,1261) BKI_SHARED_RELATION BKI_WITHOUT_OIDS BKI_ROWTYPE_O
 	Oid			roleid;			/* ID of a role */
 	Oid			member;			/* ID of a member of that role */
 	Oid			grantor;		/* who granted the membership */
-	bool		admin_option;	/* granted with admin option? */
+	bool8		admin_option;	/* granted with admin option? */
 } FormData_pg_auth_members;
 
 /* ----------------
diff --git a/src/include/catalog/pg_authid.h b/src/include/catalog/pg_authid.h
index 9b6b52c9f9..b44328fe38 100644
--- a/src/include/catalog/pg_authid.h
+++ b/src/include/catalog/pg_authid.h
@@ -45,13 +45,13 @@
 CATALOG(pg_authid,1260) BKI_SHARED_RELATION BKI_ROWTYPE_OID(2842) BKI_SCHEMA_MACRO
 {
 	NameData	rolname;		/* name of role */
-	bool		rolsuper;		/* read this field via superuser() only! */
-	bool		rolinherit;		/* inherit privileges from other roles? */
-	bool		rolcreaterole;	/* allowed to create more roles? */
-	bool		rolcreatedb;	/* allowed to create databases? */
-	bool		rolcanlogin;	/* allowed to log in as session user? */
-	bool		rolreplication; /* role used for streaming replication */
-	bool		rolbypassrls;	/* bypasses row level security? */
+	bool8		rolsuper;		/* read this field via superuser() only! */
+	bool8		rolinherit;		/* inherit privileges from other roles? */
+	bool8		rolcreaterole;	/* allowed to create more roles? */
+	bool8		rolcreatedb;	/* allowed to create databases? */
+	bool8		rolcanlogin;	/* allowed to log in as session user? */
+	bool8		rolreplication; /* role used for streaming replication */
+	bool8		rolbypassrls;	/* bypasses row level security? */
 	int32		rolconnlimit;	/* max connections allowed (-1=no limit) */
 
 	/* remaining fields may be null; use heap_getattr to read them! */
diff --git a/src/include/catalog/pg_class.h b/src/include/catalog/pg_class.h
index b256657bda..8e98c3174d 100644
--- a/src/include/catalog/pg_class.h
+++ b/src/include/catalog/pg_class.h
@@ -48,8 +48,8 @@ CATALOG(pg_class,1259) BKI_BOOTSTRAP BKI_ROWTYPE_OID(83) BKI_SCHEMA_MACRO
 	int32		relallvisible;	/* # of all-visible blocks (not always
 								 * up-to-date) */
 	Oid			reltoastrelid;	/* OID of toast table; 0 if none */
-	bool		relhasindex;	/* T if has (or has had) any indexes */
-	bool		relisshared;	/* T if shared across databases */
+	bool8		relhasindex;	/* T if has (or has had) any indexes */
+	bool8		relisshared;	/* T if shared across databases */
 	char		relpersistence; /* see RELPERSISTENCE_xxx constants below */
 	char		relkind;		/* see RELKIND_xxx constants below */
 	int16		relnatts;		/* number of user attributes */
@@ -60,17 +60,17 @@ CATALOG(pg_class,1259) BKI_BOOTSTRAP BKI_ROWTYPE_OID(83) BKI_SCHEMA_MACRO
 	 * contain entries with negative attnums for system attributes.
 	 */
 	int16		relchecks;		/* # of CHECK constraints for class */
-	bool		relhasoids;		/* T if we generate OIDs for rows of rel */
-	bool		relhaspkey;		/* has (or has had) PRIMARY KEY index */
-	bool		relhasrules;	/* has (or has had) any rules */
-	bool		relhastriggers; /* has (or has had) any TRIGGERs */
-	bool		relhassubclass; /* has (or has had) derived classes */
-	bool		relrowsecurity; /* row security is enabled or not */
-	bool		relforcerowsecurity;	/* row security forced for owners or
+	bool8		relhasoids;		/* T if we generate OIDs for rows of rel */
+	bool8		relhaspkey;		/* has (or has had) PRIMARY KEY index */
+	bool8		relhasrules;	/* has (or has had) any rules */
+	bool8		relhastriggers; /* has (or has had) any TRIGGERs */
+	bool8		relhassubclass; /* has (or has had) derived classes */
+	bool8		relrowsecurity; /* row security is enabled or not */
+	bool8		relforcerowsecurity;	/* row security forced for owners or
 										 * not */
-	bool		relispopulated; /* matview currently holds query results */
+	bool8		relispopulated; /* matview currently holds query results */
 	char		relreplident;	/* see REPLICA_IDENTITY_xxx constants  */
-	bool		relispartition; /* is relation a partition? */
+	bool8		relispartition; /* is relation a partition? */
 	TransactionId relfrozenxid; /* all Xids < this are frozen in this rel */
 	TransactionId relminmxid;	/* all multixacts in this rel are >= this.
 								 * this is really a MultiXactId */
diff --git a/src/include/catalog/pg_constraint.h b/src/include/catalog/pg_constraint.h
index ec035d8434..216344e254 100644
--- a/src/include/catalog/pg_constraint.h
+++ b/src/include/catalog/pg_constraint.h
@@ -42,9 +42,9 @@ CATALOG(pg_constraint,2606)
 	NameData	conname;		/* name of this constraint */
 	Oid			connamespace;	/* OID of namespace containing constraint */
 	char		contype;		/* constraint type; see codes below */
-	bool		condeferrable;	/* deferrable constraint? */
-	bool		condeferred;	/* deferred by default? */
-	bool		convalidated;	/* constraint has been validated? */
+	bool8		condeferrable;	/* deferrable constraint? */
+	bool8		condeferred;	/* deferred by default? */
+	bool8		convalidated;	/* constraint has been validated? */
 
 	/*
 	 * conrelid and conkey are only meaningful if the constraint applies to a
@@ -82,13 +82,13 @@ CATALOG(pg_constraint,2606)
 	char		confmatchtype;	/* foreign key's match type */
 
 	/* Has a local definition (hence, do not drop when coninhcount is 0) */
-	bool		conislocal;
+	bool8		conislocal;
 
 	/* Number of times inherited from direct parent relation(s) */
 	int32		coninhcount;
 
 	/* Has a local definition and cannot be inherited */
-	bool		connoinherit;
+	bool8		connoinherit;
 
 #ifdef CATALOG_VARLEN			/* variable-length fields start here */
 
diff --git a/src/include/catalog/pg_conversion.h b/src/include/catalog/pg_conversion.h
index 9344585e66..33c61e47cc 100644
--- a/src/include/catalog/pg_conversion.h
+++ b/src/include/catalog/pg_conversion.h
@@ -45,7 +45,7 @@ CATALOG(pg_conversion,2607)
 	int32		conforencoding;
 	int32		contoencoding;
 	regproc		conproc;
-	bool		condefault;
+	bool8		condefault;
 } FormData_pg_conversion;
 
 /* ----------------
diff --git a/src/include/catalog/pg_database.h b/src/include/catalog/pg_database.h
index e7cbca49cf..e470abf88a 100644
--- a/src/include/catalog/pg_database.h
+++ b/src/include/catalog/pg_database.h
@@ -36,8 +36,8 @@ CATALOG(pg_database,1262) BKI_SHARED_RELATION BKI_ROWTYPE_OID(1248) BKI_SCHEMA_M
 	int32		encoding;		/* character encoding */
 	NameData	datcollate;		/* LC_COLLATE setting */
 	NameData	datctype;		/* LC_CTYPE setting */
-	bool		datistemplate;	/* allowed as CREATE DATABASE template? */
-	bool		datallowconn;	/* new connections allowed? */
+	bool8		datistemplate;	/* allowed as CREATE DATABASE template? */
+	bool8		datallowconn;	/* new connections allowed? */
 	int32		datconnlimit;	/* max connections allowed (-1=no limit) */
 	Oid			datlastsysoid;	/* highest OID to consider a system OID */
 	TransactionId datfrozenxid; /* all Xids < this are frozen in this DB */
diff --git a/src/include/catalog/pg_extension.h b/src/include/catalog/pg_extension.h
index 2ce575d17e..21e6153d21 100644
--- a/src/include/catalog/pg_extension.h
+++ b/src/include/catalog/pg_extension.h
@@ -33,7 +33,7 @@ CATALOG(pg_extension,3079)
 	NameData	extname;		/* extension name */
 	Oid			extowner;		/* extension owner */
 	Oid			extnamespace;	/* namespace of contained objects */
-	bool		extrelocatable; /* if true, allow ALTER EXTENSION SET SCHEMA */
+	bool8		extrelocatable; /* if true, allow ALTER EXTENSION SET SCHEMA */
 
 #ifdef CATALOG_VARLEN			/* variable-length fields start here */
 	/* extversion may never be null, but the others can be. */
diff --git a/src/include/catalog/pg_index.h b/src/include/catalog/pg_index.h
index 8505c3be5f..1d21e9800c 100644
--- a/src/include/catalog/pg_index.h
+++ b/src/include/catalog/pg_index.h
@@ -33,16 +33,16 @@ CATALOG(pg_index,2610) BKI_WITHOUT_OIDS BKI_SCHEMA_MACRO
 	Oid			indexrelid;		/* OID of the index */
 	Oid			indrelid;		/* OID of the relation it indexes */
 	int16		indnatts;		/* number of columns in index */
-	bool		indisunique;	/* is this a unique index? */
-	bool		indisprimary;	/* is this index for primary key? */
-	bool		indisexclusion; /* is this index for exclusion constraint? */
-	bool		indimmediate;	/* is uniqueness enforced immediately? */
-	bool		indisclustered; /* is this the index last clustered by? */
-	bool		indisvalid;		/* is this index valid for use by queries? */
-	bool		indcheckxmin;	/* must we wait for xmin to be old? */
-	bool		indisready;		/* is this index ready for inserts? */
-	bool		indislive;		/* is this index alive at all? */
-	bool		indisreplident; /* is this index the identity for replication? */
+	bool8		indisunique;	/* is this a unique index? */
+	bool8		indisprimary;	/* is this index for primary key? */
+	bool8		indisexclusion; /* is this index for exclusion constraint? */
+	bool8		indimmediate;	/* is uniqueness enforced immediately? */
+	bool8		indisclustered; /* is this the index last clustered by? */
+	bool8		indisvalid;		/* is this index valid for use by queries? */
+	bool8		indcheckxmin;	/* must we wait for xmin to be old? */
+	bool8		indisready;		/* is this index ready for inserts? */
+	bool8		indislive;		/* is this index alive at all? */
+	bool8		indisreplident; /* is this index the identity for replication? */
 
 	/* variable-length fields start here, but we allow direct access to indkey */
 	int2vector	indkey;			/* column numbers of indexed cols, or 0 */
diff --git a/src/include/catalog/pg_language.h b/src/include/catalog/pg_language.h
index ad244e839b..4c20e66a6c 100644
--- a/src/include/catalog/pg_language.h
+++ b/src/include/catalog/pg_language.h
@@ -32,8 +32,8 @@ CATALOG(pg_language,2612)
 {
 	NameData	lanname;		/* Language name */
 	Oid			lanowner;		/* Language's owner */
-	bool		lanispl;		/* Is a procedural language */
-	bool		lanpltrusted;	/* PL is trusted */
+	bool8		lanispl;		/* Is a procedural language */
+	bool8		lanpltrusted;	/* PL is trusted */
 	Oid			lanplcallfoid;	/* Call handler for PL */
 	Oid			laninline;		/* Optional anonymous-block handler function */
 	Oid			lanvalidator;	/* Optional validation function */
diff --git a/src/include/catalog/pg_opclass.h b/src/include/catalog/pg_opclass.h
index 6aabc7279f..b35181ce74 100644
--- a/src/include/catalog/pg_opclass.h
+++ b/src/include/catalog/pg_opclass.h
@@ -56,7 +56,7 @@ CATALOG(pg_opclass,2616)
 	Oid			opcowner;		/* opclass owner */
 	Oid			opcfamily;		/* containing operator family */
 	Oid			opcintype;		/* type of data indexed by opclass */
-	bool		opcdefault;		/* T if opclass is default for opcintype */
+	bool8		opcdefault;		/* T if opclass is default for opcintype */
 	Oid			opckeytype;		/* type of data in index, or InvalidOid */
 } FormData_pg_opclass;
 
diff --git a/src/include/catalog/pg_operator.h b/src/include/catalog/pg_operator.h
index ff9b47077b..24c1c72759 100644
--- a/src/include/catalog/pg_operator.h
+++ b/src/include/catalog/pg_operator.h
@@ -37,8 +37,8 @@ CATALOG(pg_operator,2617)
 	Oid			oprnamespace;	/* OID of namespace containing this oper */
 	Oid			oprowner;		/* operator owner */
 	char		oprkind;		/* 'l', 'r', or 'b' */
-	bool		oprcanmerge;	/* can be used in merge join? */
-	bool		oprcanhash;		/* can be used in hash join? */
+	bool8		oprcanmerge;	/* can be used in merge join? */
+	bool8		oprcanhash;		/* can be used in hash join? */
 	Oid			oprleft;		/* left arg type, or 0 if 'l' oprkind */
 	Oid			oprright;		/* right arg type, or 0 if 'r' oprkind */
 	Oid			oprresult;		/* result datatype */
diff --git a/src/include/catalog/pg_pltemplate.h b/src/include/catalog/pg_pltemplate.h
index fbe71bd0c3..c4d416c686 100644
--- a/src/include/catalog/pg_pltemplate.h
+++ b/src/include/catalog/pg_pltemplate.h
@@ -31,8 +31,8 @@
 CATALOG(pg_pltemplate,1136) BKI_SHARED_RELATION BKI_WITHOUT_OIDS
 {
 	NameData	tmplname;		/* name of PL */
-	bool		tmpltrusted;	/* PL is trusted? */
-	bool		tmpldbacreate;	/* PL is installable by db owner? */
+	bool8		tmpltrusted;	/* PL is trusted? */
+	bool8		tmpldbacreate;	/* PL is installable by db owner? */
 
 #ifdef CATALOG_VARLEN			/* variable-length fields start here */
 	text		tmplhandler BKI_FORCE_NOT_NULL; /* name of call handler
diff --git a/src/include/catalog/pg_policy.h b/src/include/catalog/pg_policy.h
index 86000737fa..8aa1f2a4d8 100644
--- a/src/include/catalog/pg_policy.h
+++ b/src/include/catalog/pg_policy.h
@@ -23,7 +23,7 @@ CATALOG(pg_policy,3256)
 	NameData	polname;		/* Policy name. */
 	Oid			polrelid;		/* Oid of the relation with policy. */
 	char		polcmd;			/* One of ACL_*_CHR, or '*' for all */
-	bool		polpermissive;	/* restrictive or permissive policy */
+	bool8		polpermissive;	/* restrictive or permissive policy */
 
 #ifdef CATALOG_VARLEN
 	Oid			polroles[1];	/* Roles associated with policy, not-NULL */
diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h
index 830bab37ea..538eea7211 100644
--- a/src/include/catalog/pg_proc.h
+++ b/src/include/catalog/pg_proc.h
@@ -43,12 +43,12 @@ CATALOG(pg_proc,1255) BKI_BOOTSTRAP BKI_ROWTYPE_OID(81) BKI_SCHEMA_MACRO
 	float4		prorows;		/* estimated # of rows out (if proretset) */
 	Oid			provariadic;	/* element type of variadic array, or 0 */
 	regproc		protransform;	/* transforms calls to it during planning */
-	bool		proisagg;		/* is it an aggregate? */
-	bool		proiswindow;	/* is it a window function? */
-	bool		prosecdef;		/* security definer */
-	bool		proleakproof;	/* is it a leak-proof function? */
-	bool		proisstrict;	/* strict with respect to NULLs? */
-	bool		proretset;		/* returns a set? */
+	bool8		proisagg;		/* is it an aggregate? */
+	bool8		proiswindow;	/* is it a window function? */
+	bool8		prosecdef;		/* security definer */
+	bool8		proleakproof;	/* is it a leak-proof function? */
+	bool8		proisstrict;	/* strict with respect to NULLs? */
+	bool8		proretset;		/* returns a set? */
 	char		provolatile;	/* see PROVOLATILE_ categories below */
 	char		proparallel;	/* see PROPARALLEL_ categories below */
 	int16		pronargs;		/* number of arguments */
diff --git a/src/include/catalog/pg_publication.h b/src/include/catalog/pg_publication.h
index aa148960cd..19283ecd2e 100644
--- a/src/include/catalog/pg_publication.h
+++ b/src/include/catalog/pg_publication.h
@@ -38,16 +38,16 @@ CATALOG(pg_publication,6104)
 	 * indicates that this is special publication which should encompass all
 	 * tables in the database (except for the unlogged and temp ones)
 	 */
-	bool		puballtables;
+	bool8		puballtables;
 
 	/* true if inserts are published */
-	bool		pubinsert;
+	bool8		pubinsert;
 
 	/* true if updates are published */
-	bool		pubupdate;
+	bool8		pubupdate;
 
 	/* true if deletes are published */
-	bool		pubdelete;
+	bool8		pubdelete;
 
 } FormData_pg_publication;
 
diff --git a/src/include/catalog/pg_rewrite.h b/src/include/catalog/pg_rewrite.h
index 48b9333a9d..3c71e8e641 100644
--- a/src/include/catalog/pg_rewrite.h
+++ b/src/include/catalog/pg_rewrite.h
@@ -37,7 +37,7 @@ CATALOG(pg_rewrite,2618)
 	Oid			ev_class;
 	char		ev_type;
 	char		ev_enabled;
-	bool		is_instead;
+	bool8		is_instead;
 
 #ifdef CATALOG_VARLEN			/* variable-length fields start here */
 	pg_node_tree ev_qual;
diff --git a/src/include/catalog/pg_sequence.h b/src/include/catalog/pg_sequence.h
index 6de54bb665..9b84e16ed1 100644
--- a/src/include/catalog/pg_sequence.h
+++ b/src/include/catalog/pg_sequence.h
@@ -24,7 +24,7 @@ CATALOG(pg_sequence,2224) BKI_WITHOUT_OIDS
 	int64		seqmax;
 	int64		seqmin;
 	int64		seqcache;
-	bool		seqcycle;
+	bool8		seqcycle;
 } FormData_pg_sequence;
 
 typedef FormData_pg_sequence *Form_pg_sequence;
diff --git a/src/include/catalog/pg_statistic.h b/src/include/catalog/pg_statistic.h
index 43128f1928..1ed6387b03 100644
--- a/src/include/catalog/pg_statistic.h
+++ b/src/include/catalog/pg_statistic.h
@@ -33,7 +33,7 @@ CATALOG(pg_statistic,2619) BKI_WITHOUT_OIDS
 	/* These fields form the unique key for the entry: */
 	Oid			starelid;		/* relation containing attribute */
 	int16		staattnum;		/* attribute (column) stats are for */
-	bool		stainherit;		/* true if inheritance children are included */
+	bool8		stainherit;		/* true if inheritance children are included */
 
 	/* the fraction of the column's entries that are NULL: */
 	float4		stanullfrac;
diff --git a/src/include/catalog/pg_subscription.h b/src/include/catalog/pg_subscription.h
index 274ff6bc42..032b02e4fb 100644
--- a/src/include/catalog/pg_subscription.h
+++ b/src/include/catalog/pg_subscription.h
@@ -37,7 +37,7 @@ CATALOG(pg_subscription,6100) BKI_SHARED_RELATION BKI_ROWTYPE_OID(6101) BKI_SCHE
 
 	Oid			subowner;		/* Owner of the subscription */
 
-	bool		subenabled;		/* True if the subscription is enabled (the
+	bool8		subenabled;		/* True if the subscription is enabled (the
 								 * worker should be running) */
 
 #ifdef CATALOG_VARLEN			/* variable-length fields start here */
diff --git a/src/include/catalog/pg_trigger.h b/src/include/catalog/pg_trigger.h
index f413caf34f..0faa1812ab 100644
--- a/src/include/catalog/pg_trigger.h
+++ b/src/include/catalog/pg_trigger.h
@@ -42,12 +42,12 @@ CATALOG(pg_trigger,2620)
 								 * ROW/STATEMENT; see below */
 	char		tgenabled;		/* trigger's firing configuration WRT
 								 * session_replication_role */
-	bool		tgisinternal;	/* trigger is system-generated */
+	bool8		tgisinternal;	/* trigger is system-generated */
 	Oid			tgconstrrelid;	/* constraint's FROM table, if any */
 	Oid			tgconstrindid;	/* constraint's supporting index, if any */
 	Oid			tgconstraint;	/* associated pg_constraint entry, if any */
-	bool		tgdeferrable;	/* constraint trigger is deferrable */
-	bool		tginitdeferred; /* constraint trigger is deferred initially */
+	bool8		tgdeferrable;	/* constraint trigger is deferrable */
+	bool8		tginitdeferred; /* constraint trigger is deferred initially */
 	int16		tgnargs;		/* # of extra arguments in tgargs */
 
 	/*
diff --git a/src/include/catalog/pg_type.h b/src/include/catalog/pg_type.h
index e3551440a0..a41e664449 100644
--- a/src/include/catalog/pg_type.h
+++ b/src/include/catalog/pg_type.h
@@ -57,7 +57,7 @@ CATALOG(pg_type,1247) BKI_BOOTSTRAP BKI_ROWTYPE_OID(71) BKI_SCHEMA_MACRO
 	 * typbyval can be false even if the length would allow pass-by-value;
 	 * this is currently true for type float4, for example.
 	 */
-	bool		typbyval;
+	bool8		typbyval;
 
 	/*
 	 * typtype is 'b' for a base type, 'c' for a composite type (e.g., a
@@ -76,13 +76,13 @@ CATALOG(pg_type,1247) BKI_BOOTSTRAP BKI_ROWTYPE_OID(71) BKI_SCHEMA_MACRO
 	 */
 	char		typcategory;	/* arbitrary type classification */
 
-	bool		typispreferred; /* is type "preferred" within its category? */
+	bool8		typispreferred; /* is type "preferred" within its category? */
 
 	/*
 	 * If typisdefined is false, the entry is only a placeholder (forward
 	 * reference).  We know the type name, but not yet anything else about it.
 	 */
-	bool		typisdefined;
+	bool8		typisdefined;
 
 	char		typdelim;		/* delimiter for arrays of this type */
 
@@ -172,7 +172,7 @@ CATALOG(pg_type,1247) BKI_BOOTSTRAP BKI_ROWTYPE_OID(71) BKI_SCHEMA_MACRO
 	 *
 	 * Used primarily for domain types.
 	 */
-	bool		typnotnull;
+	bool8		typnotnull;
 
 	/*
 	 * Domains use typbasetype to show the base (or domain) type that the
diff --git a/src/include/commands/sequence.h b/src/include/commands/sequence.h
index caab195130..09ad49e214 100644
--- a/src/include/commands/sequence.h
+++ b/src/include/commands/sequence.h
@@ -26,7 +26,7 @@ typedef struct FormData_pg_sequence_data
 {
 	int64		last_value;
 	int64		log_cnt;
-	bool		is_called;
+	bool8		is_called;
 } FormData_pg_sequence_data;
 
 typedef FormData_pg_sequence_data *Form_pg_sequence_data;

base-commit: f83040c62a78e784e6e33a6382a55925bfd66634
-- 
2.15.1


--------------AB99891BACB265862555DF3C
Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0";
 name="v5-0002-Don-t-cast-between-GinNullCategory-and-bool.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename*0="v5-0002-Don-t-cast-between-GinNullCategory-and-bool.patch"