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: pgsql-bugs(at)postgresql(dot)org
Subject: Re: BUG #13676: C typedef code generated by ecpg with wrong syntax
Date: 2015-10-14 13:50:19
Message-ID: CAAJSdjjFdvWOKWSWHudYcqjHfHBqVr__HvA6zC6wd=WMpg7mgA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

This is just me, but I'm wondering if the examples on page:
http://www.postgresql.org/docs/9.4/static/ecpg-sql-type.html are
misleading. The text on that page says "TYPE type_name IS ctype" and
defines ctype as "a C type specification". The example on that page, which
is similar to yours is:

EXEC SQL TYPE string IS char[11];

But I am fairly user that "char[11]" is _not_ a "C type specification". An
"array" is not a C type. A "char" is. As are things like: int, long int,
float, double, etc. I.e. you say "char data[10];" and not "char[10] data".
C doesn't have a "string" data type.

So I'm wondering if the ecpg processor is doing things correctly but the
examples are bad.

I not saying, I'm asking.

On Tue, Oct 13, 2015 at 2:27 PM, <glauciobb(at)hotmail(dot)com> wrote:

> The following bug has been logged on the website:
>
> Bug reference: 13676
> Logged by: Gláucio Barros Barcelos
> Email address: glauciobb(at)hotmail(dot)com
> PostgreSQL version: 9.4.5
> Operating system: Oracle Linux Server release 6.7
> Description:
>
> Dear,
>
> 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.
>
> Step 1: Create a file with pgc extension with the code below:
>
> #include <stdio.h>
> EXEC SQL TYPE t_char_10 IS char[10];
> int main()
> {
> int status = 0;
> return status;
> }
>
> Step 2: pre compile the file with command: ecpg -c file.pgc. This command
> will generate the c code below. Note that the syntax for typedef is wrong.
>
>
> /* Processed by ecpg (4.10.0) */
> /* These include files are added by the preprocessor */
> #include <ecpglib.h>
> #include <ecpgerrno.h>
> #include <sqlca.h>
> /* End of automatic include section */
>
> #line 1 "example.pgc"
> #include <stdio.h>
>
> typedef char [ 10 ] t_char_10 ;
> #line 3 "example.pgc"
>
> int main()
> {
> int status = 0;
> return status;
> }
>
> Step 3: Try to compile the c code with command "cc -I/usr/pgsql-9.4/include
> -c file.c".
>
> file.pgc:3 error: expected indentifier or '(' before '[' token
>
> best regards,
> Gláucio
>
>
>
> --
> 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

Browse pgsql-bugs by date

  From Date Subject
Next Message John Pruitt 2015-10-14 14:24:39 Re: BUG #13670: DST discrepancy between age() and subtraction for timestamptz arguments
Previous Message i.frolkov 2015-10-14 09:58:31 BUG #13679: Planer chooses not optimal plan