From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | pgsql-committers(at)lists(dot)postgresql(dot)org |
Subject: | pgsql: Make pg_get_expr() more bulletproof. |
Date: | 2022-01-09 17:43:16 |
Message-ID: | E1n6cDs-0002uj-Nn@gemulon.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers |
Make pg_get_expr() more bulletproof.
Since this function is defined to accept pg_node_tree values, it could
get applied to any nodetree that can appear in a cataloged pg_node_tree
column. Some such cases can't be supported --- for example, its API
doesn't allow providing referents for more than one relation --- but
we should try to throw a user-facing error rather than an internal
error when encountering such a case.
In support of this, extend expression_tree_walker/mutator to be sure
they'll work on any such node tree (which basically means adding
support for relpartbound node types). That allows us to run pull_varnos
and check for the case of multiple relations before we start processing
the tree. The alternative of changing the low-level error thrown for an
out-of-range varno isn't appealing, because that could mask actual bugs
in other usages of ruleutils.
Per report from Justin Pryzby. This is basically cosmetic, so no
back-patch.
Discussion: https://postgr.es/m/20211219205422.GT17618@telsasoft.com
Branch
------
master
Details
-------
https://git.postgresql.org/pg/commitdiff/6867f963e319934cbdafeb4bd5beaea5797c7be2
Modified Files
--------------
src/backend/nodes/nodeFuncs.c | 42 +++++++++++++++++++++++++++++++++++++
src/backend/optimizer/util/var.c | 11 ++++++++--
src/backend/utils/adt/ruleutils.c | 44 ++++++++++++++++++++++++++++++++++++++-
3 files changed, 94 insertions(+), 3 deletions(-)
From | Date | Subject | |
---|---|---|---|
Next Message | Jeff Davis | 2022-01-09 18:02:56 | Re: pgsql: Respect permissions within logical replication. |
Previous Message | Jeff Davis | 2022-01-09 04:13:29 | pgsql: More cleanup of a2ab9c06ea. |