mirror of
https://github.com/postgres/postgres.git
synced 2025-06-14 18:42:34 +03:00
Use DECLARE_TOAST_WITH_MACRO() to simplify toast-table declarations.
This is needed so that renumber_oids.pl can handle renumbering shared catalog declarations, which need to provide C macros for the OIDs of the shared toast table and index. The previous method of writing a C macro separately was error-prone anyway. Also teach renumber_oids.pl about DECLARE_UNIQUE_INDEX_PKEY, as we missed doing when inventing that macro. There are no changes to postgres.bki here, so no need for a catversion bump. Discussion: https://postgr.es/m/2995325.1650487527@sss.pgh.pa.us
This commit is contained in:
@ -94,6 +94,17 @@ sub ParseHeader
|
|||||||
push @{ $catalog{toasting} },
|
push @{ $catalog{toasting} },
|
||||||
{ parent_table => $1, toast_oid => $2, toast_index_oid => $3 };
|
{ parent_table => $1, toast_oid => $2, toast_index_oid => $3 };
|
||||||
}
|
}
|
||||||
|
elsif (/^DECLARE_TOAST_WITH_MACRO\(\s*(\w+),\s*(\d+),\s*(\d+),\s*(\w+),\s*(\w+)\)/)
|
||||||
|
{
|
||||||
|
push @{ $catalog{toasting} },
|
||||||
|
{
|
||||||
|
parent_table => $1,
|
||||||
|
toast_oid => $2,
|
||||||
|
toast_index_oid => $3,
|
||||||
|
toast_oid_macro => $4,
|
||||||
|
toast_index_oid_macro => $5
|
||||||
|
};
|
||||||
|
}
|
||||||
elsif (
|
elsif (
|
||||||
/^DECLARE_(UNIQUE_)?INDEX(_PKEY)?\(\s*(\w+),\s*(\d+),\s*(\w+),\s*(.+)\)/)
|
/^DECLARE_(UNIQUE_)?INDEX(_PKEY)?\(\s*(\w+),\s*(\d+),\s*(\w+),\s*(.+)\)/)
|
||||||
{
|
{
|
||||||
|
@ -472,6 +472,16 @@ EOM
|
|||||||
$catalog->{rowtype_oid_macro}, $catalog->{rowtype_oid}
|
$catalog->{rowtype_oid_macro}, $catalog->{rowtype_oid}
|
||||||
if $catalog->{rowtype_oid_macro};
|
if $catalog->{rowtype_oid_macro};
|
||||||
|
|
||||||
|
# Likewise for macros for toast and index OIDs
|
||||||
|
foreach my $toast (@{ $catalog->{toasting} })
|
||||||
|
{
|
||||||
|
printf $def "#define %s %s\n",
|
||||||
|
$toast->{toast_oid_macro}, $toast->{toast_oid}
|
||||||
|
if $toast->{toast_oid_macro};
|
||||||
|
printf $def "#define %s %s\n",
|
||||||
|
$toast->{toast_index_oid_macro}, $toast->{toast_index_oid}
|
||||||
|
if $toast->{toast_index_oid_macro};
|
||||||
|
}
|
||||||
foreach my $index (@{ $catalog->{indexing} })
|
foreach my $index (@{ $catalog->{indexing} })
|
||||||
{
|
{
|
||||||
printf $def "#define %s %s\n",
|
printf $def "#define %s %s\n",
|
||||||
|
@ -55,9 +55,13 @@
|
|||||||
* need stable OIDs for shared relations, and that includes toast tables
|
* need stable OIDs for shared relations, and that includes toast tables
|
||||||
* of shared relations.
|
* of shared relations.
|
||||||
*
|
*
|
||||||
* The macro definition is just to keep the C compiler from spitting up.
|
* The DECLARE_TOAST_WITH_MACRO variant is used when C macros are needed
|
||||||
|
* for the toast table/index OIDs (usually only for shared catalogs).
|
||||||
|
*
|
||||||
|
* The macro definitions are just to keep the C compiler from spitting up.
|
||||||
*/
|
*/
|
||||||
#define DECLARE_TOAST(name,toastoid,indexoid) extern int no_such_variable
|
#define DECLARE_TOAST(name,toastoid,indexoid) extern int no_such_variable
|
||||||
|
#define DECLARE_TOAST_WITH_MACRO(name,toastoid,indexoid,toastoidmacro,indexoidmacro) extern int no_such_variable
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* These lines are processed by genbki.pl to create the statements
|
* These lines are processed by genbki.pl to create the statements
|
||||||
|
@ -55,9 +55,7 @@ CATALOG(pg_authid,1260,AuthIdRelationId) BKI_SHARED_RELATION BKI_ROWTYPE_OID(284
|
|||||||
*/
|
*/
|
||||||
typedef FormData_pg_authid *Form_pg_authid;
|
typedef FormData_pg_authid *Form_pg_authid;
|
||||||
|
|
||||||
DECLARE_TOAST(pg_authid, 4175, 4176);
|
DECLARE_TOAST_WITH_MACRO(pg_authid, 4175, 4176, PgAuthidToastTable, PgAuthidToastIndex);
|
||||||
#define PgAuthidToastTable 4175
|
|
||||||
#define PgAuthidToastIndex 4176
|
|
||||||
|
|
||||||
DECLARE_UNIQUE_INDEX(pg_authid_rolname_index, 2676, AuthIdRolnameIndexId, on pg_authid using btree(rolname name_ops));
|
DECLARE_UNIQUE_INDEX(pg_authid_rolname_index, 2676, AuthIdRolnameIndexId, on pg_authid using btree(rolname name_ops));
|
||||||
DECLARE_UNIQUE_INDEX_PKEY(pg_authid_oid_index, 2677, AuthIdOidIndexId, on pg_authid using btree(oid oid_ops));
|
DECLARE_UNIQUE_INDEX_PKEY(pg_authid_oid_index, 2677, AuthIdOidIndexId, on pg_authid using btree(oid oid_ops));
|
||||||
|
@ -86,9 +86,7 @@ CATALOG(pg_database,1262,DatabaseRelationId) BKI_SHARED_RELATION BKI_ROWTYPE_OID
|
|||||||
*/
|
*/
|
||||||
typedef FormData_pg_database *Form_pg_database;
|
typedef FormData_pg_database *Form_pg_database;
|
||||||
|
|
||||||
DECLARE_TOAST(pg_database, 4177, 4178);
|
DECLARE_TOAST_WITH_MACRO(pg_database, 4177, 4178, PgDatabaseToastTable, PgDatabaseToastIndex);
|
||||||
#define PgDatabaseToastTable 4177
|
|
||||||
#define PgDatabaseToastIndex 4178
|
|
||||||
|
|
||||||
DECLARE_UNIQUE_INDEX(pg_database_datname_index, 2671, DatabaseNameIndexId, on pg_database using btree(datname name_ops));
|
DECLARE_UNIQUE_INDEX(pg_database_datname_index, 2671, DatabaseNameIndexId, on pg_database using btree(datname name_ops));
|
||||||
DECLARE_UNIQUE_INDEX_PKEY(pg_database_oid_index, 2672, DatabaseOidIndexId, on pg_database using btree(oid oid_ops));
|
DECLARE_UNIQUE_INDEX_PKEY(pg_database_oid_index, 2672, DatabaseOidIndexId, on pg_database using btree(oid oid_ops));
|
||||||
|
@ -46,9 +46,7 @@ CATALOG(pg_db_role_setting,2964,DbRoleSettingRelationId) BKI_SHARED_RELATION
|
|||||||
|
|
||||||
typedef FormData_pg_db_role_setting * Form_pg_db_role_setting;
|
typedef FormData_pg_db_role_setting * Form_pg_db_role_setting;
|
||||||
|
|
||||||
DECLARE_TOAST(pg_db_role_setting, 2966, 2967);
|
DECLARE_TOAST_WITH_MACRO(pg_db_role_setting, 2966, 2967, PgDbRoleSettingToastTable, PgDbRoleSettingToastIndex);
|
||||||
#define PgDbRoleSettingToastTable 2966
|
|
||||||
#define PgDbRoleSettingToastIndex 2967
|
|
||||||
|
|
||||||
DECLARE_UNIQUE_INDEX_PKEY(pg_db_role_setting_databaseid_rol_index, 2965, DbRoleSettingDatidRolidIndexId, on pg_db_role_setting using btree(setdatabase oid_ops, setrole oid_ops));
|
DECLARE_UNIQUE_INDEX_PKEY(pg_db_role_setting_databaseid_rol_index, 2965, DbRoleSettingDatidRolidIndexId, on pg_db_role_setting using btree(setdatabase oid_ops, setrole oid_ops));
|
||||||
|
|
||||||
|
@ -48,9 +48,7 @@ CATALOG(pg_parameter_acl,8924,ParameterAclRelationId) BKI_SHARED_RELATION
|
|||||||
*/
|
*/
|
||||||
typedef FormData_pg_parameter_acl *Form_pg_parameter_acl;
|
typedef FormData_pg_parameter_acl *Form_pg_parameter_acl;
|
||||||
|
|
||||||
DECLARE_TOAST(pg_parameter_acl, 8925, 8926);
|
DECLARE_TOAST_WITH_MACRO(pg_parameter_acl, 8925, 8926, PgParameterAclToastTable, PgParameterAclToastIndex);
|
||||||
#define PgParameterAclToastTable 8925
|
|
||||||
#define PgParameterAclToastIndex 8926
|
|
||||||
|
|
||||||
DECLARE_UNIQUE_INDEX(pg_parameter_acl_parname_index, 8927, ParameterAclParnameIndexId, on pg_parameter_acl using btree(parname text_ops));
|
DECLARE_UNIQUE_INDEX(pg_parameter_acl_parname_index, 8927, ParameterAclParnameIndexId, on pg_parameter_acl using btree(parname text_ops));
|
||||||
DECLARE_UNIQUE_INDEX_PKEY(pg_parameter_acl_oid_index, 8928, ParameterAclOidIndexId, on pg_parameter_acl using btree(oid oid_ops));
|
DECLARE_UNIQUE_INDEX_PKEY(pg_parameter_acl_oid_index, 8928, ParameterAclOidIndexId, on pg_parameter_acl using btree(oid oid_ops));
|
||||||
|
@ -54,9 +54,7 @@ CATALOG(pg_replication_origin,6000,ReplicationOriginRelationId) BKI_SHARED_RELAT
|
|||||||
|
|
||||||
typedef FormData_pg_replication_origin *Form_pg_replication_origin;
|
typedef FormData_pg_replication_origin *Form_pg_replication_origin;
|
||||||
|
|
||||||
DECLARE_TOAST(pg_replication_origin, 4181, 4182);
|
DECLARE_TOAST_WITH_MACRO(pg_replication_origin, 4181, 4182, PgReplicationOriginToastTable, PgReplicationOriginToastIndex);
|
||||||
#define PgReplicationOriginToastTable 4181
|
|
||||||
#define PgReplicationOriginToastIndex 4182
|
|
||||||
|
|
||||||
DECLARE_UNIQUE_INDEX_PKEY(pg_replication_origin_roiident_index, 6001, ReplicationOriginIdentIndex, on pg_replication_origin using btree(roident oid_ops));
|
DECLARE_UNIQUE_INDEX_PKEY(pg_replication_origin_roiident_index, 6001, ReplicationOriginIdentIndex, on pg_replication_origin using btree(roident oid_ops));
|
||||||
DECLARE_UNIQUE_INDEX(pg_replication_origin_roname_index, 6002, ReplicationOriginNameIndex, on pg_replication_origin using btree(roname text_ops));
|
DECLARE_UNIQUE_INDEX(pg_replication_origin_roname_index, 6002, ReplicationOriginNameIndex, on pg_replication_origin using btree(roname text_ops));
|
||||||
|
@ -55,9 +55,7 @@ CATALOG(pg_shdescription,2396,SharedDescriptionRelationId) BKI_SHARED_RELATION
|
|||||||
*/
|
*/
|
||||||
typedef FormData_pg_shdescription * Form_pg_shdescription;
|
typedef FormData_pg_shdescription * Form_pg_shdescription;
|
||||||
|
|
||||||
DECLARE_TOAST(pg_shdescription, 2846, 2847);
|
DECLARE_TOAST_WITH_MACRO(pg_shdescription, 2846, 2847, PgShdescriptionToastTable, PgShdescriptionToastIndex);
|
||||||
#define PgShdescriptionToastTable 2846
|
|
||||||
#define PgShdescriptionToastIndex 2847
|
|
||||||
|
|
||||||
DECLARE_UNIQUE_INDEX_PKEY(pg_shdescription_o_c_index, 2397, SharedDescriptionObjIndexId, on pg_shdescription using btree(objoid oid_ops, classoid oid_ops));
|
DECLARE_UNIQUE_INDEX_PKEY(pg_shdescription_o_c_index, 2397, SharedDescriptionObjIndexId, on pg_shdescription using btree(objoid oid_ops, classoid oid_ops));
|
||||||
|
|
||||||
|
@ -39,9 +39,7 @@ CATALOG(pg_shseclabel,3592,SharedSecLabelRelationId) BKI_SHARED_RELATION BKI_ROW
|
|||||||
|
|
||||||
typedef FormData_pg_shseclabel * Form_pg_shseclabel;
|
typedef FormData_pg_shseclabel * Form_pg_shseclabel;
|
||||||
|
|
||||||
DECLARE_TOAST(pg_shseclabel, 4060, 4061);
|
DECLARE_TOAST_WITH_MACRO(pg_shseclabel, 4060, 4061, PgShseclabelToastTable, PgShseclabelToastIndex);
|
||||||
#define PgShseclabelToastTable 4060
|
|
||||||
#define PgShseclabelToastIndex 4061
|
|
||||||
|
|
||||||
DECLARE_UNIQUE_INDEX_PKEY(pg_shseclabel_object_index, 3593, SharedSecLabelObjectIndexId, on pg_shseclabel using btree(objoid oid_ops, classoid oid_ops, provider text_ops));
|
DECLARE_UNIQUE_INDEX_PKEY(pg_shseclabel_object_index, 3593, SharedSecLabelObjectIndexId, on pg_shseclabel using btree(objoid oid_ops, classoid oid_ops, provider text_ops));
|
||||||
|
|
||||||
|
@ -92,9 +92,7 @@ CATALOG(pg_subscription,6100,SubscriptionRelationId) BKI_SHARED_RELATION BKI_ROW
|
|||||||
|
|
||||||
typedef FormData_pg_subscription *Form_pg_subscription;
|
typedef FormData_pg_subscription *Form_pg_subscription;
|
||||||
|
|
||||||
DECLARE_TOAST(pg_subscription, 4183, 4184);
|
DECLARE_TOAST_WITH_MACRO(pg_subscription, 4183, 4184, PgSubscriptionToastTable, PgSubscriptionToastIndex);
|
||||||
#define PgSubscriptionToastTable 4183
|
|
||||||
#define PgSubscriptionToastIndex 4184
|
|
||||||
|
|
||||||
DECLARE_UNIQUE_INDEX_PKEY(pg_subscription_oid_index, 6114, SubscriptionObjectIndexId, on pg_subscription using btree(oid oid_ops));
|
DECLARE_UNIQUE_INDEX_PKEY(pg_subscription_oid_index, 6114, SubscriptionObjectIndexId, on pg_subscription using btree(oid oid_ops));
|
||||||
DECLARE_UNIQUE_INDEX(pg_subscription_subname_index, 6115, SubscriptionNameIndexId, on pg_subscription using btree(subdbid oid_ops, subname name_ops));
|
DECLARE_UNIQUE_INDEX(pg_subscription_subname_index, 6115, SubscriptionNameIndexId, on pg_subscription using btree(subdbid oid_ops, subname name_ops));
|
||||||
|
@ -47,9 +47,7 @@ CATALOG(pg_tablespace,1213,TableSpaceRelationId) BKI_SHARED_RELATION
|
|||||||
*/
|
*/
|
||||||
typedef FormData_pg_tablespace *Form_pg_tablespace;
|
typedef FormData_pg_tablespace *Form_pg_tablespace;
|
||||||
|
|
||||||
DECLARE_TOAST(pg_tablespace, 4185, 4186);
|
DECLARE_TOAST_WITH_MACRO(pg_tablespace, 4185, 4186, PgTablespaceToastTable, PgTablespaceToastIndex);
|
||||||
#define PgTablespaceToastTable 4185
|
|
||||||
#define PgTablespaceToastIndex 4186
|
|
||||||
|
|
||||||
DECLARE_UNIQUE_INDEX_PKEY(pg_tablespace_oid_index, 2697, TablespaceOidIndexId, on pg_tablespace using btree(oid oid_ops));
|
DECLARE_UNIQUE_INDEX_PKEY(pg_tablespace_oid_index, 2697, TablespaceOidIndexId, on pg_tablespace using btree(oid oid_ops));
|
||||||
DECLARE_UNIQUE_INDEX(pg_tablespace_spcname_index, 2698, TablespaceNameIndexId, on pg_tablespace using btree(spcname name_ops));
|
DECLARE_UNIQUE_INDEX(pg_tablespace_spcname_index, 2698, TablespaceNameIndexId, on pg_tablespace using btree(spcname name_ops));
|
||||||
|
@ -140,14 +140,33 @@ foreach my $input_file (@header_files)
|
|||||||
$changed = 1;
|
$changed = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif (
|
elsif ($line =~ m/^(DECLARE_TOAST_WITH_MACRO\(\s*\w+,\s*)(\d+)(,\s*)(\d+)(,\s*\w+,\s*\w+)\)/)
|
||||||
$line =~ m/^(DECLARE_(UNIQUE_)?INDEX\(\s*\w+,\s*)(\d+)(,\s*.+)\)/)
|
|
||||||
{
|
{
|
||||||
if (exists $maphash{$3})
|
my $oid2 = $2;
|
||||||
|
my $oid4 = $4;
|
||||||
|
if (exists $maphash{$oid2})
|
||||||
{
|
{
|
||||||
my $repl = $1 . $maphash{$3} . $4 . ")";
|
$oid2 = $maphash{$oid2};
|
||||||
|
my $repl = $1 . $oid2 . $3 . $oid4 . $5 . ")";
|
||||||
|
$line =~ s/^DECLARE_TOAST_WITH_MACRO\(\s*\w+,\s*\d+,\s*\d+,\s*\w+,\s*\w+\)/$repl/;
|
||||||
|
$changed = 1;
|
||||||
|
}
|
||||||
|
if (exists $maphash{$oid4})
|
||||||
|
{
|
||||||
|
$oid4 = $maphash{$oid4};
|
||||||
|
my $repl = $1 . $oid2 . $3 . $oid4 . $5 . ")";
|
||||||
|
$line =~ s/^DECLARE_TOAST_WITH_MACRO\(\s*\w+,\s*\d+,\s*\d+,\s*\w+,\s*\w+\)/$repl/;
|
||||||
|
$changed = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elsif (
|
||||||
|
$line =~ m/^(DECLARE_(UNIQUE_)?INDEX(_PKEY)?\(\s*\w+,\s*)(\d+)(,\s*.+)\)/)
|
||||||
|
{
|
||||||
|
if (exists $maphash{$4})
|
||||||
|
{
|
||||||
|
my $repl = $1 . $maphash{$4} . $5 . ")";
|
||||||
$line =~
|
$line =~
|
||||||
s/^DECLARE_(UNIQUE_)?INDEX\(\s*\w+,\s*\d+,\s*.+\)/$repl/;
|
s/^DECLARE_(UNIQUE_)?INDEX(_PKEY)?\(\s*\w+,\s*\d+,\s*.+\)/$repl/;
|
||||||
$changed = 1;
|
$changed = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user