diff options
author | Peter Eisentraut <peter_e@gmx.net> | 2018-03-02 08:57:38 -0500 |
---|---|---|
committer | Peter Eisentraut <peter_e@gmx.net> | 2018-03-02 13:48:33 -0500 |
commit | fd1a421fe66173fb9b85d3fe150afde8e812cbe4 (patch) | |
tree | 24c80c87337ec2d1bb46ee8463207d0cfff5ffc3 /src/backend/parser/parse_func.c | |
parent | 1733460f0205fc6d6bbe4c14911049a918c6e073 (diff) | |
download | postgresql-fd1a421fe66173fb9b85d3fe150afde8e812cbe4.tar.gz postgresql-fd1a421fe66173fb9b85d3fe150afde8e812cbe4.zip |
Add prokind column, replacing proisagg and proiswindow
The new column distinguishes normal functions, procedures, aggregates,
and window functions. This replaces the existing columns proisagg and
proiswindow, and replaces the convention that procedures are indicated
by prorettype == 0. Also change prorettype to be VOIDOID for procedures.
Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Reviewed-by: Michael Paquier <michael@paquier.xyz>
Diffstat (limited to 'src/backend/parser/parse_func.c')
-rw-r--r-- | src/backend/parser/parse_func.c | 35 |
1 files changed, 24 insertions, 11 deletions
diff --git a/src/backend/parser/parse_func.c b/src/backend/parser/parse_func.c index 2a4ac09d5c9..ea5d5212b4c 100644 --- a/src/backend/parser/parse_func.c +++ b/src/backend/parser/parse_func.c @@ -1614,14 +1614,27 @@ func_get_detail(List *funcname, *argdefaults = defaults; } } - if (pform->proisagg) - result = FUNCDETAIL_AGGREGATE; - else if (pform->proiswindow) - result = FUNCDETAIL_WINDOWFUNC; - else if (pform->prorettype == InvalidOid) - result = FUNCDETAIL_PROCEDURE; - else - result = FUNCDETAIL_NORMAL; + + switch (pform->prokind) + { + case PROKIND_AGGREGATE: + result = FUNCDETAIL_AGGREGATE; + break; + case PROKIND_FUNCTION: + result = FUNCDETAIL_NORMAL; + break; + case PROKIND_PROCEDURE: + result = FUNCDETAIL_PROCEDURE; + break; + case PROKIND_WINDOW: + result = FUNCDETAIL_WINDOWFUNC; + break; + default: + elog(ERROR, "unrecognized prokind: %c", pform->prokind); + result = FUNCDETAIL_NORMAL; /* keep compiler quiet */ + break; + } + ReleaseSysCache(ftup); return result; } @@ -2067,7 +2080,7 @@ LookupFuncWithArgs(ObjectType objtype, ObjectWithArgs *func, bool noError) if (objtype == OBJECT_FUNCTION) { /* Make sure it's a function, not a procedure */ - if (oid && get_func_rettype(oid) == InvalidOid) + if (oid && get_func_prokind(oid) == PROKIND_PROCEDURE) { if (noError) return InvalidOid; @@ -2098,7 +2111,7 @@ LookupFuncWithArgs(ObjectType objtype, ObjectWithArgs *func, bool noError) } /* Make sure it's a procedure */ - if (get_func_rettype(oid) != InvalidOid) + if (get_func_prokind(oid) != PROKIND_PROCEDURE) { if (noError) return InvalidOid; @@ -2134,7 +2147,7 @@ LookupFuncWithArgs(ObjectType objtype, ObjectWithArgs *func, bool noError) } /* Make sure it's an aggregate */ - if (!get_func_isagg(oid)) + if (get_func_prokind(oid) != PROKIND_AGGREGATE) { if (noError) return InvalidOid; |