Re: [HACKERS] proposal: PLpgSQL parallel assignemnt

2017-06-02 Thread Pavel Stehule
2017-06-02 19:05 GMT+02:00 Pavel Stehule :

>
>
> 2017-06-02 10:15 GMT+02:00 Pavel Stehule :
>
>>
>>
>> 2017-06-02 10:06 GMT+02:00 Craig Ringer :
>>
>>> On 2 June 2017 at 15:51, Pavel Stehule  wrote:
>>>
>>> > a, b := fx();
>>> >
>>> > Comments, notes, ideas?
>>>
>>> I'd be pretty happy to have
>>>
>>> (a, b) = (x, y);
>>> (a, b) = f(x);
>>>
>>> which is SQL-esque.
>>>
>>
>> This is not too far to my proposal - and it is fully adequate
>> alternative.
>>
>
> The ANSI form is related to SET or UPDATE commands - so in this case I see
> classic languages style https://en.wikipedia.org/wiki/
> Assignment_(computer_science) better. The assign statement in PLpgSQL is
> not related to embedded SQL. If we introduce SQL syntax and SET commands
> for schema variables then ( ) syntax is perfect, but for := PLpgSQL I am
> not sure
>
> It is maybe strange, but
>
> SET (a,b) =  (SELECT a,b FROM foo)
>
> a, b := fx()
>
> are sentences from two independent worlds and different syntax can be
> correct (depends how much we would to integrate procedural and SQL worlds
> .. 100% T-SQL, 80% SQL/PSM, ..20% PLpgSQL or 5%PL/SQL)
>

More thoughts:

1. syntax (a,b) := f() ... can mean - assign record to temporary composite
(a,b)
2. syntax a,b := f() ... can mean - unpack result composite and assign to
a, b fields

so both syntaxes has sense although we don't introduce relation to SQL - on
this way

a,b := 10, 20   -- ok .. attach a=c1, b=c2
a,b := (10,20)  -- ok .. attach a = r.c1, b = r.c2
(a,b) := (10,20) -- ok  attach ct = rt
(a,b) := 10,20 -- ok attach ct = row(c1, c2)

@1 syntax says "create composite target", @2 syntax says "unpack result".
Both should to work. Personally I prefer @1 .. due less parenthesis

Regards

Pavel



> Regards
>
> Pavel
>
>
>>
>>
>>>
>>> But what, if anything, does Ada do?
>>>
>>
>> What I know, no, Ada has not this statement - but the design of OUT
>> parameters in Ada absolutely different than PostgreSQL - so in this case we
>> cannot to use Ada language as our base :(
>>
>> Regards
>>
>> Pavel
>>
>>
>>>
>>> --
>>>  Craig Ringer   http://www.2ndQuadrant.com/
>>>  PostgreSQL Development, 24x7 Support, Training & Services
>>>
>>
>>
>


Re: [HACKERS] proposal: PLpgSQL parallel assignemnt

2017-06-02 Thread Pavel Stehule
2017-06-02 10:15 GMT+02:00 Pavel Stehule :

>
>
> 2017-06-02 10:06 GMT+02:00 Craig Ringer :
>
>> On 2 June 2017 at 15:51, Pavel Stehule  wrote:
>>
>> > a, b := fx();
>> >
>> > Comments, notes, ideas?
>>
>> I'd be pretty happy to have
>>
>> (a, b) = (x, y);
>> (a, b) = f(x);
>>
>> which is SQL-esque.
>>
>
> This is not too far to my proposal - and it is fully adequate alternative.
>

The ANSI form is related to SET or UPDATE commands - so in this case I see
classic languages style
https://en.wikipedia.org/wiki/Assignment_(computer_science) better. The
assign statement in PLpgSQL is not related to embedded SQL. If we introduce
SQL syntax and SET commands for schema variables then ( ) syntax is
perfect, but for := PLpgSQL I am not sure

It is maybe strange, but

SET (a,b) =  (SELECT a,b FROM foo)

a, b := fx()

are sentences from two independent worlds and different syntax can be
correct (depends how much we would to integrate procedural and SQL worlds
.. 100% T-SQL, 80% SQL/PSM, ..20% PLpgSQL or 5%PL/SQL)

Regards

Pavel


>
>
>>
>> But what, if anything, does Ada do?
>>
>
> What I know, no, Ada has not this statement - but the design of OUT
> parameters in Ada absolutely different than PostgreSQL - so in this case we
> cannot to use Ada language as our base :(
>
> Regards
>
> Pavel
>
>
>>
>> --
>>  Craig Ringer   http://www.2ndQuadrant.com/
>>  PostgreSQL Development, 24x7 Support, Training & Services
>>
>
>


Re: [HACKERS] proposal: PLpgSQL parallel assignemnt

2017-06-02 Thread Pavel Stehule
2017-06-02 10:06 GMT+02:00 Craig Ringer :

> On 2 June 2017 at 15:51, Pavel Stehule  wrote:
>
> > a, b := fx();
> >
> > Comments, notes, ideas?
>
> I'd be pretty happy to have
>
> (a, b) = (x, y);
> (a, b) = f(x);
>
> which is SQL-esque.
>

This is not too far to my proposal - and it is fully adequate alternative.


>
> But what, if anything, does Ada do?
>

What I know, no, Ada has not this statement - but the design of OUT
parameters in Ada absolutely different than PostgreSQL - so in this case we
cannot to use Ada language as our base :(

Regards

Pavel


>
> --
>  Craig Ringer   http://www.2ndQuadrant.com/
>  PostgreSQL Development, 24x7 Support, Training & Services
>


Re: [HACKERS] proposal: PLpgSQL parallel assignemnt

2017-06-02 Thread Craig Ringer
On 2 June 2017 at 15:51, Pavel Stehule  wrote:

> a, b := fx();
>
> Comments, notes, ideas?

I'd be pretty happy to have

(a, b) = (x, y);
(a, b) = f(x);

which is SQL-esque.

But what, if anything, does Ada do?

-- 
 Craig Ringer   http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training & Services


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


[HACKERS] proposal: PLpgSQL parallel assignemnt

2017-06-02 Thread Pavel Stehule
Hi

Some modern or old languages (GO, Lua, CLU) has similarly designed function
OUT parameters like PLpgSQL.

In these languages is usually supported parallel assignment. It is not
supported by PLpgSQL - there is workaround - using SELECT FROM, but it is
workaround. The implementation of PA is trivial.

Current state:
==

CREATE OR REPLACE FUNCTION fx(OUT a int, OUT b int)
AS $$ ...

possibilities of CALL and assignment

recvar := fx();
rowvar := fx();

SELECT * FROM fx() INTO a, b;

Lua, Golang like proposal:

a, b := fx();

Comments, notes, ideas?

Regards

Pavel