Re: BUG #13676: C typedef code generated by ecpg with wrong syntax

From: John McKown <john(dot)archie(dot)mckown(at)gmail(dot)com>
To: Michael Meskes <meskes(at)postgresql(dot)org>
Cc: pgsql-bugs(at)postgresql(dot)org, glauciobb(at)hotmail(dot)com
Subject: Re: BUG #13676: C typedef code generated by ecpg with wrong syntax
Date: 2015-10-16 18:09:34
Message-ID: CAAJSdjg+9aHzvSsiOOTqBc=8WjiK=G5b5Fza9oRt=QO4AAcy9w@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

I did a "git pull" from the PostrgeSQL repository. then did a "make ecpg"
in the src/interfaces/ecpg directory. I then used the new ecpg on the
example code, followed by a gcc compile. The compile went fine. I made a
slight change to the code, just because to be:

#include <stdio.h>
EXEC SQL TYPE t_char_10 IS char[10];
EXEC SQL TYPE t_char_10d IS struct { char data[10];};
EXEC SQL TYPE char_ptr IS char reference;
int main()
{
t_char_10 string10;
int len=sizeof string10;
printf("size is: %d\n",len);
int status = 0;
return status;
}

And then:

ecpg -c test-ecpg.pgc && gcc test-ecpg.c && ./a.out

which printed:

size is 10

Looks good to me on Linux, Fedora 22 x86_64.

On Fri, Oct 16, 2015 at 10:33 AM, Michael Meskes <meskes(at)postgresql(dot)org>
wrote:

> > I trying to migrate my application developed using Pro*c to ECPG. But,
> when
> > I run the code below with "ecpg -c" command to generate c code, the
> syntax
> > for typedef generated appears to be wrong. Below is an sample code and
> the
> > steps to generate error return by C compiler due the wrong syntax for
> > typedef.
>
> Thanks for spotting and reporting. The order of the arguments seems to be
> broken.
>
> Please try this to fix:
> diff --git a/src/interfaces/ecpg/preproc/ecpg.trailer
> b/src/interfaces/ecpg/preproc/ecpg.trailer
> index 8cc3844..16359a3 100644
> --- a/src/interfaces/ecpg/preproc/ecpg.trailer
> +++ b/src/interfaces/ecpg/preproc/ecpg.trailer
> @@ -1311,7 +1311,7 @@ ECPGTypedef: TYPE_P
> if (auto_create_c == false)
> $$ = cat_str(7, mm_strdup("/* exec sql
> type"),
> mm_strdup($3), mm_strdup("is"), mm_strdup($5.type_str), mm_strdup($6.str),
> $7,
> mm_strdup("*/"));
> else
> - $$ = cat_str(6, mm_strdup("typedef "),
> mm_strdup($5.type_str), *$7?mm_strdup("*"):mm_strdup(""),
> mm_strdup($6.str),
> mm_strdup($3), mm_strdup(";"));
> + $$ = cat_str(6, mm_strdup("typedef "),
> mm_strdup($5.type_str), *$7?mm_strdup("*"):mm_strdup(""), mm_strdup($3),
> mm_strdup($6.str), mm_strdup(";"));
> }
> ;
>
> Already committed to HEAD. Will do backports later.
>
> Thanks again.
>
> Michael
> --
> Michael Meskes
> Michael at Fam-Meskes dot De, Michael at Meskes dot (De|Com|Net|Org)
> Meskes at (Debian|Postgresql) dot Org
> Jabber: michael.meskes at gmail dot com
> VfL Borussia! Força Barça! Go SF 49ers! Use Debian GNU/Linux, PostgreSQL
>
>
>
> --
> Sent via pgsql-bugs mailing list (pgsql-bugs(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-bugs
>

--

Schrodinger's backup: The condition of any backup is unknown until a
restore is attempted.

Yoda of Borg, we are. Futile, resistance is, yes. Assimilated, you will be.

He's about as useful as a wax frying pan.

10 to the 12th power microphones = 1 Megaphone

Maranatha! <><
John McKown

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message l 2015-10-16 20:30:31 BUG #13685: Archiving while idle every archive_timeout with wal_level hot_standby
Previous Message John R Pierce 2015-10-16 17:38:38 Re: Issue with database error: ERROR: invalid page header in block 579 of relation base/24067/12574