diff options
author | Peter Eisentraut | 2020-10-27 07:58:48 +0000 |
---|---|---|
committer | Peter Eisentraut | 2020-10-27 08:01:54 +0000 |
commit | 9213462c539e6412fe0498a7f8e20b662e15c4ec (patch) | |
tree | c5ec00024da0f4675056df51bf6673556e08a24d | |
parent | 8fed2eadb8558185d162cc7fd09192c2e10b915f (diff) |
Make procedure OUT parameters work with JDBC
The JDBC driver sends OUT parameters with type void. This makes sense
when calling a function, so that the parameters are ignored in
ParseFuncOrColumn(). For a procedure call we want to treat them as
unknown.
Reviewed-by: Andrew Dunstan <[email protected]>
Discussion: https://www.postgresql.org/message-id/flat/d7e49540-ea92-b4e2-5fff-42036102f968%402ndquadrant.com
-rw-r--r-- | src/backend/parser/parse_param.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/backend/parser/parse_param.c b/src/backend/parser/parse_param.c index 17a96abfa8..93c9d82d01 100644 --- a/src/backend/parser/parse_param.c +++ b/src/backend/parser/parse_param.c @@ -163,6 +163,15 @@ variable_paramref_hook(ParseState *pstate, ParamRef *pref) if (*pptype == InvalidOid) *pptype = UNKNOWNOID; + /* + * If the argument is of type void and it's procedure call, interpret it + * as unknown. This allows the JDBC driver to not have to distinguish + * function and procedure calls. See also another component of this hack + * in ParseFuncOrColumn(). + */ + if (*pptype == VOIDOID && pstate->p_expr_kind == EXPR_KIND_CALL_ARGUMENT) + *pptype = UNKNOWNOID; + param = makeNode(Param); param->paramkind = PARAM_EXTERN; param->paramid = paramno; |