Обсуждение: Pb with ecpg and include file on PG 8.0.0
Hi,
I have a set of libraries and C/C++ programs with embedded access to
a PG database. I'm using ecpg. I'm working on a Linux RedHat9 platform.
Until now I was in PG 7.4.2 :
[clipg@li SrcLib]$ ecpg --version
ecpg (PostgreSQL 7.4.2) 3.1.1
[clipg@li SrcLib]$ g++ --version
g++ (GCC) 3.2.2 20030222 (Red Hat Linux 3.2.2-5)
Copyright (C) 2002 Free Software Foundation, Inc.
and without any problem.
I installed PG 8.0.0beta2 :
[clipg@li SrcLib]$ ecpg --version
ecpg (PostgreSQL 8.0.0beta2) 3.2.0
And if I try to recompile I find pre-compiled errors, variables which
are defined in an include file are not "seen".
Is there any known problem or bug about this ?
Detail :
======= Precompiling DbTablesFk.pgc =======
ecpg DbTablesFk.pgc -I/VALE/users/clipg/Server/Include -o DbTablesFk.cc
DbTablesFk.pgc:144: ERROR: trying to access an undeclared cursor MAX_FK
DbTablesFk.pgc:144: ERROR: syntax error at or near "IN"
and in the program :
...
EXEC SQL INCLUDE DbTablesUtilPg.hh;
...
EXEC SQL PREPARE S FROM :sqlstmt;
EXEC SQL DECLARE C_FK_COL CURSOR FOR S;
EXEC SQL OPEN C_FK_COL;
EXEC SQL FETCH MAX_FK IN C_FK_COL INTO :fk_id_L , :valid_L, :target_t_L;
with MAX_FK a variable defined in the file
/VALE/users/clipg/Server/Include/DbTablesUtilPg.hh :
exec sql define MAX_FK 100;
If I replace the MAX_FK variable by its value it's OK.
If I define the MAX_FK variable directly in the program (and not
in an include file) it's OK.
Any idea ? Thanks for all, Valerie.
--
********************************************************************
* Les points de vue exprimes sont strictement personnels et *
* n'engagent pas la responsabilite de METEO-FRANCE. *
********************************************************************
* Valerie SCHNEIDER Tel : +33 (0)5 61 07 81 91 *
* METEO-FRANCE / DSI/DEV Fax : +33 (0)5 61 07 81 09 *
* 42, avenue G. Coriolis Email : Valerie.Schneider@meteo.fr *
* 31057 TOULOUSE Cedex - FRANCE http://www.meteo.fr *
********************************************************************
Valerie Schneider DSI/DEV wrote:
> ...
> EXEC SQL INCLUDE DbTablesUtilPg.hh;
> ...
>
> EXEC SQL PREPARE S FROM :sqlstmt;
> EXEC SQL DECLARE C_FK_COL CURSOR FOR S;
> EXEC SQL OPEN C_FK_COL;
> EXEC SQL FETCH MAX_FK IN C_FK_COL INTO :fk_id_L , :valid_L, :target_t_L;
>
> with MAX_FK a variable defined in the file
> /VALE/users/clipg/Server/Include/DbTablesUtilPg.hh :
> exec sql define MAX_FK 100;
^
I think your problem is the semicolon.
--
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
I received this bug report and will take care of it as soon as I find time. Since I am travelling next week to give PostgreSQL training, this will take at least a week or so. 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!
On Fri, Sep 10, 2004 at 08:09:55AM +0000, Valerie Schneider DSI/DEV wrote: > I installed PG 8.0.0beta2 : > [clipg@li SrcLib]$ ecpg --version > ecpg (PostgreSQL 8.0.0beta2) 3.2.0 This works nicely for me with ecpg 3.2.0. It may be that ecpg does not find the include file. But then it should also print that. I had the file in "." where ecpg found it and the constant was correctly translated. 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!
On Tue, Sep 14, 2004 at 08:35:52AM +0000, Valerie Schneider DSI/DEV wrote: > But why ecpg found it in the 7.4 version ? I'm not even sure this is the reason. Could you please try moving the file to "." to see if it works? 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!
>Date: Tue, 14 Sep 2004 09:27:41 +0200 >From: Michael Meskes <meskes@postgresql.org> >To: Valerie Schneider DSI/DEV <valerie.schneider@meteo.fr> >Cc: pgsql-bugs@postgresql.org >Subject: Re: [BUGS] Pb with ecpg and include file on PG 8.0.0 >Mime-Version: 1.0 >Content-Disposition: inline >User-Agent: Mutt/1.5.6+20040722i >X-Provags-ID: kundenserver.de abuse@kundenserver.de auth:da5cff6069dd6897c77170232368d0ba > >On Fri, Sep 10, 2004 at 08:09:55AM +0000, Valerie Schneider DSI/DEV wrote: >> I installed PG 8.0.0beta2 : >> [clipg@li SrcLib]$ ecpg --version >> ecpg (PostgreSQL 8.0.0beta2) 3.2.0 > >This works nicely for me with ecpg 3.2.0. It may be that ecpg >does not find the include file. But then it should also print that. But why ecpg found it in the 7.4 version ? Following a remark I removed the semi-colon at the end of each exec sql define xxxxxx (I had : exec sql define xxxxxx ; ) in the include file. No result. Someone from the pgsql-fr-generale list seems to have the same problem. Thanks for your reply, Valerie. > >I had the file in "." where ecpg found it and the constant was correctly >translated. > >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! ******************************************************************** * Les points de vue exprimes sont strictement personnels et * * n'engagent pas la responsabilite de METEO-FRANCE. * ******************************************************************** * Valerie SCHNEIDER Tel : +33 (0)5 61 07 81 91 * * METEO-FRANCE / DSI/DEV Fax : +33 (0)5 61 07 81 09 * * 42, avenue G. Coriolis Email : Valerie.Schneider@meteo.fr * * 31057 TOULOUSE Cedex - FRANCE http://www.meteo.fr * ********************************************************************