genbki stricter error handling
authorPeter Eisentraut <peter@eisentraut.org>
Wed, 30 Jun 2021 06:29:03 +0000 (08:29 +0200)
committerPeter Eisentraut <peter@eisentraut.org>
Wed, 30 Jun 2021 06:50:26 +0000 (08:50 +0200)
Instead of just writing warnings for invalid cross-catalog lookups,
count the errors and error out at the end.

Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://www.postgresql.org/message-id/flat/ca8ee41d-241b-1bf3-71f0-aaf1add6d3c5%40enterprisedb.com

src/backend/catalog/genbki.pl

index 968737609373c2a508b8085c1f655e53ccaa6307..b82df348b8d330e735e59fca8fd2cb22cb760bd6 100644 (file)
@@ -26,6 +26,8 @@ my $output_path = '';
 my $major_version;
 my $include_path;
 
+my $num_errors = 0;
+
 GetOptions(
    'output:s'       => \$output_path,
    'set-version:s'  => \$major_version,
@@ -796,7 +798,7 @@ Catalog::RenameTempFile($schemafile,       $tmpext);
 Catalog::RenameTempFile($fk_info_file,     $tmpext);
 Catalog::RenameTempFile($constraints_file, $tmpext);
 
-exit 0;
+exit ($num_errors != 0 ? 1 : 0);
 
 #################### Subroutines ########################
 
@@ -1024,8 +1026,7 @@ sub morph_row_for_schemapg
 # Perform OID lookups on an array of OID names.
 # If we don't have a unique value to substitute, warn and
 # leave the entry unchanged.
-# (A warning seems sufficient because the bootstrap backend will reject
-# non-numeric values anyway.  So we might as well detect multiple problems
+# (We don't exit right away so that we can detect multiple problems
 # within this genbki.pl run.)
 sub lookup_oids
 {
@@ -1045,16 +1046,20 @@ sub lookup_oids
            push @lookupoids, $lookupname;
            if ($lookupname eq '-' or $lookupname eq '0')
            {
-               warn sprintf
-                 "invalid zero OID reference in %s.dat field %s line %s\n",
-                 $catname, $attname, $bki_values->{line_number}
-                 if !$lookup_opt;
+               if (!$lookup_opt)
+               {
+                   warn sprintf
+                     "invalid zero OID reference in %s.dat field %s line %s\n",
+                     $catname, $attname, $bki_values->{line_number};
+                   $num_errors++;
+               }
            }
            else
            {
                warn sprintf
                  "unresolved OID reference \"%s\" in %s.dat field %s line %s\n",
                  $lookupname, $catname, $attname, $bki_values->{line_number};
+               $num_errors++;
            }
        }
    }