Thread: PL/Perl function signatures

PL/Perl function signatures

From
Luca Ferrari
Date:
Hi all,
is there any way to exploit sub signatures in PL/Perl?
The following is not working, I suspect it is not possible due to the
way PL/Perl compiles the code.


testdb=# create or replace function f( a int )
returns text
as $$
use feature 'signatures';

elog( INFO, "Perl version $^V" );
elog(INFO, "A = $a" );
return "A=$a";
$$
language plperlu;


testdb=# select f( 10 );
INFO:  Perl version v5.32.1
INFO:  A =
f
----
A=
(1 row)



Re: PL/Perl function signatures

From
Luca Ferrari
Date:
On Mon, Aug 28, 2023 at 9:53 AM Luca Ferrari <fluca1978@gmail.com> wrote:
>
> testdb=# create or replace function f( a int )
> returns text
> as $$
> use feature 'signatures';

shame on me!
Clearly this cannot work because at the 'use' stage the function is
already running, so the signatures feature is evaluated in the context
of the function itself.
However, this also does not work:

postgres=# alter system set plperl.on_init to 'use feature q/signatures/;';

As far as I understand, the plperl code in plperl.c does the following
for a non-array input parameter:

sv = (SV *) DatumGetPointer(OidFunctionCall1(funcid, fcinfo->args[i].value));

and that does not put the argument name, so it seems to me there is no
way to handle this at the moment.
But that code is too scary for me!

Luca