From e7a808f947c66e2e2186c9495359865dadaf511a Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 19 May 2018 16:04:47 -0400 Subject: [PATCH] Assorted minor cleanups for bootstrap-data Perl scripts. FindDefinedSymbol was intended to take an array of possible include paths, but it never actually worked correctly for any but the first array element. Since there's no use-case for more than one path anyway, let's just simplify this code and its callers by redefining it as taking only one include path. Minor other code-beautification without functional effects, except that in one place we format the output as pgindent would do. John Naylor Discussion: https://postgr.es/m/CAJVSVGXM_n32hTTkircW4_K1LQFsJNb6xjs0pAP4QC0ZpyJfPQ@mail.gmail.com --- src/backend/catalog/Catalog.pm | 38 +++++++++++------------- src/backend/catalog/genbki.pl | 5 ++-- src/backend/utils/Gen_fmgrtab.pl | 32 ++++++++++---------- src/include/catalog/reformat_dat_file.pl | 1 - src/include/catalog/unused_oids | 2 +- 5 files changed, 36 insertions(+), 42 deletions(-) diff --git a/src/backend/catalog/Catalog.pm b/src/backend/catalog/Catalog.pm index c8dc956e0b..95bf619c91 100644 --- a/src/backend/catalog/Catalog.pm +++ b/src/backend/catalog/Catalog.pm @@ -198,7 +198,7 @@ sub ParseHeader else { die - "unknown column option $attopt on column $attname"; + "unknown or misformatted column option $attopt on column $attname"; } if ($column{forcenull} and $column{forcenotnull}) @@ -370,34 +370,30 @@ sub RenameTempFile } # Find a symbol defined in a particular header file and extract the value. -# -# The include path has to be passed as a reference to an array. +# include_path should be the path to src/include/. sub FindDefinedSymbol { my ($catalog_header, $include_path, $symbol) = @_; + my $value; - for my $path (@$include_path) + # Make sure include path ends in a slash. + if (substr($include_path, -1) ne '/') { - - # Make sure include path ends in a slash. - if (substr($path, -1) ne '/') - { - $path .= '/'; - } - my $file = $path . $catalog_header; - next if !-f $file; - open(my $find_defined_symbol, '<', $file) || die "$file: $!"; - while (<$find_defined_symbol>) + $include_path .= '/'; + } + my $file = $include_path . $catalog_header; + open(my $find_defined_symbol, '<', $file) || die "$file: $!"; + while (<$find_defined_symbol>) + { + if (/^#define\s+\Q$symbol\E\s+(\S+)/) { - if (/^#define\s+\Q$symbol\E\s+(\S+)/) - { - return $1; - } + $value = $1; + last; } - close $find_defined_symbol; - die "$file: no definition found for $symbol\n"; } - die "$catalog_header: not found in any include directory\n"; + close $find_defined_symbol; + return $value if defined $value; + die "$file: no definition found for $symbol\n"; } # Similar to FindDefinedSymbol, but looks in the bootstrap metadata. diff --git a/src/backend/catalog/genbki.pl b/src/backend/catalog/genbki.pl index fb61db0a05..ebdc919414 100644 --- a/src/backend/catalog/genbki.pl +++ b/src/backend/catalog/genbki.pl @@ -357,8 +357,7 @@ EOM } # Emit Anum_* constants - print $def - sprintf("#define Anum_%s_%s %s\n", $catname, $attname, $attnum); + printf $def "#define Anum_%s_%s %s\n", $catname, $attname, $attnum; } print $bki "\n )\n"; @@ -493,7 +492,7 @@ EOM } print $bki "close $catname\n"; - print $def sprintf("\n#endif\t\t\t\t\t\t\t/* %s_D_H */\n", uc $catname); + printf $def "\n#endif\t\t\t\t\t\t\t/* %s_D_H */\n", uc $catname; # Close and rename definition header close $def; diff --git a/src/backend/utils/Gen_fmgrtab.pl b/src/backend/utils/Gen_fmgrtab.pl index 1cbc250e0c..fa30436895 100644 --- a/src/backend/utils/Gen_fmgrtab.pl +++ b/src/backend/utils/Gen_fmgrtab.pl @@ -22,7 +22,7 @@ use warnings; # Collect arguments my @input_files; my $output_path = ''; -my @include_path; +my $include_path; while (@ARGV) { @@ -37,7 +37,7 @@ while (@ARGV) } elsif ($arg =~ /^-I/) { - push @include_path, length($arg) > 2 ? substr($arg, 2) : shift @ARGV; + $include_path = length($arg) > 2 ? substr($arg, 2) : shift @ARGV; } else { @@ -52,8 +52,8 @@ if ($output_path ne '' && substr($output_path, -1) ne '/') } # Sanity check arguments. -die "No input files.\n" if !@input_files; -die "No include path; you must specify -I at least once.\n" if !@include_path; +die "No input files.\n" if !@input_files; +die "No include path; you must specify -I.\n" if !$include_path; # Read all the input files into internal data structures. # Note: We pass data file names as arguments and then look for matching @@ -80,7 +80,7 @@ foreach my $datfile (@input_files) # Fetch some values for later. my $FirstBootstrapObjectId = - Catalog::FindDefinedSymbol('access/transam.h', \@include_path, + Catalog::FindDefinedSymbol('access/transam.h', $include_path, 'FirstBootstrapObjectId'); my $INTERNALlanguageId = Catalog::FindDefinedSymbolFromData($catalog_data{pg_language}, @@ -119,8 +119,8 @@ open my $pfh, '>', $protosfile . $tmpext open my $tfh, '>', $tabfile . $tmpext or die "Could not open $tabfile$tmpext: $!"; -print $ofh - qq|/*------------------------------------------------------------------------- +print $ofh <', $datfile or die "can't open $datfile: $!"; - # Write the data. foreach my $data (@{ $catalog_data{$catname} }) { diff --git a/src/include/catalog/unused_oids b/src/include/catalog/unused_oids index 2780de052c..c5fc378ae3 100755 --- a/src/include/catalog/unused_oids +++ b/src/include/catalog/unused_oids @@ -34,7 +34,7 @@ my $oids = Catalog::FindAllOidsFromHeaders(@input_files); # Also push FirstBootstrapObjectId to serve as a terminator for the last gap. my $FirstBootstrapObjectId = - Catalog::FindDefinedSymbol('access/transam.h', [".."], + Catalog::FindDefinedSymbol('access/transam.h', '..', 'FirstBootstrapObjectId'); push @{$oids}, $FirstBootstrapObjectId; -- 2.40.0