ECPG - bug in EXEC SQL WHENEVER NOT FOUND?
Today I ran into problems when combining a C program with SQL statements
with the ECPG interface of PostgreSQL:
According to the documentation, it should be possible with
EXEC SQL WHENEVER NOT FOUND action
to trigger an action when a query does not return a row.
This does not seem to function. Here is the C program I tested:
----------------------------------------------------------------
/* Test for ecpg interface */
/* An empty table
t (n INTEGER);
must exist in the database
*/
#include <stdio.h>
EXEC SQL BEGIN DECLARE SECTION;
int i;
EXEC SQL END DECLARE SECTION;
int main ()
{ int c;
ECPGdebug(1,stdout);
EXEC SQL WHENEVER SQLERROR SQLPRINT;
EXEC SQL WHENEVER NOT FOUND GOTO notfound;
EXEC SQL CONNECT TO unix:postgresql://localhost/mydb USER rank;
EXEC SQL SELECT n INTO :i FROM t;
printf ("%d\n", i);
EXEC SQL DISCONNECT;
exit (0);
notfound:
printf ("no data found\n");
EXEC SQL DISCONNECT;
exit (0);
}
----------------------------------------------------------------
When running this program on an empty table t in the database, it produces:
[1116]: ecpg_finish: Connection mydb closed.
[1116]: ecpg_finish: Connection mydb closed.
for user rank
[1116]: ecpg_finish: Connection mydb closed.
[1116]: ecpg_finish: Connection mydb closed.
[1116]: ecpg_finish: Connection mydb closed.
0
[1116]: ecpg_finish: Connection mydb closed.
We can see that sqlcode is set correctly, but the jump to the C-label
notfound does not occur.
Is this a bug in ECPG or am I doing something wrong?
Thanks in advance for your help,
Christian Rank
On Sat, Mar 06, 2004 at 09:54:13PM +0100, Christian Rank wrote:
Today I ran into problems when combining a C program with SQL statements
with the ECPG interface of PostgreSQL:According to the documentation, it should be possible with
EXEC SQL WHENEVER NOT FOUND action
to trigger an action when a query does not return a row.
Yes, that should work.
Is this a bug in ECPG or am I doing something wrong?
Which version are you using? I get this:
postgres@feivel:/home/postgres/pgsql/src/interfaces/ecpg$ ./a
[21964]: ecpg_finish: Connection mm closed.
[21964]: ecpg_finish: Connection mm closed.
[21964]: ecpg_finish: Connection mm closed.
[21964]: ecpg_finish: Connection mm closed.
[21964]: ecpg_finish: Connection mm closed.
no data found
[21964]: ecpg_finish: Connection mm closed.
Looks okay, doesn't it?
Michael
--
Michael Meskes
Email: Michael at Fam-Meskes dot De
ICQ: 179140304, AIM/Yahoo: michaelmeskes, Jabber: meskes@jabber.org
Go SF 49ers! Go Rhein Fire! Use Debian GNU/Linux! Use PostgreSQL!
Michael Meskes wrote:
On Sat, Mar 06, 2004 at 09:54:13PM +0100, Christian Rank wrote:
Today I ran into problems when combining a C program with SQL statements
with the ECPG interface of PostgreSQL:According to the documentation, it should be possible with
EXEC SQL WHENEVER NOT FOUND action
to trigger an action when a query does not return a row.Yes, that should work.
Is this a bug in ECPG or am I doing something wrong?
Which version are you using? I get this:
postgres@feivel:/home/postgres/pgsql/src/interfaces/ecpg$ ./a
[21964]: ECPGdebug: set to 1
[21964]: ECPGconnect: opening database mm on <DEFAULT> port <DEFAULT>
[21964]: ECPGexecute line 16: QUERY: select n from t on connection mm
[21964]: ECPGexecute line 16: Correctly got 0 tuples with 1 fields
[21964]: raising sqlcode 100 in line 16, 'No data found in line 16.'.
no data found
[21964]: ecpg_finish: Connection mm closed.Looks okay, doesn't it?
Sorry that I didn't mention: I have PostgreSQL 7.4.1 on Slackware 9.1.
Today I tried with a 7.5devel snapshot of 16.02.2004. In this version,
everything works as it should, so I assume that this bug is fixed in the
meantime.
Thank you very much for your help,
Christian
--
Dr. Christian Rank
Rechenzentrum Universit�t Passau
Innstr. 33
D-94032 Passau
GERMANY
Tel.: 0851/509-1838
Fax: 0851/509-1802
PGP public key see http://www.rz.uni-passau.de/mitarbeiter/rank
Hello,
I want to implement HAND_CURSOR for my app so I have
ot ifdef SetCursor() and load it accordingly in my
windows app.
Here is the code I am using:
#ifdef _WIN32
m_HandCursor = wxCursor ( wxCURSOR_HAND );
#else
m_HandCursor = wxCursor ( (WXHCURSOR) LoadCursor (
NULL, IDC_HAND ) );
#endif
If I compile it is giving me error:
error C2065: 'LoadCursor' : undeclared identifier
error C2065: 'IDC_HAND' : undeclared identifier
I presume that it is not working since I have not
included windows.h. So I go ahead and include it:
#ifdef _WIN32
#include <windows.h>
#endif
Now, if I compile it is giving me errors in
wxBufferedPaintDC.DrawText() which I am using in my
app. VC 6.0 is giving me:
'DrawTextA' : is not a member of 'wxBufferedPaintDC'
h:\wxwin\include\wx\dcbuffer.h(85) : see
declaration of 'wxBufferedPaintDC'
Can somebody tell me what I am doing wrong? Am I
missing something
Karam
__________________________________
Do you Yahoo!?
Yahoo! Search - Find what you���re looking for faster
http://search.yahoo.com
Ooooooooooooppss..
I am extremely sorry. I took up the wrong mailing
address from my address book. It should have been
posted to wxWindows mailing list.
Regards
Karam
--- Karam Chand <karam_chand03@yahoo.com> wrote:
Hello,
I want to implement HAND_CURSOR for my app so I have
ot ifdef SetCursor() and load it accordingly in my
windows app.Here is the code I am using:
#ifdef _WIN32
m_HandCursor = wxCursor ( wxCURSOR_HAND );
#else
m_HandCursor = wxCursor ( (WXHCURSOR) LoadCursor (
NULL, IDC_HAND ) );
#endifIf I compile it is giving me error:
error C2065: 'LoadCursor' : undeclared identifier
error C2065: 'IDC_HAND' : undeclared identifierI presume that it is not working since I have not
included windows.h. So I go ahead and include it:#ifdef _WIN32
#include <windows.h>
#endifNow, if I compile it is giving me errors in
wxBufferedPaintDC.DrawText() which I am using in my
app. VC 6.0 is giving me:'DrawTextA' : is not a member of 'wxBufferedPaintDC'
h:\wxwin\include\wx\dcbuffer.h(85) : see
declaration of 'wxBufferedPaintDC'Can somebody tell me what I am doing wrong? Am I
missing somethingKaram
__________________________________
Do you Yahoo!?
Yahoo! Search - Find what you���re looking for faster
http://search.yahoo.com---------------------------(end of
broadcast)---------------------------
TIP 9: the planner will ignore your desire to choose
an index scan if your
joining column's datatypes do not match
__________________________________
Do you Yahoo!?
Yahoo! Search - Find what you���re looking for faster
http://search.yahoo.com
Christian Rank wrote:
postgres@feivel:/home/postgres/pgsql/src/interfaces/ecpg$ ./a
[21964]: ECPGdebug: set to 1
[21964]: ECPGconnect: opening database mm on <DEFAULT> port <DEFAULT>
[21964]: ECPGexecute line 16: QUERY: select n from t on connection mm
[21964]: ECPGexecute line 16: Correctly got 0 tuples with 1 fields
[21964]: raising sqlcode 100 in line 16, 'No data found in line 16.'.
no data found
[21964]: ecpg_finish: Connection mm closed.Looks okay, doesn't it?
Sorry that I didn't mention: I have PostgreSQL 7.4.1 on Slackware 9.1.
Today I tried with a 7.5devel snapshot of 16.02.2004. In this version,
everything works as it should, so I assume that this bug is fixed in the
meantime.
And 7.4.2 (unreleased) notes state the fix:
* Added ecpg WHENEVER NOT_FOUND to SELECT/INSERT/UPDATE/DELETE
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073