From 8137f2c32322c624e0431fac1621e8e9315202f9 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 27 Jan 2012 20:16:17 +0200 Subject: [PATCH] Hide most variable-length fields from Form_pg_* structs Those fields only appear in the structs so that genbki.pl can create the BKI bootstrap files for the catalogs. But they are not actually usable from C. So hiding them can prevent coding mistakes, saves stack space, and can help the compiler. In certain catalogs, the first variable-length field has been kept visible after manual inspection. These exceptions are noted in C comments. reviewed by Tom Lane --- src/backend/catalog/Catalog.pm | 2 ++ src/include/catalog/genbki.h | 10 ++++++++++ src/include/catalog/pg_aggregate.h | 4 +++- src/include/catalog/pg_attrdef.h | 2 ++ src/include/catalog/pg_attribute.h | 8 +++----- src/include/catalog/pg_class.h | 9 +++------ src/include/catalog/pg_constraint.h | 6 ++---- src/include/catalog/pg_database.h | 4 +++- src/include/catalog/pg_db_role_setting.h | 2 ++ src/include/catalog/pg_default_acl.h | 7 ++----- src/include/catalog/pg_description.h | 2 ++ src/include/catalog/pg_extension.h | 9 +++------ src/include/catalog/pg_foreign_data_wrapper.h | 5 ++--- src/include/catalog/pg_foreign_server.h | 6 ++---- src/include/catalog/pg_foreign_table.h | 2 ++ src/include/catalog/pg_index.h | 4 +++- src/include/catalog/pg_language.h | 2 ++ src/include/catalog/pg_largeobject.h | 1 + src/include/catalog/pg_largeobject_metadata.h | 2 ++ src/include/catalog/pg_namespace.h | 4 +++- src/include/catalog/pg_pltemplate.h | 2 ++ src/include/catalog/pg_proc.h | 4 +++- src/include/catalog/pg_rewrite.h | 4 ++-- src/include/catalog/pg_seclabel.h | 2 ++ src/include/catalog/pg_shdescription.h | 2 ++ src/include/catalog/pg_shseclabel.h | 2 ++ src/include/catalog/pg_statistic.h | 2 ++ src/include/catalog/pg_tablespace.h | 4 +++- src/include/catalog/pg_trigger.h | 5 ++++- src/include/catalog/pg_ts_dict.h | 2 ++ src/include/catalog/pg_type.h | 8 +++++--- src/include/catalog/pg_user_mapping.h | 6 ++---- 32 files changed, 85 insertions(+), 49 deletions(-) diff --git a/src/backend/catalog/Catalog.pm b/src/backend/catalog/Catalog.pm index 1ba935cdf7..cdb0bee130 100644 --- a/src/backend/catalog/Catalog.pm +++ b/src/backend/catalog/Catalog.pm @@ -143,6 +143,7 @@ sub Catalogs elsif ($declaring_attributes) { next if (/^{|^$/); + next if (/^#/); if (/^}/) { undef $declaring_attributes; @@ -150,6 +151,7 @@ sub Catalogs else { my ($atttype, $attname) = split /\s+/, $_; + die "parse error ($input_file)" unless $attname; if (exists $RENAME_ATTTYPE{$atttype}) { $atttype = $RENAME_ATTTYPE{$atttype}; diff --git a/src/include/catalog/genbki.h b/src/include/catalog/genbki.h index 5fe3a5bdc4..bcf31e6c6b 100644 --- a/src/include/catalog/genbki.h +++ b/src/include/catalog/genbki.h @@ -22,6 +22,16 @@ /* Introduces a catalog's structure definition */ #define CATALOG(name,oid) typedef struct CppConcat(FormData_,name) +/* + * This is never defined; it's here only for documentation. + * + * Variable-length catalog fields (except possibly the first not nullable one) + * should not be visible in C structures, so they are made invisible by #ifdefs + * of an undefined symbol. See also MARKNOTNULL in bootstrap.c for how this is + * handled. + */ +#undef CATALOG_VARLEN + /* Options that may appear after CATALOG (on the same line) */ #define BKI_BOOTSTRAP #define BKI_SHARED_RELATION diff --git a/src/include/catalog/pg_aggregate.h b/src/include/catalog/pg_aggregate.h index 4e10021765..0c8a20c005 100644 --- a/src/include/catalog/pg_aggregate.h +++ b/src/include/catalog/pg_aggregate.h @@ -44,7 +44,9 @@ CATALOG(pg_aggregate,2600) BKI_WITHOUT_OIDS regproc aggfinalfn; Oid aggsortop; Oid aggtranstype; - text agginitval; /* VARIABLE LENGTH FIELD */ +#ifdef CATALOG_VARLEN /* variable-length fields start here */ + text agginitval; +#endif } FormData_pg_aggregate; /* ---------------- diff --git a/src/include/catalog/pg_attrdef.h b/src/include/catalog/pg_attrdef.h index 01f663c09d..ad770e410f 100644 --- a/src/include/catalog/pg_attrdef.h +++ b/src/include/catalog/pg_attrdef.h @@ -32,8 +32,10 @@ CATALOG(pg_attrdef,2604) { Oid adrelid; /* OID of table containing attribute */ int2 adnum; /* attnum of attribute */ +#ifdef CATALOG_VARLEN /* variable-length fields start here */ pg_node_tree adbin; /* nodeToString representation of default */ text adsrc; /* human-readable representation of default */ +#endif } FormData_pg_attrdef; /* ---------------- diff --git a/src/include/catalog/pg_attribute.h b/src/include/catalog/pg_attribute.h index 5cb16f6c41..45e38e4dfc 100644 --- a/src/include/catalog/pg_attribute.h +++ b/src/include/catalog/pg_attribute.h @@ -145,11 +145,8 @@ CATALOG(pg_attribute,1249) BKI_BOOTSTRAP BKI_WITHOUT_OIDS BKI_ROWTYPE_OID(75) BK /* attribute's collation */ Oid attcollation; - /* - * VARIABLE LENGTH FIELDS start here. These fields may be NULL, too. - * - * NOTE: the following fields are not present in tuple descriptors! - */ +#ifdef CATALOG_VARLEN /* variable-length fields start here */ + /* NOTE: The following fields are not present in tuple descriptors. */ /* Column-level access permissions */ aclitem attacl[1]; @@ -159,6 +156,7 @@ CATALOG(pg_attribute,1249) BKI_BOOTSTRAP BKI_WITHOUT_OIDS BKI_ROWTYPE_OID(75) BK /* Column-level FDW options */ text attfdwoptions[1]; +#endif } FormData_pg_attribute; /* diff --git a/src/include/catalog/pg_class.h b/src/include/catalog/pg_class.h index 829f9b9c1d..3b01bb4365 100644 --- a/src/include/catalog/pg_class.h +++ b/src/include/catalog/pg_class.h @@ -68,14 +68,11 @@ CATALOG(pg_class,1259) BKI_BOOTSTRAP BKI_ROWTYPE_OID(83) BKI_SCHEMA_MACRO bool relhassubclass; /* has (or has had) derived classes */ TransactionId relfrozenxid; /* all Xids < this are frozen in this rel */ - /* - * VARIABLE LENGTH FIELDS start here. These fields may be NULL, too. - * - * NOTE: these fields are not present in a relcache entry's rd_rel field. - */ - +#ifdef CATALOG_VARLEN /* variable-length fields start here */ + /* NOTE: These fields are not present in a relcache entry's rd_rel field. */ aclitem relacl[1]; /* access permissions */ text reloptions[1]; /* access-method-specific options */ +#endif } FormData_pg_class; /* Size of fixed part of pg_class tuples, not counting var-length fields */ diff --git a/src/include/catalog/pg_constraint.h b/src/include/catalog/pg_constraint.h index c9628348a1..77015ae2f3 100644 --- a/src/include/catalog/pg_constraint.h +++ b/src/include/catalog/pg_constraint.h @@ -91,10 +91,7 @@ CATALOG(pg_constraint,2606) /* Has a local definition and cannot be inherited */ bool conisonly; - /* - * VARIABLE LENGTH FIELDS start here. These fields may be NULL, too. - */ - +#ifdef CATALOG_VARLEN /* variable-length fields start here */ /* * Columns of conrelid that the constraint applies to, if known (this is * NULL for trigger constraints) @@ -139,6 +136,7 @@ CATALOG(pg_constraint,2606) * If a check constraint, source-text representation of expression */ text consrc; +#endif } FormData_pg_constraint; /* ---------------- diff --git a/src/include/catalog/pg_database.h b/src/include/catalog/pg_database.h index 57537c81f2..e8509f59bb 100644 --- a/src/include/catalog/pg_database.h +++ b/src/include/catalog/pg_database.h @@ -42,7 +42,9 @@ CATALOG(pg_database,1262) BKI_SHARED_RELATION BKI_ROWTYPE_OID(1248) BKI_SCHEMA_M Oid datlastsysoid; /* highest OID to consider a system OID */ TransactionId datfrozenxid; /* all Xids < this are frozen in this DB */ Oid dattablespace; /* default table space for this DB */ - aclitem datacl[1]; /* access permissions (VAR LENGTH) */ +#ifdef CATALOG_VARLEN /* variable-length fields start here */ + aclitem datacl[1]; /* access permissions */ +#endif } FormData_pg_database; /* ---------------- diff --git a/src/include/catalog/pg_db_role_setting.h b/src/include/catalog/pg_db_role_setting.h index 192404316a..c6e2f3b4dc 100644 --- a/src/include/catalog/pg_db_role_setting.h +++ b/src/include/catalog/pg_db_role_setting.h @@ -35,7 +35,9 @@ CATALOG(pg_db_role_setting,2964) BKI_SHARED_RELATION BKI_WITHOUT_OIDS { Oid setdatabase; /* database */ Oid setrole; /* role */ +#ifdef CATALOG_VARLEN /* variable-length fields start here */ text setconfig[1]; /* GUC settings to apply at login */ +#endif } FormData_pg_db_role_setting; typedef FormData_pg_db_role_setting *Form_pg_db_role_setting; diff --git a/src/include/catalog/pg_default_acl.h b/src/include/catalog/pg_default_acl.h index 9fd207d950..f36ce52519 100644 --- a/src/include/catalog/pg_default_acl.h +++ b/src/include/catalog/pg_default_acl.h @@ -32,12 +32,9 @@ CATALOG(pg_default_acl,826) Oid defaclrole; /* OID of role owning this ACL */ Oid defaclnamespace; /* OID of namespace, or 0 for all */ char defaclobjtype; /* see DEFACLOBJ_xxx constants below */ - - /* - * VARIABLE LENGTH FIELDS start here. - */ - +#ifdef CATALOG_VARLEN /* variable-length fields start here */ aclitem defaclacl[1]; /* permissions to add at CREATE time */ +#endif } FormData_pg_default_acl; /* ---------------- diff --git a/src/include/catalog/pg_description.h b/src/include/catalog/pg_description.h index 0e06500763..352c517369 100644 --- a/src/include/catalog/pg_description.h +++ b/src/include/catalog/pg_description.h @@ -50,7 +50,9 @@ CATALOG(pg_description,2609) BKI_WITHOUT_OIDS Oid objoid; /* OID of object itself */ Oid classoid; /* OID of table containing object */ int4 objsubid; /* column number, or 0 if not used */ +#ifdef CATALOG_VARLEN /* variable-length fields start here */ text description; /* description of object */ +#endif } FormData_pg_description; /* ---------------- diff --git a/src/include/catalog/pg_extension.h b/src/include/catalog/pg_extension.h index 606ed9a2af..b07b43cf7e 100644 --- a/src/include/catalog/pg_extension.h +++ b/src/include/catalog/pg_extension.h @@ -34,15 +34,12 @@ CATALOG(pg_extension,3079) Oid extowner; /* extension owner */ Oid extnamespace; /* namespace of contained objects */ bool extrelocatable; /* if true, allow ALTER EXTENSION SET SCHEMA */ - - /* - * VARIABLE LENGTH FIELDS start here. - * - * extversion should never be null, but the others can be. - */ +#ifdef CATALOG_VARLEN /* variable-length fields start here */ + /* extversion should never be null, but the others can be. */ text extversion; /* extension version name */ Oid extconfig[1]; /* dumpable configuration tables */ text extcondition[1]; /* WHERE clauses for config tables */ +#endif } FormData_pg_extension; /* ---------------- diff --git a/src/include/catalog/pg_foreign_data_wrapper.h b/src/include/catalog/pg_foreign_data_wrapper.h index 90a51a2f4b..b6dd8eb7cc 100644 --- a/src/include/catalog/pg_foreign_data_wrapper.h +++ b/src/include/catalog/pg_foreign_data_wrapper.h @@ -34,11 +34,10 @@ CATALOG(pg_foreign_data_wrapper,2328) Oid fdwowner; /* FDW owner */ Oid fdwhandler; /* handler function, or 0 if none */ Oid fdwvalidator; /* option validation function, or 0 if none */ - - /* VARIABLE LENGTH FIELDS start here. */ - +#ifdef CATALOG_VARLEN /* variable-length fields start here */ aclitem fdwacl[1]; /* access permissions */ text fdwoptions[1]; /* FDW options */ +#endif } FormData_pg_foreign_data_wrapper; /* ---------------- diff --git a/src/include/catalog/pg_foreign_server.h b/src/include/catalog/pg_foreign_server.h index a96328cd27..dd1e65e02a 100644 --- a/src/include/catalog/pg_foreign_server.h +++ b/src/include/catalog/pg_foreign_server.h @@ -31,14 +31,12 @@ CATALOG(pg_foreign_server,1417) NameData srvname; /* foreign server name */ Oid srvowner; /* server owner */ Oid srvfdw; /* server FDW */ - - /* - * VARIABLE LENGTH FIELDS start here. These fields may be NULL, too. - */ +#ifdef CATALOG_VARLEN /* variable-length fields start here */ text srvtype; text srvversion; aclitem srvacl[1]; /* access permissions */ text srvoptions[1]; /* FDW-specific options */ +#endif } FormData_pg_foreign_server; /* ---------------- diff --git a/src/include/catalog/pg_foreign_table.h b/src/include/catalog/pg_foreign_table.h index 71992d3c42..9af983eb93 100644 --- a/src/include/catalog/pg_foreign_table.h +++ b/src/include/catalog/pg_foreign_table.h @@ -30,7 +30,9 @@ CATALOG(pg_foreign_table,3118) BKI_WITHOUT_OIDS { Oid ftrelid; /* OID of foreign table */ Oid ftserver; /* OID of foreign server */ +#ifdef CATALOG_VARLEN /* variable-length fields start here */ text ftoptions[1]; /* FDW-specific options */ +#endif } FormData_pg_foreign_table; /* ---------------- diff --git a/src/include/catalog/pg_index.h b/src/include/catalog/pg_index.h index 6c301ff17f..92ca22c686 100644 --- a/src/include/catalog/pg_index.h +++ b/src/include/catalog/pg_index.h @@ -42,8 +42,9 @@ CATALOG(pg_index,2610) BKI_WITHOUT_OIDS BKI_SCHEMA_MACRO bool indcheckxmin; /* must we wait for xmin to be old? */ bool indisready; /* is this index ready for inserts? */ - /* VARIABLE LENGTH FIELDS: */ + /* variable-length fields start here, but we allow direct access to indkey */ int2vector indkey; /* column numbers of indexed cols, or 0 */ +#ifdef CATALOG_VARLEN oidvector indcollation; /* collation identifiers */ oidvector indclass; /* opclass identifiers */ int2vector indoption; /* per-column flags (AM-specific meanings) */ @@ -52,6 +53,7 @@ CATALOG(pg_index,2610) BKI_WITHOUT_OIDS BKI_SCHEMA_MACRO * each zero entry in indkey[] */ pg_node_tree indpred; /* expression tree for predicate, if a partial * index; else NULL */ +#endif } FormData_pg_index; /* ---------------- diff --git a/src/include/catalog/pg_language.h b/src/include/catalog/pg_language.h index fd8ea0b79d..eb4ae5ab2d 100644 --- a/src/include/catalog/pg_language.h +++ b/src/include/catalog/pg_language.h @@ -37,7 +37,9 @@ CATALOG(pg_language,2612) Oid lanplcallfoid; /* Call handler for PL */ Oid laninline; /* Optional anonymous-block handler function */ Oid lanvalidator; /* Optional validation function */ +#ifdef CATALOG_VARLEN /* variable-length fields start here */ aclitem lanacl[1]; /* Access privileges */ +#endif } FormData_pg_language; /* ---------------- diff --git a/src/include/catalog/pg_largeobject.h b/src/include/catalog/pg_largeobject.h index 7c53e1e10e..b89d4ec1a9 100644 --- a/src/include/catalog/pg_largeobject.h +++ b/src/include/catalog/pg_largeobject.h @@ -32,6 +32,7 @@ CATALOG(pg_largeobject,2613) BKI_WITHOUT_OIDS { Oid loid; /* Identifier of large object */ int4 pageno; /* Page number (starting from 0) */ + /* data has variable length, but we allow direct access; see inv_api.c */ bytea data; /* Data for page (may be zero-length) */ } FormData_pg_largeobject; diff --git a/src/include/catalog/pg_largeobject_metadata.h b/src/include/catalog/pg_largeobject_metadata.h index dea4d1289c..c280176491 100644 --- a/src/include/catalog/pg_largeobject_metadata.h +++ b/src/include/catalog/pg_largeobject_metadata.h @@ -31,7 +31,9 @@ CATALOG(pg_largeobject_metadata,2995) { Oid lomowner; /* OID of the largeobject owner */ +#ifdef CATALOG_VARLEN /* variable-length fields start here */ aclitem lomacl[1]; /* access permissions */ +#endif } FormData_pg_largeobject_metadata; /* ---------------- diff --git a/src/include/catalog/pg_namespace.h b/src/include/catalog/pg_namespace.h index 52a97f1a9e..aad76a1452 100644 --- a/src/include/catalog/pg_namespace.h +++ b/src/include/catalog/pg_namespace.h @@ -37,7 +37,9 @@ CATALOG(pg_namespace,2615) { NameData nspname; Oid nspowner; - aclitem nspacl[1]; /* VARIABLE LENGTH FIELD */ +#ifdef CATALOG_VARLEN /* variable-length fields start here */ + aclitem nspacl[1]; +#endif } FormData_pg_namespace; /* ---------------- diff --git a/src/include/catalog/pg_pltemplate.h b/src/include/catalog/pg_pltemplate.h index ce249c0e0f..00abd53370 100644 --- a/src/include/catalog/pg_pltemplate.h +++ b/src/include/catalog/pg_pltemplate.h @@ -33,11 +33,13 @@ 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? */ +#ifdef CATALOG_VARLEN /* variable-length fields start here */ text tmplhandler; /* name of call handler function */ text tmplinline; /* name of anonymous-block handler, or NULL */ text tmplvalidator; /* name of validator function, or NULL */ text tmpllibrary; /* path of shared library */ aclitem tmplacl[1]; /* access privileges for template */ +#endif } FormData_pg_pltemplate; /* ---------------- diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h index ba4f5b6034..5e880d2a4d 100644 --- a/src/include/catalog/pg_proc.h +++ b/src/include/catalog/pg_proc.h @@ -53,8 +53,9 @@ CATALOG(pg_proc,1255) BKI_BOOTSTRAP BKI_ROWTYPE_OID(81) BKI_SCHEMA_MACRO int2 pronargdefaults; /* number of arguments with defaults */ Oid prorettype; /* OID of result type */ - /* VARIABLE LENGTH FIELDS: */ + /* variable-length fields start here, but we allow direct access to proargtypes */ oidvector proargtypes; /* parameter types (excludes OUT params) */ +#ifdef CATALOG_VARLEN Oid proallargtypes[1]; /* all param types (NULL if IN only) */ char proargmodes[1]; /* parameter modes (NULL if IN only) */ text proargnames[1]; /* parameter names (NULL if no names) */ @@ -64,6 +65,7 @@ CATALOG(pg_proc,1255) BKI_BOOTSTRAP BKI_ROWTYPE_OID(81) BKI_SCHEMA_MACRO text probin; /* secondary procedure info (can be NULL) */ text proconfig[1]; /* procedure-local GUC settings */ aclitem proacl[1]; /* access permissions */ +#endif } FormData_pg_proc; /* ---------------- diff --git a/src/include/catalog/pg_rewrite.h b/src/include/catalog/pg_rewrite.h index eb16b2dc2d..e04ba81b3c 100644 --- a/src/include/catalog/pg_rewrite.h +++ b/src/include/catalog/pg_rewrite.h @@ -39,10 +39,10 @@ CATALOG(pg_rewrite,2618) char ev_type; char ev_enabled; bool is_instead; - - /* NB: remaining fields must be accessed via heap_getattr */ +#ifdef CATALOG_VARLEN /* variable-length fields start here */ pg_node_tree ev_qual; pg_node_tree ev_action; +#endif } FormData_pg_rewrite; /* ---------------- diff --git a/src/include/catalog/pg_seclabel.h b/src/include/catalog/pg_seclabel.h index b468d6924b..101ec3c111 100644 --- a/src/include/catalog/pg_seclabel.h +++ b/src/include/catalog/pg_seclabel.h @@ -25,8 +25,10 @@ CATALOG(pg_seclabel,3596) BKI_WITHOUT_OIDS Oid objoid; /* OID of the object itself */ Oid classoid; /* OID of table containing the object */ int4 objsubid; /* column number, or 0 if not used */ +#ifdef CATALOG_VARLEN /* variable-length fields start here */ text provider; /* name of label provider */ text label; /* security label of the object */ +#endif } FormData_pg_seclabel; /* ---------------- diff --git a/src/include/catalog/pg_shdescription.h b/src/include/catalog/pg_shdescription.h index 6d0ee3bcbb..377f4337d9 100644 --- a/src/include/catalog/pg_shdescription.h +++ b/src/include/catalog/pg_shdescription.h @@ -42,7 +42,9 @@ CATALOG(pg_shdescription,2396) BKI_SHARED_RELATION BKI_WITHOUT_OIDS { Oid objoid; /* OID of object itself */ Oid classoid; /* OID of table containing object */ +#ifdef CATALOG_VARLEN /* variable-length fields start here */ text description; /* description of object */ +#endif } FormData_pg_shdescription; /* ---------------- diff --git a/src/include/catalog/pg_shseclabel.h b/src/include/catalog/pg_shseclabel.h index 235564f5dd..d7c49e78bb 100644 --- a/src/include/catalog/pg_shseclabel.h +++ b/src/include/catalog/pg_shseclabel.h @@ -24,8 +24,10 @@ CATALOG(pg_shseclabel,3592) BKI_SHARED_RELATION BKI_WITHOUT_OIDS { Oid objoid; /* OID of the shared object itself */ Oid classoid; /* OID of table containing the shared object */ +#ifdef CATALOG_VARLEN /* variable-length fields start here */ text provider; /* name of label provider */ text label; /* security label of the object */ +#endif } FormData_pg_shseclabel; /* ---------------- diff --git a/src/include/catalog/pg_statistic.h b/src/include/catalog/pg_statistic.h index 7d1d127ec6..0b15b001b4 100644 --- a/src/include/catalog/pg_statistic.h +++ b/src/include/catalog/pg_statistic.h @@ -116,6 +116,7 @@ CATALOG(pg_statistic,2619) BKI_WITHOUT_OIDS float4 stanumbers3[1]; float4 stanumbers4[1]; +#ifdef CATALOG_VARLEN /* variable-length fields start here */ /* * Values in these arrays are values of the column's data type. We * presently have to cheat quite a bit to allow polymorphic arrays of this @@ -125,6 +126,7 @@ CATALOG(pg_statistic,2619) BKI_WITHOUT_OIDS anyarray stavalues2; anyarray stavalues3; anyarray stavalues4; +#endif } FormData_pg_statistic; #define STATISTIC_NUM_SLOTS 4 diff --git a/src/include/catalog/pg_tablespace.h b/src/include/catalog/pg_tablespace.h index a6a068659b..0650a5fbae 100644 --- a/src/include/catalog/pg_tablespace.h +++ b/src/include/catalog/pg_tablespace.h @@ -32,8 +32,10 @@ CATALOG(pg_tablespace,1213) BKI_SHARED_RELATION { NameData spcname; /* tablespace name */ Oid spcowner; /* owner of tablespace */ - aclitem spcacl[1]; /* access permissions (VAR LENGTH) */ +#ifdef CATALOG_VARLEN /* variable-length fields start here */ + aclitem spcacl[1]; /* access permissions */ text spcoptions[1]; /* per-tablespace options */ +#endif } FormData_pg_tablespace; /* ---------------- diff --git a/src/include/catalog/pg_trigger.h b/src/include/catalog/pg_trigger.h index 1f29d21f63..0ee5b8af8d 100644 --- a/src/include/catalog/pg_trigger.h +++ b/src/include/catalog/pg_trigger.h @@ -50,10 +50,13 @@ CATALOG(pg_trigger,2620) bool tginitdeferred; /* constraint trigger is deferred initially */ int2 tgnargs; /* # of extra arguments in tgargs */ - /* VARIABLE LENGTH FIELDS (note: tgattr and tgargs must not be null) */ + /* Variable-length fields start here, but we allow direct access to tgattr. + * Note: tgattr and tgargs must not be null. */ int2vector tgattr; /* column numbers, if trigger is on columns */ +#ifdef CATALOG_VARLEN bytea tgargs; /* first\000second\000tgnargs\000 */ pg_node_tree tgqual; /* WHEN expression, or NULL if none */ +#endif } FormData_pg_trigger; /* ---------------- diff --git a/src/include/catalog/pg_ts_dict.h b/src/include/catalog/pg_ts_dict.h index 5036b8cfd2..31fcdd8896 100644 --- a/src/include/catalog/pg_ts_dict.h +++ b/src/include/catalog/pg_ts_dict.h @@ -36,7 +36,9 @@ CATALOG(pg_ts_dict,3600) Oid dictnamespace; /* name space */ Oid dictowner; /* owner */ Oid dicttemplate; /* dictionary's template */ +#ifdef CATALOG_VARLEN /* variable-length fields start here */ text dictinitoption; /* options passed to dict_init() */ +#endif } FormData_pg_ts_dict; typedef FormData_pg_ts_dict *Form_pg_ts_dict; diff --git a/src/include/catalog/pg_type.h b/src/include/catalog/pg_type.h index e12efe45db..d9855a79f8 100644 --- a/src/include/catalog/pg_type.h +++ b/src/include/catalog/pg_type.h @@ -200,12 +200,13 @@ CATALOG(pg_type,1247) BKI_BOOTSTRAP BKI_ROWTYPE_OID(71) BKI_SCHEMA_MACRO */ Oid typcollation; +#ifdef CATALOG_VARLEN /* variable-length fields start here */ /* * If typdefaultbin is not NULL, it is the nodeToString representation of * a default expression for the type. Currently this is only used for * domains. */ - pg_node_tree typdefaultbin; /* VARIABLE LENGTH FIELD */ + pg_node_tree typdefaultbin; /* * typdefault is NULL if the type has no associated default value. If @@ -215,12 +216,13 @@ CATALOG(pg_type,1247) BKI_BOOTSTRAP BKI_ROWTYPE_OID(71) BKI_SCHEMA_MACRO * external representation of the type's default value, which may be fed * to the type's input converter to produce a constant. */ - text typdefault; /* VARIABLE LENGTH FIELD */ + text typdefault; /* * Access permissions */ - aclitem typacl[1]; /* VARIABLE LENGTH FIELD */ + aclitem typacl[1]; +#endif } FormData_pg_type; /* ---------------- diff --git a/src/include/catalog/pg_user_mapping.h b/src/include/catalog/pg_user_mapping.h index 551000fcfc..1d2f9b0bd0 100644 --- a/src/include/catalog/pg_user_mapping.h +++ b/src/include/catalog/pg_user_mapping.h @@ -32,11 +32,9 @@ CATALOG(pg_user_mapping,1418) * wanted */ Oid umserver; /* server of this mapping */ - /* - * VARIABLE LENGTH FIELDS start here. These fields may be NULL, too. - */ - +#ifdef CATALOG_VARLEN /* variable-length fields start here */ text umoptions[1]; /* user mapping options */ +#endif } FormData_pg_user_mapping; /* ----------------