pgsql: Mark built-in coercion functions as leakproof where possible. - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Mark built-in coercion functions as leakproof where possible.
Date
Msg-id E1jzNSF-0004dq-IP@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Mark built-in coercion functions as leakproof where possible.

Making these leakproof seems helpful since (for example) if you have a
function f(int8) that is leakproof, you don't want it to effectively
become non-leakproof when you apply it to an int4 or int2 column.
But that's what happens today, since the implicit up-coercion will
not be leakproof.

Most of the coercion functions that visibly can't throw errors are
functions that convert numeric datatypes to other, wider ones.
Notable is that float4_numeric and float8_numeric can be marked
leakproof; before commit a57d312a7 they could not have been.
I also marked the functions that coerce strings to "name" as leakproof;
that's okay today because they truncate silently, but if we ever
reconsidered that behavior then they could no longer be leakproof.

I desisted from marking rtrim1() as leakproof; it appears so right now,
but the code seems a little too complex and perhaps subject to change,
since it's shared with other SQL functions.

Discussion: https://postgr.es/m/459322.1595607431@sss.pgh.pa.us

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/8a37951eebffd9bf528cb06d46127fb721d0e452

Modified Files
--------------
src/include/catalog/catversion.h         |   2 +-
src/include/catalog/pg_proc.dat          | 103 ++++++++++++++++---------------
src/test/regress/expected/opr_sanity.out |  25 ++++++++
3 files changed, 78 insertions(+), 52 deletions(-)


pgsql-committers by date:

Previous
From: Amit Kapila
Date:
Subject: pgsql: Fix buffer usage stats for nodes above Gather Merge.
Next
From: Tom Lane
Date:
Subject: pgsql: Improve performance of binary COPY FROM through better buffering