From 9373baa0f764392c504df034afd2f6b178c29491 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Thu, 21 Dec 2017 19:07:32 -0300 Subject: [PATCH] Minor edits to catalog files and scripts This fixes a few typos and small mistakes; it also cleans a few minor stylistic issues. The biggest functional change is that Gen_fmgrtab.pl no longer knows the OID of language 'internal'. Author: John Naylor Discussion: https://postgr.es/m/CAJVSVGXAkwbk-A9QHHHf00N905kKisyQbaYwKqaRpze_gPXGfg@mail.gmail.com --- src/backend/catalog/Catalog.pm | 22 ++++----- src/backend/catalog/Makefile | 2 +- src/backend/catalog/genbki.pl | 55 ++++++++++++---------- src/backend/utils/Gen_fmgrtab.pl | 11 +++-- src/include/catalog/pg_partitioned_table.h | 2 +- src/include/catalog/pg_sequence.h | 10 ++++ src/include/catalog/pg_statistic.h | 10 ++-- src/include/catalog/pg_subscription_rel.h | 5 +- 8 files changed, 62 insertions(+), 55 deletions(-) diff --git a/src/backend/catalog/Catalog.pm b/src/backend/catalog/Catalog.pm index 54f83533b6..80bd9771f1 100644 --- a/src/backend/catalog/Catalog.pm +++ b/src/backend/catalog/Catalog.pm @@ -16,11 +16,6 @@ package Catalog; use strict; use warnings; -require Exporter; -our @ISA = qw(Exporter); -our @EXPORT = (); -our @EXPORT_OK = qw(Catalogs SplitDataLine RenameTempFile FindDefinedSymbol); - # Call this function with an array of names of header files to parse. # Returns a nested data structure describing the data in the headers. sub Catalogs @@ -36,7 +31,8 @@ sub Catalogs 'int64' => 'int8', 'Oid' => 'oid', 'NameData' => 'name', - 'TransactionId' => 'xid'); + 'TransactionId' => 'xid', + 'XLogRecPtr' => 'pg_lsn'); foreach my $input_file (@_) { @@ -162,7 +158,7 @@ sub Catalogs /BKI_WITHOUT_OIDS/ ? ' without_oids' : ''; $catalog{rowtype_oid} = /BKI_ROWTYPE_OID\((\d+)\)/ ? " rowtype_oid $1" : ''; - $catalog{schema_macro} = /BKI_SCHEMA_MACRO/ ? 'True' : ''; + $catalog{schema_macro} = /BKI_SCHEMA_MACRO/ ? 1 : 0; $declaring_attributes = 1; } elsif ($declaring_attributes) @@ -175,7 +171,7 @@ sub Catalogs } else { - my %row; + my %column; my ($atttype, $attname, $attopt) = split /\s+/, $_; die "parse error ($input_file)" unless $attname; if (exists $RENAME_ATTTYPE{$atttype}) @@ -188,18 +184,18 @@ sub Catalogs $atttype .= '[]'; # variable-length only } - $row{'type'} = $atttype; - $row{'name'} = $attname; + $column{type} = $atttype; + $column{name} = $attname; if (defined $attopt) { if ($attopt eq 'BKI_FORCE_NULL') { - $row{'forcenull'} = 1; + $column{forcenull} = 1; } elsif ($attopt eq 'BKI_FORCE_NOT_NULL') { - $row{'forcenotnull'} = 1; + $column{forcenotnull} = 1; } else { @@ -207,7 +203,7 @@ sub Catalogs "unknown column option $attopt on column $attname"; } } - push @{ $catalog{columns} }, \%row; + push @{ $catalog{columns} }, \%column; } } } diff --git a/src/backend/catalog/Makefile b/src/backend/catalog/Makefile index fd33426bad..30ca509534 100644 --- a/src/backend/catalog/Makefile +++ b/src/backend/catalog/Makefile @@ -45,7 +45,7 @@ POSTGRES_BKI_SRCS = $(addprefix $(top_srcdir)/src/include/catalog/,\ pg_default_acl.h pg_init_privs.h pg_seclabel.h pg_shseclabel.h \ pg_collation.h pg_partitioned_table.h pg_range.h pg_transform.h \ pg_sequence.h pg_publication.h pg_publication_rel.h pg_subscription.h \ - pg_subscription_rel.h toasting.h indexing.h \ + pg_subscription_rel.h \ toasting.h indexing.h \ ) diff --git a/src/backend/catalog/genbki.pl b/src/backend/catalog/genbki.pl index e4a0b8b2c7..5b5b04f41c 100644 --- a/src/backend/catalog/genbki.pl +++ b/src/backend/catalog/genbki.pl @@ -20,7 +20,7 @@ use strict; use warnings; my @input_files; -our @include_path; +my @include_path; my $output_path = ''; my $major_version; @@ -105,7 +105,7 @@ print $bki "# PostgreSQL $major_version\n"; my %schemapg_entries; my @tables_needing_macros; my %regprocoids; -our @types; +my @types; # produce output, one catalog at a time foreach my $catname (@{ $catalogs->{names} }) @@ -124,7 +124,8 @@ foreach my $catname (@{ $catalogs->{names} }) my $first = 1; print $bki " (\n"; - foreach my $column (@{ $catalog->{columns} }) + my $schema = $catalog->{columns}; + foreach my $column (@$schema) { my $attname = $column->{name}; my $atttype = $column->{type}; @@ -150,8 +151,9 @@ foreach my $catname (@{ $catalogs->{names} }) } print $bki "\n )\n"; - # open it, unless bootstrap case (create bootstrap does this automatically) - if ($catalog->{bootstrap} eq '') + # Open it, unless bootstrap case (create bootstrap does this + # automatically) + if (!$catalog->{bootstrap}) { print $bki "open $catname\n"; } @@ -169,21 +171,23 @@ foreach my $catname (@{ $catalogs->{names} }) Catalog::SplitDataLine($row->{bki_values}); # Perform required substitutions on fields - foreach my $att (keys %bki_values) + foreach my $column (@$schema) { + my $attname = $column->{name}; + my $atttype = $column->{type}; # Substitute constant values we acquired above. # (It's intentional that this can apply to parts of a field). - $bki_values{$att} =~ s/\bPGUID\b/$BOOTSTRAP_SUPERUSERID/g; - $bki_values{$att} =~ s/\bPGNSP\b/$PG_CATALOG_NAMESPACE/g; + $bki_values{$attname} =~ s/\bPGUID\b/$BOOTSTRAP_SUPERUSERID/g; + $bki_values{$attname} =~ s/\bPGNSP\b/$PG_CATALOG_NAMESPACE/g; # Replace regproc columns' values with OIDs. # If we don't have a unique value to substitute, # just do nothing (regprocin will complain). - if ($bki_attr{$att}->{type} eq 'regproc') + if ($atttype eq 'regproc') { - my $procoid = $regprocoids{ $bki_values{$att} }; - $bki_values{$att} = $procoid + my $procoid = $regprocoids{ $bki_values{$attname} }; + $bki_values{$attname} = $procoid if defined($procoid) && $procoid ne 'MULTIPLE'; } } @@ -215,16 +219,17 @@ foreach my $catname (@{ $catalogs->{names} }) printf $bki "insert %s( %s )\n", $oid, join(' ', @bki_values{@attnames}); - # Write comments to postgres.description and postgres.shdescription + # Write comments to postgres.description and + # postgres.shdescription if (defined $row->{descr}) { - printf $descr "%s\t%s\t0\t%s\n", $row->{oid}, $catname, - $row->{descr}; + printf $descr "%s\t%s\t0\t%s\n", + $row->{oid}, $catname, $row->{descr}; } if (defined $row->{shdescr}) { - printf $shdescr "%s\t%s\t%s\n", $row->{oid}, $catname, - $row->{shdescr}; + printf $shdescr "%s\t%s\t%s\n", + $row->{oid}, $catname, $row->{shdescr}; } } } @@ -240,11 +245,10 @@ foreach my $catname (@{ $catalogs->{names} }) # Currently, all bootstrapped relations also need schemapg.h # entries, so skip if the relation isn't to be in schemapg.h. - next if $table->{schema_macro} ne 'True'; + next if !$table->{schema_macro}; $schemapg_entries{$table_name} = []; push @tables_needing_macros, $table_name; - my $is_bootstrap = $table->{bootstrap}; # Generate entries for user attributes. my $attnum = 0; @@ -259,7 +263,7 @@ foreach my $catname (@{ $catalogs->{names} }) $priornotnull &= ($row->{attnotnull} eq 't'); # If it's bootstrapped, put an entry in postgres.bki. - if ($is_bootstrap eq ' bootstrap') + if ($table->{bootstrap}) { bki_insert($row, @attnames); } @@ -268,15 +272,14 @@ foreach my $catname (@{ $catalogs->{names} }) $row = emit_schemapg_row($row, grep { $bki_attr{$_}{type} eq 'bool' } @attnames); - push @{ $schemapg_entries{$table_name} }, '{ ' - . join( - ', ', grep { defined $_ } - map $row->{$_}, @attnames) . ' }'; + push @{ $schemapg_entries{$table_name} }, + sprintf "{ %s }", + join(', ', grep { defined $_ } @{$row}{@attnames}); } # Generate entries for system attributes. # We only need postgres.bki entries, not schemapg.h entries. - if ($is_bootstrap eq ' bootstrap') + if ($table->{bootstrap}) { $attnum = 0; my @SYS_ATTRS = ( @@ -294,9 +297,9 @@ foreach my $catname (@{ $catalogs->{names} }) $row->{attnum} = $attnum; $row->{attstattarget} = '0'; - # some catalogs don't have oids + # Omit the oid column if the catalog doesn't have them next - if $table->{without_oids} eq ' without_oids' + if $table->{without_oids} && $row->{attname} eq 'oid'; bki_insert($row, @attnames); diff --git a/src/backend/utils/Gen_fmgrtab.pl b/src/backend/utils/Gen_fmgrtab.pl index 26b428b11e..14c02f5b57 100644 --- a/src/backend/utils/Gen_fmgrtab.pl +++ b/src/backend/utils/Gen_fmgrtab.pl @@ -2,7 +2,8 @@ #------------------------------------------------------------------------- # # Gen_fmgrtab.pl -# Perl script that generates fmgroids.h and fmgrtab.c from pg_proc.h +# Perl script that generates fmgroids.h, fmgrprotos.h, and fmgrtab.c +# from pg_proc.h # # Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group # Portions Copyright (c) 1994, Regents of the University of California @@ -56,6 +57,8 @@ die "No include path; you must specify -I at least once.\n" if !@include_path; my $FirstBootstrapObjectId = Catalog::FindDefinedSymbol('access/transam.h', \@include_path, 'FirstBootstrapObjectId'); +my $INTERNALlanguageId = + Catalog::FindDefinedSymbol('catalog/pg_language.h', \@include_path, 'INTERNALlanguageId'); # Read all the data from the include/catalog files. my $catalogs = Catalog::Catalogs($infile); @@ -77,8 +80,7 @@ foreach my $row (@$data) @bki_values{@attnames} = Catalog::SplitDataLine($row->{bki_values}); # Select out just the rows for internal-language procedures. - # Note assumption here that INTERNALlanguageId is 12. - next if $bki_values{prolang} ne '12'; + next if $bki_values{prolang} ne $INTERNALlanguageId; push @fmgr, { oid => $row->{oid}, @@ -281,7 +283,8 @@ sub usage die <. EOM diff --git a/src/include/catalog/pg_partitioned_table.h b/src/include/catalog/pg_partitioned_table.h index 525e541f93..731147ecbf 100644 --- a/src/include/catalog/pg_partitioned_table.h +++ b/src/include/catalog/pg_partitioned_table.h @@ -10,7 +10,7 @@ * src/include/catalog/pg_partitioned_table.h * * NOTES - * the genbki.sh script reads this file and generates .bki + * the genbki.pl script reads this file and generates .bki * information from the DATA() statements. * *------------------------------------------------------------------------- diff --git a/src/include/catalog/pg_sequence.h b/src/include/catalog/pg_sequence.h index 8ae6b7143d..6de54bb665 100644 --- a/src/include/catalog/pg_sequence.h +++ b/src/include/catalog/pg_sequence.h @@ -1,3 +1,13 @@ +/* ------------------------------------------------------------------------- + * + * pg_sequence.h + * definition of the system "sequence" relation (pg_sequence) + * + * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * ------------------------------------------------------------------------- + */ #ifndef PG_SEQUENCE_H #define PG_SEQUENCE_H diff --git a/src/include/catalog/pg_statistic.h b/src/include/catalog/pg_statistic.h index 3713a56bbd..43128f1928 100644 --- a/src/include/catalog/pg_statistic.h +++ b/src/include/catalog/pg_statistic.h @@ -161,12 +161,10 @@ typedef FormData_pg_statistic *Form_pg_statistic; #define Anum_pg_statistic_stavalues5 26 /* - * Currently, five statistical slot "kinds" are defined by core PostgreSQL, - * as documented below. Additional "kinds" will probably appear in - * future to help cope with non-scalar datatypes. Also, custom data types - * can define their own "kind" codes by mutual agreement between a custom - * typanalyze routine and the selectivity estimation functions of the type's - * operators. + * Several statistical slot "kinds" are defined by core PostgreSQL, as + * documented below. Also, custom data types can define their own "kind" + * codes by mutual agreement between a custom typanalyze routine and the + * selectivity estimation functions of the type's operators. * * Code reading the pg_statistic relation should not assume that a particular * data "kind" will appear in any particular slot. Instead, search the diff --git a/src/include/catalog/pg_subscription_rel.h b/src/include/catalog/pg_subscription_rel.h index 991ca9d552..57482972fb 100644 --- a/src/include/catalog/pg_subscription_rel.h +++ b/src/include/catalog/pg_subscription_rel.h @@ -23,15 +23,12 @@ */ #define SubscriptionRelRelationId 6102 -/* Workaround for genbki not knowing about XLogRecPtr */ -#define pg_lsn XLogRecPtr - CATALOG(pg_subscription_rel,6102) BKI_WITHOUT_OIDS { Oid srsubid; /* Oid of subscription */ Oid srrelid; /* Oid of relation */ char srsubstate; /* state of the relation in subscription */ - pg_lsn srsublsn; /* remote lsn of the state change used for + XLogRecPtr srsublsn; /* remote lsn of the state change used for * synchronization coordination */ } FormData_pg_subscription_rel; -- 2.40.0