pgsql: Ensure casting to typmod -1 generates a RelabelType.

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Ensure casting to typmod -1 generates a RelabelType.
Date: 2021-12-16 20:36:24
Message-ID: E1mxxUG-0006ki-Rz@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Ensure casting to typmod -1 generates a RelabelType.

Fix the code changed by commit 5c056b0c2 so that we always generate
RelabelType, not something else, for a cast to unspecified typmod.
Otherwise planner optimizations might not happen.

It appears we missed this point because the previous experiments were
done on type numeric: the parser undesirably generates a call on the
numeric() length-coercion function, but then numeric_support()
optimizes that down to a RelabelType, so that everything seems fine.
It misbehaves for types that have a non-optimized length coercion
function, such as bpchar.

Per report from John Naylor. Back-patch to all supported branches,
as the previous patch eventually was. Unfortunately, that no longer
includes 9.6 ... we really shouldn't put this type of change into a
nearly-EOL branch.

Discussion: https://postgr.es/m/CAFBsxsEfbFHEkouc+FSj+3K1sHipLPbEC67L0SAe-9-da8QtYg@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/9c356f4b2dd8f8ff49757287e387ab1d023e4449

Modified Files
--------------
src/backend/parser/parse_coerce.c | 10 ++++++++-
src/test/regress/expected/expressions.out | 36 +++++++++++++++++++++++++++++++
src/test/regress/sql/expressions.sql | 16 ++++++++++++++
3 files changed, 61 insertions(+), 1 deletion(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Peter Eisentraut 2021-12-17 05:44:59 pgsql: Simplify the general-purpose 64-bit integer parsing APIs
Previous Message Tom Lane 2021-12-16 19:02:37 pgsql: Remove psql support for server versions preceding 9.2.