From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | pgsql-committers(at)lists(dot)postgresql(dot)org |
Subject: | pgsql: Don't elide casting to typmod -1. |
Date: | 2021-08-06 21:33:04 |
Message-ID: | E1mC7Si-0002Uu-Ot@gemulon.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers |
Don't elide casting to typmod -1.
Casting a value that's already of a type with a specific typmod
to an unspecified typmod doesn't do anything so far as run-time
behavior is concerned. However, it really ought to change the
exposed type of the expression to match. Up to now,
coerce_type_typmod hasn't bothered with that, which creates gotchas
in contexts such as recursive unions. If for example one side of
the union is numeric(18,3), but it needs to be plain numeric to
match the other side, there's no direct way to express that.
This is easy enough to fix, by inserting a RelabelType to update the
exposed type of the expression. However, it's a bit nervous-making
to change this behavior, because it's stood for a really long time.
(I strongly suspect that it's like this in part because the logic
pre-dates the introduction of RelabelType in 7.0. The commit log
message for 57b30e8e2 is interesting reading here.) As a compromise,
we'll sneak the change into 14beta3, and consider back-patching to
stable branches if no complaints emerge in the next three months.
Discussion: https://postgr.es/m/CABNQVagu3bZGqiTjb31a8D5Od3fUMs7Oh3gmZMQZVHZ=uWWWfQ@mail.gmail.com
Branch
------
REL_14_STABLE
Details
-------
https://git.postgresql.org/pg/commitdiff/e5f6493e3584ea7eec1f992f87639e7f186ae03e
Modified Files
--------------
src/backend/parser/parse_coerce.c | 26 ++++++++++++++--------
src/test/regress/expected/expressions.out | 37 +++++++++++++++++++++++++++++++
src/test/regress/sql/expressions.sql | 21 ++++++++++++++++++
3 files changed, 75 insertions(+), 9 deletions(-)
From | Date | Subject | |
---|---|---|---|
Next Message | Andres Freund | 2021-08-07 02:30:26 | pgsql: Schedule ShutdownXLOG() in single user mode using before_shmem_e |
Previous Message | Dean Rasheed | 2021-08-06 20:37:28 | pgsql: Adjust the integer overflow tests in the numeric code. |