aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2023-06-30 09:16:27 +0900
committerMichael Paquier <michael@paquier.xyz>2023-06-30 09:16:27 +0900
commit23d8624fe52efff0e1c8a6e809d51671f9f549d6 (patch)
tree77e8ef2d100fe833b8f1b269ff73ef5229e07322 /src
parent5bcc7e6dc8cb6fb6ab16c118a1e710fc85096f76 (diff)
downloadpostgresql-23d8624fe52efff0e1c8a6e809d51671f9f549d6.tar.gz
postgresql-23d8624fe52efff0e1c8a6e809d51671f9f549d6.zip
Use named captures in Catalog::ParseHeader()
Using at least perl 5.14 is required since 4c15327, meaning that it is possible to use named captures and the %+ hash instead of having to count parenthesis groups manually. While on it, CATALOG is made more flexible in its handling of whitespaces for parameter lists (see the addition of \s* in this case). The generated postgres.bki remains exactly the same before and after this commit. Author: Dagfinn Ilmari Mannsåker Reviewed-by: John Naylor Discussion: https://postgr.es/m/87y1l3s7o9.fsf@wibble.ilmari.org
Diffstat (limited to 'src')
-rw-r--r--src/backend/catalog/Catalog.pm85
1 files changed, 50 insertions, 35 deletions
diff --git a/src/backend/catalog/Catalog.pm b/src/backend/catalog/Catalog.pm
index 84aaeb002a6..b15f513183f 100644
--- a/src/backend/catalog/Catalog.pm
+++ b/src/backend/catalog/Catalog.pm
@@ -91,73 +91,88 @@ sub ParseHeader
# Push the data into the appropriate data structure.
# Caution: when adding new recognized OID-defining macros,
# also update src/include/catalog/renumber_oids.pl.
- if (/^DECLARE_TOAST\(\s*(\w+),\s*(\d+),\s*(\d+)\)/)
+ if (/^DECLARE_TOAST\(\s*
+ (?<parent_table>\w+),\s*
+ (?<toast_oid>\d+),\s*
+ (?<toast_index_oid>\d+)\s*
+ \)/x
+ )
{
- push @{ $catalog{toasting} },
- { parent_table => $1, toast_oid => $2, toast_index_oid => $3 };
+ push @{ $catalog{toasting} }, {%+};
}
elsif (
- /^DECLARE_TOAST_WITH_MACRO\(\s*(\w+),\s*(\d+),\s*(\d+),\s*(\w+),\s*(\w+)\)/
+ /^DECLARE_TOAST_WITH_MACRO\(\s*
+ (?<parent_table>\w+),\s*
+ (?<toast_oid>\d+),\s*
+ (?<toast_index_oid>\d+),\s*
+ (?<toast_oid_macro>\w+),\s*
+ (?<toast_index_oid_macro>\w+)\s*
+ \)/x
)
{
- push @{ $catalog{toasting} },
- {
- parent_table => $1,
- toast_oid => $2,
- toast_index_oid => $3,
- toast_oid_macro => $4,
- toast_index_oid_macro => $5
- };
+ push @{ $catalog{toasting} }, {%+};
}
elsif (
- /^DECLARE_(UNIQUE_)?INDEX(_PKEY)?\(\s*(\w+),\s*(\d+),\s*(\w+),\s*(.+)\)/
+ /^DECLARE_(UNIQUE_)?INDEX(_PKEY)?\(\s*
+ (?<index_name>\w+),\s*
+ (?<index_oid>\d+),\s*
+ (?<index_oid_macro>\w+),\s*
+ (?<index_decl>.+)\s*
+ \)/x
)
{
push @{ $catalog{indexing} },
{
is_unique => $1 ? 1 : 0,
is_pkey => $2 ? 1 : 0,
- index_name => $3,
- index_oid => $4,
- index_oid_macro => $5,
- index_decl => $6
+ %+,
};
}
- elsif (/^DECLARE_OID_DEFINING_MACRO\(\s*(\w+),\s*(\d+)\)/)
+ elsif (
+ /^DECLARE_OID_DEFINING_MACRO\(\s*
+ (?<other_name>\w+),\s*
+ (?<other_oid>\d+)\s*
+ \)/x
+ )
{
- push @{ $catalog{other_oids} },
- {
- other_name => $1,
- other_oid => $2
- };
+ push @{ $catalog{other_oids} }, {%+};
}
elsif (
- /^DECLARE_(ARRAY_)?FOREIGN_KEY(_OPT)?\(\s*\(([^)]+)\),\s*(\w+),\s*\(([^)]+)\)\)/
+ /^DECLARE_(ARRAY_)?FOREIGN_KEY(_OPT)?\(\s*
+ \((?<fk_cols>[^)]+)\),\s*
+ (?<pk_table>\w+),\s*
+ \((?<pk_cols>[^)]+)\)\s*
+ \)/x
)
{
push @{ $catalog{foreign_keys} },
{
is_array => $1 ? 1 : 0,
is_opt => $2 ? 1 : 0,
- fk_cols => $3,
- pk_table => $4,
- pk_cols => $5
+ %+,
};
}
- elsif (/^CATALOG\((\w+),(\d+),(\w+)\)/)
+ elsif (
+ /^CATALOG\(\s*
+ (?<catname>\w+),\s*
+ (?<relation_oid>\d+),\s*
+ (?<relation_oid_macro>\w+)\s*
+ \)/x
+ )
{
- $catalog{catname} = $1;
- $catalog{relation_oid} = $2;
- $catalog{relation_oid_macro} = $3;
+ @catalog{ keys %+ } = values %+;
$catalog{bootstrap} = /BKI_BOOTSTRAP/ ? ' bootstrap' : '';
$catalog{shared_relation} =
/BKI_SHARED_RELATION/ ? ' shared_relation' : '';
- if (/BKI_ROWTYPE_OID\((\d+),(\w+)\)/)
+ if (/BKI_ROWTYPE_OID\(\s*
+ (?<rowtype_oid>\d+),\s*
+ (?<rowtype_oid_macro>\w+)\s*
+ \)/x
+ )
{
- $catalog{rowtype_oid} = $1;
- $catalog{rowtype_oid_clause} = " rowtype_oid $1";
- $catalog{rowtype_oid_macro} = $2;
+ @catalog{ keys %+ } = values %+;
+ $catalog{rowtype_oid_clause} = " rowtype_oid $+{rowtype_oid}";
}
else
{