diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2021-12-16 15:36:02 -0500 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2021-12-16 15:36:02 -0500 |
commit | 1acf345869f73ff2e12e034f1e22ac652da0ef43 (patch) | |
tree | 92441945d4e6481b6d5d00ad4e07236376bf30c9 /src/test/regress/sql/expressions.sql | |
parent | f2e4bbf408cfb903530b86c7bb4ef10413a23d30 (diff) |
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
Diffstat (limited to 'src/test/regress/sql/expressions.sql')
-rw-r--r-- | src/test/regress/sql/expressions.sql | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/test/regress/sql/expressions.sql b/src/test/regress/sql/expressions.sql index 0c57531ec1e..74189ad1fde 100644 --- a/src/test/regress/sql/expressions.sql +++ b/src/test/regress/sql/expressions.sql @@ -53,4 +53,20 @@ create view numeric_view as explain (verbose, costs off) select * from numeric_view; +-- bpchar, lacking planner support for its length coercion function, +-- could behave differently + +create table bpchar_tbl (f1 character(16) unique, f2 bpchar); + +create view bpchar_view as + select + f1, f1::character(14) as f114, f1::bpchar as f1n, + f2, f2::character(14) as f214, f2::bpchar as f2n + from bpchar_tbl; + +\d+ bpchar_view + +explain (verbose, costs off) select * from bpchar_view + where f1::bpchar = 'foo'; + rollback; |