From decd1b8c171cc508da5f79f01d2f0779a569a963 Mon Sep 17 00:00:00 2001 From: =?utf-8?q?Dagfinn=20Ilmari=20Manns=C3=A5ker?= Date: Mon, 17 Apr 2017 14:04:20 +0100 Subject: [PATCH 2/4] Avoid repeated calls to Catalog::SplitDataLine Both check_natts and the callers of Catalog::Catalogs were calling Catalog::SplitDataLines, the former discarding the result. Instead, have Catalog::Catalogs store the split fields directly and pass the count to check_natts --- src/backend/catalog/Catalog.pm | 14 +++++++------- src/backend/catalog/genbki.pl | 3 +-- src/backend/utils/Gen_fmgrtab.pl | 3 +-- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/backend/catalog/Catalog.pm b/src/backend/catalog/Catalog.pm index e7b647a..81513c7 100644 --- a/src/backend/catalog/Catalog.pm +++ b/src/backend/catalog/Catalog.pm @@ -82,10 +82,12 @@ sub Catalogs } elsif (/^DATA\(insert(?:\s+OID\s+=\s+(\d+))?\s+\(\s*(.*)\s*\)\s*\)$/) { - check_natts($filename, $catalog{natts}, $2, + my @bki_values = SplitDataLine($2); + + check_natts($filename, $catalog{natts}, scalar(@bki_values), $input_file, $input_line_number); - push @{ $catalog{data} }, { oid => $1, bki_values => $2 }; + push @{ $catalog{data} }, { oid => $1, bki_values => \@bki_values }; } elsif (/^DESCR\(\"(.*)\"\)$/) { @@ -254,17 +256,15 @@ sub RenameTempFile # verify the number of fields in the passed-in DATA line sub check_natts { - my ($catname, $natts, $bki_val, $file, $line) = @_; + my ($catname, $natts, $bki_vals, $file, $line) = @_; die "Could not find definition for Natts_${catname} before start of DATA() in $file\n" unless defined $natts; - my $nfields = scalar(SplitDataLine($bki_val)); - die sprintf "Wrong number of attributes in DATA() entry at %s:%d (expected %d but got %d)\n", - $file, $line, $natts, $nfields - unless $natts == $nfields; + $file, $line, $natts, $bki_vals + unless $natts == $bki_vals; } 1; diff --git a/src/backend/catalog/genbki.pl b/src/backend/catalog/genbki.pl index 198e072..8875f6c 100644 --- a/src/backend/catalog/genbki.pl +++ b/src/backend/catalog/genbki.pl @@ -161,9 +161,8 @@ foreach my $catname (@{ $catalogs->{names} }) foreach my $row (@{ $catalog->{data} }) { - # Split line into tokens without interpreting their meaning. my %bki_values; - @bki_values{@attnames} = Catalog::SplitDataLine($row->{bki_values}); + @bki_values{@attnames} = @{$row->{bki_values}}; # Perform required substitutions on fields foreach my $att (keys %bki_values) diff --git a/src/backend/utils/Gen_fmgrtab.pl b/src/backend/utils/Gen_fmgrtab.pl index 76bdf5c..d2c4617 100644 --- a/src/backend/utils/Gen_fmgrtab.pl +++ b/src/backend/utils/Gen_fmgrtab.pl @@ -58,9 +58,8 @@ foreach my $column (@{ $catalogs->{pg_proc}->{columns} }) my $data = $catalogs->{pg_proc}->{data}; foreach my $row (@$data) { - # Split line into tokens without interpreting their meaning. my %bki_values; - @bki_values{@attnames} = Catalog::SplitDataLine($row->{bki_values}); + @bki_values{@attnames} = @{$row->{bki_values}}; # Select out just the rows for internal-language procedures. # Note assumption here that INTERNALlanguageId is 12. -- 2.7.4