pgsql: Replace opr_sanity test's binary_coercible() function with C cod

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Replace opr_sanity test's binary_coercible() function with C cod
Date: 2021-05-11 18:28:41
Message-ID: E1lgX7Z-0006vg-GO@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Replace opr_sanity test's binary_coercible() function with C code.

opr_sanity's binary_coercible() function has always been meant
to match the parser's notion of binary coercibility, but it also
has always been a rather poor approximation of the parser's
real rules (as embodied in IsBinaryCoercible()). That hasn't
bit us so far, but it's predictable that it will eventually.

It also now emerges that implementing this check in plpgsql
performs absolutely horribly in clobber-cache-always testing.
(Perhaps we could do something about that, but I suspect it just
means that plpgsql is exploiting catalog caching to the hilt.)

Hence, let's replace binary_coercible() with a C shim that directly
invokes IsBinaryCoercible(), eliminating both the semantic hazard
and the performance issue.

Most of regress.c's C functions are declared in create_function_1,
but we can't simply move that to before opr_sanity/type_sanity
since those tests would complain about the resulting shell types.
I chose to split it into create_function_0 and create_function_1.
Since create_function_0 now runs as part of a parallel group while
create_function_1 doesn't, reduce the latter to create just those
functions that opr_sanity and type_sanity would whine about.

To make room for create_function_0 in the second parallel group
of tests, move tstypes to the third parallel group.

In passing, clean up some ordering deviations between
parallel_schedule and serial_schedule.

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

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/6303a5730914dfe6ef2709b28b225553315c573c

Modified Files
--------------
src/test/regress/expected/.gitignore | 1 +
src/test/regress/expected/conversion.out | 2 +-
src/test/regress/expected/opr_sanity.out | 55 --------------
src/test/regress/expected/type_sanity.out | 2 +-
src/test/regress/input/create_function_0.source | 95 ++++++++++++++++++++++++
src/test/regress/input/create_function_1.source | 88 +---------------------
src/test/regress/output/create_function_0.source | 88 ++++++++++++++++++++++
src/test/regress/output/create_function_1.source | 82 +-------------------
src/test/regress/parallel_schedule | 7 +-
src/test/regress/regress.c | 12 +++
src/test/regress/serial_schedule | 15 ++--
src/test/regress/sql/.gitignore | 1 +
src/test/regress/sql/conversion.sql | 2 +-
src/test/regress/sql/opr_sanity.sql | 59 ---------------
src/test/regress/sql/type_sanity.sql | 2 +-
15 files changed, 216 insertions(+), 295 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Bruce Momjian 2021-05-11 21:40:55 pgsql: doc: update PG 14 release notes based on feedback
Previous Message Michael Paquier 2021-05-11 08:08:43 Re: pgsql: autovacuum: handle analyze for partitioned tables