Обсуждение: 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]: ECPGdebug: set to 1
[1116]: ECPGconnect: opening database mydb on <DEFAULT> port <DEFAULT>
for user rank
[1116]: ECPGexecute line 16: QUERY: select n from t on connection mydb
[1116]: ECPGexecute line 16: Correctly got 0 tuples with 1 fields
[1116]: raising sqlcode 100 in line 16, 'No data found in line 16.'.
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]: 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? 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 ) ); > #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 > > ---------------------------(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