proposal: plpgsql, solution for derivated types of parameters

Started by Pavel Stehuleover 15 years ago5 messages
#1Pavel Stehule
pavel.stehule@gmail.com

Hello,

the current plpgsql syntax doesn't offer a functionality to define
some variable with type as element of some other array variable or
reverse order. The primary goal of this proposal is enahancing plpgsql
for better working with polymorphic types.

I propose a following syntax:

-- variable as element of some array
DECLARE elementvar IS ELEMENT OF arrayvar;
DECLARE elementvar IS ELEMENT OF arrayvar%type

-- variable as array of some variable
DECLARE arrayvar IS ARRAY OF varname;
DECLARE arrayvar IS ARRAY OF varname%type

This proposal doesn't introduce any new reserved keywords.

Comments?

Regards

Pavel Stehule

#2Itagaki Takahiro
itagaki.takahiro@gmail.com
In reply to: Pavel Stehule (#1)
Re: proposal: plpgsql, solution for derivated types of parameters

On Fri, Oct 8, 2010 at 3:08 PM, Pavel Stehule <pavel.stehule@gmail.com> wrote:

I propose a following syntax:

-- variable as element of some array
DECLARE elementvar IS ELEMENT OF arrayvar;
DECLARE elementvar IS ELEMENT OF arrayvar%type

-- variable as array of some variable
DECLARE arrayvar IS ARRAY OF varname;
DECLARE arrayvar IS ARRAY OF varname%type

This proposal doesn't introduce any new reserved keywords.

FYI, Oracle PL/SQL supports type declaration and array
variables are declare as the type.

DECLARE
TYPE array_type_name IS {VARRAY | VARYING ARRAY} (size_limit)
OF element_type [NOT NULL];
a1 array_type_name;

"IS ARRAY OF" syntax is similar enough to PL/SQL, but is not compatible.

I'm not sure whether PL/SQL has "IS ELEMENT OF" variants.

--
Itagaki Takahiro

#3Pavel Stehule
pavel.stehule@gmail.com
In reply to: Itagaki Takahiro (#2)
Re: proposal: plpgsql, solution for derivated types of parameters

2010/10/8 Itagaki Takahiro <itagaki.takahiro@gmail.com>:

On Fri, Oct 8, 2010 at 3:08 PM, Pavel Stehule <pavel.stehule@gmail.com> wrote:

I propose a following syntax:

-- variable as element of some array
DECLARE elementvar IS ELEMENT OF arrayvar;
DECLARE elementvar IS ELEMENT OF arrayvar%type

-- variable as array of some variable
DECLARE arrayvar IS ARRAY OF varname;
DECLARE arrayvar IS ARRAY OF varname%type

This proposal doesn't introduce any new reserved keywords.

FYI, Oracle PL/SQL supports type declaration and array
variables are declare as the type.

 DECLARE
   TYPE array_type_name IS {VARRAY | VARYING ARRAY} (size_limit)
     OF element_type [NOT NULL];
   a1 array_type_name;

"IS ARRAY OF" syntax is similar enough to PL/SQL, but is not compatible.

it is compatible, but used in different place (clause).

I'm not sure whether PL/SQL has "IS ELEMENT OF" variants.

yes, it is inspiration. I think so we can use this pattern because
plpgsql cannot to declare a local type. IS ELEMENT OF isn't supported
by Oracle. But Oracle must not solve this problem, because it doesn't
support a polymorphic types.

Pavel

Show quoted text

--
Itagaki Takahiro

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Pavel Stehule (#1)
Re: proposal: plpgsql, solution for derivated types of parameters

Pavel Stehule <pavel.stehule@gmail.com> writes:

the current plpgsql syntax doesn't offer a functionality to define
some variable with type as element of some other array variable or
reverse order. The primary goal of this proposal is enahancing plpgsql
for better working with polymorphic types.

I haven't seen any actual field complaints that would be solved by this.
How often is it really going to be useful?

DECLARE elementvar IS ELEMENT OF arrayvar;
DECLARE arrayvar IS ARRAY OF varname;

Both of these notations seem pretty inconsistent with the rest of
plpgsql, as well as being dead ends when you think about extensions to
more complex situations like arrays of records or records of arrays.
I'd expect to do the former with something like "arrayvar[0]%type" and
the latter with "var%type[]". Possibly some parentheses would be needed
to make this non-ambiguous.

regards, tom lane

#5Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#4)
Re: proposal: plpgsql, solution for derivated types of parameters

2010/10/8 Tom Lane <tgl@sss.pgh.pa.us>:

Pavel Stehule <pavel.stehule@gmail.com> writes:

the current plpgsql syntax doesn't offer a functionality to define
some variable with type as element of some other array variable or
reverse order. The primary goal of this proposal is enahancing plpgsql
for better working with polymorphic types.

I haven't seen any actual field complaints that would be solved by this.
How often is it really going to be useful?

DECLARE elementvar IS ELEMENT OF arrayvar;
DECLARE arrayvar IS ARRAY OF varname;

Both of these notations seem pretty inconsistent with the rest of
plpgsql, as well as being dead ends when you think about extensions to
more complex situations like arrays of records or records of arrays.
I'd expect to do the former with something like "arrayvar[0]%type" and

uff "arrayvar[0]%type" should be in plpgsql spirit? There is nothing
similar in Ada, PL/SQL or languages similar to modula. I don't see why
my proposal cannot work with more complex types. This is maybe C
construct - it must not be used for plpgsql - subscripts can start
with other number than zero.

DECLARE arrayvar IS ARRAY OF sometype

or

DECLARE arrayvar IS ARRAY OF somevar%type;

possible

DECLARE arrayvar IS ARRAY OF somerec.field%type;

This syntax is similar to Ada language.

Show quoted text

the latter with "var%type[]".  Possibly some parentheses would be needed
to make this non-ambiguous.

                       regards, tom lane