ecpg -D SYMBOL

Started by Luke McFarlanealmost 22 years ago4 messagesbugs
Jump to latest
#1Luke McFarlane
luke@fisheye.com.au

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

#2Michael Meskes
meskes@postgresql.org
In reply to: Luke McFarlane (#1)
Re: ecpg -D SYMBOL

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!

#3Luke McFarlane
luke@fisheye.com.au
In reply to: Michael Meskes (#2)
Re: ecpg -D SYMBOL

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:

Show quoted text

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

#4Michael Meskes
meskes@postgresql.org
In reply to: Luke McFarlane (#3)
Re: ecpg -D SYMBOL

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!