function signature allow "default" keyword

Started by jian healmost 3 years ago5 messagesgeneral
Jump to latest
#1jian he
jian.universality@gmail.com

function idea.
allow function calling using the default keyword for any of the input
arguments.

example: https://dbfiddle.uk/FQwnfdmm
So something like this "SELECT * FROM customer_orders(2579927,
'order_placed_on DESC', default, 2);"
should work.

#2Thomas Kellerer
shammat@gmx.net
In reply to: jian he (#1)
Re: function signature allow "default" keyword

jian he schrieb am 15.05.2023 um 10:33:

function idea.
allow function calling using the default keyword for any of the input arguments.

example: https://dbfiddle.uk/FQwnfdmm
So something like this "SELECT * FROM customer_orders(2579927, 'order_placed_on DESC', default, 2);"
should work.

You can use named parameters when calling the function, that will use the default value for those not mentioned:

SELECT *
FROM customer_orders(_customer_id => 2579927,
_sort_field_and_direction => 'order_placed_on DESC',
_offset => 2);

#3jian he
jian.universality@gmail.com
In reply to: Thomas Kellerer (#2)
Re: function signature allow "default" keyword

On Mon, May 15, 2023 at 5:00 PM Thomas Kellerer <shammat@gmx.net> wrote:

jian he schrieb am 15.05.2023 um 10:33:

function idea.
allow function calling using the default keyword for any of the input

arguments.

example: https://dbfiddle.uk/FQwnfdmm
So something like this "SELECT * FROM customer_orders(2579927,

'order_placed_on DESC', default, 2);"

should work.

You can use named parameters when calling the function, that will use the
default value for those not mentioned:

SELECT *
FROM customer_orders(_customer_id => 2579927,
_sort_field_and_direction => 'order_placed_on DESC',
_offset => 2);

select proname
,proargtypes
,pg_get_expr(pp.proargdefaults,0,true)
,pronargdefaults
from pg_proc pp
where pp.proname = 'customer_orders';
----------return-------------
proname | customer_orders
proargtypes | 23 25 23 23 1082 1082
pg_get_expr | 10, 0, CURRENT_DATE - 30, CURRENT_DATE
pronargdefaults | 4

table insert works, i guess because pg_attribute has column ordinal number
(left to right).
but pg_proc only counts the number of arguments that have a default value.

#4Pavel Stehule
pavel.stehule@gmail.com
In reply to: jian he (#3)
Re: function signature allow "default" keyword

Hi

út 16. 5. 2023 v 5:11 odesílatel jian he <jian.universality@gmail.com>
napsal:

On Mon, May 15, 2023 at 5:00 PM Thomas Kellerer <shammat@gmx.net> wrote:

jian he schrieb am 15.05.2023 um 10:33:

function idea.
allow function calling using the default keyword for any of the input

arguments.

example: https://dbfiddle.uk/FQwnfdmm
So something like this "SELECT * FROM customer_orders(2579927,

'order_placed_on DESC', default, 2);"

should work.

You can use named parameters when calling the function, that will use the
default value for those not mentioned:

SELECT *
FROM customer_orders(_customer_id => 2579927,
_sort_field_and_direction => 'order_placed_on DESC',
_offset => 2);

select proname
,proargtypes
,pg_get_expr(pp.proargdefaults,0,true)
,pronargdefaults
from pg_proc pp
where pp.proname = 'customer_orders';
----------return-------------
proname | customer_orders
proargtypes | 23 25 23 23 1082 1082
pg_get_expr | 10, 0, CURRENT_DATE - 30, CURRENT_DATE
pronargdefaults | 4

table insert works, i guess because pg_attribute has column ordinal number
(left to right).
but pg_proc only counts the number of arguments that have a default value.

The tables don't support overloading.

I cannot to have tab1(a int, b int), tab1(a int, b int, c int)

but I can have

proc1(int, int), proc1(int, int, int)

Regards

Pavel

#5Peter Eisentraut
peter_e@gmx.net
In reply to: jian he (#1)
Re: function signature allow "default" keyword

On 15.05.23 10:33, jian he wrote:

function idea.
allow function calling using the default keyword for any of the input
arguments.

example: https://dbfiddle.uk/FQwnfdmm <https://dbfiddle.uk/FQwnfdmm&gt;
So something like this "SELECT * FROM customer_orders(2579927,
'order_placed_on DESC', default, 2);"
should work.

This is currently not supported by PostgreSQL. I have half a patch for
it, though, so maybe we'll get to it one day.