summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Eisentraut2020-10-27 07:58:48 +0000
committerPeter Eisentraut2020-10-27 08:01:54 +0000
commit9213462c539e6412fe0498a7f8e20b662e15c4ec (patch)
treec5ec00024da0f4675056df51bf6673556e08a24d
parent8fed2eadb8558185d162cc7fd09192c2e10b915f (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.c9
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;