Thread: ecpg -D SYMBOL

ecpg -D SYMBOL

From
Luke McFarlane
Date:
Hi

I'm running postgresql 7.4.1 and ecpg 3.1.0.

When defining a symbol on the command line with ecpg -D SYMBOL the ecpg
preprocessor will replace that symbol with empty space in 'C' program
space rather than limiting it to 'SQL' program space.

For example:

EXEC SQL IFDEF SYMBOL;
EXEC SQL ...
EXEC SQL ENDIF;

#ifdef SYMBOL
...
#endif

compiling with ecpg -D SYMBOL results in

EXEC SQL IFDEF SYMBOL;
EXEC SQL ...
EXEC SQL ENDIF;

#ifdef
...
#endif

It shouldn't touch anything outside EXEC SQL.

Also, if you try to fool ecpg by compiling with ecpg -D SYMBOL=SYMBOL it
will sit in an infinite loop gobbling as much virtual memory as it sees fit.

Luke

Re: ecpg -D SYMBOL

From
Michael Meskes
Date:
On Tue, Jul 06, 2004 at 03:49:14PM +1000, Luke McFarlane wrote:
> When defining a symbol on the command line with ecpg -D SYMBOL the ecpg
> preprocessor will replace that symbol with empty space in 'C' program
> space rather than limiting it to 'SQL' program space.

This indeed is a bug, but ecpg has never been designed to limit symbols
to SQL space. You're absolutely right that it should not use empty
space. I just fixed that in CVS. Now it correctly uses "1".

> It shouldn't touch anything outside EXEC SQL.

Why? That means you have to define most things twice.

> Also, if you try to fool ecpg by compiling with ecpg -D SYMBOL=SYMBOL it
> will sit in an infinite loop gobbling as much virtual memory as it sees fit.

Ah yes, another bug.

I just committed a fix for this as well.

All fixes went into HEAD and 7.4.

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!

Re: ecpg -D SYMBOL

From
Luke McFarlane
Date:
Defining things twice - once in 'SQL' space and once in 'C' space is
something I struggled with when using Informix ESQL/C. I like the idea
of having it apply to both.

Although if you are to support INFORMIX or INFORMIX_SE mode in ecpg you
will need limit it to 'SQL' space (for these modes anyway).

Michael Meskes wrote:

>On Tue, Jul 06, 2004 at 03:49:14PM +1000, Luke McFarlane wrote:
>
>
>>When defining a symbol on the command line with ecpg -D SYMBOL the ecpg
>>preprocessor will replace that symbol with empty space in 'C' program
>>space rather than limiting it to 'SQL' program space.
>>
>>
>
>This indeed is a bug, but ecpg has never been designed to limit symbols
>to SQL space. You're absolutely right that it should not use empty
>space. I just fixed that in CVS. Now it correctly uses "1".
>
>
>
>>It shouldn't touch anything outside EXEC SQL.
>>
>>
>
>Why? That means you have to define most things twice.
>
>
>
>>Also, if you try to fool ecpg by compiling with ecpg -D SYMBOL=SYMBOL it
>>will sit in an infinite loop gobbling as much virtual memory as it sees fit.
>>
>>
>
>Ah yes, another bug.
>
>I just committed a fix for this as well.
>
>All fixes went into HEAD and 7.4.
>
>Michael
>
>
>

Re: ecpg -D SYMBOL

From
Michael Meskes
Date:
On Fri, Jul 23, 2004 at 03:49:30PM +1000, Luke McFarlane wrote:
> Although if you are to support INFORMIX or INFORMIX_SE mode in ecpg you
> will need limit it to 'SQL' space (for these modes anyway).

Didn't know that. Thanks for the info. Patch committed to CVS.

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!