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
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;