Use DECLARE_TOAST_WITH_MACRO() to simplify toast-table declarations.
authorTom Lane <[email protected]>
Thu, 21 Apr 2022 16:02:23 +0000 (12:02 -0400)
committerTom Lane <[email protected]>
Thu, 21 Apr 2022 16:02:23 +0000 (12:02 -0400)
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

13 files changed:
src/backend/catalog/Catalog.pm
src/backend/catalog/genbki.pl
src/include/catalog/genbki.h
src/include/catalog/pg_authid.h
src/include/catalog/pg_database.h
src/include/catalog/pg_db_role_setting.h
src/include/catalog/pg_parameter_acl.h
src/include/catalog/pg_replication_origin.h
src/include/catalog/pg_shdescription.h
src/include/catalog/pg_shseclabel.h
src/include/catalog/pg_subscription.h
src/include/catalog/pg_tablespace.h
src/include/catalog/renumber_oids.pl

index dbc3f87e28cbad6254fce2b53ea2c3b34459ce9d..0275795dea44f1b75cb772f96a1c3ce54fba5712 100644 (file)
@@ -94,6 +94,17 @@ sub ParseHeader
            push @{ $catalog{toasting} },
              { 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 (
            /^DECLARE_(UNIQUE_)?INDEX(_PKEY)?\(\s*(\w+),\s*(\d+),\s*(\w+),\s*(.+)\)/)
        {
index 2dfcdc5dad5e9efdff686680ddd2aad8de6727f2..2d02b0226707275efbabe003f3f6eee4bd2edd1e 100644 (file)
@@ -472,6 +472,16 @@ EOM
      $catalog->{rowtype_oid_macro}, $catalog->{rowtype_oid}
      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} })
    {
        printf $def "#define %s %s\n",
index 9fb0d2c83d3bc8e05a95755160209359c6c26493..4ecd76f4be7e1312e4b88782a2f2799780085e7f 100644 (file)
  * need stable OIDs for shared relations, and that includes toast tables
  * 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_WITH_MACRO(name,toastoid,indexoid,toastoidmacro,indexoidmacro) extern int no_such_variable
 
 /*
  * These lines are processed by genbki.pl to create the statements
index 4b65e39a1f9660ea643807b6eca9978d608880f1..3512601c80979c39792154d3e13681602bf1417d 100644 (file)
@@ -55,9 +55,7 @@ CATALOG(pg_authid,1260,AuthIdRelationId) BKI_SHARED_RELATION BKI_ROWTYPE_OID(284
  */
 typedef FormData_pg_authid *Form_pg_authid;
 
-DECLARE_TOAST(pg_authid, 4175, 4176);
-#define PgAuthidToastTable 4175
-#define PgAuthidToastIndex 4176
+DECLARE_TOAST_WITH_MACRO(pg_authid, 4175, 4176, PgAuthidToastTable, PgAuthidToastIndex);
 
 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));
index a9f4a8071f68292ccf30acbf153fd6c1ea29cc66..e10e91c0af1b6550d25fa388d951c9820f631e82 100644 (file)
@@ -86,9 +86,7 @@ CATALOG(pg_database,1262,DatabaseRelationId) BKI_SHARED_RELATION BKI_ROWTYPE_OID
  */
 typedef FormData_pg_database *Form_pg_database;
 
-DECLARE_TOAST(pg_database, 4177, 4178);
-#define PgDatabaseToastTable 4177
-#define PgDatabaseToastIndex 4178
+DECLARE_TOAST_WITH_MACRO(pg_database, 4177, 4178, PgDatabaseToastTable, PgDatabaseToastIndex);
 
 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));
index ae5cc4365e40ff74de6e7fae0bc20aab30c07b70..45d478e9e7996978cd03d3f5b25c5292a6008858 100644 (file)
@@ -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;
 
-DECLARE_TOAST(pg_db_role_setting, 2966, 2967);
-#define PgDbRoleSettingToastTable 2966
-#define PgDbRoleSettingToastIndex 2967
+DECLARE_TOAST_WITH_MACRO(pg_db_role_setting, 2966, 2967, PgDbRoleSettingToastTable, PgDbRoleSettingToastIndex);
 
 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));
 
index 8316391e51ce57fe85f04e5aa4a5cda68f4c08e1..263079c9e1ded4918f30452a8ce18f510480d54d 100644 (file)
@@ -48,9 +48,7 @@ CATALOG(pg_parameter_acl,8924,ParameterAclRelationId) BKI_SHARED_RELATION
  */
 typedef FormData_pg_parameter_acl *Form_pg_parameter_acl;
 
-DECLARE_TOAST(pg_parameter_acl, 8925, 8926);
-#define PgParameterAclToastTable 8925
-#define PgParameterAclToastIndex 8926
+DECLARE_TOAST_WITH_MACRO(pg_parameter_acl, 8925, 8926, PgParameterAclToastTable, PgParameterAclToastIndex);
 
 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));
index 5dcf1dafe3438a521e1d4d2dc65fa2c202ec3d6c..3b11cd21cb9f1e1ee2927fcf2262b08a6aac6548 100644 (file)
@@ -54,9 +54,7 @@ CATALOG(pg_replication_origin,6000,ReplicationOriginRelationId) BKI_SHARED_RELAT
 
 typedef FormData_pg_replication_origin *Form_pg_replication_origin;
 
-DECLARE_TOAST(pg_replication_origin, 4181, 4182);
-#define PgReplicationOriginToastTable 4181
-#define PgReplicationOriginToastIndex 4182
+DECLARE_TOAST_WITH_MACRO(pg_replication_origin, 4181, 4182, PgReplicationOriginToastTable, PgReplicationOriginToastIndex);
 
 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));
index 1e354b29c2d435574b2670b5d0722ea43636d08d..da2b9f6fdff9f48d1a238b14c18470e1a74db576 100644 (file)
@@ -55,9 +55,7 @@ CATALOG(pg_shdescription,2396,SharedDescriptionRelationId) BKI_SHARED_RELATION
  */
 typedef FormData_pg_shdescription * Form_pg_shdescription;
 
-DECLARE_TOAST(pg_shdescription, 2846, 2847);
-#define PgShdescriptionToastTable 2846
-#define PgShdescriptionToastIndex 2847
+DECLARE_TOAST_WITH_MACRO(pg_shdescription, 2846, 2847, PgShdescriptionToastTable, PgShdescriptionToastIndex);
 
 DECLARE_UNIQUE_INDEX_PKEY(pg_shdescription_o_c_index, 2397, SharedDescriptionObjIndexId, on pg_shdescription using btree(objoid oid_ops, classoid oid_ops));
 
index 6f6bd9da2f9595b4cb1f344f892fe39af1b4ab8f..fc1b97f46ff5329fa209eb687f398b009fb8df6e 100644 (file)
@@ -39,9 +39,7 @@ CATALOG(pg_shseclabel,3592,SharedSecLabelRelationId) BKI_SHARED_RELATION BKI_ROW
 
 typedef FormData_pg_shseclabel * Form_pg_shseclabel;
 
-DECLARE_TOAST(pg_shseclabel, 4060, 4061);
-#define PgShseclabelToastTable 4060
-#define PgShseclabelToastIndex 4061
+DECLARE_TOAST_WITH_MACRO(pg_shseclabel, 4060, 4061, PgShseclabelToastTable, PgShseclabelToastIndex);
 
 DECLARE_UNIQUE_INDEX_PKEY(pg_shseclabel_object_index, 3593, SharedSecLabelObjectIndexId, on pg_shseclabel using btree(objoid oid_ops, classoid oid_ops, provider text_ops));
 
index f006a92612a24d2221f01165aaca065bc1c7ca4e..d1260f590cf51f91bc7e3dcf462a6ec76cde2978 100644 (file)
@@ -92,9 +92,7 @@ CATALOG(pg_subscription,6100,SubscriptionRelationId) BKI_SHARED_RELATION BKI_ROW
 
 typedef FormData_pg_subscription *Form_pg_subscription;
 
-DECLARE_TOAST(pg_subscription, 4183, 4184);
-#define PgSubscriptionToastTable 4183
-#define PgSubscriptionToastIndex 4184
+DECLARE_TOAST_WITH_MACRO(pg_subscription, 4183, 4184, PgSubscriptionToastTable, PgSubscriptionToastIndex);
 
 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));
index 58c1cfa605f985031379f5ec2388d7adbd36a946..572eeeb8a65eda424e56f8e1fc2ae41a634d0186 100644 (file)
@@ -47,9 +47,7 @@ CATALOG(pg_tablespace,1213,TableSpaceRelationId) BKI_SHARED_RELATION
  */
 typedef FormData_pg_tablespace *Form_pg_tablespace;
 
-DECLARE_TOAST(pg_tablespace, 4185, 4186);
-#define PgTablespaceToastTable 4185
-#define PgTablespaceToastIndex 4186
+DECLARE_TOAST_WITH_MACRO(pg_tablespace, 4185, 4186, PgTablespaceToastTable, PgTablespaceToastIndex);
 
 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));
index d959c2de0f3e515fcab2ac32e17ad8e0f00caa4c..7de13da4bdd2afba94368263056c5b352afab4be 100755 (executable)
@@ -140,14 +140,33 @@ foreach my $input_file (@header_files)
                $changed = 1;
            }
        }
+       elsif ($line =~ m/^(DECLARE_TOAST_WITH_MACRO\(\s*\w+,\s*)(\d+)(,\s*)(\d+)(,\s*\w+,\s*\w+)\)/)
+       {
+           my $oid2 = $2;
+           my $oid4 = $4;
+           if (exists $maphash{$oid2})
+           {
+               $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\(\s*\w+,\s*)(\d+)(,\s*.+)\)/)
+           $line =~ m/^(DECLARE_(UNIQUE_)?INDEX(_PKEY)?\(\s*\w+,\s*)(\d+)(,\s*.+)\)/)
        {
-           if (exists $maphash{$3})
+           if (exists $maphash{$4})
            {
-               my $repl = $1 . $maphash{$3} . $4 . ")";
+               my $repl = $1 . $maphash{$4} . $5 . ")";
                $line =~
-                 s/^DECLARE_(UNIQUE_)?INDEX\(\s*\w+,\s*\d+,\s*.+\)/$repl/;
+                 s/^DECLARE_(UNIQUE_)?INDEX(_PKEY)?\(\s*\w+,\s*\d+,\s*.+\)/$repl/;
                $changed = 1;
            }
        }