BUG #3181: ecpg generating wrong code

Started by Steve Giesekingabout 19 years ago2 messagesbugs
Jump to latest
#1Steve Gieseking
steve.gieseking@camotion.com

The following bug has been logged online:

Bug reference: 3181
Logged by: Steve Gieseking
Email address: steve.gieseking@camotion.com
PostgreSQL version: 8.2.3
Operating system: Linux Fedora Core 6
Description: ecpg generating wrong code
Details:

I am maintaining code that uses ecpg. The following query was working with
the previous version of ecpg:

exec sql SELECT count(PortNum) INTO :cnt FROM Serial
WHERE ProjectId = :prjId and Enable = true;

After upgrading, the code is produced incorrectly. It now generates code as
follows:

{ ECPGdo(__LINE__, 0, 1, NULL, "select count ( PortNum ) from Serial
where ProjectId = ? and ensable = true ",
ECPGt_int,&(prjId),(long)1,(long)1,sizeof(int),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT,
ECPGt_int,&(cnt),(long)1,(long)1,sizeof(int),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);

The problem is the translation to ensable. This appears to be caused by the
file 'preproc.y' at the line:

| ENABLE_P { $$ = make_str("ensable"); }

Changing this to 'enable', fixes the problem.

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Steve Gieseking (#1)
Re: BUG #3181: ecpg generating wrong code

"Steve Gieseking" <steve.gieseking@camotion.com> writes:

I am maintaining code that uses ecpg. The following query was working with
the previous version of ecpg:
...
The problem is the translation to ensable. This appears to be caused by the
file 'preproc.y' at the line:
| ENABLE_P { $$ = make_str("ensable"); }

Good catch, but AFAICS this was broken in 8.1 as well. What "previous
version" are you comparing to?

regards, tom lane