summaryrefslogtreecommitdiff
path: root/src/test/regress/sql/expressions.sql
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2021-12-16 15:36:02 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2021-12-16 15:36:02 -0500
commit9c356f4b2dd8f8ff49757287e387ab1d023e4449 (patch)
treed29704bbe88e6eb46cdcbd0b9a2e36cafff63b11 /src/test/regress/sql/expressions.sql
parentcf0cab868aa4758b7eec5f9412f2ec74acda7f45 (diff)
downloadpostgresql-9c356f4b2dd8f8ff49757287e387ab1d023e4449.tar.gz
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.sql16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/test/regress/sql/expressions.sql b/src/test/regress/sql/expressions.sql
index e9aa1a0b28..03b88bde7a 100644
--- a/src/test/regress/sql/expressions.sql
+++ b/src/test/regress/sql/expressions.sql
@@ -84,6 +84,22 @@ 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;