Replace opr_sanity test's binary_coercible() function with C code.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 11 May 2021 18:28:11 +0000 (14:28 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 11 May 2021 18:28:11 +0000 (14:28 -0400)
commit6303a5730914dfe6ef2709b28b225553315c573c
tree05c755b1dc4c42d9d0db201e0595e1c08608537b
parent6d177e2813a2b4415539e2861b595583cc1a8f71
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
15 files changed:
src/test/regress/expected/.gitignore
src/test/regress/expected/conversion.out
src/test/regress/expected/opr_sanity.out
src/test/regress/expected/type_sanity.out
src/test/regress/input/create_function_0.source [new file with mode: 0644]
src/test/regress/input/create_function_1.source
src/test/regress/output/create_function_0.source [new file with mode: 0644]
src/test/regress/output/create_function_1.source
src/test/regress/parallel_schedule
src/test/regress/regress.c
src/test/regress/serial_schedule
src/test/regress/sql/.gitignore
src/test/regress/sql/conversion.sql
src/test/regress/sql/opr_sanity.sql
src/test/regress/sql/type_sanity.sql