It seems all fixes are done. I tested the patch and regression tests passed.
On 27.01.2016 20:58, Pavel Stehule wrote:
> --- 1681,1687 ----
> * ----------
> */
> PLpgSQL_type *
> ! plpgsql_parse_wordtype(char *ident, int reftype_mode)
> {
> PLpgSQL_type *dtype;
> PLpgSQL_nsitem *nse;
Use the typedef'ed enum, as above.
> --- 1699,1721 ----
> switch (nse->itemtype)
> {
> case PLPGSQL_NSTYPE_VAR:
> ! {
> ! dtype = ((PLpgSQL_var *)
(plpgsql_Datums[nse->itemno]))->datatype;
> ! return derive_type(dtype,
reftype_mode);
> ! }
>
> ! case PLPGSQL_NSTYPE_ROW:
> ! {
> ! dtype = ((PLpgSQL_row *)
(plpgsql_Datums[nse->itemno]))->datatype;
> ! return derive_type(dtype,
reftype_mode);
> ! }
>
> + /*
> + * XXX perhaps allow REC here? Probably it
has not any sense, because
> + * in this moment, because PLpgSQL doesn't
support rec parameters, so
> + * there should not be any rec polymorphic
parameter, and any work can
> + * be done inside function.
> + */
I think you should remove from the "?" onwards in that comment, i.e.
just keep what was already in the original comment (minus the ROW)
I tried to fix it, not sure if understood well.
I think here Alvaro means that you should keep original comment without
the ROW. Like this:
/* XXX perhaps allow REC here? */
> *************** extern bool plpgsql_parse_dblword(char *
> *** 961,968 ****
> PLwdatum *wdatum, PLcword
*cword);
> extern bool plpgsql_parse_tripword(char *word1, char *word2,
char *word3,
> PLwdatum *wdatum,
PLcword *cword);
> ! extern PLpgSQL_type *plpgsql_parse_wordtype(char *ident);
> ! extern PLpgSQL_type *plpgsql_parse_cwordtype(List *idents);
> extern PLpgSQL_type *plpgsql_parse_wordrowtype(char *ident);
> extern PLpgSQL_type *plpgsql_parse_cwordrowtype(List *idents);
> extern PLpgSQL_type *plpgsql_build_datatype(Oid typeOid, int32
typmod,
> --- 973,980 ----
> PLwdatum *wdatum, PLcword
*cword);
> extern bool plpgsql_parse_tripword(char *word1, char *word2,
char *word3,
> PLwdatum *wdatum,
PLcword *cword);
> ! extern PLpgSQL_type *plpgsql_parse_wordtype(char *ident, int
reftype_mode);
> ! extern PLpgSQL_type *plpgsql_parse_cwordtype(List *idents, int
reftype_mode);
> extern PLpgSQL_type *plpgsql_parse_wordrowtype(char *ident);
> extern PLpgSQL_type *plpgsql_parse_cwordrowtype(List *idents);
> extern PLpgSQL_type *plpgsql_build_datatype(Oid typeOid, int32
typmod,
By the way, these functions are misnamed after this patch. They are
called "wordtype" and "cwordtype" originally because they accept
"word%TYPE" and "compositeword%TYPE", but after the patch they not only
accept TYPE at the right of the percent sign but also ELEMENTTYPE and
ARRAYTYPE. Not sure that this is something we want to be too strict
about.
Understand - used name ***reftype instead ****type
I am not sure, but it seems that new names is a little worse. I think
original names are good too. They accept a word and return the
PLpgSQL_type structure.
Thank you for your comment
Attached updated patch
Regards
Pavel
--
Álvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
I noticed a little typo in the comment in the derive_type():
/* Return base_type, when it is a array already */
should be:
/* Return base_type, when it is an array already */
--
Artur Zakirov
Postgres Professional: http://www.postgrespro.com
Russian Postgres Company
--
Sent via pgsql-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers