On 2023/10/17 12:15, Pavel Stehule wrote:


út 17. 10. 2023 v 3:30 odesílatel Quan Zongliang <quanzongli...@yeah.net <mailto:quanzongli...@yeah.net>> napsal:



    On 2023/10/16 20:05, Pavel Stehule wrote:
     >
     >
     > po 16. 10. 2023 v 13:56 odesílatel Daniel Gustafsson
    <dan...@yesql.se <mailto:dan...@yesql.se>
     > <mailto:dan...@yesql.se <mailto:dan...@yesql.se>>> napsal:
     >
     >      > On 16 Oct 2023, at 12:15, Quan Zongliang
    <quanzongli...@yeah.net <mailto:quanzongli...@yeah.net>
     >     <mailto:quanzongli...@yeah.net
    <mailto:quanzongli...@yeah.net>>> wrote:
     >
     >      > Implement TODO item:
     >      > PL/pgSQL
     >      > Incomplete item Allow handling of %TYPE arrays, e.g.
    tab.col%TYPE[]
     >
     >     Cool!  While I haven't looked at the patch yet, I've wanted this
     >     myself many
     >     times in the past when working with large plpgsql codebases.
     >
     >      > As a first step, deal only with [], such as
     >      > xxx.yyy%TYPE[]
     >      > xxx%TYPE[]
     >      >
     >      > It can be extended to support multi-dimensional and complex
     >     syntax in the future.
     >
     >     Was this omitted due to complexity of implementation or for some
     >     other reason?
     >
    Because of complexity.

     >
     > There is no reason for describing enhancement. The size and
    dimensions
     > of postgresql arrays are dynamic, depends on the value, not on
     > declaration. Now, this information is ignored, and can be
    compatibility
     > break to check and enforce this info.
     >
    Yes. I don't think it's necessary.
    If anyone needs it, we can continue to enhance it in the future.


I don't think it is possible to do it.  But there is another missing functionality, if I remember well. There is no possibility to declare variables for elements of array.
The way it's done now is more like laziness.

Is it possible to do that?
If the parser encounters %TYPE[][]. It can be parsed. Then let parse_datatype do the rest.

For example, partitioned_table.a%TYPE[][100][]. Parse the type name(int4) of partitioned_table.a%TYPE and add the following [][100][]. Passing "int4[][100][]" to parse_datatype will give us the array definition we want.

Isn't this code a little ugly?


I propose syntax xxx.yyy%ELEMENTTYPE and xxx%ELEMENTTYPE

What do you think about it?
No other relational database can be found with such an implementation. But it seems like a good idea. It can bring more convenience to write stored procedure.


Regards

Pavel


     >
     >     --
     >     Daniel Gustafsson
     >
     >
     >




Reply via email to