public inbox for [email protected]  
help / color / mirror / Atom feed
From: Durumdara <[email protected]>
To: Postgres General <[email protected]>
Subject: Variant (Untyped) parameter for function/procedure
Date: Wed, 5 Jun 2024 10:34:54 +0200
Message-ID: <CAEcMXhkoR7mo3gpF8Jhoq=ui6vgCC5rvKW3e2wF=PfzL=FWJAQ@mail.gmail.com> (raw)

Dear Members!

As I experienced, the functions/procedures extremely depend on parameters
(very typed).
So if I have to restructure the input parameters, I can't modify the
function, because I have to recreate the dependents too.
For example:
I have a type. If I pass this type to a function, I can't change the
structure of the type without dropping and recreating the function.

create type blahtype as (a int, b bool);
create function blahcheck (input blahtype) ...


If I have many dependent functions this causes that I have to drop
(recreate) everything - just for an extra parameter. And sometimes this
extra parameter doesn't change 10 functions, only one. But I have to
recreate them all (without changing the body).

Is there any way to use a Variant parameter?
Like this:

create procedure test(IN Input Record, OUT Output Record)
...
    Time = Input.Time::timestamp;
...

    Output = SomeHowMakeItTyped;

    Output.Result = 1;

...


Caller:

...
for r_in as select  id, name from blah into
...
     test(r_in, r_out);
     if r_out.result <> 0 then ...

Or:

create procedure test(IN Inputs Records, OUT Output Record)
...
        for Input in Inputs:
        Time = Input.Time::timestamp;
...
    Output.Result = 1;
...




Or is it impossible, because of the PGSQL's philosophy (very typed)?

If it is not possible then I have one way I think.
It is a JSON data type for inputs and outputs.

Is that right?

Thanks for your any help, info!

Best regards
dd


reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected]
  Subject: Re: Variant (Untyped) parameter for function/procedure
  In-Reply-To: <CAEcMXhkoR7mo3gpF8Jhoq=ui6vgCC5rvKW3e2wF=PfzL=FWJAQ@mail.gmail.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox