aboutsummaryrefslogtreecommitdiff
path: root/src/backend/catalog/Catalog.pm
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/catalog/Catalog.pm')
-rw-r--r--src/backend/catalog/Catalog.pm110
1 files changed, 55 insertions, 55 deletions
diff --git a/src/backend/catalog/Catalog.pm b/src/backend/catalog/Catalog.pm
index 7168c90562a..8e709524cba 100644
--- a/src/backend/catalog/Catalog.pm
+++ b/src/backend/catalog/Catalog.pm
@@ -315,72 +315,72 @@ sub ParseData
my $catname = $1;
my $data = [];
- # Scan the input file.
- while (<$ifd>)
- {
- my $hash_ref;
+ # Scan the input file.
+ while (<$ifd>)
+ {
+ my $hash_ref;
- if (/{/)
+ if (/{/)
+ {
+ # Capture the hash ref
+ # NB: Assumes that the next hash ref can't start on the
+ # same line where the present one ended.
+ # Not foolproof, but we shouldn't need a full parser,
+ # since we expect relatively well-behaved input.
+
+ # Quick hack to detect when we have a full hash ref to
+ # parse. We can't just use a regex because of values in
+ # pg_aggregate and pg_proc like '{0,0}'. This will need
+ # work if we ever need to allow unbalanced braces within
+ # a field value.
+ my $lcnt = tr/{//;
+ my $rcnt = tr/}//;
+
+ if ($lcnt == $rcnt)
{
- # Capture the hash ref
- # NB: Assumes that the next hash ref can't start on the
- # same line where the present one ended.
- # Not foolproof, but we shouldn't need a full parser,
- # since we expect relatively well-behaved input.
-
- # Quick hack to detect when we have a full hash ref to
- # parse. We can't just use a regex because of values in
- # pg_aggregate and pg_proc like '{0,0}'. This will need
- # work if we ever need to allow unbalanced braces within
- # a field value.
- my $lcnt = tr/{//;
- my $rcnt = tr/}//;
-
- if ($lcnt == $rcnt)
+ # We're treating the input line as a piece of Perl, so we
+ # need to use string eval here. Tell perlcritic we know what
+ # we're doing.
+ eval "\$hash_ref = $_"; ## no critic (ProhibitStringyEval)
+ if (!ref $hash_ref)
{
- # We're treating the input line as a piece of Perl, so we
- # need to use string eval here. Tell perlcritic we know what
- # we're doing.
- eval "\$hash_ref = $_"; ## no critic (ProhibitStringyEval)
- if (!ref $hash_ref)
- {
- die "$input_file: error parsing line $.:\n$_\n";
- }
-
- # Annotate each hash with the source line number.
- $hash_ref->{line_number} = $.;
-
- # Expand tuples to their full representation.
- AddDefaultValues($hash_ref, $schema, $catname);
+ die "$input_file: error parsing line $.:\n$_\n";
}
- else
- {
- my $next_line = <$ifd>;
- die "$input_file: file ends within Perl hash\n"
- if !defined $next_line;
- $_ .= $next_line;
- redo;
- }
- }
- # If we found a hash reference, keep it, unless it is marked as
- # autogenerated; in that case it'd duplicate an entry we'll
- # autogenerate below. (This makes it safe for reformat_dat_file.pl
- # with --full-tuples to print autogenerated entries, which seems like
- # useful behavior for debugging.)
- #
- # Otherwise, we have a non-data string, which we keep only if
- # the caller requested it.
- if (defined $hash_ref)
- {
- push @$data, $hash_ref if !$hash_ref->{autogenerated};
+ # Annotate each hash with the source line number.
+ $hash_ref->{line_number} = $.;
+
+ # Expand tuples to their full representation.
+ AddDefaultValues($hash_ref, $schema, $catname);
}
else
{
- push @$data, $_ if $preserve_comments;
+ my $next_line = <$ifd>;
+ die "$input_file: file ends within Perl hash\n"
+ if !defined $next_line;
+ $_ .= $next_line;
+ redo;
}
}
+ # If we found a hash reference, keep it, unless it is marked as
+ # autogenerated; in that case it'd duplicate an entry we'll
+ # autogenerate below. (This makes it safe for reformat_dat_file.pl
+ # with --full-tuples to print autogenerated entries, which seems like
+ # useful behavior for debugging.)
+ #
+ # Otherwise, we have a non-data string, which we keep only if
+ # the caller requested it.
+ if (defined $hash_ref)
+ {
+ push @$data, $hash_ref if !$hash_ref->{autogenerated};
+ }
+ else
+ {
+ push @$data, $_ if $preserve_comments;
+ }
+ }
+
close $ifd;
# If this is pg_type, auto-generate array types too.