Ensure casting to typmod -1 generates a RelabelType.
authorTom Lane <[email protected]>
Thu, 16 Dec 2021 20:36:02 +0000 (15:36 -0500)
committerTom Lane <[email protected]>
Thu, 16 Dec 2021 20:36:02 +0000 (15:36 -0500)
commit1acf345869f73ff2e12e034f1e22ac652da0ef43
tree92441945d4e6481b6d5d00ad4e07236376bf30c9
parentf2e4bbf408cfb903530b86c7bb4ef10413a23d30
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
src/backend/parser/parse_coerce.c
src/test/regress/expected/expressions.out
src/test/regress/sql/expressions.sql