Re: proposal: PLpgSQL parallel assignemnt

From: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
To: Craig Ringer <craig(at)2ndquadrant(dot)com>
Cc: PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: proposal: PLpgSQL parallel assignemnt
Date: 2017-06-02 19:51:01
Message-ID: CAFj8pRDZU=A=ZmRe_P4kWoM1m=y+hQom60OkNgT-y6FpsH_WFw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

2017-06-02 19:05 GMT+02:00 Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>:

>
>
> 2017-06-02 10:15 GMT+02:00 Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>:
>
>>
>>
>> 2017-06-02 10:06 GMT+02:00 Craig Ringer <craig(at)2ndquadrant(dot)com>:
>>
>>> On 2 June 2017 at 15:51, Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com> 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
>>>
>>
>>
>

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Chapman Flack 2017-06-02 19:51:57 Re: TAP: allow overriding PostgresNode in get_new_node
Previous Message J Chapman Flack 2017-06-02 19:47:12 Re: TAP: allow overriding PostgresNode in get_new_node