BUG #16547: ECPG can't CALL the procedure which has INOUT parameter

Started by PG Bug reporting formalmost 6 years ago4 messagesbugs
Jump to latest
#1PG Bug reporting form
noreply@postgresql.org

The following bug has been logged on the website:

Bug reference: 16547
Logged by: yusuke egashira
Email address: egashira.yusuke@jp.fujitsu.com
PostgreSQL version: 11.8
Operating system: Red Hat Enterprise Linux Server release 6.10
Description:

I created the procedure with INOUT parameter as :
CREATE OR REPLACE PROCEDURE inout_proc(a in int, b inout int)
LANGUAGE plpgsql AS $$
BEGIN
b = a + b;
RETURN;
END;
$$;

If I called it in ECPG by "EXEC SQL CALL inout_proc(1,2);", "SQL error: too
few arguments on line xx" is caused.

On the other hand, if the procedure don't have INOUT parameter (IN only),
"EXEC SQL CALL inout_proc(1,2);" statement succeeded.

This error seems to occur because ECPG doesn't expect the value to be
returned by CALL statement.
Is this a bug?
Or, is the current version limited to calling procedures with INOUT
parameters from ECPG?

I found this behavior in PostgreSQL 11.8 and 12.3.

Also, I found the patch[1]/messages/by-id/CAE9k0P=GQFjfy9jHCPDw4Eh_xE=Nw=9y4f-CuTZp1L+6vEHwFg@mail.gmail.com introducing "INTO" clause in CALL of ECPG.
However, the patch changes the EXC SQL CALL statement to always require INTO
clause.

[1]: /messages/by-id/CAE9k0P=GQFjfy9jHCPDw4Eh_xE=Nw=9y4f-CuTZp1L+6vEHwFg@mail.gmail.com
/messages/by-id/CAE9k0P=GQFjfy9jHCPDw4Eh_xE=Nw=9y4f-CuTZp1L+6vEHwFg@mail.gmail.com

#2Bruce Momjian
bruce@momjian.us
In reply to: PG Bug reporting form (#1)
Re: BUG #16547: ECPG can't CALL the procedure which has INOUT parameter

On Tue, Jul 21, 2020 at 07:44:54AM +0000, PG Bug reporting form wrote:

The following bug has been logged on the website:

Bug reference: 16547
Logged by: yusuke egashira
Email address: egashira.yusuke@jp.fujitsu.com
PostgreSQL version: 11.8
Operating system: Red Hat Enterprise Linux Server release 6.10
Description:

I created the procedure with INOUT parameter as :
CREATE OR REPLACE PROCEDURE inout_proc(a in int, b inout int)
LANGUAGE plpgsql AS $$
BEGIN
b = a + b;
RETURN;
END;
$$;

If I called it in ECPG by "EXEC SQL CALL inout_proc(1,2);", "SQL error: too
few arguments on line xx" is caused.

On the other hand, if the procedure don't have INOUT parameter (IN only),
"EXEC SQL CALL inout_proc(1,2);" statement succeeded.

This error seems to occur because ECPG doesn't expect the value to be
returned by CALL statement.
Is this a bug?
Or, is the current version limited to calling procedures with INOUT
parameters from ECPG?

I found this behavior in PostgreSQL 11.8 and 12.3.

Also, I found the patch[1] introducing "INTO" clause in CALL of ECPG.
However, the patch changes the EXC SQL CALL statement to always require INTO
clause.

[1]
/messages/by-id/CAE9k0P=GQFjfy9jHCPDw4Eh_xE=Nw=9y4f-CuTZp1L+6vEHwFg@mail.gmail.com

This looks like something we should either fix or document. Michael
Meskes, do you have an opinion?

--
Bruce Momjian <bruce@momjian.us> https://momjian.us
EnterpriseDB https://enterprisedb.com

The usefulness of a cup is in its emptiness, Bruce Lee

#3Michael Meskes
meskes@postgresql.org
In reply to: Bruce Momjian (#2)
Re: BUG #16547: ECPG can't CALL the procedure which has INOUT parameter

...
Also, I found the patch[1] introducing "INTO" clause in CALL of
ECPG.
However, the patch changes the EXC SQL CALL statement to always
require INTO
clause.

[1]
/messages/by-id/CAE9k0P=GQFjfy9jHCPDw4Eh_xE=Nw=9y4f-CuTZp1L+6vEHwFg@mail.gmail.com

This looks like something we should either fix or document. Michael
Meskes, do you have an opinion?

Yes, I think it should definitely be fixed. In fact I was looking into
it and iirc the patch mentioned had a couple issues but could be a good
base for the fix. Unfortunately I have not found the time yet to take
care of it.

So in short, hopefully we can fix it shortly.

Michael
--
Michael Meskes
Michael at Fam-Meskes dot De
Michael at Meskes dot (De|Com|Net|Org)
Meskes at (Debian|Postgresql) dot Org

#4Bruce Momjian
bruce@momjian.us
In reply to: Michael Meskes (#3)
Re: BUG #16547: ECPG can't CALL the procedure which has INOUT parameter

On Sat, Aug 22, 2020 at 05:52:23PM +0200, Michael Meskes wrote:

...
Also, I found the patch[1] introducing "INTO" clause in CALL of
ECPG.
However, the patch changes the EXC SQL CALL statement to always
require INTO
clause.

[1]
/messages/by-id/CAE9k0P=GQFjfy9jHCPDw4Eh_xE=Nw=9y4f-CuTZp1L+6vEHwFg@mail.gmail.com

This looks like something we should either fix or document. Michael
Meskes, do you have an opinion?

Yes, I think it should definitely be fixed. In fact I was looking into
it and iirc the patch mentioned had a couple issues but could be a good
base for the fix. Unfortunately I have not found the time yet to take
care of it.

So in short, hopefully we can fix it shortly.

Thank you. I am glad you are aware of it.

--
Bruce Momjian <bruce@momjian.us> https://momjian.us
EnterpriseDB https://enterprisedb.com

The usefulness of a cup is in its emptiness, Bruce Lee