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