On Tue, Nov 1, 2016 at 2:55 AM, Peter Eisentraut <
peter.eisentraut@2ndquadrant.com> wrote:
>
> Here is a patch series that implements several changes in the internal
> grammar and node representation of function signatures. They are not
> necessarily meant to be applied separately, but they explain the
> progression of the changes nicely, so I left them like that for review.
>
> The end goal is to make some user-visible changes in DROP FUNCTION and
> possibly other commands that refer to functions.
>
> With these patches, it is now possible to use DROP FUNCTION to drop
> multiple functions at once: DROP FUNCTION func1(), func2(), func3().
> Other DROP commands already supported that, but DROP FUNCTION didn't
> because the internal representation was complicated and couldn't handle it.
>
> The next step after this would be to allow referring to functions
> without having to supply the arguments, if the name is unique. This is
> an SQL-standard feature and would be very useful for dealing "business
> logic" functions with 10+ arguments. The details of that are to be
> worked out, but with the help of the present changes, this would be a
> quite localized change, because the grammar representation is well
> encapsulated.
>
Really nice... just a little about 006, can't we reduce the code bellow?
@@ -823,8 +823,7 @@ get_object_address(ObjectType objtype, List *objname, List *objargs,
{
FuncWithArgs *fwa = (FuncWithArgs *) linitial(objname);
address.classId = ProcedureRelationId;
- address.objectId =
- LookupAggNameTypeNames(fwa->funcname, fwa->funcargs, missing_ok);
+ address.objectId = LookupAggWithArgs(fwa, missing_ok);
address.objectSubId = 0;
break;
}
@@ -832,8 +831,7 @@ get_object_address(ObjectType objtype, List *objname, List *objargs,
{
FuncWithArgs *fwa = (FuncWithArgs *) linitial(objname);
address.classId = ProcedureRelationId;
- address.objectId =
- LookupFuncNameTypeNames(fwa->funcname, fwa->funcargs, missing_ok);
+ address.objectId = LookupFuncWithArgs(fwa, missing_ok);
address.objectSubId = 0;
break;
}