Обсуждение: BUG #3181: ecpg generating wrong code

Поиск
Список
Период
Сортировка

BUG #3181: ecpg generating wrong code

От
"Steve Gieseking"
Дата:
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.

Re: BUG #3181: ecpg generating wrong code

От
Tom Lane
Дата:
"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