diff options
author | Michael Paquier <michael@paquier.xyz> | 2023-06-30 09:16:27 +0900 |
---|---|---|
committer | Michael Paquier <michael@paquier.xyz> | 2023-06-30 09:16:27 +0900 |
commit | 23d8624fe52efff0e1c8a6e809d51671f9f549d6 (patch) | |
tree | 77e8ef2d100fe833b8f1b269ff73ef5229e07322 /src | |
parent | 5bcc7e6dc8cb6fb6ab16c118a1e710fc85096f76 (diff) | |
download | postgresql-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.pm | 85 |
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 { |