mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-02-23 19:39:53 +08:00
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
This commit is contained in:
parent
5bcc7e6dc8
commit
23d8624fe5
@ -91,73 +91,88 @@ sub ParseHeader
|
|||||||
# Push the data into the appropriate data structure.
|
# Push the data into the appropriate data structure.
|
||||||
# Caution: when adding new recognized OID-defining macros,
|
# Caution: when adding new recognized OID-defining macros,
|
||||||
# also update src/include/catalog/renumber_oids.pl.
|
# 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*
|
||||||
push @{ $catalog{toasting} },
|
(?<toast_oid>\d+),\s*
|
||||||
{ parent_table => $1, toast_oid => $2, toast_index_oid => $3 };
|
(?<toast_index_oid>\d+)\s*
|
||||||
}
|
\)/x
|
||||||
elsif (
|
|
||||||
/^DECLARE_TOAST_WITH_MACRO\(\s*(\w+),\s*(\d+),\s*(\d+),\s*(\w+),\s*(\w+)\)/
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
push @{ $catalog{toasting} },
|
push @{ $catalog{toasting} }, {%+};
|
||||||
{
|
|
||||||
parent_table => $1,
|
|
||||||
toast_oid => $2,
|
|
||||||
toast_index_oid => $3,
|
|
||||||
toast_oid_macro => $4,
|
|
||||||
toast_index_oid_macro => $5
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
elsif (
|
elsif (
|
||||||
/^DECLARE_(UNIQUE_)?INDEX(_PKEY)?\(\s*(\w+),\s*(\d+),\s*(\w+),\s*(.+)\)/
|
/^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} }, {%+};
|
||||||
|
}
|
||||||
|
elsif (
|
||||||
|
/^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} },
|
push @{ $catalog{indexing} },
|
||||||
{
|
{
|
||||||
is_unique => $1 ? 1 : 0,
|
is_unique => $1 ? 1 : 0,
|
||||||
is_pkey => $2 ? 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+)\)/)
|
|
||||||
{
|
|
||||||
push @{ $catalog{other_oids} },
|
|
||||||
{
|
|
||||||
other_name => $1,
|
|
||||||
other_oid => $2
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
elsif (
|
elsif (
|
||||||
/^DECLARE_(ARRAY_)?FOREIGN_KEY(_OPT)?\(\s*\(([^)]+)\),\s*(\w+),\s*\(([^)]+)\)\)/
|
/^DECLARE_OID_DEFINING_MACRO\(\s*
|
||||||
|
(?<other_name>\w+),\s*
|
||||||
|
(?<other_oid>\d+)\s*
|
||||||
|
\)/x
|
||||||
|
)
|
||||||
|
{
|
||||||
|
push @{ $catalog{other_oids} }, {%+};
|
||||||
|
}
|
||||||
|
elsif (
|
||||||
|
/^DECLARE_(ARRAY_)?FOREIGN_KEY(_OPT)?\(\s*
|
||||||
|
\((?<fk_cols>[^)]+)\),\s*
|
||||||
|
(?<pk_table>\w+),\s*
|
||||||
|
\((?<pk_cols>[^)]+)\)\s*
|
||||||
|
\)/x
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
push @{ $catalog{foreign_keys} },
|
push @{ $catalog{foreign_keys} },
|
||||||
{
|
{
|
||||||
is_array => $1 ? 1 : 0,
|
is_array => $1 ? 1 : 0,
|
||||||
is_opt => $2 ? 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{ keys %+ } = values %+;
|
||||||
$catalog{relation_oid} = $2;
|
|
||||||
$catalog{relation_oid_macro} = $3;
|
|
||||||
|
|
||||||
$catalog{bootstrap} = /BKI_BOOTSTRAP/ ? ' bootstrap' : '';
|
$catalog{bootstrap} = /BKI_BOOTSTRAP/ ? ' bootstrap' : '';
|
||||||
$catalog{shared_relation} =
|
$catalog{shared_relation} =
|
||||||
/BKI_SHARED_RELATION/ ? ' 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{ keys %+ } = values %+;
|
||||||
$catalog{rowtype_oid_clause} = " rowtype_oid $1";
|
$catalog{rowtype_oid_clause} = " rowtype_oid $+{rowtype_oid}";
|
||||||
$catalog{rowtype_oid_macro} = $2;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user