Hi. I have tried to do some review of this patch. Below are my comments.
Introduction:
This patch fixes and adds the following functionality: - %TYPE - now can be used for composite types. - %ARRAYTYPE - new functionality, provides the array type from a variable or table column. - %ELEMENTTYPE - new funcitonality, provides the element type of a given array.
New regression tests are included in the patch. Changes to the documentation are not provided.
Initial Run:
The patch applies correctly to HEAD. Regression tests pass successfully, without errors. It seems that the patch work as you expected.
Performance:
It seems patch have not possible performance issues for the existing functionality.
Coding:
The style looks fine. I attached the patch that does some corrections in code and documentation. I have corrected indentation in pl_comp.c and "read_datatype" function in pl_gram.y. I think changes in "read_datatype" function would be better to avoid a code duplication. But I could be wrong of course.
I merged Artur's patch and appended examples to doc.
Conclusion:
The patch could be applied on master with documentation corrections. But I'm not sure that your task could be resloved only by adding %ARRAYTYPE and %ELEMENTTYPE. Maybe you will give some examples?
It fixes the most missed/known features related to this part of plpgsql, what I found. But any ideas for this or follofup patches are welcome.